use log::*;
use ombre::platform;
use ombre::platform::*;
pub fn run<R: ombre::runtime::RuntimeRenderer>(
mut win: platform::Window,
mut events: platform::Events,
mut renderer: R,
) -> Result<(), R::Error> {
let win_size = win.size();
let mut resized = false;
let mut minimized = false;
info!("window size: {}x{}", win_size.width, win_size.height);
'main: while win.is_open() {
events.poll();
let win_size = win.size();
for event in events.flush() {
match event {
WindowEvent::Resized(size) => {
if size.is_zero() {
minimized = true;
} else {
minimized = false;
resized = true;
}
}
WindowEvent::Minimized => {
minimized = true;
}
WindowEvent::Restored => {
minimized = false;
}
WindowEvent::KeyboardInput(platform::KeyboardInput {
key: Some(platform::Key::Escape),
state: platform::InputState::Pressed,
..
}) => {
break 'main;
}
_ => {}
};
}
if minimized {
continue;
}
if resized {
resized = false;
renderer.window_resized(win_size);
}
renderer.frame()?;
win.present();
}
Ok(())
}