diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-27 10:50:40 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-27 10:50:40 +0400 |
| commit | d77aac1afa0c61c26e39f36c5b38f026af884986 (patch) | |
| tree | 2038cf5a630e86ccebd1e4f9927a93422c231139 /src | |
| parent | 837a0a20fbc6d6461a2f22799eab45472a1816f0 (diff) | |
| download | niri-d77aac1afa0c61c26e39f36c5b38f026af884986.tar.gz niri-d77aac1afa0c61c26e39f36c5b38f026af884986.tar.bz2 niri-d77aac1afa0c61c26e39f36c5b38f026af884986.zip | |
Fix damage when rendering to texture
Diffstat (limited to 'src')
| -rw-r--r-- | src/niri.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/niri.rs b/src/niri.rs index 600f1e1f..97bbd498 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -2848,9 +2848,13 @@ fn render_to_texture( for element in elements.iter().rev() { let src = element.src(); let dst = element.geometry(scale); - element - .draw(&mut frame, src, dst, &[output_rect]) - .context("error drawing element")?; + + if let Some(mut damage) = output_rect.intersection(dst) { + damage.loc -= dst.loc; + element + .draw(&mut frame, src, dst, &[damage]) + .context("error drawing element")?; + } } let sync_point = frame.finish().context("error finishing frame")?; @@ -2913,9 +2917,13 @@ fn render_to_dmabuf( for element in elements.iter().rev() { let src = element.src(); let dst = element.geometry(scale); - element - .draw(&mut frame, src, dst, &[output_rect]) - .context("error drawing element")?; + + if let Some(mut damage) = output_rect.intersection(dst) { + damage.loc -= dst.loc; + element + .draw(&mut frame, src, dst, &[damage]) + .context("error drawing element")?; + } } let _sync_point = frame.finish().context("error finishing frame")?; |
