Don't dispatch events to flex children outside of parent flex's bounds

This commit is contained in:
Nathan Sobo
2022-04-06 10:59:03 -06:00
parent d7342e2875
commit 0214bec7f4
2 changed files with 23 additions and 0 deletions
+6
View File
@@ -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;
+17
View File
@@ -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),
}
}
}