fix: overlay

This commit is contained in:
Nick Senger 2022-04-06 17:18:43 -07:00
parent c663a8d85c
commit d23ed0c4e8
No known key found for this signature in database
GPG key ID: F905159224DB77D8

View file

@ -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()