summaryrefslogtreecommitdiffstats
path: root/pure/src/widget/tree.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-03-10 19:25:57 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-03-14 17:44:25 +0700
commit6dd187ff0822230f084e43636b1aabeb1baf06f6 (patch)
tree27426980b2882025a3c812ba2401d3bf8f6dca8d /pure/src/widget/tree.rs
parent9f27969d14232355ad628431fb67aa07e42e768f (diff)
downloadiced-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.rs17
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),
);
}
}