Matrix input
This commit is contained in:
parent
a02960283c
commit
697ee50dd3
2 changed files with 43 additions and 7 deletions
43
program.odin
43
program.odin
|
|
@ -9,11 +9,15 @@ WINDOW_HEIGHT :: 720
|
|||
WINDOW_FRAMERATE :: 30
|
||||
WINDOW_CAPTION :: "Transformation Visualizer"
|
||||
|
||||
MATRIX_FIELD_COUNT :: 1024
|
||||
MATRIX_FIELD_BYTES :: 8
|
||||
|
||||
program: Program
|
||||
|
||||
Program :: struct {
|
||||
ui_state: UiState,
|
||||
matrices: [dynamic; 1024]f32,
|
||||
matrices: [dynamic; MATRIX_FIELD_COUNT]f32,
|
||||
matrix_fields: [dynamic; MATRIX_FIELD_COUNT][MATRIX_FIELD_BYTES]byte,
|
||||
matrix_type: MatrixType,
|
||||
}
|
||||
|
||||
|
|
@ -45,6 +49,19 @@ init :: proc() {
|
|||
ui_init(&program.ui_state, ui_style, {0, 0}, context.temp_allocator)
|
||||
}
|
||||
|
||||
matrix_add :: proc() {
|
||||
matrices := &program.matrices
|
||||
append(matrices, 1)
|
||||
append(matrices, 0)
|
||||
append(matrices, 1)
|
||||
append(matrices, 0)
|
||||
fields := &program.matrix_fields
|
||||
append(fields, [MATRIX_FIELD_BYTES]byte{})
|
||||
append(fields, [MATRIX_FIELD_BYTES]byte{})
|
||||
append(fields, [MATRIX_FIELD_BYTES]byte{})
|
||||
append(fields, [MATRIX_FIELD_BYTES]byte{})
|
||||
}
|
||||
|
||||
update :: proc() {
|
||||
if rl.IsMouseButtonPressed(.LEFT) {
|
||||
ui_element_focus_reset(&program.ui_state)
|
||||
|
|
@ -57,7 +74,7 @@ update :: proc() {
|
|||
ui_button_size_top_bar := v2{32.0, 32.0}
|
||||
ui_start(&program.ui_state)
|
||||
ui_container_begin({label = ""})
|
||||
ui_button(ui_button_size_top_bar, {label = "#10#"})
|
||||
ui_button(ui_button_size_top_bar, {label = "#10#", callback = matrix_add})
|
||||
ui_same_line()
|
||||
ui_button(ui_button_size_top_bar, {label = "#11#"})
|
||||
ui_same_line()
|
||||
|
|
@ -67,7 +84,19 @@ update :: proc() {
|
|||
if len(program.matrices) == 0 {
|
||||
ui_text({text = "Add matrices", color = rl.WHITE})
|
||||
} else {
|
||||
|
||||
ui_input_size_matrix := v2{48.0, 32.0}
|
||||
switch program.matrix_type {
|
||||
case .Mat2:
|
||||
mat := cast(^mat2)&program.matrices[0]
|
||||
fields := &program.matrix_fields
|
||||
ui_input(ui_input_size_matrix, {label = "", min = 0, max = 1000, input = fields[0][:]})
|
||||
ui_same_line()
|
||||
ui_input(ui_input_size_matrix, {label = "", min = 0, max = 1000, input = fields[1][:]})
|
||||
ui_input(ui_input_size_matrix, {label = "", min = 0, max = 1000, input = fields[2][:]})
|
||||
ui_same_line()
|
||||
ui_input(ui_input_size_matrix, {label = "", min = 0, max = 1000, input = fields[3][:]})
|
||||
case .Mat3, .Mat4:
|
||||
}
|
||||
}
|
||||
ui_container_end()
|
||||
ui_elements := ui_end()
|
||||
|
|
@ -76,12 +105,16 @@ update :: proc() {
|
|||
switch element.type {
|
||||
case .Button:
|
||||
data := element.data.(UiElementData_Button)
|
||||
rl.GuiButton(element.area, data.label)
|
||||
if rl.GuiButton(element.area, data.label) && data.callback != nil {
|
||||
data.callback()
|
||||
}
|
||||
case .Input:
|
||||
data := element.data.(UiElementData_Input)
|
||||
edit_mode := ui_element_is_editing(program.ui_state, element.id)
|
||||
if (rl.GuiValueBox(element.area, "", data.value, data.min, data.max, edit_mode) == 1) {
|
||||
input_cstr := cstring(raw_data(data.input))
|
||||
if (rl.GuiTextBox(element.area, input_cstr, i32(len(data.input) - 1), edit_mode)) {
|
||||
ui_element_focus(&program.ui_state, element.id)
|
||||
fmt.println("oentuh")
|
||||
}
|
||||
case .Container:
|
||||
data := element.data.(UiElementData_Container)
|
||||
|
|
|
|||
7
ui.odin
7
ui.odin
|
|
@ -74,8 +74,11 @@ ui_end :: proc() -> []UiElement {
|
|||
return elements
|
||||
}
|
||||
|
||||
UiElementCallback_Button :: proc()
|
||||
|
||||
UiElementData_Button :: struct {
|
||||
label: cstring,
|
||||
callback: UiElementCallback_Button,
|
||||
}
|
||||
|
||||
ui_button :: proc(size: v2, data: UiElementData_Button) {
|
||||
|
|
@ -112,8 +115,8 @@ ui_container_end :: proc() {
|
|||
|
||||
UiElementData_Input :: struct {
|
||||
label: cstring,
|
||||
value: ^i32,
|
||||
min, max: i32,
|
||||
input: []byte,
|
||||
min, max: f32,
|
||||
}
|
||||
|
||||
ui_input :: proc(size: v2, data: UiElementData_Input) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue