diff --git a/example/main.odin b/example/main.odin index 83eca18..d72892f 100644 --- a/example/main.odin +++ b/example/main.odin @@ -28,7 +28,7 @@ main :: proc() { for !rl.WindowShouldClose() { ui.start(&ctx, origin = {0, 0}, size = {WINDOW_WIDTH, WINDOW_HEIGHT}) - for i in 0..<9 { + for i in 0..<7 { ui.container_begin(dimensions = {ui.SIZE_AUTO, ui.Size_Percentage(0.1)}, config = inner_container_config) for j in 0..<10 { config := button_config @@ -38,6 +38,23 @@ main :: proc() { } ui.container_end() } + + ui.container_begin(dimensions = {ui.SIZE_AUTO, ui.Size_Percentage(0.2)}, config = inner_container_config) + for j in 0..<10 { + config := button_config + config.label = fmt.ctprintf("%d", 70 + j) + ui.button(dimensions = {ui.Size_Pixels(64.0), ui.Size_Percentage(0.5)}, config = config) + ui.same_line() + } + ctx.same_line = false + for j in 0..<10 { + config := button_config + config.label = fmt.ctprintf("%d", 80 + j) + ui.button(dimensions = {ui.Size_Pixels(64.0), ui.Size_Percentage(0.5)}, config = config) + ui.same_line() + } + ui.container_end() + ui.container_begin(dimensions = {ui.Size_Percentage(1.0), ui.Size_PercentageRemainder(1.0)}, config = inner_container_config) for j in 0..<10 { config := button_config diff --git a/ui.odin b/ui.odin index 232c86f..d589aa0 100644 --- a/ui.odin +++ b/ui.odin @@ -87,13 +87,7 @@ start :: proc(ui_context: ^Context, origin: v2, size: v2) { clear(&ctx.elements) clear(&ctx.containers) clear(&ctx.container_last_element) - append(&ctx.elements, Element{ - area = {**origin, **size}, - label = "", - color = {0, 0, 0, 0}, - margin = {}, - padding = {}, - type = .Container}) + append(&ctx.elements, Element{area = {**origin, **size}, type = .Container}) append(&ctx.containers, 0) append(&ctx.container_last_element, -1) } @@ -162,12 +156,6 @@ input_float :: proc(dimensions: Dimensions, config: ElementConfiguration, data: return _append_element({area = area, config = config, type = .InputFloat, data = {float_input_data = data}, dimensions = dimensions}) } -_append_element :: proc(element: Element) -> ^Element { - append(&ctx.elements, element) - ctx.container_last_element[len(ctx.containers) - 1] = len(ctx.elements) - 1 - return &ctx.elements[len(ctx.elements) - 1] -} - get_element_outer_area :: proc(element: Element) -> rect2 { return rect_grow(element.area, element.margin * 2.0) } @@ -176,6 +164,12 @@ get_element_inner_area :: proc(element: Element) -> rect2 { return rect_grow(element.area, -element.padding * 2.0) } +_append_element :: proc(element: Element) -> ^Element { + append(&ctx.elements, element) + ctx.container_last_element[len(ctx.containers) - 1] = len(ctx.elements) - 1 + return &ctx.elements[len(ctx.elements) - 1] +} + _resolve_element_area :: proc(dimensions: Dimensions, margin: v2) -> rect2 { outer_position := _resolve_element_outer_position() outer_size := _resolve_element_outer_size(dimensions) @@ -183,15 +177,16 @@ _resolve_element_area :: proc(dimensions: Dimensions, margin: v2) -> rect2 { } _resolve_element_outer_position :: proc() -> v2 { + defer {ctx.same_line = false} if alignment_element := _element_container_previous(); alignment_element != nil { - area: v2 if ctx.same_line { - area = rect_get_tr(get_element_outer_area(alignment_element^)) + return rect_get_tr(get_element_outer_area(alignment_element^)) } else { - area = rect_get_bl(get_element_outer_area(alignment_element^)) + return { + get_element_inner_area(_container_current()^).x, + rect_get_bl(get_element_outer_area(alignment_element^)).y + } } - ctx.same_line = false - return area } return rect_get_tl(get_element_inner_area(_element_previous()^)) }