Auto layout bug fix

This commit is contained in:
Synthasmagoria 2026-07-30 12:33:28 +02:00
commit 1e00b977d4

40
ui.odin
View file

@ -117,11 +117,21 @@ container_end :: proc() {
container_index := pop(&ctx.containers)
container := &ctx.elements[container_index]
pop(&ctx.container_last_element)
if _, width_is_auto := container.dimensions.width.(Size_Auto); width_is_auto {
container.area.width = rect_get_br(get_element_outer_area(_element_previous()^)).x - container.area.x
}
if _, height_is_auto := container.dimensions.height.(Size_Auto); height_is_auto {
container.area.height = rect_get_br(get_element_outer_area(_element_previous()^)).y - container.area.y
_, width_is_auto := container.dimensions.width.(Size_Auto)
_, height_is_auto := container.dimensions.height.(Size_Auto)
if width_is_auto || height_is_auto {
br := v2{min(f32), min(f32)}
for element in ctx.elements[container_index:] {
element_br := rect_get_br(get_element_outer_area(element))
br = {max(br.x, element_br.x), max(br.y, element_br.y)}
}
if width_is_auto {
container.area.width = br.x - container.area.x
}
if height_is_auto {
container.area.height = br.y - container.area.y
}
}
ctx.same_line = false
}
@ -141,19 +151,33 @@ assert_no_dimensions_percentage_in_auto_container :: proc(dimensions: Dimensions
button :: proc(dimensions: Dimensions, config: ElementConfiguration) -> ^Element {
assert_no_dimensions_percentage_in_auto_container(dimensions)
area := _resolve_element_area(dimensions, config.margin)
return _append_element({area = area, config = config, type = .Button, dimensions = dimensions})
return _append_element({
area = area,
config = config,
type = .Button,
dimensions = dimensions})
}
slider :: proc(dimensions: Dimensions, config: ElementConfiguration, data: ElementData_FloatInput) -> ^Element {
assert_no_dimensions_percentage_in_auto_container(dimensions)
area := _resolve_element_area(dimensions, config.margin)
return _append_element({area = area, config = config, type = .Slider, data = {float_input_data = data}, dimensions = dimensions})
return _append_element({
area = area,
config = config,
type = .Slider,
data = {float_input_data = data},
dimensions = dimensions})
}
input_float :: proc(dimensions: Dimensions, config: ElementConfiguration, data: ElementData_FloatInput) -> ^Element {
assert_no_dimensions_percentage_in_auto_container(dimensions)
area := _resolve_element_area(dimensions, config.margin)
return _append_element({area = area, config = config, type = .InputFloat, data = {float_input_data = data}, dimensions = dimensions})
return _append_element({
area = area,
config = config,
type = .InputFloat,
data = {float_input_data = data},
dimensions = dimensions})
}
get_element_outer_area :: proc(element: Element) -> rect2 {