From 50befb5a0f74c7a785c28e6614d97f5e9d66973e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A8ir=20Noordermeer?= Date: Sat, 20 Jun 2020 19:26:47 +0200 Subject: [PATCH] Do not redraw until main events are cleared (#315). Fixes #282 Fixes unresponsiveness to input --- src/main.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 45273ff..216034b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -304,6 +304,12 @@ fn main2() { let mut last_resource_version = 0; events_loop.run(move |event, _event_loop, control_flow| { + *control_flow = glutin::event_loop::ControlFlow::Poll; + + if !handle_window_event(&mut window, &mut game, &mut ui_container, event) { + return; + } + let now = Instant::now(); let diff = now.duration_since(last_frame); last_frame = now; @@ -359,8 +365,6 @@ fn main2() { } window.swap_buffers().expect("Failed to swap GL buffers"); - handle_window_event(&mut window, &mut game, &mut ui_container, event); - if game.should_close { *control_flow = glutin::event_loop::ControlFlow::Exit; } @@ -370,9 +374,10 @@ fn main2() { fn handle_window_event(window: &mut glutin::WindowedContext, game: &mut Game, ui_container: &mut ui::Container, - event: glutin::event::Event) { + event: glutin::event::Event) -> bool { use glutin::event::*; match event { + Event::MainEventsCleared => return true, Event::DeviceEvent{event, ..} => match event { DeviceEvent::ModifiersChanged(modifiers_state) => { game.is_ctrl_pressed = modifiers_state.ctrl(); @@ -443,12 +448,12 @@ fn handle_window_event(window: &mut glutin::WindowedContext { @@ -538,4 +543,6 @@ fn handle_window_event(window: &mut glutin::WindowedContext (), } + + false }