diff options
author | 2020-11-12 02:00:08 +0100 | |
---|---|---|
committer | 2020-11-12 02:00:08 +0100 | |
commit | 33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8 (patch) | |
tree | 2e594f804df5c5993b5096194f10cf5fc24c4462 /glutin | |
parent | 6e9bd0d9d1dc9a98645d427d62b8413273dc6efd (diff) | |
download | iced-33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8.tar.gz iced-33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8.tar.bz2 iced-33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8.zip |
Return `event::Status` in `UserInterface::update`
Diffstat (limited to 'glutin')
-rw-r--r-- | glutin/src/application.rs | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs index 68612978..bc590912 100644 --- a/glutin/src/application.rs +++ b/glutin/src/application.rs @@ -155,30 +155,23 @@ async fn run_instance<A, E, C>( user_interface.draw(&mut renderer, state.cursor_position()); let mut mouse_interaction = mouse::Interaction::default(); - let mut events = Vec::new(); - let mut external_messages = Vec::new(); + let mut messages = Vec::new(); + let mut is_clean = true; debug.startup_finished(); while let Some(event) = receiver.next().await { match event { + event::Event::NewEvents(_) => { + debug.event_processing_started(); + } event::Event::MainEventsCleared => { - if events.is_empty() && external_messages.is_empty() { + debug.event_processing_finished(); + + if is_clean && messages.is_empty() { continue; } - debug.event_processing_started(); - let mut messages = user_interface.update( - &events, - state.cursor_position(), - clipboard.as_ref().map(|c| c as _), - &mut renderer, - ); - - messages.extend(external_messages.drain(..)); - events.clear(); - debug.event_processing_finished(); - if !messages.is_empty() { let cache = ManuallyDrop::into_inner(user_interface).into_cache(); @@ -188,7 +181,7 @@ async fn run_instance<A, E, C>( &mut application, &mut runtime, &mut debug, - messages, + &mut messages, ); // Update window @@ -210,9 +203,10 @@ async fn run_instance<A, E, C>( debug.draw_finished(); context.window().request_redraw(); + is_clean = true; } event::Event::UserEvent(message) => { - external_messages.push(message); + messages.push(message); } event::Event::RedrawRequested(_) => { debug.render_started(); @@ -283,8 +277,17 @@ async fn run_instance<A, E, C>( state.scale_factor(), state.modifiers(), ) { - events.push(event.clone()); + let _ = user_interface.update( + event.clone(), + state.cursor_position(), + clipboard.as_ref().map(|c| c as _), + &mut renderer, + &mut messages, + ); + runtime.broadcast(event); + + is_clean = false; } } _ => {} |