fix: temporarily add window::Id to

events internaly
This commit is contained in:
Richard 2022-07-14 10:13:37 -03:00 committed by bungoboingo
parent 97914daaab
commit 8f53df560e

View file

@ -368,13 +368,27 @@ async fn run_instance<A, E, C>(
'main: while let Some(event) = receiver.next().await { 'main: while let Some(event) = receiver.next().await {
match event { match event {
event::Event::MainEventsCleared => { event::Event::MainEventsCleared => {
dbg!(states.keys().collect::<Vec<_>>());
for id in states.keys().copied().collect::<Vec<_>>() { for id in states.keys().copied().collect::<Vec<_>>() {
let (filtered, remaining): (Vec<_>, Vec<_>) = events
.iter()
.cloned()
.partition(
|(window_id, _event): &(
Option<crate::window::Id>,
iced_native::event::Event,
)| {
*window_id == Some(id) || *window_id == None
},
);
events.retain(|el| remaining.contains(el));
let filtered: Vec<_> = filtered.into_iter().map(|(_id, event)| event.clone()).collect();
let cursor_position = let cursor_position =
states.get(&id).unwrap().state.cursor_position(); states.get(&id).unwrap().state.cursor_position();
let window = windows.get(&id).unwrap(); let window = windows.get(&id).unwrap();
if events.is_empty() && messages.is_empty() { if filtered.is_empty() && messages.is_empty() {
continue; continue;
} }
@ -383,7 +397,7 @@ async fn run_instance<A, E, C>(
let (interface_state, statuses) = { let (interface_state, statuses) = {
let user_interface = interfaces.get_mut(&id).unwrap(); let user_interface = interfaces.get_mut(&id).unwrap();
user_interface.update( user_interface.update(
&events, &filtered,
cursor_position, cursor_position,
&mut renderer, &mut renderer,
&mut clipboard, &mut clipboard,
@ -393,11 +407,11 @@ async fn run_instance<A, E, C>(
debug.event_processing_finished(); debug.event_processing_finished();
// TODO(derezzedex): only drain events for this window for event in filtered.into_iter().zip(statuses.into_iter()) {
for event in events.drain(..).zip(statuses.into_iter()) {
runtime.broadcast(event); runtime.broadcast(event);
} }
// TODO(derezzedex): Should we redraw every window? We can't know what changed.
if !messages.is_empty() if !messages.is_empty()
|| matches!( || matches!(
interface_state, interface_state,
@ -475,18 +489,22 @@ async fn run_instance<A, E, C>(
mouse_interaction = new_mouse_interaction; mouse_interaction = new_mouse_interaction;
} }
window.request_redraw(); for window in windows.values(){
window.request_redraw();
}
} }
} }
event::Event::PlatformSpecific(event::PlatformSpecific::MacOS( event::Event::PlatformSpecific(event::PlatformSpecific::MacOS(
event::MacOS::ReceivedUrl(url), event::MacOS::ReceivedUrl(url),
)) => { )) => {
use iced_native::event; use iced_native::event;
events.push((
events.push(iced_native::Event::PlatformSpecific( None,
event::PlatformSpecific::MacOS(event::MacOS::ReceivedUrl( iced_native::Event::PlatformSpecific(
url, event::PlatformSpecific::MacOS(
)), event::MacOS::ReceivedUrl(url),
),
),
)); ));
} }
event::Event::UserEvent(event) => match event { event::Event::UserEvent(event) => match event {
@ -529,12 +547,6 @@ async fn run_instance<A, E, C>(
.get(&id) .get(&id)
.and_then(|id| states.get_mut(id)) .and_then(|id| states.get_mut(id))
.unwrap(); .unwrap();
let mut user_interface = window_ids
.get(&id)
.and_then(|id| interfaces.remove(id))
.unwrap();
let physical_size = window_state.state.physical_size(); let physical_size = window_state.state.physical_size();
if physical_size.width == 0 || physical_size.height == 0 { if physical_size.width == 0 || physical_size.height == 0 {
@ -544,6 +556,11 @@ async fn run_instance<A, E, C>(
debug.render_started(); debug.render_started();
if window_state.state.viewport_changed() { if window_state.state.viewport_changed() {
let mut user_interface = window_ids
.get(&id)
.and_then(|id| interfaces.remove(id))
.unwrap();
let logical_size = window_state.state.logical_size(); let logical_size = window_state.state.logical_size();
debug.layout_started(); debug.layout_started();
@ -647,7 +664,7 @@ async fn run_instance<A, E, C>(
window_state.state.scale_factor(), window_state.state.scale_factor(),
window_state.state.modifiers(), window_state.state.modifiers(),
) { ) {
events.push(event); events.push((window_ids.get(&window_id).cloned(), event));
} }
} }
_ => {} _ => {}