From 69907f123d2f17bc1f9a04c0bda7430f250404de Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 16 Jan 2024 09:45:47 +0400 Subject: Add live-reload of output scales --- src/layout/mod.rs | 3 +++ src/layout/workspace.rs | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src/layout') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 539177cb..be1ed6b5 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -637,6 +637,8 @@ impl Layout { } pub fn update_output_size(&mut self, output: &Output) { + let _span = tracy_client::span!("Layout::update_output_size"); + let MonitorSet::Normal { monitors, .. } = &mut self.monitor_set else { panic!() }; @@ -648,6 +650,7 @@ impl Layout { for ws in &mut mon.workspaces { ws.set_view_size(view_size, working_area); + ws.update_output_scale_transform(); } break; diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index 2a033a2c..dfcfb68b 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -308,7 +308,7 @@ impl Workspace { fn enter_output_for_window(&self, window: &W) { if let Some(output) = &self.output { - prepare_for_output(window, output); + set_preferred_scale_transform(window, output); window.output_enter(output); } } @@ -330,6 +330,15 @@ impl Workspace { } } + pub fn update_output_scale_transform(&mut self) { + let Some(output) = self.output.as_ref() else { + return; + }; + for window in self.windows() { + set_preferred_scale_transform(window, output); + } + } + fn toplevel_bounds(&self) -> Size { let mut border = 0; if !self.options.border.off { @@ -363,7 +372,7 @@ impl Workspace { let bounds = self.toplevel_bounds(); if let Some(output) = self.output.as_ref() { - prepare_for_output(window, output); + set_preferred_scale_transform(window, output); } window.toplevel().with_pending_state(|state| { @@ -1626,7 +1635,8 @@ fn compute_new_view_offset( } } -fn prepare_for_output(window: &impl LayoutElement, output: &Output) { +fn set_preferred_scale_transform(window: &impl LayoutElement, output: &Output) { + // FIXME: cache this on the workspace. let scale = output.current_scale().integer_scale(); let transform = output.current_transform(); window.set_preferred_scale_transform(scale, transform); -- cgit