From 323a0b9e6189c8b7deeecc9961db27febbe196b1 Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Sat, 26 Mar 2022 18:42:26 +1100 Subject: 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. --- pure/src/element.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'pure') 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 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> { + let mapper = &self.mapper; + + self.widget + .overlay(tree, layout, renderer) + .map(move |overlay| overlay.map(mapper)) + } } -- cgit