tiling: Properly center windows with gaps

This commit is contained in:
Victoria Brekenfeld 2022-11-12 13:51:32 +01:00
parent 15fe9af342
commit 77858d3628

View file

@ -1087,34 +1087,36 @@ impl TilingLayout {
.into_iter() .into_iter()
{ {
let node = tree.get_mut(&node_id).unwrap(); let node = tree.get_mut(&node_id).unwrap();
if let Some(geo) = stack.pop() { if let Some(mut geo) = stack.pop() {
let data = node.data_mut(); let data = node.data_mut();
data.update_geometry(geo);
match data { match data {
Data::Group { Data::Group {
orientation, sizes, .. orientation, sizes, ..
} => match orientation { } => {
Orientation::Horizontal => { match orientation {
let mut previous: i32 = sizes.iter().sum(); Orientation::Horizontal => {
for size in sizes.iter().rev() { let mut previous: i32 = sizes.iter().sum();
previous -= *size; for size in sizes.iter().rev() {
stack.push(Rectangle::from_loc_and_size( previous -= *size;
(geo.loc.x, geo.loc.y + previous), stack.push(Rectangle::from_loc_and_size(
(geo.size.w, *size), (geo.loc.x, geo.loc.y + previous),
)); (geo.size.w, *size),
));
}
}
Orientation::Vertical => {
let mut previous: i32 = sizes.iter().sum();
for size in sizes.iter().rev() {
previous -= *size;
stack.push(Rectangle::from_loc_and_size(
(geo.loc.x + previous, geo.loc.y),
(*size, geo.size.h),
));
}
} }
} }
Orientation::Vertical => { data.update_geometry(geo);
let mut previous: i32 = sizes.iter().sum(); }
for size in sizes.iter().rev() {
previous -= *size;
stack.push(Rectangle::from_loc_and_size(
(geo.loc.x + previous, geo.loc.y),
(*size, geo.size.h),
));
}
}
},
Data::Mapped { mapped, .. } => { Data::Mapped { mapped, .. } => {
if !(mapped.is_fullscreen() || mapped.is_maximized()) { if !(mapped.is_fullscreen() || mapped.is_maximized()) {
mapped.set_tiled(true); mapped.set_tiled(true);
@ -1123,6 +1125,8 @@ impl TilingLayout {
); );
mapped.configure(); mapped.configure();
} }
geo.loc += (inner, inner).into();
data.update_geometry(geo);
} }
} }
} }