package demo // port of micro ui c demo to odin, using rlmu as renderer import "rlmu" import "core:fmt" import "core:strings" import rl "vendor:raylib" import mu "vendor:microui" log_sb := strings.builder_make() log_updated := false log_input_text := make_slice([]u8, 128) log_input_text_len : int bg : [3]u8 = { 90, 95, 100 } main :: proc() { rl.SetWindowState({ .WINDOW_RESIZABLE }) rl.InitWindow(720, 600, "Odin/Raylib/microui Demo") defer rl.CloseWindow() ctx := rlmu.init_scope() // same as calling, `rlmu.init(); defer rlmu.destroy()` for !rl.WindowShouldClose() { defer free_all(context.temp_allocator) rl.BeginDrawing(); defer rl.EndDrawing() rl.ClearBackground({ bg.r, bg.g, bg.b, 255 }) rlmu.begin_scope() // same as calling, `rlmu.begin(); defer rlmu.end()` style_window(ctx) test_window(ctx) log_window(ctx) } } style_window :: proc(ctx : ^mu.Context) { Style_Color :: struct { label: string, type: mu.Color_Type } @(static) colors := [?]Style_Color { { "text:", .TEXT }, { "border:", .BORDER }, { "windowbg:", .WINDOW_BG }, { "titlebg:", .TITLE_BG }, { "titletext:", .TITLE_TEXT }, { "panelbg:", .PANEL_BG }, { "button:", .BUTTON }, { "buttonhover:", .BUTTON_HOVER }, { "buttonfocus:", .BUTTON_FOCUS }, { "base:", .BASE }, { "basehover:", .BASE_HOVER }, { "basefocus:", .BASE_FOCUS }, { "scrollbase:", .SCROLL_BASE }, { "scrollthumb:", .SCROLL_THUMB }, } if mu.begin_window(ctx, "Style Editor", mu.Rect { 350, 250, 300, 240 }) { defer mu.end_window(ctx) slider_width := i32(f32(mu.get_current_container(ctx).body.w) * 0.14) mu.layout_row(ctx, { 80, slider_width, slider_width, slider_width, slider_width, -1 }, 0) for i in 0.. mu.Result_Set { mu.push_id_uintptr(ctx, transmute(uintptr)value) defer mu.pop_id(ctx) @(static) tmp: f32 tmp = f32(value^) res := mu.slider(ctx, &tmp, f32(low), f32(high), 0, "%.f", { .ALIGN_CENTER }) value ^= u8(tmp) return res }