|
31 | 31 | #[cfg(target_os = "macos")] |
32 | 32 | use super::macos::MacosWindowFeature; |
33 | 33 |
|
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 | +} |
35 | 44 |
|
36 | 45 | use approx::AbsDiffEq; |
37 | 46 | use log::trace; |
@@ -696,15 +705,16 @@ impl WinitWindowWrapper { |
696 | 705 | window_padding.left + window_padding.right, |
697 | 706 | window_padding.top + window_padding.bottom, |
698 | 707 | ); |
| 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 | + }; |
699 | 714 |
|
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() |
708 | 718 | + window_padding_size; |
709 | 719 |
|
710 | 720 | log::info!( |
@@ -749,14 +759,16 @@ impl WinitWindowWrapper { |
749 | 759 | PixelSize::new(self.saved_inner_size.width, self.saved_inner_size.height) |
750 | 760 | - window_padding_size; |
751 | 761 |
|
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(); |
760 | 772 |
|
761 | 773 | grid_size.max(min) |
762 | 774 | } |
|
0 commit comments