Files
GGJ26/addons/resources_spreadsheet_view/main_screen/custom_grid_container.gd
minimata 158e18f1fe
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 8s
Create tag and build when new code gets to main / Export (push) Successful in 1m13s
Added resource table plugin
2026-01-31 10:23:20 +01:00

74 lines
2.0 KiB
GDScript

@tool
extends Container
var visible_column_minsizes : Array = []:
set(v):
visible_column_minsizes = v
queue_sort()
var visible_column_positions : Array[float] = []
var _cached_minimum_size := Vector2.ZERO
func _notification(what : int) -> void:
if what == NOTIFICATION_SORT_CHILDREN:
var visible_children : Array[Control] = []
for x in get_children():
if x is Control and x.visible:
visible_children.append(x)
sort_children(visible_children)
func _get_minimum_size() -> Vector2:
return _cached_minimum_size
func get_visible_column_position(index : int):
pass
func sort_children(children : Array[Control]) -> void:
var column_count := visible_column_minsizes.size()
if column_count == 0:
return
var column_minsizes : Array[float] = []
var row_minsizes : Array[float] = []
column_minsizes.resize(column_count)
row_minsizes.resize(children.size() / column_count + 1)
for i in visible_column_minsizes.size():
column_minsizes[i] = visible_column_minsizes[i]
var current_cell := Vector2i.ZERO
for x in children:
var minsize := x.get_combined_minimum_size()
column_minsizes[current_cell.x] = maxf(column_minsizes[current_cell.x], minsize.x)
row_minsizes[current_cell.y] = maxf(row_minsizes[current_cell.y], minsize.y)
current_cell.x += 1
if current_cell.x == column_count:
current_cell.x = 0
current_cell.y += 1
var current_pos := Vector2.ZERO
current_cell = Vector2i.ZERO
for x in children:
var cur_size := Vector2(column_minsizes[current_cell.x], row_minsizes[current_cell.y])
fit_child_in_rect(x, Rect2(current_pos, cur_size))
current_pos.x += cur_size.x
current_cell.x += 1
if current_cell.x == column_count:
current_cell.x = 0
current_cell.y += 1
current_pos.x = 0.0
current_pos.y += cur_size.y
_cached_minimum_size = Vector2.ZERO
visible_column_positions.resize(column_minsizes.size() + 1)
for i in column_minsizes.size():
_cached_minimum_size.x += column_minsizes[i]
visible_column_positions[i + 1] = _cached_minimum_size.x
for x in row_minsizes:
_cached_minimum_size.y += x