From db39fc95f41f9f0a30cee73bff270b128c52f045 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 23 Aug 2024 11:14:24 +0300 Subject: pw_utils: Re-create damage tracker on scale change --- src/pw_utils.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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"); -- cgit