diff --git a/crates/editor/src/element.rs b/crates/editor/src/element.rs index 0ffe3feb6d43cb1ffd0b6eea1c5812f61f41d85c..640ba80ac226c22ecf1bc85e614be48ffb813040 100644 --- a/crates/editor/src/element.rs +++ b/crates/editor/src/element.rs @@ -1147,6 +1147,7 @@ impl Element for EditorElement { &mut self, event: &Event, _: RectF, + _: RectF, layout: &mut LayoutState, paint: &mut PaintState, cx: &mut EventContext, diff --git a/crates/gpui/examples/text.rs b/crates/gpui/examples/text.rs index cc849a5e62fc943b02b1cf07828fff182f44a717..74e2c2c2eaa94bbd49508dae5e0de38f478599c0 100644 --- a/crates/gpui/examples/text.rs +++ b/crates/gpui/examples/text.rs @@ -104,6 +104,7 @@ impl gpui::Element for TextElement { &mut self, _: &gpui::Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut gpui::EventContext, diff --git a/crates/gpui/src/elements.rs b/crates/gpui/src/elements.rs index 79112863b51489ce88827940934fe22e60391b65..55c7bf22fe460979f70ff943cf75fc368148d86b 100644 --- a/crates/gpui/src/elements.rs +++ b/crates/gpui/src/elements.rs @@ -74,6 +74,7 @@ pub trait Element { &mut self, event: &Event, bounds: RectF, + visible_bounds: RectF, layout: &mut Self::LayoutState, paint: &mut Self::PaintState, cx: &mut EventContext, @@ -169,6 +170,7 @@ pub enum Lifecycle { element: T, constraint: SizeConstraint, bounds: RectF, + visible_bounds: RectF, layout: T::LayoutState, paint: T::PaintState, }, @@ -222,6 +224,7 @@ impl AnyElement for Lifecycle { element, constraint, bounds, + visible_bounds, layout, paint, } @@ -242,6 +245,7 @@ impl AnyElement for Lifecycle { element, constraint, bounds, + visible_bounds, layout, paint, } @@ -254,12 +258,13 @@ impl AnyElement for Lifecycle { if let Lifecycle::PostPaint { element, bounds, + visible_bounds, layout, paint, .. } = self { - element.dispatch_event(event, *bounds, layout, paint, cx) + element.dispatch_event(event, *bounds, *visible_bounds, layout, paint, cx) } else { panic!("invalid element lifecycle state"); } @@ -288,6 +293,7 @@ impl AnyElement for Lifecycle { element, constraint, bounds, + visible_bounds, layout, paint, } => { @@ -299,6 +305,8 @@ impl AnyElement for Lifecycle { new_map.insert("type".into(), typ); } new_map.insert("constraint".into(), constraint.to_json()); + new_map.insert("bounds".into(), bounds.to_json()); + new_map.insert("visible_bounds".into(), visible_bounds.to_json()); new_map.append(map); json::Value::Object(new_map) } else { diff --git a/crates/gpui/src/elements/align.rs b/crates/gpui/src/elements/align.rs index ce99437f3ba51ffc1d79a30a6b9c7812fb8fe904..5388f7647e503d65233d551c7cf1b9fd76ff40ae 100644 --- a/crates/gpui/src/elements/align.rs +++ b/crates/gpui/src/elements/align.rs @@ -85,7 +85,8 @@ impl Element for Align { fn dispatch_event( &mut self, event: &Event, - _: pathfinder_geometry::rect::RectF, + _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/canvas.rs b/crates/gpui/src/elements/canvas.rs index d6220fd45f481a97e427ea1092512be3a1f0481d..2e10c59049f6c945829c2311a1f9765d0492c1ef 100644 --- a/crates/gpui/src/elements/canvas.rs +++ b/crates/gpui/src/elements/canvas.rs @@ -59,6 +59,7 @@ where &mut self, _: &crate::Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut crate::EventContext, diff --git a/crates/gpui/src/elements/constrained_box.rs b/crates/gpui/src/elements/constrained_box.rs index c712d71a9b7bac276568202108d0b2236ebcb60c..f12ed6900abc03a50d435fbb5eba859ec02c0e89 100644 --- a/crates/gpui/src/elements/constrained_box.rs +++ b/crates/gpui/src/elements/constrained_box.rs @@ -81,6 +81,7 @@ impl Element for ConstrainedBox { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/container.rs b/crates/gpui/src/elements/container.rs index 73a4349ba025681a232ae0986532db0faa00ed6a..711ab1f6a6265c4b4b96310f1c812eb7e98661df 100644 --- a/crates/gpui/src/elements/container.rs +++ b/crates/gpui/src/elements/container.rs @@ -247,6 +247,7 @@ impl Element for Container { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/empty.rs b/crates/gpui/src/elements/empty.rs index d6041bd9587f0c5694f374e7a152285876f85b5a..90b21231639665aec813967e9595d2673437d777 100644 --- a/crates/gpui/src/elements/empty.rs +++ b/crates/gpui/src/elements/empty.rs @@ -52,6 +52,7 @@ impl Element for Empty { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut EventContext, diff --git a/crates/gpui/src/elements/event_handler.rs b/crates/gpui/src/elements/event_handler.rs index 469bebee1a43f8c7b5b0c542e3e337173d9f0f63..340d892d228b94099b894248999a02a28d471795 100644 --- a/crates/gpui/src/elements/event_handler.rs +++ b/crates/gpui/src/elements/event_handler.rs @@ -84,13 +84,14 @@ impl Element for EventHandler { fn dispatch_event( &mut self, event: &Event, - bounds: RectF, + _: RectF, + visible_bounds: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, ) -> bool { if let Some(capture) = self.capture.as_mut() { - if capture(event, bounds, cx) { + if capture(event, visible_bounds, cx) { return true; } } @@ -101,7 +102,7 @@ impl Element for EventHandler { match event { Event::LeftMouseDown { position, .. } => { if let Some(callback) = self.mouse_down.as_mut() { - if bounds.contains_point(*position) { + if visible_bounds.contains_point(*position) { return callback(cx); } } @@ -109,7 +110,7 @@ impl Element for EventHandler { } Event::RightMouseDown { position, .. } => { if let Some(callback) = self.right_mouse_down.as_mut() { - if bounds.contains_point(*position) { + if visible_bounds.contains_point(*position) { return callback(cx); } } @@ -121,7 +122,7 @@ impl Element for EventHandler { .. } => { if let Some(callback) = self.navigate_mouse_down.as_mut() { - if bounds.contains_point(*position) { + if visible_bounds.contains_point(*position) { return callback(*direction, cx); } } diff --git a/crates/gpui/src/elements/expanded.rs b/crates/gpui/src/elements/expanded.rs index cbeef598da649cd397625c482ab3cfb80a68cb9c..6f69d8a92a8bfa2aa647a1cb162de5b74353c72d 100644 --- a/crates/gpui/src/elements/expanded.rs +++ b/crates/gpui/src/elements/expanded.rs @@ -66,6 +66,7 @@ impl Element for Expanded { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/flex.rs b/crates/gpui/src/elements/flex.rs index 1ae9c591c89c1b5de838b18612696e4a9e6990cb..4f930dfb46679cacc7d627374cf7ed0dd3dc1cd6 100644 --- a/crates/gpui/src/elements/flex.rs +++ b/crates/gpui/src/elements/flex.rs @@ -266,16 +266,11 @@ impl Element for Flex { &mut self, event: &Event, bounds: RectF, + _: RectF, remaining_space: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, ) -> bool { - if let Some(position) = event.position() { - if !bounds.contains_point(position) { - return false; - } - } - let mut handled = false; for child in &mut self.children { handled = child.dispatch_event(event, cx) || handled; @@ -391,6 +386,7 @@ impl Element for FlexItem { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/hook.rs b/crates/gpui/src/elements/hook.rs index 994d5fe281ca1dae5984dd8456ffa32ce5be97a1..e947c3bac7da2a9138298048c3f314f1af0b4ed7 100644 --- a/crates/gpui/src/elements/hook.rs +++ b/crates/gpui/src/elements/hook.rs @@ -57,6 +57,7 @@ impl Element for Hook { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/image.rs b/crates/gpui/src/elements/image.rs index 5d36828d0cd57c1605dd6c7db9246268bb868078..6b55b567b4b4395170c9033d398e0fd91010a960 100644 --- a/crates/gpui/src/elements/image.rs +++ b/crates/gpui/src/elements/image.rs @@ -81,6 +81,7 @@ impl Element for Image { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut EventContext, diff --git a/crates/gpui/src/elements/label.rs b/crates/gpui/src/elements/label.rs index 7aa46f119991010b4dd7cd9a7eee698795ff2c57..e6ae9cbd51330fbd6c411ffebdb9c5deea9b7082 100644 --- a/crates/gpui/src/elements/label.rs +++ b/crates/gpui/src/elements/label.rs @@ -166,6 +166,7 @@ impl Element for Label { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut EventContext, diff --git a/crates/gpui/src/elements/list.rs b/crates/gpui/src/elements/list.rs index 624ec4ba7177ed03e7459ef55970f946e22cfe5d..77d37bc3bf3b2dc7e879fc3ddcec8ae64bff283d 100644 --- a/crates/gpui/src/elements/list.rs +++ b/crates/gpui/src/elements/list.rs @@ -253,6 +253,7 @@ impl Element for List { &mut self, event: &Event, bounds: RectF, + _: RectF, scroll_top: &mut ListOffset, _: &mut (), cx: &mut EventContext, @@ -872,6 +873,7 @@ mod tests { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut (), _: &mut (), _: &mut EventContext, diff --git a/crates/gpui/src/elements/mouse_event_handler.rs b/crates/gpui/src/elements/mouse_event_handler.rs index a9cfd3334e87ee8a722372e3f5217331fdc2af3d..1d1e934d03be92d80ea48924372fc088198a2631 100644 --- a/crates/gpui/src/elements/mouse_event_handler.rs +++ b/crates/gpui/src/elements/mouse_event_handler.rs @@ -99,7 +99,8 @@ impl Element for MouseEventHandler { fn dispatch_event( &mut self, event: &Event, - bounds: RectF, + _: RectF, + visible_bounds: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, @@ -112,8 +113,8 @@ impl Element for MouseEventHandler { let handled_in_child = self.child.dispatch_event(event, cx); let hit_bounds = RectF::from_points( - bounds.origin() - vec2f(self.padding.left, self.padding.top), - bounds.lower_right() + vec2f(self.padding.right, self.padding.bottom), + visible_bounds.origin() - vec2f(self.padding.left, self.padding.top), + visible_bounds.lower_right() + vec2f(self.padding.right, self.padding.bottom), ) .round_out(); diff --git a/crates/gpui/src/elements/overlay.rs b/crates/gpui/src/elements/overlay.rs index 79ab71c07d7cd4da4ae25991881887ed13ec2473..0cac2ed86302c8e7c88ca58fa811ee116b8deff0 100644 --- a/crates/gpui/src/elements/overlay.rs +++ b/crates/gpui/src/elements/overlay.rs @@ -44,6 +44,7 @@ impl Element for Overlay { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/stack.rs b/crates/gpui/src/elements/stack.rs index dd36b9c4b5aebcbebd8c98253084861202d02378..4531734085487dcc1d0e9e6d5cc28154133ba2a3 100644 --- a/crates/gpui/src/elements/stack.rs +++ b/crates/gpui/src/elements/stack.rs @@ -51,6 +51,7 @@ impl Element for Stack { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/elements/svg.rs b/crates/gpui/src/elements/svg.rs index 3e93d3adae3cd721a2c6e4ff501bbda0bf6b5f86..d473e1f0fb01f90dd565e9768ac6da05c4af929d 100644 --- a/crates/gpui/src/elements/svg.rs +++ b/crates/gpui/src/elements/svg.rs @@ -76,6 +76,7 @@ impl Element for Svg { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut EventContext, diff --git a/crates/gpui/src/elements/text.rs b/crates/gpui/src/elements/text.rs index 5caa60c0d7b568e455b5b033301bdd84e1f4704b..a0c3f6ba9fdf09a4d2cde52d7267e64350aff10e 100644 --- a/crates/gpui/src/elements/text.rs +++ b/crates/gpui/src/elements/text.rs @@ -172,6 +172,7 @@ impl Element for Text { &mut self, _: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut EventContext, diff --git a/crates/gpui/src/elements/uniform_list.rs b/crates/gpui/src/elements/uniform_list.rs index 7bd3e28a2e384def39f4ddcd523ab5aa8be3683c..526a9aea404ff8cafc2202daf4377cd8aa72c86f 100644 --- a/crates/gpui/src/elements/uniform_list.rs +++ b/crates/gpui/src/elements/uniform_list.rs @@ -281,6 +281,7 @@ where &mut self, event: &Event, bounds: RectF, + _: RectF, layout: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index b4e419107a32dc14ddd80c9bbf5ba2365ec29aa8..8546bed00f2c24da2e22e648feea18164d76fa99 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -535,6 +535,7 @@ impl Element for ChildView { &mut self, event: &Event, _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, cx: &mut EventContext, diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 7ee7d5cf44ae7e84d04cfd2293ed2f1ffa8e2c7c..b49b6f601f3a9848d4a284286e3eae60077d1138 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -16,7 +16,7 @@ use gpui::{ action, color::Color, elements::*, - geometry::{vector::vec2f, PathBuilder}, + geometry::{rect::RectF, vector::vec2f, PathBuilder}, json::{self, to_string_pretty, ToJson}, keymap::Binding, platform::{CursorStyle, WindowOptions}, @@ -2068,7 +2068,8 @@ impl Element for AvatarRibbon { fn dispatch_event( &mut self, _: &gpui::Event, - _: gpui::geometry::rect::RectF, + _: RectF, + _: RectF, _: &mut Self::LayoutState, _: &mut Self::PaintState, _: &mut gpui::EventContext,