aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs12
-rw-r--r--src/protocols/screencopy.rs2
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);