aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVal Packett <val@packett.cool>2025-01-04 01:05:08 -0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-01-17 11:16:10 +0300
commitb853d5b1247fddfaeac0dbdfb9304c69c6de463a (patch)
treea12b8cfa7384609440885f21687a1ac4c39c4ac5 /src
parent693e0e09f79c2d1add466b15daabffd0be339ecb (diff)
downloadniri-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.rs16
-rw-r--r--src/utils/scale.rs2
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))