diff options
author | 2022-03-26 18:42:26 +1100 | |
---|---|---|
committer | 2022-03-26 18:42:26 +1100 | |
commit | 323a0b9e6189c8b7deeecc9961db27febbe196b1 (patch) | |
tree | 7232b594ad814a26c8bd5bedcfa4f5fa50d53baf /pure/src | |
parent | e66a79fb9c8148d5f6f971ce9bca751634122534 (diff) | |
download | iced-323a0b9e6189c8b7deeecc9961db27febbe196b1.tar.gz iced-323a0b9e6189c8b7deeecc9961db27febbe196b1.tar.bz2 iced-323a0b9e6189c8b7deeecc9961db27febbe196b1.zip |
Forward overlay() calls in iced_pure::element::Map
If Map does not override overlay(), calling map() on a pure Element
breaks any pick_list inside it (its overlay does not appear).
Fix it by implementing overlay() the same way iced_native::element::Map
does.
Diffstat (limited to 'pure/src')
-rw-r--r-- | pure/src/element.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/pure/src/element.rs b/pure/src/element.rs index 3d5697fe..e6812c0e 100644 --- a/pure/src/element.rs +++ b/pure/src/element.rs @@ -1,3 +1,4 @@ +use crate::overlay; use crate::widget::tree::{self, Tree}; use crate::widget::Widget; @@ -33,7 +34,7 @@ impl<'a, Message, Renderer> Element<'a, Message, Renderer> { where Message: 'a, Renderer: iced_native::Renderer + 'a, - B: 'a, + B: 'static, { Element::new(Map::new(self.widget, f)) } @@ -63,7 +64,7 @@ impl<'a, A, B, Renderer> Widget<B, Renderer> for Map<'a, A, B, Renderer> where Renderer: iced_native::Renderer + 'a, A: 'a, - B: 'a, + B: 'static, { fn tag(&self) -> tree::Tag { self.widget.tag() @@ -160,4 +161,17 @@ where renderer, ) } + + fn overlay<'b>( + &'b self, + tree: &'b mut Tree, + layout: Layout<'_>, + renderer: &Renderer, + ) -> Option<overlay::Element<'b, B, Renderer>> { + let mapper = &self.mapper; + + self.widget + .overlay(tree, layout, renderer) + .map(move |overlay| overlay.map(mapper)) + } } |