diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-09-20 12:57:41 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-10-02 09:33:08 +0300 |
| commit | 1fa9dd32ed028c88248644a13421c098fef72894 (patch) | |
| tree | e6ea60b5b0b7ebc390ecc623b091bbe3dc40fdf0 /src/layout | |
| parent | 2781d3a74338806f631acda99e9f702b1b59a3e6 (diff) | |
| download | niri-1fa9dd32ed028c88248644a13421c098fef72894.tar.gz niri-1fa9dd32ed028c88248644a13421c098fef72894.tar.bz2 niri-1fa9dd32ed028c88248644a13421c098fef72894.zip | |
config: Split Layout from LayoutPart
Diffstat (limited to 'src/layout')
| -rw-r--r-- | src/layout/floating.rs | 4 | ||||
| -rw-r--r-- | src/layout/focus_ring.rs | 4 | ||||
| -rw-r--r-- | src/layout/insert_hint_element.rs | 6 | ||||
| -rw-r--r-- | src/layout/mod.rs | 24 | ||||
| -rw-r--r-- | src/layout/scrolling.rs | 8 | ||||
| -rw-r--r-- | src/layout/shadow.rs | 4 | ||||
| -rw-r--r-- | src/layout/tab_indicator.rs | 16 | ||||
| -rw-r--r-- | src/layout/tests.rs | 33 | ||||
| -rw-r--r-- | src/layout/tests/fullscreen.rs | 2 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 4 |
10 files changed, 51 insertions, 54 deletions
diff --git a/src/layout/floating.rs b/src/layout/floating.rs index 8854ca17..5f5767ad 100644 --- a/src/layout/floating.rs +++ b/src/layout/floating.rs @@ -1227,7 +1227,7 @@ impl<W: LayoutElement> FloatingSpace<W> { let size = match resolve_preset_size(size, working_area_size) { ResolvedSize::Tile(mut size) => { if !border.off { - size -= border.width.0 * 2.; + size -= border.width * 2.; } size } @@ -1365,7 +1365,7 @@ fn compute_toplevel_bounds( ) -> Size<i32, Logical> { let mut border = 0.; if !border_config.off { - border = border_config.width.0 * 2.; + border = border_config.width * 2.; } Size::from(( diff --git a/src/layout/focus_ring.rs b/src/layout/focus_ring.rs index 5cb797e0..89fd058b 100644 --- a/src/layout/focus_ring.rs +++ b/src/layout/focus_ring.rs @@ -65,7 +65,7 @@ impl FocusRing { scale: f64, alpha: f32, ) { - let width = self.config.width.0; + let width = self.config.width; self.full_size = win_size + Size::from((width, width)).upscale(2.); let color = if is_urgent { @@ -261,7 +261,7 @@ impl FocusRing { } pub fn width(&self) -> f64 { - self.config.width.0 + self.config.width } pub fn is_off(&self) -> bool { diff --git a/src/layout/insert_hint_element.rs b/src/layout/insert_hint_element.rs index 92f9b480..818aeb7e 100644 --- a/src/layout/insert_hint_element.rs +++ b/src/layout/insert_hint_element.rs @@ -1,4 +1,4 @@ -use niri_config::{CornerRadius, FloatOrInt}; +use niri_config::CornerRadius; use smithay::utils::{Logical, Point, Rectangle, Size}; use super::focus_ring::{FocusRing, FocusRingRenderElement}; @@ -16,7 +16,7 @@ impl InsertHintElement { Self { inner: FocusRing::new(niri_config::FocusRing { off: config.off, - width: FloatOrInt(0.), + width: 0., active_color: config.color, inactive_color: config.color, urgent_color: config.color, @@ -30,7 +30,7 @@ impl InsertHintElement { pub fn update_config(&mut self, config: niri_config::InsertHint) { self.inner.update_config(niri_config::FocusRing { off: config.off, - width: FloatOrInt(0.), + width: 0., active_color: config.color, inactive_color: config.color, urgent_color: config.color, diff --git a/src/layout/mod.rs b/src/layout/mod.rs index c7d8a6fd..40f1deed 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -40,8 +40,8 @@ use std::time::Duration; use monitor::{InsertHint, InsertPosition, InsertWorkspace, MonitorAddWindowTarget}; use niri_config::utils::MergeWith as _; use niri_config::{ - CenterFocusedColumn, Config, CornerRadius, FloatOrInt, PresetSize, Struts, - Workspace as WorkspaceConfig, WorkspaceReference, + CenterFocusedColumn, Config, CornerRadius, PresetSize, Struts, Workspace as WorkspaceConfig, + WorkspaceReference, }; use niri_ipc::{ColumnDisplay, PositionChange, SizeChange, WindowLayout}; use scrolling::{Column, ColumnWidth}; @@ -620,7 +620,7 @@ impl HitType { impl Options { fn from_config(config: &Config) -> Self { - let layout = &config.layout; + let layout = config.resolve_layout(); let preset_column_widths = if layout.preset_column_widths.is_empty() { Options::default().preset_column_widths @@ -633,16 +633,8 @@ impl Options { layout.preset_window_heights.clone() }; - // Missing default_column_width maps to Some(PresetSize::Proportion(0.5)), - // while present, but empty, maps to None. - let default_column_width = layout - .default_column_width - .as_ref() - .map(|w| w.0) - .unwrap_or(Some(PresetSize::Proportion(0.5))); - Self { - gaps: layout.gaps.0, + gaps: layout.gaps, struts: layout.struts, focus_ring: layout.focus_ring, border: layout.border, @@ -654,7 +646,7 @@ impl Options { empty_workspace_above_first: layout.empty_workspace_above_first, default_column_display: layout.default_column_display, preset_column_widths, - default_column_width, + default_column_width: layout.default_column_width, animations: config.animations.clone(), gestures: config.gestures, overview: config.overview, @@ -669,8 +661,8 @@ impl Options { let round = |logical: f64| round_logical_in_physical_max1(scale, logical); self.gaps = round(self.gaps); - self.focus_ring.width = FloatOrInt(round(self.focus_ring.width.0)); - self.border.width = FloatOrInt(round(self.border.width.0)); + self.focus_ring.width = round(self.focus_ring.width); + self.border.width = round(self.border.width); self } @@ -5252,7 +5244,7 @@ impl<W: LayoutElement> Layout<W> { let rules = window.rules(); let border = self.options.border.merged_with(&rules.border); if !border.off { - fixed += border.width.0 * 2.; + fixed += border.width * 2.; } ColumnWidth::Fixed(fixed) diff --git a/src/layout/scrolling.rs b/src/layout/scrolling.rs index 5f53ccee..52869024 100644 --- a/src/layout/scrolling.rs +++ b/src/layout/scrolling.rs @@ -488,7 +488,7 @@ impl<W: LayoutElement> ScrollingSpace<W> { let size = match resolve_preset_size(size, &self.options, working_size.w, extra.w) { ResolvedSize::Tile(mut size) => { if !border.off { - size -= border.width.0 * 2.; + size -= border.width * 2.; } size } @@ -502,14 +502,14 @@ impl<W: LayoutElement> ScrollingSpace<W> { let mut full_height = self.working_area.size.h - self.options.gaps * 2.; if !border.off { - full_height -= border.width.0 * 2.; + full_height -= border.width * 2.; } let height = if let Some(height) = height { let height = match resolve_preset_size(height, &self.options, working_size.h, extra.h) { ResolvedSize::Tile(mut size) => { if !border.off { - size -= border.width.0 * 2.; + size -= border.width * 2.; } size } @@ -5280,7 +5280,7 @@ fn compute_toplevel_bounds( ) -> Size<i32, Logical> { let mut border = 0.; if !border_config.off { - border = border_config.width.0 * 2.; + border = border_config.width * 2.; } Size::from(( diff --git a/src/layout/shadow.rs b/src/layout/shadow.rs index df018b7b..25082e3e 100644 --- a/src/layout/shadow.rs +++ b/src/layout/shadow.rs @@ -48,7 +48,7 @@ impl Shadow { // * We do not divide anything, only add, subtract and multiply by integers. // * At rendering time, tile positions are rounded to physical pixels. - let width = self.config.softness.0; + let width = self.config.softness; // Like in CSS box-shadow. let sigma = width / 2.; // Adjust width to draw all necessary pixels. @@ -57,7 +57,7 @@ impl Shadow { let offset = self.config.offset; let offset = Point::from((ceil(offset.x.0), ceil(offset.y.0))); - let spread = self.config.spread.0; + let spread = self.config.spread; let spread = ceil(spread.abs()).copysign(spread); let offset = offset - Point::from((spread, spread)); diff --git a/src/layout/tab_indicator.rs b/src/layout/tab_indicator.rs index e35874e8..45405ccc 100644 --- a/src/layout/tab_indicator.rs +++ b/src/layout/tab_indicator.rs @@ -83,10 +83,10 @@ impl TabIndicator { let progress = self.open_anim.as_ref().map_or(1., |a| a.value().max(0.)); - let width = round_max1(self.config.width.0); - let gap = self.config.gap.0; + let width = round_max1(self.config.width); + let gap = self.config.gap; let gap = round_max1(gap.abs()).copysign(gap); - let gaps_between = round_max1(self.config.gaps_between_tabs.0); + let gaps_between = round_max1(self.config.gaps_between_tabs); let position = self.config.position; let side = match position { @@ -104,7 +104,7 @@ impl TabIndicator { let px_per_tab = (length + gaps_between) / count as f64 - gaps_between; let px_per_tab = px_per_tab * progress; - let gaps_between = round(self.config.gaps_between_tabs.0 * progress); + let gaps_between = round(self.config.gaps_between_tabs * progress); let length = count as f64 * (px_per_tab + gaps_between) - gaps_between; let px_per_tab = floor_logical_in_physical_max1(scale, px_per_tab); @@ -185,8 +185,8 @@ impl TabIndicator { self.shader_locs.resize_with(count, Default::default); let position = self.config.position; - let radius = self.config.corner_radius.0 as f32; - let shared_rounded_corners = self.config.gaps_between_tabs.0 == 0.; + let radius = self.config.corner_radius as f32; + let shared_rounded_corners = self.config.gaps_between_tabs == 0.; let mut tabs_left = tab_count; let rects = self.tab_rects(area, count, scale); @@ -317,8 +317,8 @@ impl TabIndicator { } let round = |logical: f64| round_logical_in_physical(scale, logical); - let width = round(self.config.width.0); - let gap = round(self.config.gap.0); + let width = round(self.config.width); + let gap = round(self.config.gap); // No, I am *not* falling into the rabbit hole of "what if the tab indicator is wide enough // that it peeks from the other side of the window". diff --git a/src/layout/tests.rs b/src/layout/tests.rs index 4afa5364..1c071eb0 100644 --- a/src/layout/tests.rs +++ b/src/layout/tests.rs @@ -2067,7 +2067,7 @@ fn large_negative_height_change() { let mut options = Options::default(); options.border.off = false; - options.border.width = FloatOrInt(1.); + options.border.width = 1.; check_ops_with_options(options, ops); } @@ -2086,7 +2086,7 @@ fn large_max_size() { let mut options = Options::default(); options.border.off = false; - options.border.width = FloatOrInt(1.); + options.border.width = 1.; check_ops_with_options(options, ops); } @@ -2292,8 +2292,9 @@ fn removing_all_outputs_preserves_empty_named_workspaces() { #[test] fn config_change_updates_cached_sizes() { let mut config = Config::default(); - config.layout.border.off = false; - config.layout.border.width = FloatOrInt(2.); + let border = config.layout.border.get_or_insert_with(Default::default); + border.off = false; + border.width = Some(FloatOrInt(2.)); let mut layout = Layout::new(Clock::default(), &config); @@ -2305,7 +2306,11 @@ fn config_change_updates_cached_sizes() { } .apply(&mut layout); - config.layout.border.width = FloatOrInt(4.); + config + .layout + .border + .get_or_insert_with(Default::default) + .width = Some(FloatOrInt(4.)); layout.update_config(&config); layout.verify_invariants(); @@ -2314,7 +2319,7 @@ fn config_change_updates_cached_sizes() { #[test] fn preset_height_change_removes_preset() { let mut config = Config::default(); - config.layout.preset_window_heights = vec![PresetSize::Fixed(1), PresetSize::Fixed(2)]; + config.layout.preset_window_heights = Some(vec![PresetSize::Fixed(1), PresetSize::Fixed(2)]); let mut layout = Layout::new(Clock::default(), &config); @@ -2335,7 +2340,7 @@ fn preset_height_change_removes_preset() { } // Leave only one. - config.layout.preset_window_heights = vec![PresetSize::Fixed(1)]; + config.layout.preset_window_heights = Some(vec![PresetSize::Fixed(1)]); layout.update_config(&config); @@ -2424,7 +2429,7 @@ fn fixed_height_takes_max_non_auto_into_account() { let options = Options { border: niri_config::Border { off: false, - width: niri_config::FloatOrInt(4.), + width: 4., ..Default::default() }, gaps: 0., @@ -3173,7 +3178,7 @@ fn preset_column_width_fixed_correct_with_border() { preset_column_widths: vec![PresetSize::Fixed(500)], border: niri_config::Border { off: false, - width: FloatOrInt(5.), + width: 5., ..Default::default() }, ..Default::default() @@ -3408,7 +3413,7 @@ prop_compose! { ) -> niri_config::FocusRing { niri_config::FocusRing { off, - width: FloatOrInt(width), + width, ..Default::default() } } @@ -3421,7 +3426,7 @@ prop_compose! { ) -> niri_config::Border { niri_config::Border { off, - width: FloatOrInt(width), + width, ..Default::default() } } @@ -3434,7 +3439,7 @@ prop_compose! { ) -> niri_config::Shadow { niri_config::Shadow { on, - softness: FloatOrInt(width), + softness: width, ..Default::default() } } @@ -3454,8 +3459,8 @@ prop_compose! { off, hide_when_single_tab, place_within_column, - width: FloatOrInt(width), - gap: FloatOrInt(gap), + width, + gap, length: TabIndicatorLength { total_proportion: Some(length) }, position, ..Default::default() diff --git a/src/layout/tests/fullscreen.rs b/src/layout/tests/fullscreen.rs index 4d9d79ca..904595f5 100644 --- a/src/layout/tests/fullscreen.rs +++ b/src/layout/tests/fullscreen.rs @@ -190,7 +190,7 @@ fn unfullscreen_with_large_border() { let options = Options { border: niri_config::Border { off: false, - width: niri_config::FloatOrInt(10000.), + width: 10000., ..Default::default() }, ..Default::default() diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index d2340949..8c1c36d3 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1859,8 +1859,8 @@ fn compute_workspace_shadow_config( let norm = view_size.h / 1080.; let mut config = niri_config::Shadow::from(config); - config.softness.0 *= norm; - config.spread.0 *= norm; + config.softness *= norm; + config.spread *= norm; config.offset.x.0 *= norm; config.offset.y.0 *= norm; |
