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 }