diff --git a/Cargo.lock b/Cargo.lock index f416fbb..1595a0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1033,8 +1033,10 @@ dependencies = [ "glam", "glium", "hashbrown", + "kubi-logging", "log", "nohash-hasher", + "winit", ] [[package]] diff --git a/kubi-ui/Cargo.toml b/kubi-ui/Cargo.toml index d8efc3d..9a8c322 100644 --- a/kubi-ui/Cargo.toml +++ b/kubi-ui/Cargo.toml @@ -12,9 +12,11 @@ glium = { git = "https://github.com/glium/glium", rev = "968fc92378caf", optiona log = "0.4" [dev-dependencies] +kubi-logging = { path = "../kubi-logging" } glium = { git = "https://github.com/glium/glium", rev = "968fc92378caf" } +winit = "0.29" [features] -default = ["backend_glium", "builtin_elements"] +default = ["backend_glium", "builtin"] backend_glium = ["dep:glium"] -builtin_elements = [] +builtin = [] diff --git a/kubi-ui/examples/test.rs b/kubi-ui/examples/test.rs index 6562050..7c7fe19 100644 --- a/kubi-ui/examples/test.rs +++ b/kubi-ui/examples/test.rs @@ -1,3 +1,82 @@ -pub fn main() { - //TODO ui demo +use std::time::Instant; +use glam::{Vec2, IVec2, UVec2}; +use glium::{backend::glutin::SimpleWindowBuilder, Surface}; +use winit::{ + event::{Event, WindowEvent}, + event_loop::{EventLoopBuilder, ControlFlow} +}; +use kubi_ui::{ + KubiUi, + backend::glium::GliumUiRenderer, element::{progress_bar::ProgressBar, container::{Container, Sides}, UiElement}, UiSize +}; + +fn main() { + kubi_logging::init(); + + let event_loop = EventLoopBuilder::new().build().unwrap(); + let (window, display) = SimpleWindowBuilder::new().build(&event_loop); + + let mut kui = KubiUi::new(); + let mut backend = GliumUiRenderer::new(&display); + + let instant = Instant::now(); + + event_loop.run(|event, window_target| { + window_target.set_control_flow(ControlFlow::Poll); + match event { + Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => { + window_target.exit(); + }, + Event::AboutToWait => { + let mut frame = display.draw(); + frame.clear_color_srgb(0.5, 0.5, 0.5, 0.); + + let resolution = UVec2::from(display.get_framebuffer_dimensions()).as_vec2(); + + kui.begin(); + + kui.add(Container { + gap: 5., + padding: Sides::all(5.), + elements: vec![ + Box::new(ProgressBar { + value: 0.5, + ..Default::default() + }), + Box::new(ProgressBar { + value: instant.elapsed().as_secs_f32().sin().powi(2), + ..Default::default() + }), + Box::new(Container { + gap: 1., + elements: { + let mut elements: Vec> = vec![]; + for i in 0..100 { + elements.push(Box::new(ProgressBar { + value: (instant.elapsed().as_secs_f32() + (i as f32 / 10.)).sin().powi(2), + size: (UiSize::Auto, UiSize::Pixels(5.)), + ..Default::default() + })); + } + elements + }, + ..Default::default() + }) + ], + ..Default::default() + }, resolution); + + kui.end(); + + let plan = kui.draw_plan(); + if plan.0 { + backend.update(plan.1); + } + backend.draw(&mut frame, resolution); + + frame.finish().unwrap(); + } + _ => (), + } + }).unwrap(); }