diff options
| author | Val Packett <val@packett.cool> | 2025-01-04 01:05:08 -0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-17 11:16:10 +0300 |
| commit | b853d5b1247fddfaeac0dbdfb9304c69c6de463a (patch) | |
| tree | a12b8cfa7384609440885f21687a1ac4c39c4ac5 /src | |
| parent | 693e0e09f79c2d1add466b15daabffd0be339ecb (diff) | |
| download | niri-b853d5b1247fddfaeac0dbdfb9304c69c6de463a.tar.gz niri-b853d5b1247fddfaeac0dbdfb9304c69c6de463a.tar.bz2 niri-b853d5b1247fddfaeac0dbdfb9304c69c6de463a.zip | |
dbus: DisplayConfig: report fractional scales as supported
Diffstat (limited to 'src')
| -rw-r--r-- | src/dbus/mutter_display_config.rs | 16 | ||||
| -rw-r--r-- | src/utils/scale.rs | 2 |
2 files changed, 11 insertions, 7 deletions
diff --git a/src/dbus/mutter_display_config.rs b/src/dbus/mutter_display_config.rs index c2d4502e..2be37b5e 100644 --- a/src/dbus/mutter_display_config.rs +++ b/src/dbus/mutter_display_config.rs @@ -2,6 +2,7 @@ use std::collections::HashMap; use std::sync::{Arc, Mutex}; use serde::Serialize; +use smithay::utils::Size; use zbus::fdo::RequestNameFlags; use zbus::object_server::SignalEmitter; use zbus::zvariant::{self, OwnedValue, Type}; @@ -10,6 +11,7 @@ use zbus::{fdo, interface}; use super::Start; use crate::backend::IpcOutputMap; use crate::utils::is_laptop_panel; +use crate::utils::scale::supported_scales; pub struct DisplayConfig { ipc_outputs: Arc<Mutex<IpcOutputMap>>, @@ -84,15 +86,17 @@ impl DisplayConfig { refresh_rate, is_preferred, } = *m; - let refresh = refresh_rate as f64 / 1000.; + let width = i32::from(width); + let height = i32::from(height); + let refresh_rate = refresh_rate as f64 / 1000.; Mode { - id: format!("{width}x{height}@{refresh:.3}"), - width: i32::from(width), - height: i32::from(height), - refresh_rate: refresh, + id: format!("{width}x{height}@{refresh_rate:.3}"), + width, + height, + refresh_rate, preferred_scale: 1., - supported_scales: vec![1., 2., 3.], + supported_scales: supported_scales(Size::from((width, height))).collect(), properties: HashMap::from([( String::from("is-preferred"), OwnedValue::from(is_preferred), diff --git a/src/utils/scale.rs b/src/utils/scale.rs index ff89b4cb..6736b464 100644 --- a/src/utils/scale.rs +++ b/src/utils/scale.rs @@ -38,7 +38,7 @@ pub fn guess_monitor_scale(size_mm: Size<i32, Raw>, resolution: Size<i32, Physic .map_or(1., |(scale, _)| scale) } -fn supported_scales(resolution: Size<i32, Physical>) -> impl Iterator<Item = f64> { +pub fn supported_scales(resolution: Size<i32, Physical>) -> impl Iterator<Item = f64> { (MIN_SCALE * STEPS..=MAX_SCALE * STEPS) .map(|x| f64::from(x) / f64::from(STEPS)) .filter(move |scale| is_valid_for_resolution(resolution, *scale)) |
