From 9d6037b94c72deb0f5d928d3f68acc287d8baed2 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 1 May 2025 10:30:50 +0300 Subject: Normalize workspace shadows to 1080 px tall screen, adjust defaults Workspace gaps are dependent on screen size, so it makes sense to make shadows depend on the screen size to, to avoid them filling more or less of the gap. --- src/layout/workspace.rs | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index fe9ce585..6ae045f7 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -235,6 +235,9 @@ impl Workspace { options.clone(), ); + let shadow_config = + compute_workspace_shadow_config(options.overview.workspace_shadow, view_size); + Self { scrolling, floating, @@ -244,7 +247,7 @@ impl Workspace { transform: output.current_transform(), view_size, working_area, - shadow: Shadow::new(niri_config::Shadow::from(options.overview.workspace_shadow)), + shadow: Shadow::new(shadow_config), output: Some(output), clock, base_options, @@ -289,6 +292,9 @@ impl Workspace { options.clone(), ); + let shadow_config = + compute_workspace_shadow_config(options.overview.workspace_shadow, view_size); + Self { scrolling, floating, @@ -299,7 +305,7 @@ impl Workspace { original_output, view_size, working_area, - shadow: Shadow::new(niri_config::Shadow::from(options.overview.workspace_shadow)), + shadow: Shadow::new(shadow_config), clock, base_options, options, @@ -380,7 +386,8 @@ impl Workspace { options.clone(), ); - let shadow_config = niri_config::Shadow::from(options.overview.workspace_shadow); + let shadow_config = + compute_workspace_shadow_config(options.overview.workspace_shadow, self.view_size); self.shadow.update_config(shadow_config); self.base_options = base_options; @@ -522,6 +529,10 @@ impl Workspace { scale.fractional_scale(), self.options.clone(), ); + + let shadow_config = + compute_workspace_shadow_config(self.options.overview.workspace_shadow, size); + self.shadow.update_config(shadow_config); } if scale_transform_changed { @@ -1813,3 +1824,20 @@ impl Workspace { pub(super) fn compute_working_area(output: &Output) -> Rectangle { layer_map_for_output(output).non_exclusive_zone().to_f64() } + +fn compute_workspace_shadow_config( + config: niri_config::WorkspaceShadow, + view_size: Size, +) -> niri_config::Shadow { + // Gaps between workspaces are a multiple of the view height, so shadow settings should also be + // normalized to the view height to prevent them from overlapping on lower resolutions. + let norm = view_size.h / 1080.; + + let mut config = niri_config::Shadow::from(config); + config.softness.0 *= norm; + config.spread.0 *= norm; + config.offset.x.0 *= norm; + config.offset.y.0 *= norm; + + config +} -- cgit