Change summary
crates/gpui/src/elements/flex.rs | 6 ++++++
crates/gpui/src/platform/event.rs | 17 +++++++++++++++++
2 files changed, 23 insertions(+)
Detailed changes
@@ -270,6 +270,12 @@ impl Element for Flex {
_: &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;
@@ -61,3 +61,20 @@ pub enum Event {
left_mouse_down: bool,
},
}
+
+impl Event {
+ pub fn position(&self) -> Option<Vector2F> {
+ match self {
+ Event::KeyDown { .. } => None,
+ Event::ScrollWheel { position, .. }
+ | Event::LeftMouseDown { position, .. }
+ | Event::LeftMouseUp { position }
+ | Event::LeftMouseDragged { position }
+ | Event::RightMouseDown { position, .. }
+ | Event::RightMouseUp { position }
+ | Event::NavigateMouseDown { position, .. }
+ | Event::NavigateMouseUp { position, .. }
+ | Event::MouseMoved { position, .. } => Some(*position),
+ }
+ }
+}