diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-27 14:54:24 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-03-27 14:54:24 +0400 |
| commit | cf87a185a90aeacf7c15d27ddba23bc493d9c2dd (patch) | |
| tree | e8625c61105821b8d552db86f70839b1282151b4 /src/backend/winit.rs | |
| parent | e276c906bf4bea27dc8173815ff373d04c20caaf (diff) | |
| download | niri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.tar.gz niri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.tar.bz2 niri-cf87a185a90aeacf7c15d27ddba23bc493d9c2dd.zip | |
Add logical output info and preferred modes to IPC
Diffstat (limited to 'src/backend/winit.rs')
| -rw-r--r-- | src/backend/winit.rs | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 96c0cdf8..65244e81 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -20,7 +20,7 @@ use smithay::reexports::winit::window::WindowBuilder; use super::{IpcOutputMap, RenderResult}; use crate::niri::{Niri, RedrawState, State}; use crate::render_helpers::{shaders, RenderTarget}; -use crate::utils::get_monotonic_time; +use crate::utils::{get_monotonic_time, logical_output}; pub struct Winit { config: Rc<RefCell<Config>>, @@ -61,21 +61,20 @@ impl Winit { let physical_properties = output.physical_properties(); let ipc_outputs = Arc::new(Mutex::new(HashMap::from([( "winit".to_owned(), - ( - niri_ipc::Output { - name: output.name(), - make: physical_properties.make, - model: physical_properties.model, - physical_size: None, - modes: vec![niri_ipc::Mode { - width: backend.window_size().w.clamp(0, u16::MAX as i32) as u16, - height: backend.window_size().h.clamp(0, u16::MAX as i32) as u16, - refresh_rate: 60_000, - }], - current_mode: Some(0), - }, - Some(output.clone()), - ), + niri_ipc::Output { + name: output.name(), + make: physical_properties.make, + model: physical_properties.model, + physical_size: None, + modes: vec![niri_ipc::Mode { + width: backend.window_size().w.clamp(0, u16::MAX as i32) as u16, + height: backend.window_size().h.clamp(0, u16::MAX as i32) as u16, + refresh_rate: 60_000, + is_preferred: true, + }], + current_mode: Some(0), + logical: Some(logical_output(&output)), + }, )]))); let damage_tracker = OutputDamageTracker::from_output(&output); @@ -96,9 +95,14 @@ impl Winit { { let mut ipc_outputs = winit.ipc_outputs.lock().unwrap(); - let mode = &mut ipc_outputs.get_mut("winit").unwrap().0.modes[0]; + let output = ipc_outputs.get_mut("winit").unwrap(); + let mode = &mut output.modes[0]; mode.width = size.w.clamp(0, u16::MAX as i32) as u16; mode.height = size.h.clamp(0, u16::MAX as i32) as u16; + if let Some(logical) = output.logical.as_mut() { + logical.width = size.w as u32; + logical.height = size.h as u32; + } state.niri.ipc_outputs_changed = true; } |
