fix grid: build minimum 1x1 during initial _ready before layout resolves
This commit is contained in:
parent
dd467d8fbb
commit
cf933dec6c
1 changed files with 22 additions and 6 deletions
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue