From baf7dcc52cbfdc2e92a4616114a44851fc2f5a44 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sun, 2 Aug 2026 13:19:46 +0200 Subject: [PATCH] Add matrix type dialog part 1 --- program.odin | 39 ++++++++++++++++++++++++++++----------- utils.odin | 1 + 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/program.odin b/program.odin index d0a5f8f..cf895ce 100644 --- a/program.odin +++ b/program.odin @@ -165,10 +165,11 @@ program_init :: proc(allocator := context.allocator) { program_update :: proc() { if rl.IsKeyPressed(.ENTER) { - matrix_pool_get_mat3() + program_show_dialog(&program, .CreateScaleMatrix) } - ui_elements, matrix_container := program_build_ui() + ui_elements, matrix_container := program_build_workspace_ui(&program.ui_context) + ui_overlay_elements: []ui.Element switch program.state { case .Normal: @@ -177,14 +178,27 @@ program_update :: proc() { program.ui_element_focus = ui.focus_next_element(program.ui_element_focus, ui_elements, {.InputFloat}) } case .Message: + case .Dialog: + ui_overlay_elements = program_build_dialog_ui(&program.ui_overlay_context) } grid := program.grid grid_inner_position := rect_get_tl(grid.inner_area) draw_grid(grid.area, {32.0, 32.0}, rl.GRAY) - program_render_ui(&program.ui_context, ui_elements) + program_render_ui(&program.ui_context, program.font_style, ui_elements) + program_render_ui(&program.ui_overlay_context, program.font_style, ui_overlay_elements) +} + +program_build_dialog_ui :: proc(ctx: ^ui.Context) -> []ui.Element { + size := v2{WINDOW_WIDTH, WINDOW_HEIGHT} + margin := size * 0.33 + ui.start(ctx, V2_ZERO, {WINDOW_WIDTH, WINDOW_HEIGHT}) + ui.container_begin({ui.Size_Percentage(1.0), ui.Size_Percentage(1.0)}, {margin = margin, padding = 4.0}) + ui.element(.Label, {}, {label = "Create a scale matrix", color = ui.col(rl.WHITE), margin = 4.0}) + ui.container_end() + return ui.end() } program_handle_mouse_workspace :: proc(mouse_state: MouseState, matrix_container: ^ui.Element) -> MouseState { @@ -210,10 +224,10 @@ program_handle_mouse_workspace :: proc(mouse_state: MouseState, matrix_container return mouse_state } -program_build_ui :: proc() -> (elements: []ui.Element, matrix_container: ^ui.Element) { - ui.start(&program.ui_context, {0, 0}, {WINDOW_WIDTH, WINDOW_HEIGHT}) - top_bar_container_config := ui.ElementConfiguration {margin = V2_ONE * 4.0} - top_bar_element_margin := V2_ONE * 4.0 +program_build_workspace_ui :: proc(ctx: ^ui.Context) -> (elements: []ui.Element, matrix_container: ^ui.Element) { + ui.start(ctx, {0, 0}, {WINDOW_WIDTH, WINDOW_HEIGHT}) + top_bar_container_config := ui.ElementConfiguration {margin = 4.0} + top_bar_element_margin: f32 = 4.0 top_bar_container := ui.container_begin({ui.Size_Percentage(1.0), ui.Size_Pixels(48.0)}, top_bar_container_config) top_bar_inner_height := ui.get_element_inner_area(top_bar_container^).height top_bar_button_dimensions := ui.Dimensions {ui.Size_Pixels(top_bar_inner_height), ui.Size_Pixels(top_bar_inner_height)} @@ -237,12 +251,12 @@ program_build_ui :: proc() -> (elements: []ui.Element, matrix_container: ^ui.Ele } ui.container_end() - side_bar_container_config := ui.ElementConfiguration {margin = V2_ONE * 4.0} + side_bar_container_config := ui.ElementConfiguration {margin = 4.0} side_bar_container_data := new(UiElementData_Container, context.temp_allocator) side_bar_container_data^ = {type = .Scroll, scroll = program.matrix_scroll} matrix_container = ui.container_begin({ui.Size_Percentage(0.2), ui.Size_PercentageRemainder(1.0)}, side_bar_container_config, side_bar_container_data) for i in 0.. (elements: []ui.Element, matrix_container: ^ui.Ele return } -program_render_ui :: proc(ctx: ^ui.Context, elements: []ui.Element) { +program_render_ui :: proc(ctx: ^ui.Context, font_style: FontStyle, elements: []ui.Element) { scissor_container: ^ui.Element render_above: ui.Element render_above.id = ui.element_id_invalid() @@ -270,6 +284,7 @@ program_render_ui :: proc(ctx: ^ui.Context, elements: []ui.Element) { } area := rect_translate(rl.Rectangle(element.area), offset) + color := rl.Color(element.color) #partial switch element.type { case .Container: dim := rl.Color {0, 0, 0, 192} @@ -324,6 +339,8 @@ program_render_ui :: proc(ctx: ^ui.Context, elements: []ui.Element) { } } } + case .Label: + rl.DrawTextEx(font_style.font, element.label, rect_get_tl(area), font_style.size, font_style.spacing, color) case: rl.DrawRectangleRec(area, rl.MAGENTA) } @@ -358,7 +375,7 @@ ui_mat3 :: proc(mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dim container_data := new(UiElementData_Container, allocator) container_data^ = {type = .Matrix, thickness = 2.0} ui.container_begin(dimensions, config, container_data) - matrix_input_config := ui.ElementConfiguration {margin = V2_ONE * 4.0} + matrix_input_config := ui.ElementConfiguration {margin = 4.0} matrix_input_dimensions := ui.Dimensions {ui.Size_Percentage(1.0 / 3.0), ui.Size_Percentage(1.0 / 3.0)} #unroll for i in 0..<3 { #unroll for j in 0..<3 { diff --git a/utils.odin b/utils.odin index c5c8690..1f3d230 100644 --- a/utils.odin +++ b/utils.odin @@ -74,6 +74,7 @@ tri2 :: [3]v2 Bezier :: [3]v2 V2_ONE :: v2{1.0, 1.0} +V2_ZERO :: v2{} V2_LEFT :: v2{-1.0, 0.0} V2_RIGHT :: v2{1.0, 0.0} V2_UP :: v2{0.0, -1.0}