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
|
mouse_filter = Control.MOUSE_FILTER_STOP
|
||||||
resized.connect(_rebuild_grid)
|
resized.connect(_rebuild_grid)
|
||||||
gui_input.connect(_on_gui_input)
|
gui_input.connect(_on_gui_input)
|
||||||
# Defer initial build so layout is resolved and size is valid
|
_rebuild_grid()
|
||||||
call_deferred("_rebuild_grid")
|
|
||||||
|
|
||||||
|
|
||||||
func _on_gui_input(event: InputEvent) -> void:
|
func _on_gui_input(event: InputEvent) -> void:
|
||||||
|
|
@ -292,8 +291,25 @@ func _rebuild_grid() -> void:
|
||||||
_cancel_drag()
|
_cancel_drag()
|
||||||
|
|
||||||
var avail := size - Vector2(margin * 2.0, margin * 2.0)
|
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 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()
|
_teardown_cells()
|
||||||
|
_build_cells()
|
||||||
|
_restore_modules()
|
||||||
|
_layout_cells()
|
||||||
return
|
return
|
||||||
|
|
||||||
var new_cols := maxi(1, int(avail.x / (cell_min_size.x + cell_spacing)))
|
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:
|
if rows == 0 or columns == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
var inner_w := size.x - margin * 2.0 - cell_spacing
|
var inner_w := maxf(0.0, size.x - margin * 2.0 - cell_spacing)
|
||||||
var inner_h := size.y - 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_x := cell_spacing * (columns - 1)
|
||||||
var gap_y := cell_spacing * (rows - 1)
|
var gap_y := cell_spacing * (rows - 1)
|
||||||
var cell_w := (inner_w - gap_x) / columns
|
var cell_w := maxf(1.0, (inner_w - gap_x) / columns)
|
||||||
var cell_h := (inner_h - gap_y) / rows
|
var cell_h := maxf(1.0, (inner_h - gap_y) / rows)
|
||||||
|
|
||||||
for row in range(rows):
|
for row in range(rows):
|
||||||
for col in range(columns):
|
for col in range(columns):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue