Don't dispatch events to flex children outside of parent flex's bounds
This commit is contained in:
@@ -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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user