feat(wm): add layout_options with ratios support

Added customizable split ratios for layouts via layout_options
configuration. Users can now specify column_ratios and row_ratios arrays
to control window sizing in various layouts.

Ratios are validated at config load time: values are clamped between 0.1
and 0.9 to prevent zero-sized windows, and arrays are automatically
truncated when their cumulative sum would reach or exceed 1.0. This
ensures there's always remaining space for additional windows.

Ratio support varies by layout:

- Columns and Rows layouts use the full arrays for each column/row width
  or height
- VerticalStack, RightMainVerticalStack, and HorizontalStack use the
  first ratio for the primary split and the remaining ratios for stack
  windows
- BSP uses the first value from each array for horizontal and vertical
  splits respectively
- Grid only supports column_ratios since row counts vary dynamically.
- UltrawideVerticalStack uses the first two column ratios for center and
  left columns.

All ratio-related values are now defined as constants in
default_layout.rs: MAX_RATIOS (5), MIN_RATIO (0.1), MAX_RATIO (0.9),
DEFAULT_RATIO (0.5), and DEFAULT_SECONDARY_RATIO (0.25 for
UltrawideVerticalStack).
This commit is contained in:
Csaba
2026-02-04 09:31:48 +01:00
committed by LGUG2Z
parent 5946caaf92
commit 22e8a79833
11 changed files with 1706 additions and 55 deletions

View File

@@ -59,7 +59,7 @@
"null"
],
"format": "float",
"default": 50.0
"default": 50
},
"icon_scale": {
"description": "Scale of the icons relative to the font_size [[1.0-2.0]]",
@@ -68,7 +68,7 @@
"null"
],
"format": "float",
"default": 1.399999976158142
"default": 1.4
},
"left_widgets": {
"description": "Left side widgets (ordered left-to-right)",
@@ -99,7 +99,15 @@
},
"monitor": {
"description": "The monitor index or the full monitor options",
"$ref": "#/$defs/MonitorConfigOrIndex"
"anyOf": [
{
"$ref": "#/$defs/MonitorConfigOrIndex"
},
{
"type": "null"
}
],
"default": 0
},
"mouse": {
"description": "Options for mouse interaction on the bar",
@@ -174,7 +182,6 @@
}
},
"required": [
"monitor",
"left_widgets",
"right_widgets"
],