From 55dc3b5619392f4a20389255708c61082b3d4c1a Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Sat, 18 Feb 2023 14:31:38 -0800 Subject: Introduce internal `overlay::Nested` for `UserInterface` --- core/src/overlay/element.rs | 27 +++++++++++++++++++++++---- core/src/overlay/group.rs | 11 +++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) (limited to 'core/src/overlay') diff --git a/core/src/overlay/element.rs b/core/src/overlay/element.rs index be67fc76..edb1b443 100644 --- a/core/src/overlay/element.rs +++ b/core/src/overlay/element.rs @@ -112,8 +112,22 @@ where } /// Returns true if the cursor is over the [`Element`]. - pub fn is_over(&self, layout: Layout<'_>, cursor_position: Point) -> bool { - self.overlay.is_over(layout, cursor_position) + pub fn is_over( + &self, + layout: Layout<'_>, + renderer: &Renderer, + cursor_position: Point, + ) -> bool { + self.overlay.is_over(layout, renderer, cursor_position) + } + + /// Returns the nested overlay of the [`Element`], if there is any. + pub fn overlay<'b>( + &'b mut self, + layout: Layout<'_>, + renderer: &Renderer, + ) -> Option> { + self.overlay.overlay(layout, renderer) } } @@ -248,7 +262,12 @@ where self.content.draw(renderer, theme, style, layout, cursor) } - fn is_over(&self, layout: Layout<'_>, cursor_position: Point) -> bool { - self.content.is_over(layout, cursor_position) + fn is_over( + &self, + layout: Layout<'_>, + renderer: &Renderer, + cursor_position: Point, + ) -> bool { + self.content.is_over(layout, renderer, cursor_position) } } diff --git a/core/src/overlay/group.rs b/core/src/overlay/group.rs index e770abf8..7a38222b 100644 --- a/core/src/overlay/group.rs +++ b/core/src/overlay/group.rs @@ -147,11 +147,18 @@ where }); } - fn is_over(&self, layout: Layout<'_>, cursor_position: Point) -> bool { + fn is_over( + &self, + layout: Layout<'_>, + renderer: &Renderer, + cursor_position: Point, + ) -> bool { self.children .iter() .zip(layout.children()) - .any(|(child, layout)| child.is_over(layout, cursor_position)) + .any(|(child, layout)| { + child.is_over(layout, renderer, cursor_position) + }) } } -- cgit From 0a56ffb5d6260832d27c2cae70d4b8536e000001 Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Sat, 18 Feb 2023 13:48:10 -0800 Subject: Add nested overlay method to group & map --- core/src/overlay/element.rs | 10 ++++++++++ core/src/overlay/group.rs | 15 +++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'core/src/overlay') diff --git a/core/src/overlay/element.rs b/core/src/overlay/element.rs index edb1b443..c2134343 100644 --- a/core/src/overlay/element.rs +++ b/core/src/overlay/element.rs @@ -270,4 +270,14 @@ where ) -> bool { self.content.is_over(layout, renderer, cursor_position) } + + fn overlay<'b>( + &'b mut self, + layout: Layout<'_>, + renderer: &Renderer, + ) -> Option> { + self.content + .overlay(layout, renderer) + .map(|overlay| overlay.map(self.mapper)) + } } diff --git a/core/src/overlay/group.rs b/core/src/overlay/group.rs index 7a38222b..deffaad0 100644 --- a/core/src/overlay/group.rs +++ b/core/src/overlay/group.rs @@ -160,6 +160,21 @@ where child.is_over(layout, renderer, cursor_position) }) } + + fn overlay<'b>( + &'b mut self, + layout: Layout<'_>, + renderer: &Renderer, + ) -> Option> { + let children = self + .children + .iter_mut() + .zip(layout.children()) + .filter_map(|(child, layout)| child.overlay(layout, renderer)) + .collect::>(); + + (!children.is_empty()).then(|| Group::with_children(children).overlay()) + } } impl<'a, Message, Renderer> From> -- cgit