git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit152dbabc09d2ec08378bf201018da88e467dbb62
parent1c3202d433
authorLucas Galante <[email protected]>
date2026-06-30 14:49
Hide off-screen windows during zoom and pan to optimize CPU/GPU overhead

 src/server/window_manager.rs | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/server/window_manager.rs b/src/server/window_manager.rs
index d8291b0..bed6464 100644
--- a/src/server/window_manager.rs
+++ b/src/server/window_manager.rs
@@ -1274,6 +1274,15 @@ fn get_closest_tag(x: f64, y: f64) -> i32 {
                     (*win_ptr).rendering_requested.y = final_y;
                     (*win_ptr).scale = self.desk_zoom;
 
+                    // Offscreen check
+                    let scaled_w = fw * self.desk_zoom;
+                    let scaled_h = fh * self.desk_zoom;
+                    let is_offscreen = (final_x as f64 + scaled_w + 50.0) < phys_x as f64
+                        || (final_x as f64 - 50.0) > (phys_x as f64 + viewport_w)
+                        || (final_y as f64 + scaled_h + 50.0) < phys_y as f64
+                        || (final_y as f64 - 50.0) > (phys_y as f64 + viewport_h);
+                    (*win_ptr).rendering_requested.hidden = is_offscreen;
+
                     (*win_ptr).wm_requested.dimensions = Some(crate::window::Dimensions {
                         width: fw as u32,
                         height: fh as u32,
@@ -1310,6 +1319,15 @@ fn get_closest_tag(x: f64, y: f64) -> i32 {
                     (*win_ptr).rendering_requested.y = final_y;
                     (*win_ptr).scale = self.desk_zoom;
 
+                    // Offscreen check
+                    let scaled_w = fw as f64 * self.desk_zoom;
+                    let scaled_h = fh as f64 * self.desk_zoom;
+                    let is_offscreen = (final_x as f64 + scaled_w + 50.0) < phys_x as f64
+                        || (final_x as f64 - 50.0) > (phys_x as f64 + viewport_w)
+                        || (final_y as f64 + scaled_h + 50.0) < phys_y as f64
+                        || (final_y as f64 - 50.0) > (phys_y as f64 + viewport_h);
+                    (*win_ptr).rendering_requested.hidden = is_offscreen;
+
                     (*win_ptr).wm_requested.dimensions = Some(crate::window::Dimensions {
                         width: fw as u32,
                         height: fh as u32,