From 909ca8cf9de816d94c4a1f396013d3e1259e7547 Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Mon, 17 Feb 2025 17:59:07 +0100 Subject: [PATCH] zoom: Seperate animating/current focal_point --- src/backend/render/mod.rs | 4 ++-- src/shell/zoom.rs | 26 +++++++++++++++++++++++--- src/utils/prelude.rs | 2 +- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index f24ba523..040774b2 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -421,7 +421,7 @@ where let (focal_point, zoom_scale) = zoom_state .map(|state| { ( - state.focal_point(Some(&output)).to_local(&output), + state.animating_focal_point(Some(&output)).to_local(&output), state.animating_level(), ) }) @@ -729,7 +729,7 @@ where let (focal_point, zoom_scale) = zoom_level .map(|state| { ( - state.focal_point(Some(&output)).to_local(&output), + state.animating_focal_point(Some(&output)).to_local(&output), state.animating_level(), ) }) diff --git a/src/shell/zoom.rs b/src/shell/zoom.rs index dd9c7db7..5f14ced2 100644 --- a/src/shell/zoom.rs +++ b/src/shell/zoom.rs @@ -124,7 +124,7 @@ impl OutputZoomState { } } - pub fn focal_point(&mut self) -> Point { + pub fn animating_focal_point(&mut self) -> Point { if let Some((old_point, start)) = self.previous_point.as_ref() { let duration_since = Instant::now().duration_since(*start); if duration_since > ANIMATION_DURATION { @@ -146,6 +146,10 @@ impl OutputZoomState { } } + pub fn current_focal_point(&mut self) -> Point { + self.focal_point + } + pub fn is_animating(&self) -> bool { self.previous_point.is_some() } @@ -204,11 +208,27 @@ impl ZoomState { self.seat.clone() } - pub fn focal_point(&self, output: Option<&Output>) -> Point { + pub fn animating_focal_point(&self, output: Option<&Output>) -> Point { let active_output = self.seat.active_output(); let output = output.unwrap_or(&active_output); let output_state = output.user_data().get::>().unwrap(); - let res = output_state.lock().unwrap().focal_point().to_global(output); + let res = output_state + .lock() + .unwrap() + .animating_focal_point() + .to_global(output); + res + } + + pub fn current_focal_point(&self, output: Option<&Output>) -> Point { + let active_output = self.seat.active_output(); + let output = output.unwrap_or(&active_output); + let output_state = output.user_data().get::>().unwrap(); + let res = output_state + .lock() + .unwrap() + .current_focal_point() + .to_global(output); res } diff --git a/src/utils/prelude.rs b/src/utils/prelude.rs index 056ebd4c..94dd6fcb 100644 --- a/src/utils/prelude.rs +++ b/src/utils/prelude.rs @@ -63,7 +63,7 @@ impl OutputExt for Output { let output_state = self.user_data().get::>()?; let mut output_state_ref = output_state.lock().unwrap(); - let focal_point = output_state_ref.focal_point().to_global(self); + let focal_point = output_state_ref.current_focal_point().to_global(self); let mut zoomed_output_geo = output_geometry.to_f64(); zoomed_output_geo.loc -= focal_point; zoomed_output_geo = zoomed_output_geo.downscale(level);