diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-17 10:38:32 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-17 10:45:18 +0400 |
| commit | 40c85da102054caeb86b7905cd27c69e392c8f92 (patch) | |
| tree | ea0f2547ca2949d43ff5898ebab3a56d7eee6d1e /src/backend/winit.rs | |
| parent | 768b32602839896012a9ee3c4ed6885360fa5395 (diff) | |
| download | niri-40c85da102054caeb86b7905cd27c69e392c8f92.tar.gz niri-40c85da102054caeb86b7905cd27c69e392c8f92.tar.bz2 niri-40c85da102054caeb86b7905cd27c69e392c8f92.zip | |
Add an IPC socket and a niri msg outputs subcommand
Diffstat (limited to 'src/backend/winit.rs')
| -rw-r--r-- | src/backend/winit.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 9b31d2c5..3c4b9ad3 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -28,6 +28,7 @@ pub struct Winit { output: Output, backend: WinitGraphicsBackend<GlesRenderer>, damage_tracker: OutputDamageTracker, + ipc_outputs: Rc<RefCell<HashMap<String, niri_ipc::Output>>>, enabled_outputs: Arc<Mutex<HashMap<String, Output>>>, } @@ -56,6 +57,23 @@ impl Winit { output.change_current_state(Some(mode), Some(Transform::Flipped180), None, None); output.set_preferred(mode); + let physical_properties = output.physical_properties(); + let ipc_outputs = Rc::new(RefCell::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), + }, + )]))); + let enabled_outputs = Arc::new(Mutex::new(HashMap::from([( "winit".to_owned(), output.clone(), @@ -76,6 +94,12 @@ impl Winit { None, None, ); + + let mut ipc_outputs = winit.ipc_outputs.borrow_mut(); + let mode = &mut ipc_outputs.get_mut("winit").unwrap().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; + state.niri.output_resized(winit.output.clone()); } WinitEvent::Input(event) => state.process_input_event(event), @@ -95,6 +119,7 @@ impl Winit { output, backend, damage_tracker, + ipc_outputs, enabled_outputs, } } @@ -198,6 +223,10 @@ impl Winit { } } + pub fn ipc_outputs(&self) -> Rc<RefCell<HashMap<String, niri_ipc::Output>>> { + self.ipc_outputs.clone() + } + pub fn enabled_outputs(&self) -> Arc<Mutex<HashMap<String, Output>>> { self.enabled_outputs.clone() } |
