Compare commits

..

No commits in common. "d3057e99d2409dedaa1d2e09d8131a4341a921b0" and "c3999f8adefd8ff0e7f925b31ab2786d25baaa1f" have entirely different histories.

4 changed files with 20 additions and 75 deletions

BIN
default

Binary file not shown.

View file

@ -273,12 +273,12 @@ _resolve_element_outer_size_axis :: proc(size: Size, axis: Axis) -> f32 {
if element := _element_container_previous(); element != nil { if element := _element_container_previous(); element != nil {
container_inner := get_element_inner_area(_container_current()^) container_inner := get_element_inner_area(_container_current()^)
last_element_outer := get_element_outer_area(element^) last_element_outer := get_element_outer_area(element^)
element_br := rect_get_br(last_element_outer) remaining_container_size: f32
container_tl := rect_get_tl(container_inner)
switch axis { switch axis {
case .X: return (container_inner.width - (element_br.x - container_tl.x)) * f32(value) case .X: remaining_container_size = container_inner.width - rect_get_tr(last_element_outer).x
case .Y: return (container_inner.height - (element_br.y - container_tl.y)) * f32(value) case .Y: remaining_container_size = container_inner.height - rect_get_bl(last_element_outer).y
} }
return remaining_container_size * f32(value)
} else { } else {
inner := get_element_inner_area(_container_current()^) inner := get_element_inner_area(_container_current()^)
container_size := inner.width if axis == .X else inner.height container_size := inner.width if axis == .X else inner.height

View file

@ -2,7 +2,6 @@ package main
import rl "libraries/raylib" import rl "libraries/raylib"
import ui "libraries/snths_ui" import ui "libraries/snths_ui"
import "core:mem"
import "core:fmt" import "core:fmt"
import "core:math/linalg" import "core:math/linalg"
import "core:math/ease" import "core:math/ease"
@ -13,9 +12,6 @@ import "core:os"
RAYGUI_ICON_PLAY :: "#131#" RAYGUI_ICON_PLAY :: "#131#"
RAYGUI_ICON_PAUSE :: "#132#" RAYGUI_ICON_PAUSE :: "#132#"
RAYGUI_ICON_RESET :: "#211#" 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_ORIGIN :: rl.RED
TRANSFORMATION_RECTANGLE_COLOR_MIDDLE :: rl.MAGENTA TRANSFORMATION_RECTANGLE_COLOR_MIDDLE :: rl.MAGENTA
@ -56,7 +52,6 @@ UiElementData_Dropdown :: struct {
} }
UiButtonType :: enum { UiButtonType :: enum {
Nothing,
AddIdentity, AddIdentity,
AddTranslation, AddTranslation,
AddScale, AddScale,
@ -70,9 +65,6 @@ UiButtonType :: enum {
ResumeTransformation, ResumeTransformation,
ResetTransformation, ResetTransformation,
SaveProjectConfirm, SaveProjectConfirm,
MatrixDelete,
MatrixMoveUp,
MatrixMoveDown,
} }
UiButtonRecalculateFinishGroup :: bit_set[UiButtonType]{ UiButtonRecalculateFinishGroup :: bit_set[UiButtonType]{
@ -84,7 +76,6 @@ UiButtonRecalculateFinishGroup :: bit_set[UiButtonType]{
UiElementData_Button :: struct { UiElementData_Button :: struct {
type: UiButtonType, type: UiButtonType,
target_matrix: int,
options: cstring, options: cstring,
} }
@ -245,13 +236,8 @@ program_save_project :: proc(program: ^Program, path: string) -> os.Error {
program_load_project :: proc(program: ^Program, path: string) -> ProjectReadError { program_load_project :: proc(program: ^Program, path: string) -> ProjectReadError {
project: ProjectData project: ProjectData
project_read(&project, path, context.temp_allocator) or_return project_read(&project, path) or_return
program.matrix_count = int(project.matrix_count) fmt.println(project.version)
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)
}
animation_update_last(&program.animation, program_get_master_matrix())
return nil return nil
} }
@ -294,7 +280,7 @@ program_init :: proc(allocator := context.allocator) {
program.animation_ease = .Quadratic_Out program.animation_ease = .Quadratic_Out
if err := program_load_project(&program, DEFAULT_PROJECT_LOAD_LOCATION); err != nil { if err := program_load_project(&program, DEFAULT_PROJECT_LOAD_LOCATION); err != nil {
fmt.println("ERROR:", err) fmt.println(err)
} }
} }
@ -584,10 +570,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) 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 { for i in 0..<program.matrix_count {
container_config := ui.ElementConfiguration{margin = 8.0, label = fmt.ctprintf("Matrix %d", i)} 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(140.0)} container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_Pixels(112.0)}
mat := program.matrix_float_pool[i * 9 : i * 9 + 9] mat := program.matrix_float_pool[i * 9 : i * 9 + 9]
value_strings := program.matrix_value_string_pool[i * 9 : i * 9 + 9] value_strings := program.matrix_value_string_pool[i * 9 : i * 9 + 9]
ui_mat3(i, mat, value_strings, container_dimensions, container_config) ui_mat3(mat, value_strings, container_dimensions, container_config)
} }
ui.container_end() ui.container_end()
elements = ui.end() elements = ui.end()
@ -673,7 +659,6 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u
} }
data := cast(^UiElementData_Button)element.data data := cast(^UiElementData_Button)element.data
switch data.type { switch data.type {
case .Nothing:
case .AddIdentity: program_add_identity_matrix() case .AddIdentity: program_add_identity_matrix()
case .AddTranslation: program_show_dialog(&program, .CreateTranslationMatrix) case .AddTranslation: program_show_dialog(&program, .CreateTranslationMatrix)
case .AddScale: program_show_dialog(&program, .CreateScaleMatrix) case .AddScale: program_show_dialog(&program, .CreateScaleMatrix)
@ -711,20 +696,6 @@ program_render_ui_and_handle_focus :: proc(ctx: ^ui.Context, focus_element_id: u
} else { } else {
program.state = .Normal 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 { if data.type in UiButtonRecalculateFinishGroup {
animation_update_last(&program.animation, program_get_master_matrix()) animation_update_last(&program.animation, program_get_master_matrix())
@ -807,37 +778,12 @@ ui_measure_text :: proc(str: cstring, font_data: rawptr) -> ui.v2 {
return rl.MeasureTextEx(style.font, str, style.size, style.spacing) return rl.MeasureTextEx(style.font, str, style.size, style.spacing)
} }
ui_mat3 :: proc(idx: int, mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dimensions, config: ui.ElementConfiguration, allocator := context.temp_allocator) { ui_mat3 :: proc(mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dimensions, config: ui.ElementConfiguration, allocator := context.temp_allocator) {
ui.container_begin(dimensions, config) container_data := new(UiElementData_Container, allocator)
defer ui.container_end() container_data^ = {type = .Matrix, thickness = 2.0}
ui.container_begin(dimensions, config, container_data)
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} matrix_input_config := ui.ElementConfiguration {margin = 4.0}
matrix_input_dimensions := ui.Dimensions {ui.Size_Percentage(1.0 / 3.0), ui.Size_Percentage(1.0 / 3.0)}
// column first matrices // column first matrices
#unroll for j in 0..<3 { #unroll for j in 0..<3 {
#unroll for i in 0..<3 { #unroll for i in 0..<3 {

View file

@ -48,7 +48,7 @@ ProjectReadErrorType :: enum {
VersionNeedsUpgrade, VersionNeedsUpgrade,
} }
project_read :: proc(project: ^ProjectData, path: string, allocator: mem.Allocator) -> ProjectReadError { project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError {
f := os.open(path, {.Read}) or_return f := os.open(path, {.Read}) or_return
defer os.close(f) defer os.close(f)
r := io.to_reader(os.to_stream(f)) r := io.to_reader(os.to_stream(f))
@ -57,15 +57,14 @@ project_read :: proc(project: ^ProjectData, path: string, allocator: mem.Allocat
if num, err := io.read_full(r, header_buffer[:]); err != nil { if num, err := io.read_full(r, header_buffer[:]); err != nil {
return ProjectReadErrorType.FailedReadingHeader return ProjectReadErrorType.FailedReadingHeader
} }
if mem.compare(transmute([]byte)header, header_buffer[:]) != 0 { if mem.compare(transmute([]byte)header[:], header_buffer[:]) != 0 {
return ProjectReadErrorType.BadHeader return ProjectReadErrorType.BadHeader
} }
_ = io.read_ptr(r, &project.version, size_of(project.matrix_count)) or_return version: u32
if project.version != PROJECT_DATA_VERSION { _ = io.read_ptr(r, &version, size_of(u32)) or_return
if version != PROJECT_DATA_VERSION {
return ProjectReadErrorType.VersionNeedsUpgrade return ProjectReadErrorType.VersionNeedsUpgrade
} }
_ = io.read_ptr(r, &project.matrix_count, size_of(project.matrix_count)) or_return project.version = version
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 return nil
} }