summaryrefslogtreecommitdiffstats
path: root/glutin/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2020-11-14 02:17:21 +0100
committerLibravatar GitHub <noreply@github.com>2020-11-14 02:17:21 +0100
commit62295f554b885b8d486b666bc10dc4ecdc78c7d6 (patch)
tree4758f6f17301b1a6c252a5a32248ae5498d1bb11 /glutin/src
parent73811c394a39c3816c67bffd2cf7d7a93c8803a9 (diff)
parentbf2d2561b8dde3e160438428b59c03c38a5f752a (diff)
downloadiced-62295f554b885b8d486b666bc10dc4ecdc78c7d6.tar.gz
iced-62295f554b885b8d486b666bc10dc4ecdc78c7d6.tar.bz2
iced-62295f554b885b8d486b666bc10dc4ecdc78c7d6.zip
Merge pull request #614 from hecrj/feature/event-capturing
Event capturing
Diffstat (limited to 'glutin/src')
-rw-r--r--glutin/src/application.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index 68612978..e593f0ae 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -156,29 +156,33 @@ async fn run_instance<A, E, C>(
let mut mouse_interaction = mouse::Interaction::default();
let mut events = Vec::new();
- let mut external_messages = Vec::new();
+ let mut messages = Vec::new();
debug.startup_finished();
while let Some(event) = receiver.next().await {
match event {
event::Event::MainEventsCleared => {
- if events.is_empty() && external_messages.is_empty() {
+ if events.is_empty() && messages.is_empty() {
continue;
}
debug.event_processing_started();
- let mut messages = user_interface.update(
+
+ let statuses = user_interface.update(
&events,
state.cursor_position(),
clipboard.as_ref().map(|c| c as _),
&mut renderer,
+ &mut messages,
);
- messages.extend(external_messages.drain(..));
- events.clear();
debug.event_processing_finished();
+ for event in events.drain(..).zip(statuses.into_iter()) {
+ runtime.broadcast(event);
+ }
+
if !messages.is_empty() {
let cache =
ManuallyDrop::into_inner(user_interface).into_cache();
@@ -188,7 +192,7 @@ async fn run_instance<A, E, C>(
&mut application,
&mut runtime,
&mut debug,
- messages,
+ &mut messages,
);
// Update window
@@ -212,7 +216,7 @@ async fn run_instance<A, E, C>(
context.window().request_redraw();
}
event::Event::UserEvent(message) => {
- external_messages.push(message);
+ messages.push(message);
}
event::Event::RedrawRequested(_) => {
debug.render_started();
@@ -283,8 +287,7 @@ async fn run_instance<A, E, C>(
state.scale_factor(),
state.modifiers(),
) {
- events.push(event.clone());
- runtime.broadcast(event);
+ events.push(event);
}
}
_ => {}