diff options
author | 2023-01-17 11:12:10 -0800 | |
---|---|---|
committer | 2023-01-17 11:12:10 -0800 | |
commit | 3ab679725526bd095cc1a160705312b16c408b92 (patch) | |
tree | 15822dd3684c6f5d1892eb5b15385157dbf72f08 /native/src/overlay | |
parent | b2a3a85acb2a0722e90c46b70d574f1d676da9d1 (diff) | |
download | iced-3ab679725526bd095cc1a160705312b16c408b92.tar.gz iced-3ab679725526bd095cc1a160705312b16c408b92.tar.bz2 iced-3ab679725526bd095cc1a160705312b16c408b92.zip |
New method to determine if overlay contains cursor
This is needed for "container" overlay's such as `Group` which should
only consider it's childrens layouts and not it's own when determining
if the cursor is captured by the overlay.
Diffstat (limited to 'native/src/overlay')
-rw-r--r-- | native/src/overlay/element.rs | 17 | ||||
-rw-r--r-- | native/src/overlay/group.rs | 13 |
2 files changed, 30 insertions, 0 deletions
diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs index 41a8a597..125258c5 100644 --- a/native/src/overlay/element.rs +++ b/native/src/overlay/element.rs @@ -115,6 +115,15 @@ where ) { self.overlay.operate(layout, renderer, operation); } + + /// Whether the [`Overlay`] contains the cursor + pub fn contains_cursor( + &self, + layout: Layout<'_>, + cursor_position: Point, + ) -> bool { + self.overlay.contains_cursor(layout, cursor_position) + } } struct Map<'a, A, B, Renderer> { @@ -252,4 +261,12 @@ where self.content .draw(renderer, theme, style, layout, cursor_position) } + + fn contains_cursor( + &self, + layout: Layout<'_>, + cursor_position: Point, + ) -> bool { + self.content.contains_cursor(layout, cursor_position) + } } diff --git a/native/src/overlay/group.rs b/native/src/overlay/group.rs index f894f911..96d10c19 100644 --- a/native/src/overlay/group.rs +++ b/native/src/overlay/group.rs @@ -151,6 +151,19 @@ where ) }); } + + fn contains_cursor( + &self, + layout: Layout<'_>, + cursor_position: Point, + ) -> bool { + self.children + .iter() + .zip(layout.children()) + .any(|(child, layout)| { + child.contains_cursor(layout, cursor_position) + }) + } } impl<'a, Message, Renderer> From<Group<'a, Message, Renderer>> |