diff options
author | 2020-11-12 02:51:26 +0100 | |
---|---|---|
committer | 2020-11-12 02:51:26 +0100 | |
commit | bf2d2561b8dde3e160438428b59c03c38a5f752a (patch) | |
tree | 4758f6f17301b1a6c252a5a32248ae5498d1bb11 /glutin | |
parent | 69c50c851193348ed3aab746678741f3cdda9fb3 (diff) | |
download | iced-bf2d2561b8dde3e160438428b59c03c38a5f752a.tar.gz iced-bf2d2561b8dde3e160438428b59c03c38a5f752a.tar.bz2 iced-bf2d2561b8dde3e160438428b59c03c38a5f752a.zip |
Batch event processing in `UserInterface::update`
Diffstat (limited to 'glutin')
-rw-r--r-- | glutin/src/application.rs | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs index 663654b1..e593f0ae 100644 --- a/glutin/src/application.rs +++ b/glutin/src/application.rs @@ -155,21 +155,32 @@ 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 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() && messages.is_empty() { + continue; + } + + debug.event_processing_started(); + + let statuses = user_interface.update( + &events, + state.cursor_position(), + clipboard.as_ref().map(|c| c as _), + &mut renderer, + &mut messages, + ); + debug.event_processing_finished(); - if is_clean && messages.is_empty() { - continue; + for event in events.drain(..).zip(statuses.into_iter()) { + runtime.broadcast(event); } if !messages.is_empty() { @@ -203,7 +214,6 @@ async fn run_instance<A, E, C>( debug.draw_finished(); context.window().request_redraw(); - is_clean = true; } event::Event::UserEvent(message) => { messages.push(message); @@ -277,17 +287,7 @@ async fn run_instance<A, E, C>( state.scale_factor(), state.modifiers(), ) { - let event_status = user_interface.update( - event.clone(), - state.cursor_position(), - clipboard.as_ref().map(|c| c as _), - &mut renderer, - &mut messages, - ); - - runtime.broadcast((event, event_status)); - - is_clean = false; + events.push(event); } } _ => {} |