fix: overlay
This commit is contained in:
parent
c663a8d85c
commit
d23ed0c4e8
1 changed files with 14 additions and 14 deletions
|
|
@ -137,10 +137,7 @@ where
|
||||||
let state = S::default();
|
let state = S::default();
|
||||||
self.rebuild_element(&state);
|
self.rebuild_element(&state);
|
||||||
|
|
||||||
tree::State::new((
|
tree::State::new((state, self.with_element(Tree::new)))
|
||||||
state,
|
|
||||||
self.with_element(|element| Tree::new(element)),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn diff(&self, tree: &mut Tree) {
|
fn diff(&self, tree: &mut Tree) {
|
||||||
|
|
@ -275,14 +272,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'b, Message, Renderer>> {
|
) -> Option<overlay::Element<'b, Message, Renderer>> {
|
||||||
let (_, tree) = tree.state.downcast_mut::<(S, Tree)>();
|
|
||||||
|
|
||||||
let overlay = OverlayBuilder {
|
let overlay = OverlayBuilder {
|
||||||
instance: self,
|
instance: self,
|
||||||
instance_ref_builder: |instance| instance.state.borrow(),
|
instance_ref_builder: |instance| instance.state.borrow(),
|
||||||
tree,
|
tree,
|
||||||
types: PhantomData,
|
types: PhantomData,
|
||||||
overlay_builder: |instance, tree| {
|
overlay_builder: |instance, tree| {
|
||||||
|
let (_, tree) = tree.state.downcast_mut::<(S, Tree)>();
|
||||||
|
|
||||||
instance
|
instance
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|
@ -436,11 +433,12 @@ where
|
||||||
let overlay = self.overlay.take().unwrap().into_heads();
|
let overlay = self.overlay.take().unwrap().into_heads();
|
||||||
let mut heads = overlay.instance.state.take().unwrap().into_heads();
|
let mut heads = overlay.instance.state.take().unwrap().into_heads();
|
||||||
|
|
||||||
for message in local_messages.into_iter().filter_map(|message| {
|
let (s, tree) = overlay.tree.state.downcast_mut::<(S, Tree)>();
|
||||||
heads
|
|
||||||
.component
|
for message in local_messages
|
||||||
.update(overlay.tree.state.downcast_mut::<S>(), message)
|
.into_iter()
|
||||||
}) {
|
.filter_map(|message| heads.component.update(s, message))
|
||||||
|
{
|
||||||
shell.publish(message);
|
shell.publish(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -449,13 +447,13 @@ where
|
||||||
component: heads.component,
|
component: heads.component,
|
||||||
message: PhantomData,
|
message: PhantomData,
|
||||||
state: PhantomData,
|
state: PhantomData,
|
||||||
element_builder: |state| {
|
element_builder: |state| Some(state.view(s)),
|
||||||
Some(state.view(overlay.tree.state.downcast_ref::<S>()))
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
overlay.instance.with_element(|element| tree.diff(element));
|
||||||
|
|
||||||
self.overlay = Some(
|
self.overlay = Some(
|
||||||
OverlayBuilder {
|
OverlayBuilder {
|
||||||
instance: overlay.instance,
|
instance: overlay.instance,
|
||||||
|
|
@ -463,6 +461,8 @@ where
|
||||||
tree: overlay.tree,
|
tree: overlay.tree,
|
||||||
types: PhantomData,
|
types: PhantomData,
|
||||||
overlay_builder: |instance, tree| {
|
overlay_builder: |instance, tree| {
|
||||||
|
let (_, tree) = tree.state.downcast_mut::<(S, Tree)>();
|
||||||
|
|
||||||
instance
|
instance
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue