aboutsummaryrefslogtreecommitdiff
path: root/src/backend/winit.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-01-17 10:38:32 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-17 10:45:18 +0400
commit40c85da102054caeb86b7905cd27c69e392c8f92 (patch)
treeea0f2547ca2949d43ff5898ebab3a56d7eee6d1e /src/backend/winit.rs
parent768b32602839896012a9ee3c4ed6885360fa5395 (diff)
downloadniri-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.rs29
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()
}