summaryrefslogtreecommitdiffstats
path: root/glutin
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 02:00:08 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 02:00:08 +0100
commit33d80b5a0b8b5b2837c99be2a152bdeb73ca60c8 (patch)
tree2e594f804df5c5993b5096194f10cf5fc24c4462 /glutin
parent6e9bd0d9d1dc9a98645d427d62b8413273dc6efd (diff)
downloadiced-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.rs39
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;
}
}
_ => {}