diff options
author | 2022-03-07 16:39:04 +0700 | |
---|---|---|
committer | 2022-03-07 16:39:04 +0700 | |
commit | 9fd66c820d08d3ff193ef04907686774c98d2fec (patch) | |
tree | b37fc9ce0185859f7cfcee65bab7e8e02b39a463 /lazy/src/pure/component.rs | |
parent | fa3bd4280e7c34354db0a15ef1baba9fbbeb87f1 (diff) | |
download | iced-9fd66c820d08d3ff193ef04907686774c98d2fec.tar.gz iced-9fd66c820d08d3ff193ef04907686774c98d2fec.tar.bz2 iced-9fd66c820d08d3ff193ef04907686774c98d2fec.zip |
Introduce `rebuild_element` helper in `lazy::pure::Component`
Diffstat (limited to '')
-rw-r--r-- | lazy/src/pure/component.rs | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/lazy/src/pure/component.rs b/lazy/src/pure/component.rs index ad82c55e..4d952f69 100644 --- a/lazy/src/pure/component.rs +++ b/lazy/src/pure/component.rs @@ -90,6 +90,20 @@ impl<'a, Message, Renderer, Event, S> Instance<'a, Message, Renderer, Event, S> where S: Default, { + fn rebuild_element(&self, state: &S) { + let heads = self.state.borrow_mut().take().unwrap().into_heads(); + + *self.state.borrow_mut() = Some( + StateBuilder { + component: heads.component, + message: PhantomData, + state: PhantomData, + element_builder: |component| Some(component.view(state)), + } + .build(), + ); + } + fn with_element<T>( &self, f: impl FnOnce(&Element<'_, Event, Renderer>) -> T, @@ -124,36 +138,12 @@ where } fn children(&self) -> Vec<Tree> { - let heads = self.state.borrow_mut().take().unwrap().into_heads(); - - *self.state.borrow_mut() = Some( - StateBuilder { - component: heads.component, - message: PhantomData, - state: PhantomData, - element_builder: |state| Some(state.view(&S::default())), - } - .build(), - ); - + self.rebuild_element(&S::default()); self.with_element(|element| vec![Tree::new(element)]) } fn diff(&self, tree: &mut Tree) { - let heads = self.state.borrow_mut().take().unwrap().into_heads(); - - *self.state.borrow_mut() = Some( - StateBuilder { - component: heads.component, - message: PhantomData, - state: PhantomData, - element_builder: |state| { - Some(state.view(tree.state.downcast_ref())) - }, - } - .build(), - ); - + self.rebuild_element(tree.state.downcast_ref()); self.with_element(|element| { tree.diff_children(std::slice::from_ref(&element)) }) |