diff options
Diffstat (limited to 'src')
| -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); |
