shell/tiling: Simplify sizing logic

This commit is contained in:
Victoria Brekenfeld 2022-11-10 12:57:36 +01:00
parent 2bafd2230d
commit dec2a8e0b6

View file

@ -1059,16 +1059,12 @@ impl TilingLayout {
.map(|(output_data, tree)| (&output_data.output, tree)) .map(|(output_data, tree)| (&output_data.output, tree))
{ {
if let Some(root) = tree.root_node_id() { if let Some(root) = tree.root_node_id() {
let mut stack = Vec::new(); let mut geo = layer_map_for_output(&output).non_exclusive_zone();
geo.loc.x += outer;
let mut geo = Some(layer_map_for_output(&output).non_exclusive_zone()); geo.loc.y += outer;
// TODO saturate? minimum? geo.size.w -= outer * 2;
if let Some(mut geo) = geo.as_mut() { geo.size.h -= outer * 2;
geo.loc.x += outer; let mut stack = vec![geo];
geo.loc.y += outer;
geo.size.w -= outer * 2;
geo.size.h -= outer * 2;
}
for node_id in tree for node_id in tree
.traverse_pre_order_ids(root) .traverse_pre_order_ids(root)
@ -1077,8 +1073,7 @@ impl TilingLayout {
.into_iter() .into_iter()
{ {
let node = tree.get_mut(&node_id).unwrap(); let node = tree.get_mut(&node_id).unwrap();
let geo = stack.pop().unwrap_or(geo); if let Some(geo) = stack.pop() {
if let Some(geo) = geo {
let data = node.data_mut(); let data = node.data_mut();
data.update_geometry(geo); data.update_geometry(geo);
match data { match data {
@ -1089,20 +1084,20 @@ impl TilingLayout {
let mut previous: i32 = sizes.iter().sum(); let mut previous: i32 = sizes.iter().sum();
for size in sizes.iter().rev() { for size in sizes.iter().rev() {
previous -= *size; previous -= *size;
stack.push(Some(Rectangle::from_loc_and_size( stack.push(Rectangle::from_loc_and_size(
(geo.loc.x, geo.loc.y + previous), (geo.loc.x, geo.loc.y + previous),
(geo.size.w, *size), (geo.size.w, *size),
))); ));
} }
} }
Orientation::Vertical => { Orientation::Vertical => {
let mut previous: i32 = sizes.iter().sum(); let mut previous: i32 = sizes.iter().sum();
for size in sizes.iter().rev() { for size in sizes.iter().rev() {
previous -= *size; previous -= *size;
stack.push(Some(Rectangle::from_loc_and_size( stack.push(Rectangle::from_loc_and_size(
(geo.loc.x + previous, geo.loc.y), (geo.loc.x + previous, geo.loc.y),
(*size, geo.size.h), (*size, geo.size.h),
))); ));
} }
} }
}, },
@ -1116,9 +1111,6 @@ impl TilingLayout {
} }
} }
} }
} else if node.data().is_group() {
stack.push(None);
stack.push(None);
} }
} }
} }