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::tree::{self, Tree};
|
||||||
use crate::widget::Widget;
|
use crate::widget::Widget;
|
||||||
|
|
||||||
|
|
@ -33,7 +34,7 @@ impl<'a, Message, Renderer> Element<'a, Message, Renderer> {
|
||||||
where
|
where
|
||||||
Message: 'a,
|
Message: 'a,
|
||||||
Renderer: iced_native::Renderer + 'a,
|
Renderer: iced_native::Renderer + 'a,
|
||||||
B: 'a,
|
B: 'static,
|
||||||
{
|
{
|
||||||
Element::new(Map::new(self.widget, f))
|
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
|
where
|
||||||
Renderer: iced_native::Renderer + 'a,
|
Renderer: iced_native::Renderer + 'a,
|
||||||
A: 'a,
|
A: 'a,
|
||||||
B: 'a,
|
B: 'static,
|
||||||
{
|
{
|
||||||
fn tag(&self) -> tree::Tag {
|
fn tag(&self) -> tree::Tag {
|
||||||
self.widget.tag()
|
self.widget.tag()
|
||||||
|
|
@ -160,4 +161,17 @@ where
|
||||||
renderer,
|
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