diff options
author | 2023-02-18 15:58:07 -0800 | |
---|---|---|
committer | 2023-06-14 10:15:52 +0200 | |
commit | 12c623f35bea0b76bae5e2eeb7d46390b8b9f0e4 (patch) | |
tree | f4a3a29de16848edd8d1674fe8e4bd98865143d0 /runtime | |
parent | d4bb7c0b24e3bf7939bdecf2f3e1e0dba67587fc (diff) | |
download | iced-12c623f35bea0b76bae5e2eeb7d46390b8b9f0e4.tar.gz iced-12c623f35bea0b76bae5e2eeb7d46390b8b9f0e4.tar.bz2 iced-12c623f35bea0b76bae5e2eeb7d46390b8b9f0e4.zip |
Cursor availability by layer
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/src/user_interface/overlay.rs | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/runtime/src/user_interface/overlay.rs b/runtime/src/user_interface/overlay.rs index 332eb32d..44f64c61 100644 --- a/runtime/src/user_interface/overlay.rs +++ b/runtime/src/user_interface/overlay.rs @@ -9,6 +9,7 @@ use crate::core::{ }; use std::cell::RefCell; +use std::iter::Peekable; /// An [`Overlay`] container that displays nested overlays #[allow(missing_debug_implementations)] @@ -92,7 +93,7 @@ where ) { fn recurse<'a, Message, Renderer>( element: &mut overlay::Element<'_, Message, Renderer>, - mut layouts: impl Iterator<Item = Layout<'a>>, + mut layouts: Peekable<impl Iterator<Item = Layout<'a>>>, renderer: &mut Renderer, theme: &<Renderer as renderer::Renderer>::Theme, style: &renderer::Style, @@ -101,12 +102,33 @@ where Renderer: renderer::Renderer, { if let Some(layout) = layouts.next() { - renderer.with_layer(layout.bounds(), |renderer| { - element.draw(renderer, theme, style, layout, cursor); - }); + let is_over = cursor + .position() + .and_then(|cursor_position| { + layouts.peek().and_then(|nested_layout| { + element.overlay(layout, renderer).map(|overlay| { + overlay.is_over( + *nested_layout, + renderer, + cursor_position, + ) + }) + }) + }) + .unwrap_or_default(); renderer.with_layer(layout.bounds(), |renderer| { - element.draw(renderer, theme, style, layout, cursor); + element.draw( + renderer, + theme, + style, + layout, + if is_over { + mouse::Cursor::Unavailable + } else { + cursor + }, + ); }); if let Some(mut overlay) = element.overlay(layout, renderer) { @@ -123,7 +145,7 @@ where } self.overlay.with_element_mut(|element| { - let layouts = layout.children(); + let layouts = layout.children().peekable(); recurse(element, layouts, renderer, theme, style, cursor); }) |