diff options
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/mod.rs | 2 | ||||
| -rw-r--r-- | src/backend/tty.rs | 10 | ||||
| -rw-r--r-- | src/backend/winit.rs | 38 |
3 files changed, 28 insertions, 22 deletions
diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 786fdaaa..80986aea 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -31,7 +31,7 @@ pub enum RenderResult { Skipped, } -pub type IpcOutputMap = HashMap<String, (niri_ipc::Output, Option<Output>)>; +pub type IpcOutputMap = HashMap<String, niri_ipc::Output>; impl Backend { pub fn init(&mut self, niri: &mut Niri) { diff --git a/src/backend/tty.rs b/src/backend/tty.rs index a90182a3..783db022 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -60,7 +60,7 @@ use crate::frame_clock::FrameClock; use crate::niri::{Niri, RedrawState, State}; use crate::render_helpers::renderer::AsGlesRenderer; use crate::render_helpers::{shaders, RenderTarget}; -use crate::utils::get_monotonic_time; +use crate::utils::{get_monotonic_time, logical_output}; const SUPPORTED_COLOR_FORMATS: &[Fourcc] = &[Fourcc::Argb8888, Fourcc::Abgr8888]; @@ -1370,6 +1370,7 @@ impl Tty { width: m.size().0, height: m.size().1, refresh_rate: Mode::from(*m).refresh as u32, + is_preferred: m.mode_type().contains(ModeTypeFlags::PREFERRED), } }) .collect(); @@ -1384,14 +1385,14 @@ impl Tty { } } - let output = niri + let logical = niri .global_space .outputs() .find(|output| { let tty_state: &TtyOutputState = output.user_data().get().unwrap(); tty_state.node == *node && tty_state.crtc == crtc }) - .cloned(); + .map(logical_output); let ipc_output = niri_ipc::Output { name: connector_name.clone(), @@ -1400,9 +1401,10 @@ impl Tty { physical_size, modes, current_mode, + logical, }; - ipc_outputs.insert(connector_name, (ipc_output, output)); + ipc_outputs.insert(connector_name, ipc_output); } } 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; } |
