diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 10:25:51 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-03 10:33:31 +0400 |
| commit | 1a8d6b1f1df80009795ed23e9ce0298fac65d766 (patch) | |
| tree | eec3d15d9a69f81722077ca1390b8d026429543f /src/niri.rs | |
| parent | 185f294200b8e20d85dab828fa95265330762594 (diff) | |
| download | niri-1a8d6b1f1df80009795ed23e9ce0298fac65d766.tar.gz niri-1a8d6b1f1df80009795ed23e9ce0298fac65d766.tar.bz2 niri-1a8d6b1f1df80009795ed23e9ce0298fac65d766.zip | |
Add a semi-working debug-toggle-damage binding
Diffstat (limited to 'src/niri.rs')
| -rw-r--r-- | src/niri.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/niri.rs b/src/niri.rs index 79808ac4..f3f5396a 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -13,6 +13,7 @@ use anyhow::{ensure, Context}; use calloop::futures::Scheduler; use niri_config::{Config, Key, Modifiers, PreviewRender, TrackLayout}; use smithay::backend::allocator::Fourcc; +use smithay::backend::renderer::damage::OutputDamageTracker; use smithay::backend::renderer::element::memory::MemoryRenderBufferRenderElement; use smithay::backend::renderer::element::solid::{SolidColorBuffer, SolidColorRenderElement}; use smithay::backend::renderer::element::surface::{ @@ -238,6 +239,7 @@ pub struct Niri { pub exit_confirm_dialog: Option<ExitConfirmDialog>, pub debug_draw_opaque_regions: bool, + pub debug_draw_damage: bool, #[cfg(feature = "dbus")] pub dbus: Option<crate::dbus::DBusServers>, @@ -287,6 +289,8 @@ pub struct OutputState { pub lock_render_state: LockRenderState, pub lock_surface: Option<LockSurface>, pub lock_color_buffer: SolidColorBuffer, + /// Damage tracker used for the debug damage visualization. + pub debug_damage_tracker: OutputDamageTracker, } #[derive(Default)] @@ -1426,6 +1430,7 @@ impl Niri { exit_confirm_dialog, debug_draw_opaque_regions: false, + debug_draw_damage: false, #[cfg(feature = "dbus")] dbus: None, @@ -1630,6 +1635,7 @@ impl Niri { lock_render_state, lock_surface: None, lock_color_buffer: SolidColorBuffer::new(size, CLEAR_COLOR_LOCKED), + debug_damage_tracker: OutputDamageTracker::from_output(&output), }; let rv = self.output_state.insert(output.clone(), state); assert!(rv.is_none(), "output was already tracked"); @@ -2477,6 +2483,7 @@ impl Niri { if self.debug_draw_opaque_regions { draw_opaque_regions(&mut elements, output_scale); } + elements } @@ -3188,6 +3195,18 @@ impl Niri { } } + pub fn debug_toggle_damage(&mut self) { + self.debug_draw_damage = !self.debug_draw_damage; + + if self.debug_draw_damage { + for (output, state) in &mut self.output_state { + state.debug_damage_tracker = OutputDamageTracker::from_output(output); + } + } + + self.queue_redraw_all(); + } + pub fn open_screenshot_ui(&mut self, renderer: &mut GlesRenderer) { if self.is_locked() || self.screenshot_ui.is_open() { return; |
