Grid part 1
This commit is contained in:
parent
2026024949
commit
099fdf1b4b
1 changed files with 58 additions and 12 deletions
70
program.odin
70
program.odin
|
|
@ -36,6 +36,12 @@ ProgramState :: enum {
|
|||
Message,
|
||||
}
|
||||
|
||||
MouseState :: enum {
|
||||
Hover,
|
||||
DraggingGrid,
|
||||
HoverMatrices,
|
||||
}
|
||||
|
||||
ProgramMessageType :: enum {
|
||||
ChangeMatrixTypeClearData,
|
||||
}
|
||||
|
|
@ -65,6 +71,7 @@ Program :: struct {
|
|||
matrix_count: int,
|
||||
matrix_scroll: f32,
|
||||
matrix_scroll_speed: f32,
|
||||
mouse_state: MouseState,
|
||||
grid: Grid,
|
||||
font_style: FontStyle,
|
||||
state: ProgramState,
|
||||
|
|
@ -99,24 +106,69 @@ program_init :: proc(allocator := context.allocator) {
|
|||
}
|
||||
program.grid = {
|
||||
area = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT},
|
||||
inner_area = {-1, -1, 2, 2},
|
||||
inner_area = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT},
|
||||
zoom = 1.0,
|
||||
}
|
||||
ui.init(&program.ui_context, 4000, allocator)
|
||||
}
|
||||
|
||||
world_to_grid_matrix :: proc(grid: Grid) -> mat3 {
|
||||
return matrix3_translate2(-rect_get_tl(grid.inner_area))
|
||||
}
|
||||
|
||||
grid_to_world_matrix :: proc(grid: Grid) -> mat3 {
|
||||
return {}
|
||||
}
|
||||
|
||||
program_update :: proc() {
|
||||
if rl.IsKeyPressed(.ENTER) {
|
||||
matrix_pool_get_mat3()
|
||||
}
|
||||
ui_elements := program_build_ui()
|
||||
|
||||
ui_elements, matrix_container := program_build_ui()
|
||||
|
||||
mouse := rl.GetMousePosition()
|
||||
switch program.mouse_state {
|
||||
case .Hover:
|
||||
if rl.IsMouseButtonPressed(.LEFT) {
|
||||
program.mouse_state = .DraggingGrid
|
||||
} else if rect_has_point(rect2(matrix_container.area), mouse) {
|
||||
program.mouse_state = .HoverMatrices
|
||||
}
|
||||
case .DraggingGrid:
|
||||
program.grid.inner_area = rect_translate(program.grid.inner_area, rl.GetMouseDelta())
|
||||
if !rl.IsMouseButtonDown(.LEFT) {
|
||||
program.mouse_state = .Hover
|
||||
}
|
||||
case .HoverMatrices:
|
||||
program.matrix_scroll = max(0, program.matrix_scroll - rl.GetMouseWheelMove() * program.matrix_scroll_speed)
|
||||
if !rect_has_point(rect2(matrix_container.area), mouse) {
|
||||
program.mouse_state = .Hover
|
||||
}
|
||||
}
|
||||
|
||||
if rl.IsKeyPressed(.TAB) {
|
||||
ui.focus_next_element(&program.ui_context)
|
||||
}
|
||||
|
||||
grid := program.grid
|
||||
grid_inner_position := rect_get_tl(grid.inner_area)
|
||||
draw_grid(grid.area, {50.0, 50.0}, rl.GRAY)
|
||||
|
||||
program_render_ui(&program.ui_context, ui_elements)
|
||||
}
|
||||
|
||||
program_build_ui :: proc() -> []ui.Element {
|
||||
draw_grid :: proc(area: rect2, line_interval: v2, color: rl.Color) {
|
||||
br := rect_get_br(area)
|
||||
for x := area.x; x < br.x; x += line_interval.x {
|
||||
rl.DrawLineV({x, area.y}, {x, br.y}, color)
|
||||
}
|
||||
for y := area.y; y < br.y; y += line_interval.y {
|
||||
rl.DrawLineV({area.x, y}, {br.x, y}, color)
|
||||
}
|
||||
}
|
||||
|
||||
program_build_ui :: proc() -> (elements: []ui.Element, matrix_container: ^ui.Element) {
|
||||
ui.start(&program.ui_context, {0, 0}, {WINDOW_WIDTH, WINDOW_HEIGHT})
|
||||
top_bar_container_config := ui.ElementConfiguration {margin = V2_ONE * 4.0}
|
||||
top_bar_container := ui.container_begin({ui.Size_Percentage(1.0), ui.Size_Pixels(48.0)}, top_bar_container_config)
|
||||
|
|
@ -136,7 +188,7 @@ program_build_ui :: proc() -> []ui.Element {
|
|||
side_bar_container_config := ui.ElementConfiguration {margin = V2_ONE * 4.0}
|
||||
side_bar_container_data := new(UiElementData_Container, context.temp_allocator)
|
||||
side_bar_container_data^ = {type = .Scroll, scroll = program.matrix_scroll}
|
||||
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 {
|
||||
container_config := ui.ElementConfiguration{margin = V2_ONE * 8.0, label = fmt.ctprintf("Matrix %d", i)}
|
||||
container_dimensions := ui.Dimensions {ui.Size_Percentage(1.0), ui.Size_Pixels(112.0)}
|
||||
|
|
@ -145,14 +197,8 @@ program_build_ui :: proc() -> []ui.Element {
|
|||
ui_mat3(mat, value_strings, container_dimensions, container_config)
|
||||
}
|
||||
ui.container_end()
|
||||
elements := ui.end()
|
||||
|
||||
mouse := rl.GetMousePosition()
|
||||
if rect_has_point(rect2(matrix_container.area), mouse) {
|
||||
program.matrix_scroll = max(0, program.matrix_scroll - rl.GetMouseWheelMove() * program.matrix_scroll_speed)
|
||||
}
|
||||
|
||||
return elements
|
||||
elements = ui.end()
|
||||
return
|
||||
}
|
||||
|
||||
ui_mat3 :: proc(mat: []f32, value_strings: []InputFloatField, dimensions: ui.Dimensions, config: ui.ElementConfiguration, allocator := context.temp_allocator) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue