Add matrix type dialog part 1
This commit is contained in:
parent
9154823436
commit
baf7dcc52c
2 changed files with 29 additions and 11 deletions
39
program.odin
39
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..<program.matrix_count {
|
||||
container_config := ui.ElementConfiguration{margin = V2_ONE * 8.0, label = fmt.ctprintf("Matrix %d", i)}
|
||||
container_config := ui.ElementConfiguration{margin = 8.0, label = fmt.ctprintf("Matrix %d", i)}
|
||||
container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_Pixels(112.0)}
|
||||
mat := program.matrix_float_pool[i * 9 : i * 9 + 9]
|
||||
value_strings := program.matrix_value_string_pool[i * 9 : i * 9 + 9]
|
||||
|
|
@ -253,7 +267,7 @@ program_build_ui :: proc() -> (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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue