diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-16 09:42:31 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-16 09:46:02 +0400 |
| commit | 6ca3b6ddb564d34e50881faefec6e06e11b9fcb9 (patch) | |
| tree | 77b1edfd11712baa8b8ccf278b3b601ca52e1e1c | |
| parent | fc5a080ca5ab1859ee2a57e00f1a365ef9a783a2 (diff) | |
| download | niri-6ca3b6ddb564d34e50881faefec6e06e11b9fcb9.tar.gz niri-6ca3b6ddb564d34e50881faefec6e06e11b9fcb9.tar.bz2 niri-6ca3b6ddb564d34e50881faefec6e06e11b9fcb9.zip | |
Move output scale setting into niri
| -rw-r--r-- | src/backend/tty.rs | 5 | ||||
| -rw-r--r-- | src/backend/winit.rs | 18 | ||||
| -rw-r--r-- | 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<Duration>) { let global = output.create_global::<State>(&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. |
