aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/mod.rs2
-rw-r--r--src/backend/tty.rs10
-rw-r--r--src/backend/winit.rs38
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;
}