diff options
author | 2023-02-18 19:11:50 -0800 | |
---|---|---|
committer | 2023-06-14 10:47:31 +0200 | |
commit | 4de6ee6fa18be5b8fa511bffe93bbec2c5811bfc (patch) | |
tree | 6db5b95562b98f4a14ab33de18de74888429ea77 /runtime/src | |
parent | 83140d6049c165020c2afc1db303b2556e40488e (diff) | |
download | iced-4de6ee6fa18be5b8fa511bffe93bbec2c5811bfc.tar.gz iced-4de6ee6fa18be5b8fa511bffe93bbec2c5811bfc.tar.bz2 iced-4de6ee6fa18be5b8fa511bffe93bbec2c5811bfc.zip |
Cursor availability during on_event
Diffstat (limited to 'runtime/src')
-rw-r--r-- | runtime/src/user_interface/overlay.rs | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/runtime/src/user_interface/overlay.rs b/runtime/src/user_interface/overlay.rs index 24ddb649..1211d55b 100644 --- a/runtime/src/user_interface/overlay.rs +++ b/runtime/src/user_interface/overlay.rs @@ -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( |