From 3aec148f16084765941a6da932e7ab64e1b2c04c Mon Sep 17 00:00:00 2001 From: Peter Fajdiga Date: Sat, 26 Oct 2024 21:19:17 +0200 Subject: [PATCH] Actions.columnsWidthEqualize: use `fillSpace` --- src/lib/keyBindings/Actions.ts | 17 ++++++++++++++++- src/lib/layout/Desktop.ts | 34 ---------------------------------- 2 files changed, 16 insertions(+), 35 deletions(-) diff --git a/src/lib/keyBindings/Actions.ts b/src/lib/keyBindings/Actions.ts index d1574a8..809c8b5 100644 --- a/src/lib/keyBindings/Actions.ts +++ b/src/lib/keyBindings/Actions.ts @@ -190,7 +190,22 @@ class Actions { } public readonly columnsWidthEqualize = (cm: ClientManager, dm: DesktopManager) => { - dm.getCurrentDesktop().equalizeVisibleColumnsWidths(); + const desktop = dm.getCurrentDesktop(); + const visibleRange = desktop.getCurrentVisibleRange(); + const visibleColumns = Array.from(desktop.grid.getVisibleColumns(visibleRange, true)); + + const availableSpace = desktop.tilingArea.width; + const gapsWidth = desktop.grid.config.gapsInnerHorizontal * (visibleColumns.length-1); + const widths = fillSpace( + availableSpace - gapsWidth, + visibleColumns.map(column => ({ min: column.getMinWidth(), max: column.getMaxWidth() })), + ); + visibleColumns.forEach((column, index) => column.setWidth(widths[index], true)); + + desktop.scrollCenterRange(Desktop.RangeImpl.fromRanges( + visibleColumns[0], + visibleColumns[visibleColumns.length - 1], + )); } public readonly columnsSqueezeLeft = (cm: ClientManager, dm: DesktopManager, window: Window, focusedColumn: Column, grid: Grid) => { diff --git a/src/lib/layout/Desktop.ts b/src/lib/layout/Desktop.ts index 7378553..52b6018 100644 --- a/src/lib/layout/Desktop.ts +++ b/src/lib/layout/Desktop.ts @@ -125,40 +125,6 @@ class Desktop { this.setScroll(this.scrollX + dx, force); } - public equalizeVisibleColumnsWidths() { - const visibleRange = this.getCurrentVisibleRange(); - const visibleColumns = Array.from(this.grid.getVisibleColumns(visibleRange, true)); - - let remainingWidth = this.tilingArea.width - (visibleColumns.length-1) * this.grid.config.gapsInnerHorizontal; - let remainingColumns = visibleColumns.length; - - const minWidths = visibleColumns.map(column => column.getMinWidth()).sort((a, b) => b - a); - for (const minWidth of minWidths) { - if (minWidth > remainingWidth / remainingColumns) { - remainingWidth -= minWidth; - remainingColumns--; - } - } - - const avgWidth = remainingWidth / remainingColumns; - for (const column of visibleColumns) { - const minWidth = column.getMinWidth(); - if (minWidth > avgWidth) { - column.setWidth(minWidth, true); - } else { - const columnWidth = Math.round(remainingWidth / remainingColumns); - column.setWidth(columnWidth, true); - remainingWidth -= column.getWidth(); - remainingColumns--; - } - } - - this.scrollCenterRange(Desktop.RangeImpl.fromRanges( - visibleColumns[0], - visibleColumns[visibleColumns.length - 1], - )); - } - public arrange() { // TODO (optimization): only arrange visible windows this.updateArea();