From 1b0c426c17f156110d14959642d42168ce5571ee Mon Sep 17 00:00:00 2001
From: Rasmus Moorats <xx@nns.ee>
Date: Wed, 21 May 2025 12:38:27 +0300
Subject: [PATCH] fix scaling (at least for integer scaling, fractional is
 still broken)

---
 src/main.rs | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 261df1d..acb0483 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -387,11 +387,16 @@ impl Dispatch<ZwlrScreencopyFrameV1, ()> for AppState {
 
                     if let (Some(surface_data), Some(_)) = (state.surfaces.get_mut(&data.output), &state.shm) {
                         if let Some(buffer) = &data.buffer {
-                            let transform = state.output_info
-                                .get(&data.output)
+                            let output_info = state.output_info
+                                .get(&data.output);
+
+                            let transform = output_info
                                 .map_or(Transform::Normal, |info| info.transform);
+                            let scale = output_info
+                                .map_or(1, |info| info.scale);
 
                             surface_data.surface.set_buffer_transform(transform);
+                            surface_data.surface.set_buffer_scale(scale);
 
                             if data.y_inverted {
                                 surface_data.surface.set_buffer_transform(Transform::Flipped180);
@@ -522,12 +527,15 @@ fn main() {
         let compositor = app_state.compositor.as_ref().unwrap();
         let layer_shell = app_state.layer_shell.as_ref().unwrap();
 
-        let transform = app_state.output_info
-            .get(output)
+        let output_info = app_state.output_info.get(output);
+        let transform = output_info
             .map_or(Transform::Normal, |info| info.transform);
+        let scale = output_info
+            .map_or(1, |info| info.scale);
 
         let surface = compositor.create_surface(&qh, ());
         surface.set_buffer_transform(transform);
+        surface.set_buffer_scale(scale);
 
         let layer_surface = layer_shell.get_layer_surface(
             &surface,