From cf933dec6cbb560ad4b9124b2c1fbe63ecf09e91 Mon Sep 17 00:00:00 2001 From: Eric Smith <5d@fifthdread.com> Date: Wed, 20 May 2026 14:08:43 -0400 Subject: [PATCH] fix grid: build minimum 1x1 during initial _ready before layout resolves --- scripts/dashboard_grid.gd | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/scripts/dashboard_grid.gd b/scripts/dashboard_grid.gd index 0768972..f41b416 100644 --- a/scripts/dashboard_grid.gd +++ b/scripts/dashboard_grid.gd @@ -33,8 +33,7 @@ func _ready() -> void: mouse_filter = Control.MOUSE_FILTER_STOP resized.connect(_rebuild_grid) gui_input.connect(_on_gui_input) - # Defer initial build so layout is resolved and size is valid - call_deferred("_rebuild_grid") + _rebuild_grid() func _on_gui_input(event: InputEvent) -> void: @@ -292,8 +291,25 @@ func _rebuild_grid() -> void: _cancel_drag() var avail := size - Vector2(margin * 2.0, margin * 2.0) + + # If layout hasn't resolved yet (size too small), build a minimum 1x1 grid + # so modules can be placed. The resized signal will recalculate later. if avail.x < cell_min_size.x or avail.y < cell_min_size.y: + if _cells.size() > 0: + _layout_cells() + return + var new_cols := 1 + var new_rows := 1 + if new_cols == columns and new_rows == rows and _cells.size() > 0: + _layout_cells() + return + columns = new_cols + rows = new_rows + _save_modules() _teardown_cells() + _build_cells() + _restore_modules() + _layout_cells() return var new_cols := maxi(1, int(avail.x / (cell_min_size.x + cell_spacing))) @@ -373,12 +389,12 @@ func _layout_cells() -> void: if rows == 0 or columns == 0: return - var inner_w := size.x - margin * 2.0 - cell_spacing - var inner_h := size.y - margin * 2.0 - cell_spacing + var inner_w := maxf(0.0, size.x - margin * 2.0 - cell_spacing) + var inner_h := maxf(0.0, size.y - margin * 2.0 - cell_spacing) var gap_x := cell_spacing * (columns - 1) var gap_y := cell_spacing * (rows - 1) - var cell_w := (inner_w - gap_x) / columns - var cell_h := (inner_h - gap_y) / rows + var cell_w := maxf(1.0, (inner_w - gap_x) / columns) + var cell_h := maxf(1.0, (inner_h - gap_y) / rows) for row in range(rows): for col in range(columns):