From d3057e99d2409dedaa1d2e09d8131a4341a921b0 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sat, 22 Aug 2026 20:18:43 +0200 Subject: [PATCH] per matrix buttons --- default | Bin 74 -> 110 bytes libraries/snths_ui/ui.odin | 8 ++--- program.odin | 63 ++++++++++++++++++++++++++++++++----- 3 files changed, 60 insertions(+), 11 deletions(-) diff --git a/default b/default index be3f2c4c12439ddbfb350573a3f3d9afa86a1b35..ec78b22b4b79b2bd02bb771a2fe9b0256c600c27 100755 GIT binary patch delta 46 icmeauo1mn?!~g;f_FxK5!1x}{6ZK>!TJbS8*aHB6tOg4J delta 12 Tcmd1vnxMqUIMH2|iNOH?6y^e~ diff --git a/libraries/snths_ui/ui.odin b/libraries/snths_ui/ui.odin index 576c045..cff42d9 100644 --- a/libraries/snths_ui/ui.odin +++ b/libraries/snths_ui/ui.odin @@ -273,12 +273,12 @@ _resolve_element_outer_size_axis :: proc(size: Size, axis: Axis) -> f32 { if element := _element_container_previous(); element != nil { container_inner := get_element_inner_area(_container_current()^) last_element_outer := get_element_outer_area(element^) - remaining_container_size: f32 + element_br := rect_get_br(last_element_outer) + container_tl := rect_get_tl(container_inner) switch axis { - case .X: remaining_container_size = container_inner.width - rect_get_tr(last_element_outer).x - case .Y: remaining_container_size = container_inner.height - rect_get_bl(last_element_outer).y + case .X: return (container_inner.width - (element_br.x - container_tl.x)) * f32(value) + case .Y: return (container_inner.height - (element_br.y - container_tl.y)) * f32(value) } - return remaining_container_size * f32(value) } else { inner := get_element_inner_area(_container_current()^) container_size := inner.width if axis == .X else inner.height diff --git a/program.odin b/program.odin index 6b0986e..ec650d2 100644 --- a/program.odin +++ b/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.. 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 {