diff --git a/.gitignore b/.gitignore index 4ea67ad..d7d12fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *~ *.swp -/target -/Cargo.lock +target +Cargo.lock +imgui.ini diff --git a/examples/test_window/Cargo.toml b/examples/test_window/Cargo.toml new file mode 100644 index 0000000..243d87d --- /dev/null +++ b/examples/test_window/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "test_window" +version = "0.0.0" +authors = ["Joonas Javanainen "] + +[dependencies] +glium = "0.8" +time = "0.1" + +[dependencies.imgui-rs] +path = "../../" +features = ["glium"] diff --git a/examples/test_window/src/main.rs b/examples/test_window/src/main.rs new file mode 100644 index 0000000..31ed576 --- /dev/null +++ b/examples/test_window/src/main.rs @@ -0,0 +1,62 @@ +#[macro_use] +extern crate glium; +extern crate imgui; +extern crate time; + +use glium::DisplayBuild; +use glium::Surface; +use glium::glutin; +use glium::glutin::{ElementState, Event, MouseButton, VirtualKeyCode}; +use imgui::ImGui; +use imgui::glium_renderer::Renderer; +use time::SteadyTime; + +fn main() { + + let display = glutin::WindowBuilder::new() + .build_glium() + .unwrap(); + + let mut imgui = ImGui::init(); + let mut renderer = Renderer::init(&mut imgui, &display).unwrap(); + + let mut last_frame = SteadyTime::now(); + let mut mouse_pos = (0, 0); + let mut mouse_pressed = (false, false, false); + + 'main: loop { + let now = SteadyTime::now(); + let delta = now - last_frame; + let delta_f = delta.num_nanoseconds().unwrap() as f32 / 1_000_000_000.0; + last_frame = now; + + imgui.set_mouse_pos(mouse_pos.0 as f32, mouse_pos.1 as f32); + imgui.set_mouse_down(&[mouse_pressed.0, mouse_pressed.1, mouse_pressed.2, false, false]); + + let mut target = display.draw(); + target.clear_color(1.0, 1.0, 1.0, 1.0); + + let (width, height) = target.get_dimensions(); + let mut frame = imgui.frame(width, height, delta_f); + frame.show_test_window(); + renderer.render(&mut target, frame).unwrap(); + + target.finish().unwrap(); + + for event in display.poll_events() { + match event { + Event::Closed | + Event::KeyboardInput(ElementState::Pressed, _, Some(VirtualKeyCode::Escape)) + => break 'main, + Event::MouseMoved(pos) => mouse_pos = pos, + Event::MouseInput(state, MouseButton::Left) => + mouse_pressed.0 = state == ElementState::Pressed, + Event::MouseInput(state, MouseButton::Right) => + mouse_pressed.1 = state == ElementState::Pressed, + Event::MouseInput(state, MouseButton::Middle) => + mouse_pressed.2 = state == ElementState::Pressed, + _ => () + } + } + } +}