ombre 0.6.7

Shadowy game and graphics library for Rust
Documentation
use log::*;

use ombre::platform;
use ombre::platform::*;

/// Run the example runtime.
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() {
                        // On certain operating systems, the window size will be set to
                        // zero when the window is minimized. Since a zero-sized framebuffer
                        // is not valid, we don't render anything in this case.
                        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, don't update or render.
        if minimized {
            continue;
        }
        // Since we may receive multiple resize events at once, instead of responding to each
        // resize event, we handle the resize only once.
        if resized {
            resized = false;
            renderer.window_resized(win_size);
        }
        renderer.frame()?;
        win.present();
    }
    Ok(())
}