From 1dae45c58d7eabeda21ef490d712915890bf6cff Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Mon, 17 Jun 2024 09:16:28 +0300 Subject: Refactor layout to fractional-logical Lets borders, gaps, and everything else stay pixel-perfect even with fractional scale. Allows setting fractional border widths, gaps, struts. See the new wiki .md for more details. --- src/utils/mod.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/utils/mod.rs') diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 3c6a36e0..03654877 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -95,16 +95,24 @@ pub fn to_physical_precise_round(scale: f64, logical: impl Coordi N::from_f64((logical.to_f64() * scale).round()) } -pub fn output_size(output: &Output) -> Size { +pub fn round_logical_in_physical(scale: f64, logical: f64) -> f64 { + (logical * scale).round() / scale +} + +pub fn round_logical_in_physical_max1(scale: f64, logical: f64) -> f64 { + if logical == 0. { + return 0.; + } + + (logical * scale).max(1.).round() / scale +} + +pub fn output_size(output: &Output) -> Size { let output_scale = output.current_scale().fractional_scale(); let output_transform = output.current_transform(); let output_mode = output.current_mode().unwrap(); - - // Like in LayerMap::arrange(). - // - // FIXME: return fractional logical size. let logical_size = output_mode.size.to_f64().to_logical(output_scale); - output_transform.transform_size(logical_size.to_i32_round()) + output_transform.transform_size(logical_size) } pub fn logical_output(output: &Output) -> niri_ipc::LogicalOutput { -- cgit