From 6ca3b6ddb564d34e50881faefec6e06e11b9fcb9 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 16 Jan 2024 09:42:31 +0400 Subject: Move output scale setting into niri --- src/backend/tty.rs | 5 ++--- src/backend/winit.rs | 18 ++---------------- src/niri.rs | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 4d2afef7..f8044a9c 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -28,7 +28,7 @@ use smithay::backend::session::libseat::LibSeatSession; use smithay::backend::session::{Event as SessionEvent, Session}; use smithay::backend::udev::{self, UdevBackend, UdevEvent}; use smithay::desktop::utils::OutputPresentationFeedback; -use smithay::output::{Mode, Output, OutputModeSource, PhysicalProperties, Scale, Subpixel}; +use smithay::output::{Mode, Output, OutputModeSource, PhysicalProperties, Subpixel}; use smithay::reexports::calloop::timer::{TimeoutAction, Timer}; use smithay::reexports::calloop::{Dispatcher, LoopHandle, RegistrationToken}; use smithay::reexports::drm::control::{ @@ -712,8 +712,7 @@ impl Tty { ); let wl_mode = Mode::from(*mode); - let scale = config.scale.clamp(1., 10.).ceil() as i32; - output.change_current_state(Some(wl_mode), None, Some(Scale::Integer(scale)), None); + output.change_current_state(Some(wl_mode), None, None, None); output.set_preferred(wl_mode); output diff --git a/src/backend/winit.rs b/src/backend/winit.rs index af09a487..56ea0d43 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -11,7 +11,7 @@ use smithay::backend::renderer::damage::OutputDamageTracker; use smithay::backend::renderer::gles::GlesRenderer; use smithay::backend::renderer::{DebugFlags, ImportDma, ImportEgl, Renderer}; use smithay::backend::winit::{self, WinitEvent, WinitGraphicsBackend}; -use smithay::output::{Mode, Output, PhysicalProperties, Scale, Subpixel}; +use smithay::output::{Mode, Output, PhysicalProperties, Subpixel}; use smithay::reexports::calloop::LoopHandle; use smithay::reexports::wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; use smithay::reexports::winit::dpi::LogicalSize; @@ -39,14 +39,6 @@ impl Winit { .with_title("niri"); let (backend, winit) = winit::init_from_builder(builder).unwrap(); - let output_config = config - .borrow() - .outputs - .iter() - .find(|o| o.name == "winit") - .cloned() - .unwrap_or_default(); - let output = Output::new( "winit".to_string(), PhysicalProperties { @@ -61,13 +53,7 @@ impl Winit { size: backend.window_size(), refresh: 60_000, }; - let scale = output_config.scale.clamp(1., 10.).ceil() as i32; - output.change_current_state( - Some(mode), - Some(Transform::Flipped180), - Some(Scale::Integer(scale)), - None, - ); + output.change_current_state(Some(mode), Some(Transform::Flipped180), None, None); output.set_preferred(mode); let connectors = Arc::new(Mutex::new(HashMap::from([( diff --git a/src/niri.rs b/src/niri.rs index 69578804..f5a74b93 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -1043,6 +1043,20 @@ impl Niri { pub fn add_output(&mut self, output: Output, refresh_interval: Option) { let global = output.create_global::(&self.display_handle); + let name = output.name(); + let scale = self + .config + .borrow() + .outputs + .iter() + .find(|o| o.name == name) + .map(|c| c.scale) + .unwrap_or(1.); + let scale = scale.clamp(1., 10.).ceil() as i32; + + // Set scale before adding to the layout since that will read the output size. + output.change_current_state(None, None, Some(output::Scale::Integer(scale)), None); + self.layout.add_output(output.clone()); let lock_render_state = if self.is_locked() { @@ -1066,7 +1080,7 @@ impl Niri { }; let rv = self.output_state.insert(output.clone(), state); assert!(rv.is_none(), "output was already tracked"); - let rv = self.output_by_name.insert(output.name(), output.clone()); + let rv = self.output_by_name.insert(name, output.clone()); assert!(rv.is_none(), "output was already tracked"); // Must be last since it will call queue_redraw(output) which needs things to be filled-in. -- cgit