diff options
Diffstat (limited to '')
-rw-r--r-- | native/src/overlay.rs | 9 | ||||
-rw-r--r-- | native/src/overlay/element.rs | 17 | ||||
-rw-r--r-- | native/src/overlay/group.rs | 13 |
3 files changed, 39 insertions, 0 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs index e7394494..16d8bb31 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -89,6 +89,15 @@ where ) -> mouse::Interaction { mouse::Interaction::Idle } + + /// Whether the [`Overlay`] contains the cursor + fn contains_cursor( + &self, + layout: Layout<'_>, + cursor_position: Point, + ) -> bool { + layout.bounds().contains(cursor_position) + } } /// Returns a [`Group`] of overlay [`Element`] children. 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>> |