Cursor availability during on_event
This commit is contained in:
parent
83140d6049
commit
4de6ee6fa1
1 changed files with 50 additions and 23 deletions
|
|
@ -174,42 +174,67 @@ where
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
clipboard: &mut dyn Clipboard,
|
clipboard: &mut dyn Clipboard,
|
||||||
shell: &mut Shell<'_, Message>,
|
shell: &mut Shell<'_, Message>,
|
||||||
) -> event::Status
|
) -> (event::Status, bool)
|
||||||
where
|
where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let mut layouts = layout.children();
|
let mut layouts = layout.children();
|
||||||
|
|
||||||
if let Some(layout) = layouts.next() {
|
if let Some(layout) = layouts.next() {
|
||||||
let status = if let Some((mut nested, nested_layout)) =
|
let (nested_status, nested_is_over) =
|
||||||
element.overlay(layout, renderer).zip(layouts.next())
|
if let Some((mut nested, nested_layout)) =
|
||||||
{
|
element.overlay(layout, renderer).zip(layouts.next())
|
||||||
recurse(
|
{
|
||||||
&mut nested,
|
recurse(
|
||||||
nested_layout,
|
&mut nested,
|
||||||
event.clone(),
|
nested_layout,
|
||||||
cursor,
|
event.clone(),
|
||||||
renderer,
|
cursor,
|
||||||
clipboard,
|
renderer,
|
||||||
shell,
|
clipboard,
|
||||||
)
|
shell,
|
||||||
} else {
|
)
|
||||||
event::Status::Ignored
|
} else {
|
||||||
};
|
(event::Status::Ignored, false)
|
||||||
|
};
|
||||||
|
|
||||||
if matches!(status, event::Status::Ignored) {
|
if matches!(nested_status, event::Status::Ignored) {
|
||||||
element.on_event(
|
let is_over = nested_is_over
|
||||||
event, layout, cursor, renderer, clipboard, shell,
|
|| 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 {
|
} else {
|
||||||
status
|
(nested_status, nested_is_over)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
event::Status::Ignored
|
(event::Status::Ignored, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
recurse(
|
let (status, _) = recurse(
|
||||||
&mut self.overlay,
|
&mut self.overlay,
|
||||||
layout,
|
layout,
|
||||||
event,
|
event,
|
||||||
|
|
@ -217,7 +242,9 @@ where
|
||||||
renderer,
|
renderer,
|
||||||
clipboard,
|
clipboard,
|
||||||
shell,
|
shell,
|
||||||
)
|
);
|
||||||
|
|
||||||
|
status
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn mouse_interaction(
|
pub fn mouse_interaction(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue