Skip to content

Commit ef6c3b7

Browse files
committed
Another attempt to fix the window size
1 parent d2552fb commit ef6c3b7

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

src/window/window_wrapper.rs

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,16 @@ use {
3131
#[cfg(target_os = "macos")]
3232
use super::macos::MacosWindowFeature;
3333

34-
const GRID_TOLERANCE: f32 = 0e-6;
34+
const GRID_TOLERANCE: f32 = 1e-3;
35+
36+
fn round_or_op<Op: FnOnce(f32) -> f32>(v: f32, op: Op) -> f32 {
37+
let rounded = v.round();
38+
if v.abs_diff_eq(&rounded, GRID_TOLERANCE) {
39+
rounded
40+
} else {
41+
op(v)
42+
}
43+
}
3544

3645
use approx::AbsDiffEq;
3746
use log::trace;
@@ -696,15 +705,16 @@ impl WinitWindowWrapper {
696705
window_padding.left + window_padding.right,
697706
window_padding.top + window_padding.bottom,
698707
);
708+
let round_or_ceil = |v: PixelSize<f32>| -> PixelSize<f32> {
709+
PixelSize::new(
710+
round_or_op(v.width, f32::ceil),
711+
round_or_op(v.height, f32::ceil),
712+
)
713+
};
699714

700-
let window_size = *grid_size * self.renderer.grid_renderer.grid_scale;
701-
let window_size = if window_size.abs_diff_eq(&window_size.round(), GRID_TOLERANCE) {
702-
window_size.round()
703-
} else {
704-
window_size.floor()
705-
}
706-
.try_cast()
707-
.unwrap()
715+
let window_size = round_or_ceil(*grid_size * self.renderer.grid_renderer.grid_scale)
716+
.try_cast()
717+
.unwrap()
708718
+ window_padding_size;
709719

710720
log::info!(
@@ -749,14 +759,16 @@ impl WinitWindowWrapper {
749759
PixelSize::new(self.saved_inner_size.width, self.saved_inner_size.height)
750760
- window_padding_size;
751761

752-
let grid_size = content_size / self.renderer.grid_renderer.grid_scale;
753-
let grid_size = if grid_size.abs_diff_eq(&grid_size.round(), GRID_TOLERANCE) {
754-
grid_size.round()
755-
} else {
756-
grid_size.ceil()
757-
}
758-
.try_cast()
759-
.unwrap();
762+
let round_or_floor = |v: GridSize<f32>| -> GridSize<f32> {
763+
GridSize::new(
764+
round_or_op(v.width, f32::floor),
765+
round_or_op(v.height, f32::floor),
766+
)
767+
};
768+
769+
let grid_size = round_or_floor(content_size / self.renderer.grid_renderer.grid_scale)
770+
.try_cast()
771+
.unwrap();
760772

761773
grid_size.max(min)
762774
}

0 commit comments

Comments
 (0)