attempt to fix UI fill/childrensum behavior

memory-refactor
Patrick Cleavelin 2025-03-01 20:27:46 -06:00
parent b52a2c38fe
commit 895a269bce
3 changed files with 32 additions and 13 deletions

View File

@ -10,6 +10,7 @@ function M.open_file_search_window()
} }
Editor.spawn_floating_window(input, function(ctx) Editor.spawn_floating_window(input, function(ctx)
UI.push_parent(ctx, UI.push_rect(ctx, "window", true, true, UI.Vertical, UI.Fill, UI.ChildrenSum))
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 1") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 1")
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 2") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 2")
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 3") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 3")
@ -17,6 +18,7 @@ function M.open_file_search_window()
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 5") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 5")
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 6") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 6")
UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 7") UI.label(ctx, "eventually this will be a window where you can search through a bunch of files 7")
UI.pop_parent(ctx)
end) end)
end end

View File

@ -1363,12 +1363,12 @@ main :: proc() {
{ {
ui.spacer(&ui_context, "left spacer") ui.spacer(&ui_context, "left spacer")
halfway, _ := ui.push_rect(&ui_context, "halfway centered", false, false, .Vertical, {ui.SemanticSize{kind = .ChildrenSum}, ui.SemanticSize{kind = .Fill}}) halfway, _ := ui.push_rect(&ui_context, "halfway centered", false, true, .Vertical, {ui.SemanticSize{kind = .ChildrenSum}, ui.SemanticSize{kind = .Fill}})
ui.push_parent(&ui_context, halfway) ui.push_parent(&ui_context, halfway)
{ {
ui.spacer(&ui_context, "top spacer") ui.spacer(&ui_context, "top spacer")
centered_container, _ := ui.push_rect(&ui_context, "centered container", true, true, .Horizontal, {ui.SemanticSize{kind = .ChildrenSum, value=state.screen_width-32}, ui.SemanticSize{kind = .ChildrenSum, value = state.screen_height-32}}) centered_container, _ := ui.push_rect(&ui_context, "centered container", false, false, .Horizontal, {ui.SemanticSize{kind = .Fill}, ui.SemanticSize{kind = .ChildrenSum}})
ui.push_parent(&ui_context, centered_container) ui.push_parent(&ui_context, centered_container)
{ {
lua.run_ui_function(&state, &ui_context, window.lua_draw_proc); lua.run_ui_function(&state, &ui_context, window.lua_draw_proc);

View File

@ -98,6 +98,7 @@ Box :: struct {
axis: Axis, axis: Axis,
semantic_size: [2]SemanticSize, semantic_size: [2]SemanticSize,
computed_size: [2]int, computed_size: [2]int,
computed_child_size: [2]int,
computed_pos: [2]int, computed_pos: [2]int,
scroll_offset: int, scroll_offset: int,
@ -444,7 +445,7 @@ compute_layout :: proc(ctx: ^Context, canvas_size: [2]int, font_width: int, font
} }
} }
if compute_children { if true || compute_children {
iter := BoxIter { box.first, 0 }; iter := BoxIter { box.first, 0 };
child_size: [2]int = {0,0}; child_size: [2]int = {0,0};
@ -456,6 +457,15 @@ compute_layout :: proc(ctx: ^Context, canvas_size: [2]int, font_width: int, font
number_of_fills[box.axis] = 0; number_of_fills[box.axis] = 0;
our_size := box.computed_size; our_size := box.computed_size;
for axis in 0..<2 {
if box.semantic_size[axis].kind == .ChildrenSum {
if box.computed_size[axis] == 0 {
our_size[axis] = ancestor_size(ctx, box, Axis(axis))
} else {
our_size[axis] = box.computed_child_size[axis]
}
}
}
for child in iterate_box(&iter) { for child in iterate_box(&iter) {
if .Floating in child.flags { continue; } if .Floating in child.flags { continue; }
@ -482,8 +492,8 @@ compute_layout :: proc(ctx: ^Context, canvas_size: [2]int, font_width: int, font
} }
} }
if post_compute_size[Axis.Horizontal] { {
box.computed_size[Axis.Horizontal] = 0; box.computed_child_size[Axis.Horizontal] = 0;
iter := BoxIter { box.first, 0 }; iter := BoxIter { box.first, 0 };
for child in iterate_box(&iter) { for child in iterate_box(&iter) {
@ -491,18 +501,22 @@ compute_layout :: proc(ctx: ^Context, canvas_size: [2]int, font_width: int, font
switch box.axis { switch box.axis {
case .Horizontal: { case .Horizontal: {
box.computed_size[Axis.Horizontal] += child.computed_size[Axis.Horizontal]; box.computed_child_size[Axis.Horizontal] += child.computed_size[Axis.Horizontal];
} }
case .Vertical: { case .Vertical: {
if child.computed_size[Axis.Horizontal] > box.computed_size[Axis.Horizontal] { if child.computed_size[Axis.Horizontal] > box.computed_child_size[Axis.Horizontal] {
box.computed_size[Axis.Horizontal] = child.computed_size[Axis.Horizontal]; box.computed_child_size[Axis.Horizontal] = child.computed_size[Axis.Horizontal];
} }
} }
} }
} }
} }
if post_compute_size[Axis.Vertical] { if post_compute_size[Axis.Horizontal] {
box.computed_size[Axis.Vertical] = 0; box.computed_size[Axis.Horizontal] = box.computed_child_size[Axis.Horizontal];
}
{
box.computed_child_size[Axis.Vertical] = 0;
iter := BoxIter { box.first, 0 }; iter := BoxIter { box.first, 0 };
for child in iterate_box(&iter) { for child in iterate_box(&iter) {
@ -510,16 +524,19 @@ compute_layout :: proc(ctx: ^Context, canvas_size: [2]int, font_width: int, font
switch box.axis { switch box.axis {
case .Horizontal: { case .Horizontal: {
if child.computed_size[Axis.Vertical] > box.computed_size[Axis.Vertical] { if child.computed_size[Axis.Vertical] > box.computed_child_size[Axis.Vertical] {
box.computed_size[Axis.Vertical] = child.computed_size[Axis.Vertical]; box.computed_child_size[Axis.Vertical] = child.computed_size[Axis.Vertical];
} }
} }
case .Vertical: { case .Vertical: {
box.computed_size[Axis.Vertical] += child.computed_size[Axis.Vertical]; box.computed_child_size[Axis.Vertical] += child.computed_size[Axis.Vertical];
} }
} }
} }
} }
if post_compute_size[Axis.Vertical] {
box.computed_size[Axis.Vertical] = box.computed_child_size[Axis.Vertical];
}
} }
push_clip :: proc(ctx: ^Context, pos: [2]int, size: [2]int, inside_parent: bool = true) { push_clip :: proc(ctx: ^Context, pos: [2]int, size: [2]int, inside_parent: bool = true) {