per matrix buttons
This commit is contained in:
parent
6bbcd80268
commit
d3057e99d2
3 changed files with 60 additions and 11 deletions
63
program.odin
63
program.odin
|
|
@ -13,6 +13,9 @@ import "core:os"
|
|||
RAYGUI_ICON_PLAY :: "#131#"
|
||||
RAYGUI_ICON_PAUSE :: "#132#"
|
||||
RAYGUI_ICON_RESET :: "#211#"
|
||||
RAYGUI_ICON_TRASH :: "#143#"
|
||||
RAYGUI_ICON_DOWN :: "#120#"
|
||||
RAYGUI_ICON_UP :: "#121#"
|
||||
|
||||
TRANSFORMATION_RECTANGLE_COLOR_ORIGIN :: rl.RED
|
||||
TRANSFORMATION_RECTANGLE_COLOR_MIDDLE :: rl.MAGENTA
|
||||
|
|
@ -53,6 +56,7 @@ UiElementData_Dropdown :: struct {
|
|||
}
|
||||
|
||||
UiButtonType :: enum {
|
||||
Nothing,
|
||||
AddIdentity,
|
||||
AddTranslation,
|
||||
AddScale,
|
||||
|
|
@ -66,6 +70,9 @@ UiButtonType :: enum {
|
|||
ResumeTransformation,
|
||||
ResetTransformation,
|
||||
SaveProjectConfirm,
|
||||
MatrixDelete,
|
||||
MatrixMoveUp,
|
||||
MatrixMoveDown,
|
||||
}
|
||||
|
||||
UiButtonRecalculateFinishGroup :: bit_set[UiButtonType]{
|
||||
|
|
@ -77,6 +84,7 @@ UiButtonRecalculateFinishGroup :: bit_set[UiButtonType]{
|
|||
|
||||
UiElementData_Button :: struct {
|
||||
type: UiButtonType,
|
||||
target_matrix: int,
|
||||
options: cstring,
|
||||
}
|
||||
|
||||
|
|
@ -243,6 +251,7 @@ program_load_project :: proc(program: ^Program, path: string) -> ProjectReadErro
|
|||
for val, i in program.matrix_float_pool[:program.matrix_count * 9] {
|
||||
fmt.bprint(program.matrix_value_string_pool[i][:], val)
|
||||
}
|
||||
animation_update_last(&program.animation, program_get_master_matrix())
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -575,10 +584,10 @@ program_build_workspace_ui :: proc(ctx: ^ui.Context) -> (elements: []ui.Element,
|
|||
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 = 8.0, label = fmt.ctprintf("Matrix %d", i)}
|
||||
container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_Pixels(112.0)}
|
||||
container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_Pixels(140.0)}
|
||||
mat := program.matrix_float_pool[i * 9 : i * 9 + 9]
|
||||
value_strings := program.matrix_value_string_pool[i * 9 : i * 9 + 9]
|
||||
ui_mat3(mat, value_strings, container_dimensions, container_config)
|
||||
ui_mat3(i, mat, value_strings, container_dimensions, container_config)
|
||||
}
|
||||
ui.container_end()
|
||||
elements = ui.end()
|
||||
|
|
@ -664,6 +673,7 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u
|
|||
}
|
||||
data := cast(^UiElementData_Button)element.data
|
||||
switch data.type {
|
||||
case .Nothing:
|
||||
case .AddIdentity: program_add_identity_matrix()
|
||||
case .AddTranslation: program_show_dialog(&program, .CreateTranslationMatrix)
|
||||
case .AddScale: program_show_dialog(&program, .CreateScaleMatrix)
|
||||
|
|
@ -701,6 +711,20 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u
|
|||
} else {
|
||||
program.state = .Normal
|
||||
}
|
||||
case .MatrixDelete:
|
||||
if data.target_matrix + 1 < program.matrix_count {
|
||||
floats := program.matrix_float_pool
|
||||
inputs := program.matrix_value_string_pool
|
||||
amount := program.matrix_count - data.target_matrix
|
||||
matrix_values_size := size_of(f32) * 9
|
||||
matrix_inputs_size := size_of(InputFloatField) * 9
|
||||
mem.copy(&floats[data.target_matrix * 9], &floats[data.target_matrix * 9 + 9], matrix_values_size * amount)
|
||||
mem.copy(&inputs[data.target_matrix * 9][0], &inputs[data.target_matrix * 9 + 9][0], matrix_inputs_size * amount)
|
||||
}
|
||||
program.matrix_count = max(program.matrix_count - 1, 0)
|
||||
animation_update_last(&program.animation, program_get_master_matrix())
|
||||
case .MatrixMoveUp:
|
||||
case .MatrixMoveDown:
|
||||
}
|
||||
if data.type in UiButtonRecalculateFinishGroup {
|
||||
animation_update_last(&program.animation, program_get_master_matrix())
|
||||
|
|
@ -783,12 +807,37 @@ ui_measure_text :: proc(str: cstring, font_data: rawptr) -> ui.v2 {
|
|||
return rl.MeasureTextEx(style.font, str, style.size, style.spacing)
|
||||
}
|
||||
|
||||
ui_mat3 :: proc(mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dimensions, config: ui.ElementConfiguration, allocator := context.temp_allocator) {
|
||||
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 = 4.0}
|
||||
ui_mat3 :: proc(idx: int, mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dimensions, config: ui.ElementConfiguration, allocator := context.temp_allocator) {
|
||||
ui.container_begin(dimensions, config)
|
||||
defer ui.container_end()
|
||||
|
||||
button_config := ui.ElementConfiguration {margin = 4.0}
|
||||
button_data: ^UiElementData_Button
|
||||
|
||||
button_config.label = RAYGUI_ICON_TRASH
|
||||
button_data = new(UiElementData_Button, allocator)
|
||||
button_data^ = {target_matrix = idx, type = .MatrixDelete}
|
||||
ui.element(.Button, ui.dimensions_pixels(32.0), button_config, button_data)
|
||||
|
||||
button_config.label = RAYGUI_ICON_UP
|
||||
button_data = new(UiElementData_Button, allocator)
|
||||
button_data^ = {target_matrix = idx}
|
||||
ui.same_line()
|
||||
ui.element(.Button, ui.dimensions_pixels(32.0), button_config, button_data)
|
||||
|
||||
button_config.label = RAYGUI_ICON_DOWN
|
||||
button_data = new(UiElementData_Button, allocator)
|
||||
button_data^ = {target_matrix = idx}
|
||||
ui.same_line()
|
||||
ui.element(.Button, ui.dimensions_pixels(32.0), button_config, button_data)
|
||||
|
||||
matrix_container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_PercentageRemainder(1.0)}
|
||||
matrix_container_config := ui.ElementConfiguration {margin = 4.0}
|
||||
matrix_container_data := new(UiElementData_Container, allocator)
|
||||
matrix_container_data^ = {type = .Matrix, thickness = 2.0}
|
||||
ui.container_begin(matrix_container_dimensions, matrix_container_config, matrix_container_data)
|
||||
matrix_input_dimensions := ui.Dimensions {ui.Size_Percentage(1.0 / 3.0), ui.Size_Percentage(1.0 / 3.0)}
|
||||
matrix_input_config := ui.ElementConfiguration {margin = 4.0}
|
||||
// column first matrices
|
||||
#unroll for j in 0..<3 {
|
||||
#unroll for i in 0..<3 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue