aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-08-23 11:14:24 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-08-23 11:14:24 +0300
commitdb39fc95f41f9f0a30cee73bff270b128c52f045 (patch)
tree20e14d6c7dd22cca87298c004929cbdfc13b1a87
parent471dc714aa31243f68686fb35c2b5e44bd9be33b (diff)
downloadniri-db39fc95f41f9f0a30cee73bff270b128c52f045.tar.gz
niri-db39fc95f41f9f0a30cee73bff270b128c52f045.tar.bz2
niri-db39fc95f41f9f0a30cee73bff270b128c52f045.zip
pw_utils: Re-create damage tracker on scale change
-rw-r--r--src/pw_utils.rs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/pw_utils.rs b/src/pw_utils.rs
index d7c3c44d..0f092da5 100644
--- a/src/pw_utils.rs
+++ b/src/pw_utils.rs
@@ -34,7 +34,7 @@ use smithay::backend::drm::DrmDeviceFd;
use smithay::backend::renderer::damage::OutputDamageTracker;
use smithay::backend::renderer::element::RenderElement;
use smithay::backend::renderer::gles::GlesRenderer;
-use smithay::output::WeakOutput;
+use smithay::output::{OutputModeSource, WeakOutput};
use smithay::reexports::calloop::generic::Generic;
use smithay::reexports::calloop::{Interest, LoopHandle, Mode, PostAction};
use smithay::reexports::gbm::Modifier;
@@ -757,6 +757,14 @@ impl Cast {
let damage_tracker = damage_tracker
.get_or_insert_with(|| OutputDamageTracker::new(size, scale, Transform::Normal));
+ // Size change will drop the damage tracker, but scale change won't, so check it here.
+ let OutputModeSource::Static { scale: t_scale, .. } = damage_tracker.mode() else {
+ unreachable!();
+ };
+ if *t_scale != scale {
+ *damage_tracker = OutputDamageTracker::new(size, scale, Transform::Normal);
+ }
+
let (damage, _states) = damage_tracker.damage_output(1, elements).unwrap();
if damage.is_none() {
trace!("no damage, skipping frame");