From 0f1e44aac66d53a085919b5dcd28e85348ad2b94 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 8 Aug 2024 11:53:42 +0300 Subject: screencopy: Fix transformed damage calculation --- src/niri.rs | 12 ++++++++++++ src/protocols/screencopy.rs | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/niri.rs b/src/niri.rs index d5103eed..43721ca1 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -3773,6 +3773,18 @@ impl Niri { match render_result { Ok(damages) => { if let Some(damages) = damages { + // Convert from Physical coordinates back to Buffer coordinates. + let transform = output.current_transform(); + let physical_size = + transform.transform_size(screencopy.buffer_size()); + let damages = damages.iter().map(|dmg| { + dmg.to_logical(1).to_buffer( + 1, + transform.invert(), + &physical_size.to_logical(1), + ) + }); + screencopy.damage(damages); queue.pop().submit(false); } else { diff --git a/src/protocols/screencopy.rs b/src/protocols/screencopy.rs index 5be096e5..d7e3d08f 100644 --- a/src/protocols/screencopy.rs +++ b/src/protocols/screencopy.rs @@ -456,7 +456,7 @@ impl Screencopy { self.with_damage } - pub fn damage(&self, damages: &[Rectangle]) { + pub fn damage(&self, damages: impl Iterator>) { for Rectangle { loc, size } in damages { self.frame .damage(loc.x as u32, loc.y as u32, size.w as u32, size.h as u32); -- cgit