From a0b2bb36953f018ff782cef8fc86c6db9343095d Mon Sep 17 00:00:00 2001 From: Osspial Date: Fri, 17 Aug 2018 17:49:46 -0400 Subject: [PATCH] Add StartCause::Init support, timer example --- examples/timer.rs | 33 +++++++++++++++++++++++++++++ src/platform/windows/events_loop.rs | 1 + 2 files changed, 34 insertions(+) create mode 100644 examples/timer.rs diff --git a/examples/timer.rs b/examples/timer.rs new file mode 100644 index 000000000..7e849b029 --- /dev/null +++ b/examples/timer.rs @@ -0,0 +1,33 @@ +extern crate winit; +use std::time::{Duration, Instant}; + +fn main() { + let events_loop = winit::EventLoop::new(); + + let _window = winit::WindowBuilder::new() + .with_title("A fantastic window!") + .build(&events_loop) + .unwrap(); + + events_loop.run(move |event, _, control_flow| { + println!("{:?}", event); + + match event { + winit::Event::NewEvents(winit::StartCause::Init) => + *control_flow = winit::ControlFlow::WaitTimeout(Duration::new(1, 0)), + winit::Event::NewEvents(winit::StartCause::TimeoutExpired{..}) => { + *control_flow = winit::ControlFlow::WaitTimeout(Duration::new(1, 0)); + println!("\nTimer\n"); + }, + winit::Event::NewEvents(winit::StartCause::WaitCancelled{start, requested_duration}) => { + println!("{:?}", Instant::now() - start); + *control_flow = winit::ControlFlow::WaitTimeout(requested_duration.unwrap().checked_sub(Instant::now() - start).unwrap_or(Duration::new(0, 0))); + } + winit::Event::WindowEvent { + event: winit::WindowEvent::CloseRequested, + .. + } => *control_flow = winit::ControlFlow::Exit, + _ => () + } + }); +} diff --git a/src/platform/windows/events_loop.rs b/src/platform/windows/events_loop.rs index dac7ca2ad..fbaa0d008 100644 --- a/src/platform/windows/events_loop.rs +++ b/src/platform/windows/events_loop.rs @@ -172,6 +172,7 @@ impl EventLoop { let mut msg = mem::uninitialized(); + event_handler(Event::NewEvents(StartCause::Init), &event_loop, &mut control_flow); 'main: loop { macro_rules! call_event_handler { ($event:expr) => {{