Cursor availability during on_event

This commit is contained in:
Cory Forsstrom 2023-02-18 19:11:50 -08:00 committed by Héctor Ramón Jiménez
parent 83140d6049
commit 4de6ee6fa1
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -174,42 +174,67 @@ where
renderer: &Renderer,
clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>,
) -> event::Status
) -> (event::Status, bool)
where
Renderer: renderer::Renderer,
{
let mut layouts = layout.children();
if let Some(layout) = layouts.next() {
let status = if let Some((mut nested, nested_layout)) =
element.overlay(layout, renderer).zip(layouts.next())
{
recurse(
&mut nested,
nested_layout,
event.clone(),
cursor,
renderer,
clipboard,
shell,
)
} else {
event::Status::Ignored
};
let (nested_status, nested_is_over) =
if let Some((mut nested, nested_layout)) =
element.overlay(layout, renderer).zip(layouts.next())
{
recurse(
&mut nested,
nested_layout,
event.clone(),
cursor,
renderer,
clipboard,
shell,
)
} else {
(event::Status::Ignored, false)
};
if matches!(status, event::Status::Ignored) {
element.on_event(
event, layout, cursor, renderer, clipboard, shell,
if matches!(nested_status, event::Status::Ignored) {
let is_over = nested_is_over
|| cursor
.position()
.map(|cursor_position| {
element.is_over(
layout,
renderer,
cursor_position,
)
})
.unwrap_or_default();
(
element.on_event(
event,
layout,
if nested_is_over {
mouse::Cursor::Unavailable
} else {
cursor
},
renderer,
clipboard,
shell,
),
is_over,
)
} else {
status
(nested_status, nested_is_over)
}
} else {
event::Status::Ignored
(event::Status::Ignored, false)
}
}
recurse(
let (status, _) = recurse(
&mut self.overlay,
layout,
event,
@ -217,7 +242,9 @@ where
renderer,
clipboard,
shell,
)
);
status
}
pub fn mouse_interaction(