From 6bbcd80268728845bcae7c4e039463238f57196f Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sat, 22 Aug 2026 18:49:11 +0200 Subject: [PATCH 1/2] bprinting loaded project into string fields --- program.odin | 11 ++++++++--- project.odin | 13 +++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/program.odin b/program.odin index 20f7fc1..6b0986e 100644 --- a/program.odin +++ b/program.odin @@ -2,6 +2,7 @@ package main import rl "libraries/raylib" import ui "libraries/snths_ui" +import "core:mem" import "core:fmt" import "core:math/linalg" import "core:math/ease" @@ -236,8 +237,12 @@ program_save_project :: proc(program: ^Program, path: string) -> os.Error { program_load_project :: proc(program: ^Program, path: string) -> ProjectReadError { project: ProjectData - project_read(&project, path) or_return - fmt.println(project.version) + project_read(&project, path, context.temp_allocator) or_return + program.matrix_count = int(project.matrix_count) + mem.copy(raw_data(program.matrix_float_pool), raw_data(project.matrices), len(project.matrices) * size_of(f32) * 9) + for val, i in program.matrix_float_pool[:program.matrix_count * 9] { + fmt.bprint(program.matrix_value_string_pool[i][:], val) + } return nil } @@ -280,7 +285,7 @@ program_init :: proc(allocator := context.allocator) { program.animation_ease = .Quadratic_Out if err := program_load_project(&program, DEFAULT_PROJECT_LOAD_LOCATION); err != nil { - fmt.println(err) + fmt.println("ERROR:", err) } } diff --git a/project.odin b/project.odin index 924c9db..717e69e 100644 --- a/project.odin +++ b/project.odin @@ -48,7 +48,7 @@ ProjectReadErrorType :: enum { VersionNeedsUpgrade, } -project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError { +project_read :: proc(project: ^ProjectData, path: string, allocator: mem.Allocator) -> ProjectReadError { f := os.open(path, {.Read}) or_return defer os.close(f) r := io.to_reader(os.to_stream(f)) @@ -57,14 +57,15 @@ project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError { if num, err := io.read_full(r, header_buffer[:]); err != nil { return ProjectReadErrorType.FailedReadingHeader } - if mem.compare(transmute([]byte)header[:], header_buffer[:]) != 0 { + if mem.compare(transmute([]byte)header, header_buffer[:]) != 0 { return ProjectReadErrorType.BadHeader } - version: u32 - _ = io.read_ptr(r, &version, size_of(u32)) or_return - if version != PROJECT_DATA_VERSION { + _ = io.read_ptr(r, &project.version, size_of(project.matrix_count)) or_return + if project.version != PROJECT_DATA_VERSION { return ProjectReadErrorType.VersionNeedsUpgrade } - project.version = version + _ = io.read_ptr(r, &project.matrix_count, size_of(project.matrix_count)) or_return + project.matrices = make([]f32, size_of(f32) * int(project.matrix_count) * 9) + _ = io.read_ptr(r, raw_data(project.matrices), size_of(f32) * len(project.matrices)) or_return return nil } From d3057e99d2409dedaa1d2e09d8131a4341a921b0 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Sat, 22 Aug 2026 20:18:43 +0200 Subject: [PATCH 2/2] 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 {