diff options
Diffstat (limited to 'core/src/overlay')
-rw-r--r-- | core/src/overlay/element.rs | 10 | ||||
-rw-r--r-- | core/src/overlay/group.rs | 15 |
2 files changed, 25 insertions, 0 deletions
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<Element<'b, B, Renderer>> { + 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<overlay::Element<'b, Message, Renderer>> { + let children = self + .children + .iter_mut() + .zip(layout.children()) + .filter_map(|(child, layout)| child.overlay(layout, renderer)) + .collect::<Vec<_>>(); + + (!children.is_empty()).then(|| Group::with_children(children).overlay()) + } } impl<'a, Message, Renderer> From<Group<'a, Message, Renderer>> |