diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-08-08 11:53:42 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-08-08 13:32:37 +0300 |
| commit | 0f1e44aac66d53a085919b5dcd28e85348ad2b94 (patch) | |
| tree | 2497d9d8b8183cb4d9af8864182b5268e598dd77 | |
| parent | 66aae91bcab3c475a0f54076a16ebbac2d6b367a (diff) | |
| download | niri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.tar.gz niri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.tar.bz2 niri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.zip | |
screencopy: Fix transformed damage calculation
| -rw-r--r-- | src/niri.rs | 12 | ||||
| -rw-r--r-- | src/protocols/screencopy.rs | 2 |
2 files changed, 13 insertions, 1 deletions
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<i32, Physical>]) { + pub fn damage(&self, damages: impl Iterator<Item = Rectangle<i32, smithay::utils::Buffer>>) { 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); |
