diff options
author | 2022-03-10 19:25:57 +0700 | |
---|---|---|
committer | 2022-03-14 17:44:25 +0700 | |
commit | 6dd187ff0822230f084e43636b1aabeb1baf06f6 (patch) | |
tree | 27426980b2882025a3c812ba2401d3bf8f6dca8d /pure/src/widget/tree.rs | |
parent | 9f27969d14232355ad628431fb67aa07e42e768f (diff) | |
download | iced-6dd187ff0822230f084e43636b1aabeb1baf06f6.tar.gz iced-6dd187ff0822230f084e43636b1aabeb1baf06f6.tar.bz2 iced-6dd187ff0822230f084e43636b1aabeb1baf06f6.zip |
Implement `pure` version of `PaneGrid` widget
Diffstat (limited to 'pure/src/widget/tree.rs')
-rw-r--r-- | pure/src/widget/tree.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/pure/src/widget/tree.rs b/pure/src/widget/tree.rs index 33f5693a..3fcf0922 100644 --- a/pure/src/widget/tree.rs +++ b/pure/src/widget/tree.rs @@ -42,6 +42,19 @@ impl Tree { &mut self, new_children: &[Element<'_, Message, Renderer>], ) { + self.diff_children_custom( + new_children, + |new, child_state| child_state.diff(new), + Self::new, + ) + } + + pub fn diff_children_custom<T>( + &mut self, + new_children: &[T], + diff: impl Fn(&T, &mut Tree), + new_state: impl Fn(&T) -> Self, + ) { if self.children.len() > new_children.len() { self.children.truncate(new_children.len()); } @@ -49,12 +62,12 @@ impl Tree { for (child_state, new) in self.children.iter_mut().zip(new_children.iter()) { - child_state.diff(new); + diff(new, child_state); } if self.children.len() < new_children.len() { self.children.extend( - new_children[self.children.len()..].iter().map(Self::new), + new_children[self.children.len()..].iter().map(new_state), ); } } |