transformation_visualizer/program.odin
2026-07-21 19:35:21 +02:00

72 lines
1.7 KiB
Odin

package main
import rl "libraries/raylib"
import "base:runtime"
WINDOW_WIDTH :: 1280
WINDOW_HEIGHT :: 720
WINDOW_FRAMERATE :: 30
WINDOW_CAPTION :: "Transformation Visualizer"
init :: proc() {
rl.SetTraceLogLevel(.WARNING)
rl.SetConfigFlags({.WINDOW_RESIZABLE, .VSYNC_HINT})
rl.InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_CAPTION)
rl.SetTargetFPS(WINDOW_FRAMERATE)
}
update :: proc() {
rl.BeginDrawing()
defer rl.EndDrawing()
rl.ClearBackground(rl.BLACK)
ui_style := UiStyle{margin = 4.0, padding = 4.0}
ui_state: UiState
ui_init(&ui_state, ui_style, {0, 0}, context.temp_allocator)
ui_start(&ui_state)
ui_container_begin(&ui_state, {label = ""})
ui_button_size := v2{192.0, 32.0}
ui_button(&ui_state, ui_button_size, {label = "Hi"})
ui_same_line(&ui_state)
ui_button(&ui_state, ui_button_size, {label = "Hi"})
ui_same_line(&ui_state)
ui_button(&ui_state, ui_button_size, {label = "Hi"})
ui_container_end(&ui_state)
ui_elements := ui_end(ui_state)
for element in ui_elements {
switch element.type {
case .Button:
data := element.data.(UiElementData_Button)
rl.GuiButton(element.area, data.label)
case .Input:
case .Container:
data := element.data.(UiElementData_Container)
if len(data.label) == 0 {
rl.DrawRectangleRoundedLinesEx(element.area, 0.1, 2, 1.0, rl.WHITE)
} else {
rl.GuiGroupBox(element.area, data.label)
}
}
}
free_all(context.temp_allocator)
}
parent_window_size_changed :: proc(w, h: int) {
rl.SetWindowSize(i32(w), i32(h))
}
shutdown :: proc() {
rl.CloseWindow()
}
should_run :: proc() -> bool {
when ODIN_OS != .JS {
if rl.WindowShouldClose() {
return false
}
}
return true
}