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.
This commit is contained in:
parent
e66a79fb9c
commit
323a0b9e61
1 changed files with 16 additions and 2 deletions
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue