diff options
author | 2023-05-22 13:24:48 +0100 | |
---|---|---|
committer | 2023-07-06 07:55:50 +0200 | |
commit | 995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a (patch) | |
tree | 8869fd83203101c5e0fc4812e54bdc77f2867dfb /widget/src/pane_grid | |
parent | e5c9dd54b3f51e913f39b38e8907c321c8bfd040 (diff) | |
download | iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.tar.gz iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.tar.bz2 iced-995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a.zip |
Reuse code
Diffstat (limited to 'widget/src/pane_grid')
-rw-r--r-- | widget/src/pane_grid/state.rs | 57 |
1 files changed, 22 insertions, 35 deletions
diff --git a/widget/src/pane_grid/state.rs b/widget/src/pane_grid/state.rs index 34781a90..332b6837 100644 --- a/widget/src/pane_grid/state.rs +++ b/widget/src/pane_grid/state.rs @@ -145,7 +145,22 @@ impl<T> State<T> { pane: &Pane, state: T, ) -> Option<(Pane, Split)> { - let node = self.internal.layout.find(pane)?; + self.split_node(axis, Some(pane), state, false) + } + + fn split_node( + &mut self, + axis: Axis, + pane: Option<&Pane>, + state: T, + inverse: bool, + ) -> Option<(Pane, Split)> { + let node = if let Some(pane) = pane { + self.internal.layout.find(pane)? + } else { + // Major node + &mut self.internal.layout + }; let new_pane = { self.internal.last_id = self.internal.last_id.checked_add(1)?; @@ -159,7 +174,11 @@ impl<T> State<T> { Split(self.internal.last_id) }; - node.split(new_split, axis, new_pane); + if inverse { + node.split_inverse(new_split, axis, new_pane); + } else { + node.split(new_split, axis, new_pane); + } let _ = self.panes.insert(new_pane, state); let _ = self.maximized.take(); @@ -231,42 +250,10 @@ impl<T> State<T> { swap: bool, ) { if let Some((state, _)) = self.close(pane) { - let _ = self.split_major_node(axis, state, swap); + let _ = self.split_node(axis, None, state, swap); } } - fn split_major_node( - &mut self, - axis: Axis, - state: T, - swap: bool, - ) -> Option<(Pane, Split)> { - let major_node = &mut self.internal.layout; - - let new_pane = { - self.internal.last_id = self.internal.last_id.checked_add(1)?; - - Pane(self.internal.last_id) - }; - - let new_split = { - self.internal.last_id = self.internal.last_id.checked_add(1)?; - - Split(self.internal.last_id) - }; - - if swap { - major_node.split_inverse(new_split, axis, new_pane) - } else { - major_node.split(new_split, axis, new_pane) - }; - - let _ = self.panes.insert(new_pane, state); - let _ = self.maximized.take(); - - Some((new_pane, new_split)) - } - /// Swaps the position of the provided panes in the [`State`]. /// /// If you want to swap panes on drag and drop in your [`PaneGrid`], you |