mirror of
https://github.com/pinnacle-comp/pinnacle.git
synced 2024-12-27 21:58:18 +01:00
Fix master stack layout having empty space on the bottom
This commit is contained in:
parent
21272c4530
commit
e7f0210f40
1 changed files with 28 additions and 6 deletions
|
@ -91,23 +91,44 @@ impl Layout {
|
||||||
|
|
||||||
let output_loc = output.current_location();
|
let output_loc = output.current_location();
|
||||||
|
|
||||||
|
// INFO: Some windows crash the compositor if they become too short in height,
|
||||||
|
// | so they're limited to a minimum of 40 pixels as a workaround.
|
||||||
let height = i32::max(output_geo.size.h / stack_count as i32, 40);
|
let height = i32::max(output_geo.size.h / stack_count as i32, 40);
|
||||||
|
|
||||||
|
let mut empty_height_at_bottom =
|
||||||
|
output_geo.size.h - (height * stack_count as i32);
|
||||||
|
let mut heights = vec![height; stack_count];
|
||||||
|
|
||||||
|
// PERF: this cycles through the vec adding 1 pixel until all space is filled
|
||||||
|
if empty_height_at_bottom > 0 {
|
||||||
|
'outer: loop {
|
||||||
|
for ht in heights.iter_mut() {
|
||||||
|
if empty_height_at_bottom == 0 {
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
|
*ht += 1;
|
||||||
|
empty_height_at_bottom -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut y = 0;
|
||||||
|
|
||||||
|
tracing::debug!("heights: {heights:?}");
|
||||||
|
|
||||||
for (i, win) in stack.enumerate() {
|
for (i, win) in stack.enumerate() {
|
||||||
win.toplevel().with_pending_state(|state| {
|
win.toplevel().with_pending_state(|state| {
|
||||||
state.size = Some((output_geo.size.w / 2, height).into());
|
state.size = Some((output_geo.size.w / 2, heights[i]).into());
|
||||||
});
|
});
|
||||||
|
|
||||||
win.with_state(|state| {
|
win.with_state(|state| {
|
||||||
state.resize_state = WindowResizeState::WaitingForAck(
|
state.resize_state = WindowResizeState::WaitingForAck(
|
||||||
win.toplevel().send_configure(),
|
win.toplevel().send_configure(),
|
||||||
(
|
(output_geo.size.w / 2 + output_loc.x, y + output_loc.y).into(),
|
||||||
output_geo.size.w / 2 + output_loc.x,
|
|
||||||
i as i32 * height + output_loc.y,
|
|
||||||
)
|
|
||||||
.into(),
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
y += heights[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,6 +257,7 @@ impl Layout {
|
||||||
let mut x_factor_2: f32 = 0.0;
|
let mut x_factor_2: f32 = 0.0;
|
||||||
let mut y_factor_2: f32;
|
let mut y_factor_2: f32;
|
||||||
|
|
||||||
|
// really starting to get flashbacks to calculus class here
|
||||||
fn series(n: u32) -> f32 {
|
fn series(n: u32) -> f32 {
|
||||||
(0..n)
|
(0..n)
|
||||||
.map(|n| (-1i32).pow(n) as f32 * (1.0 / 2.0_f32.powi(n as i32)))
|
.map(|n| (-1i32).pow(n) as f32 * (1.0 / 2.0_f32.powi(n as i32)))
|
||||||
|
|
Loading…
Reference in a new issue