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_FRAMERATE :: 30
|
||||||
WINDOW_CAPTION :: "Transformation Visualizer"
|
WINDOW_CAPTION :: "Transformation Visualizer"
|
||||||
|
|
||||||
|
MATRIX_FIELD_COUNT :: 1024
|
||||||
|
MATRIX_FIELD_BYTES :: 8
|
||||||
|
|
||||||
program: Program
|
program: Program
|
||||||
|
|
||||||
Program :: struct {
|
Program :: struct {
|
||||||
ui_state: UiState,
|
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,
|
matrix_type: MatrixType,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,6 +49,19 @@ init :: proc() {
|
||||||
ui_init(&program.ui_state, ui_style, {0, 0}, context.temp_allocator)
|
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() {
|
update :: proc() {
|
||||||
if rl.IsMouseButtonPressed(.LEFT) {
|
if rl.IsMouseButtonPressed(.LEFT) {
|
||||||
ui_element_focus_reset(&program.ui_state)
|
ui_element_focus_reset(&program.ui_state)
|
||||||
|
|
@ -57,7 +74,7 @@ update :: proc() {
|
||||||
ui_button_size_top_bar := v2{32.0, 32.0}
|
ui_button_size_top_bar := v2{32.0, 32.0}
|
||||||
ui_start(&program.ui_state)
|
ui_start(&program.ui_state)
|
||||||
ui_container_begin({label = ""})
|
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_same_line()
|
||||||
ui_button(ui_button_size_top_bar, {label = "#11#"})
|
ui_button(ui_button_size_top_bar, {label = "#11#"})
|
||||||
ui_same_line()
|
ui_same_line()
|
||||||
|
|
@ -67,7 +84,19 @@ update :: proc() {
|
||||||
if len(program.matrices) == 0 {
|
if len(program.matrices) == 0 {
|
||||||
ui_text({text = "Add matrices", color = rl.WHITE})
|
ui_text({text = "Add matrices", color = rl.WHITE})
|
||||||
} else {
|
} 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_container_end()
|
||||||
ui_elements := ui_end()
|
ui_elements := ui_end()
|
||||||
|
|
@ -76,12 +105,16 @@ update :: proc() {
|
||||||
switch element.type {
|
switch element.type {
|
||||||
case .Button:
|
case .Button:
|
||||||
data := element.data.(UiElementData_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:
|
case .Input:
|
||||||
data := element.data.(UiElementData_Input)
|
data := element.data.(UiElementData_Input)
|
||||||
edit_mode := ui_element_is_editing(program.ui_state, element.id)
|
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)
|
ui_element_focus(&program.ui_state, element.id)
|
||||||
|
fmt.println("oentuh")
|
||||||
}
|
}
|
||||||
case .Container:
|
case .Container:
|
||||||
data := element.data.(UiElementData_Container)
|
data := element.data.(UiElementData_Container)
|
||||||
|
|
|
||||||
7
ui.odin
7
ui.odin
|
|
@ -74,8 +74,11 @@ ui_end :: proc() -> []UiElement {
|
||||||
return elements
|
return elements
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UiElementCallback_Button :: proc()
|
||||||
|
|
||||||
UiElementData_Button :: struct {
|
UiElementData_Button :: struct {
|
||||||
label: cstring,
|
label: cstring,
|
||||||
|
callback: UiElementCallback_Button,
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_button :: proc(size: v2, data: UiElementData_Button) {
|
ui_button :: proc(size: v2, data: UiElementData_Button) {
|
||||||
|
|
@ -112,8 +115,8 @@ ui_container_end :: proc() {
|
||||||
|
|
||||||
UiElementData_Input :: struct {
|
UiElementData_Input :: struct {
|
||||||
label: cstring,
|
label: cstring,
|
||||||
value: ^i32,
|
input: []byte,
|
||||||
min, max: i32,
|
min, max: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_input :: proc(size: v2, data: UiElementData_Input) {
|
ui_input :: proc(size: v2, data: UiElementData_Input) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue