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,