aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-08-08 11:53:42 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-08-08 13:32:37 +0300
commit0f1e44aac66d53a085919b5dcd28e85348ad2b94 (patch)
tree2497d9d8b8183cb4d9af8864182b5268e598dd77 /src
parent66aae91bcab3c475a0f54076a16ebbac2d6b367a (diff)
downloadniri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.tar.gz
niri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.tar.bz2
niri-0f1e44aac66d53a085919b5dcd28e85348ad2b94.zip
screencopy: Fix transformed damage calculation
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);