summaryrefslogtreecommitdiffstats
path: root/pure
diff options
context:
space:
mode:
authorLibravatar Marien Zwart <marienz@google.com>2022-03-26 18:42:26 +1100
committerLibravatar Marien Zwart <marienz@google.com>2022-03-26 18:42:26 +1100
commit323a0b9e6189c8b7deeecc9961db27febbe196b1 (patch)
tree7232b594ad814a26c8bd5bedcfa4f5fa50d53baf /pure
parente66a79fb9c8148d5f6f971ce9bca751634122534 (diff)
downloadiced-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')
-rw-r--r--pure/src/element.rs18
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))
+ }
}