import std::io; import vtree; import cache; import ugui; import rl; fn int main(String[] args) { ugui::Ctx ui; ui.init()!!; short width = 800; short height = 450; rl::set_config_flags(rl::FLAG_WINDOW_RESIZABLE); rl::init_window(width, height, "Ugui Test"); ui.input_window_size(width, height)!!; rl::set_target_fps(60); rl::enable_event_waiting(); isz frame; // Main loop while (!rl::window_should_close()) { const int PARTIAL_INPUT = 0; const int PARTIAL_LAYOUT = 1; const int PARTIAL_DRAW = 2; /* Start Input Handling */ if (rl::is_window_resized()) { width = (short)rl::get_screen_width(); height = (short)rl::get_screen_height(); ui.input_window_size(width, height)!!; } ui.input_changefocus(rl::is_window_focused()); rl::Vector2 mpos = rl::get_mouse_position(); ui.input_mouse_abs((short)mpos.x, (short)mpos.y); ugui::MouseButtons buttons; buttons.btn_left = rl::is_mouse_button_down(rl::MOUSE_BUTTON_LEFT); buttons.btn_right = rl::is_mouse_button_down(rl::MOUSE_BUTTON_RIGHT); buttons.btn_middle = rl::is_mouse_button_down(rl::MOUSE_BUTTON_MIDDLE); ui.input_mouse_button(buttons); /* End Input Handling */ /* Start UI Handling */ ui.frame_begin()!!; /* // main div, fill the whole window ui.div_begin("main", ugui::Rect{.w=ui.width/2})!!; {| ui.layout_set_row()!!; if (ui.button("button0", ugui::Rect{0,0,30,30})!!.mouse_press) { io::printn("press button0"); } //ui.layout_next_column()!!; if (ui.button("button1", ugui::Rect{0,0,30,30})!!.mouse_press) { io::printn("press button1"); } //ui.layout_next_column()!!; if (ui.button("button2", ugui::Rect{0,0,30,30})!!.mouse_release) { io::printn("release button2"); } if (ui.slider_ver("slider", ugui::Rect{0,0,30,100})!!.update) { ugui::Elem* e = ui.get_elem_by_label("slider")!!; io::printfn("slider: %f", e.slider.value); } |}; ui.div_end()!!; */ ui.div_begin("second", ugui::DIV_FILL)!!; ugui::Elem* de = ui.get_elem_by_label("second")!!; de.div.scroll.can_y = true; {| ui.layout_set_column()!!; if (ui.slider_ver("slider_other", ugui::Rect{0,0,30,100})!!.update) { ugui::Elem* e = ui.get_elem_by_label("slider_other")!!; io::printfn("other slider: %f", e.slider.value); } ui.button("button10", ugui::Rect{0,0,50,50})!!; ui.button("button11", ugui::Rect{0,0,50,50})!!; ui.button("button12", ugui::Rect{0,0,50,50})!!; ui.button("button13", ugui::Rect{0,0,50,50})!!; ui.button("button14", ugui::Rect{0,0,50,50})!!; ui.button("button15", ugui::Rect{0,0,50,50})!!; ui.button("button16", ugui::Rect{0,0,50,50})!!; ui.button("button17", ugui::Rect{0,0,50,50})!!; |}; ui.div_end()!!; ui.frame_end()!!; /* End UI Handling */ /* Start UI Drawing */ rl::begin_drawing(); // ClearBackground(BLACK); rl::Color c; for (Cmd* cmd; (cmd = ui.cmd_queue.dequeue() ?? null) != null;) { switch (cmd.type) { case ugui::CmdType.CMD_RECT: c = rl::Color{ .r = cmd.rect.color.r, .g = cmd.rect.color.g, .b = cmd.rect.color.b, .a = cmd.rect.color.a, }; rl::draw_rectangle( cmd.rect.rect.x, cmd.rect.rect.y, cmd.rect.rect.w, cmd.rect.rect.h, c ); default: io::printfn("Unknown cmd type: %d", cmd.type); } } rl::end_drawing(); } rl::close_window(); ui.free(); return 0; } /* fn void! test_vtree() @test { vtree::VTree() vt; vt.init(10)!!; defer vt.free(); assert(vt.size() == 10, "Size is incorrect"); isz ref = vt.add("Ciao Mamma", 0)!!; String s = vt.get(ref)!!; assert(s == "Ciao Mamma", "String is incorrect"); isz par = vt.parentof(0)!!; assert(ref == par, "Not Root"); vt.print(); } def StrCache = cache::Cache(); fn void! test_cache() @test { StrCache cc; cc.init()!!; defer cc.free(); String*! r = cc.search(1); if (catch ex = r) { if (ex != SearchResult.MISSING) { return ex?; } } r = cc.get_or_insert(&&"Ciao Mamma", 1)!; assert(*r!! == "Ciao Mamma", "incorrect string"); } */