summaryrefslogtreecommitdiffstats
path: root/widget/src/pane_grid
diff options
context:
space:
mode:
authorLibravatar Joao Freitas <51237625+jhff@users.noreply.github.com>2023-05-22 13:24:48 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-07-06 07:55:50 +0200
commit995c7c1ca9793536ad9b9d1cac94ae7b5b9a8f0a (patch)
tree8869fd83203101c5e0fc4812e54bdc77f2867dfb /widget/src/pane_grid
parente5c9dd54b3f51e913f39b38e8907c321c8bfd040 (diff)
downloadiced-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.rs57
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