aboutsummaryrefslogtreecommitdiff
path: root/src/utils/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-06-17 09:16:28 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-06-18 14:01:28 +0300
commit1dae45c58d7eabeda21ef490d712915890bf6cff (patch)
tree62c473ab1662a1161ed522517ea57b7bd8db340c /src/utils/mod.rs
parent997119c44338ad96a40b4a1d6e958f77062a37ef (diff)
downloadniri-1dae45c58d7eabeda21ef490d712915890bf6cff.tar.gz
niri-1dae45c58d7eabeda21ef490d712915890bf6cff.tar.bz2
niri-1dae45c58d7eabeda21ef490d712915890bf6cff.zip
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.
Diffstat (limited to 'src/utils/mod.rs')
-rw-r--r--src/utils/mod.rs20
1 files changed, 14 insertions, 6 deletions
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<N: Coordinate>(scale: f64, logical: impl Coordi
N::from_f64((logical.to_f64() * scale).round())
}
-pub fn output_size(output: &Output) -> Size<i32, Logical> {
+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<f64, Logical> {
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 {