diff --git a/crates/gpui/src/elements/list.rs b/crates/gpui/src/elements/list.rs index 57436c256bd9ee241dc78d07206ba8c3655e2c54..d752a52a1666110a7fc1cc2160988aac86429212 100644 --- a/crates/gpui/src/elements/list.rs +++ b/crates/gpui/src/elements/list.rs @@ -5,8 +5,8 @@ use crate::{ }, json::json, presenter::MeasurementContext, - DebugContext, Element, ElementBox, ElementRc, Event, EventContext, LayoutContext, PaintContext, - RenderContext, ScrollWheelEvent, SizeConstraint, View, ViewContext, + DebugContext, Element, ElementBox, ElementRc, Event, EventContext, LayoutContext, MouseRegion, + PaintContext, RenderContext, SizeConstraint, View, ViewContext, }; use std::{cell::RefCell, collections::VecDeque, ops::Range, rc::Rc}; use sum_tree::{Bias, SumTree}; @@ -263,6 +263,22 @@ impl Element for List { ) { cx.scene.push_layer(Some(bounds)); + cx.scene + .push_mouse_region(MouseRegion::new::(10, 0, bounds).on_scroll({ + let state = self.state.clone(); + let height = bounds.height(); + let scroll_top = scroll_top.clone(); + move |e, cx| { + state.0.borrow_mut().scroll( + &scroll_top, + height, + e.platform_event.delta, + e.platform_event.precise, + cx, + ) + } + })); + let state = &mut *self.state.0.borrow_mut(); for (mut element, origin) in state.visible_elements(bounds, scroll_top) { element.paint(origin, visible_bounds, cx); @@ -312,20 +328,6 @@ impl Element for List { drop(cursor); state.items = new_items; - if let Event::ScrollWheel(ScrollWheelEvent { - position, - delta, - precise, - .. - }) = event - { - if bounds.contains_point(*position) - && state.scroll(scroll_top, bounds.height(), *delta, *precise, cx) - { - handled = true; - } - } - handled } @@ -527,7 +529,7 @@ impl StateInner { mut delta: Vector2F, precise: bool, cx: &mut EventContext, - ) -> bool { + ) { if !precise { delta *= 20.; } @@ -554,9 +556,6 @@ impl StateInner { let visible_range = self.visible_range(height, scroll_top); self.scroll_handler.as_mut().unwrap()(visible_range, cx); } - cx.notify(); - - true } fn scroll_top(&self, logical_scroll_top: &ListOffset) -> f32 {