diff options
author | 2022-06-15 16:46:37 -0300 | |
---|---|---|
committer | 2023-01-09 11:27:04 -0800 | |
commit | 12538d3c5be08f2109f1dc61936ceb2fda0fc5c6 (patch) | |
tree | d593332399ed98618d0017dcf05c7051aa18e360 /winit/src/multi_window.rs | |
parent | b896e41c6e03f1447419194ce41d15fb0db39d96 (diff) | |
download | iced-12538d3c5be08f2109f1dc61936ceb2fda0fc5c6.tar.gz iced-12538d3c5be08f2109f1dc61936ceb2fda0fc5c6.tar.bz2 iced-12538d3c5be08f2109f1dc61936ceb2fda0fc5c6.zip |
Use map of windows internally
Diffstat (limited to '')
-rw-r--r-- | winit/src/multi_window.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs index b519e471..8a967207 100644 --- a/winit/src/multi_window.rs +++ b/winit/src/multi_window.rs @@ -21,6 +21,7 @@ use iced_native::user_interface::{self, UserInterface}; pub use iced_native::application::{Appearance, StyleSheet}; +use std::collections::HashMap; use std::mem::ManuallyDrop; /// An interactive, native cross-platform application. @@ -169,6 +170,10 @@ where .build(&event_loop) .map_err(Error::WindowCreationFailed)?; + let windows: HashMap<usize, winit::window::Window> = + HashMap::from([(0usize, window)]); + let window = windows.values().next().expect("No window found"); + #[cfg(target_arch = "wasm32")] { use winit::platform::web::WindowExtWebSys; @@ -197,7 +202,7 @@ where debug, receiver, init_command, - window, + windows, settings.exit_on_close_request, )); @@ -247,7 +252,7 @@ async fn run_instance<A, E, C>( mut debug: Debug, mut receiver: mpsc::UnboundedReceiver<winit::event::Event<'_, A::Message>>, init_command: Command<A::Message>, - window: winit::window::Window, + windows: HashMap<usize, winit::window::Window>, exit_on_close_request: bool, ) where A: Application + 'static, @@ -258,11 +263,12 @@ async fn run_instance<A, E, C>( use iced_futures::futures::stream::StreamExt; use winit::event; - let mut clipboard = Clipboard::connect(&window); + let window = windows.values().next().expect("No window found"); + let mut clipboard = Clipboard::connect(window); let mut cache = user_interface::Cache::default(); let mut surface = compositor.create_surface(&window); - let mut state = State::new(&application, &window); + let mut state = State::new(&application, window); let mut viewport_version = state.viewport_version(); let physical_size = state.physical_size(); @@ -283,7 +289,7 @@ async fn run_instance<A, E, C>( &mut clipboard, &mut proxy, &mut debug, - &window, + &windows, || compositor.fetch_information(), ); runtime.track(application.subscription()); @@ -345,12 +351,12 @@ async fn run_instance<A, E, C>( &mut proxy, &mut debug, &mut messages, - &window, + &windows, || compositor.fetch_information(), ); // Update window - state.synchronize(&application, &window); + state.synchronize(&application, window); let should_exit = application.should_exit(); @@ -487,7 +493,7 @@ async fn run_instance<A, E, C>( break; } - state.update(&window, &window_event, &mut debug); + state.update(window, &window_event, &mut debug); if let Some(event) = conversion::window_event( &window_event, @@ -564,7 +570,7 @@ pub fn update<A: Application, E: Executor>( proxy: &mut winit::event_loop::EventLoopProxy<A::Message>, debug: &mut Debug, messages: &mut Vec<A::Message>, - window: &winit::window::Window, + windows: &HashMap<usize, winit::window::Window>, graphics_info: impl FnOnce() -> compositor::Information + Copy, ) where <A::Renderer as crate::Renderer>::Theme: StyleSheet, @@ -586,7 +592,7 @@ pub fn update<A: Application, E: Executor>( clipboard, proxy, debug, - window, + windows, graphics_info, ); } @@ -606,7 +612,7 @@ pub fn run_command<A, E>( clipboard: &mut Clipboard, proxy: &mut winit::event_loop::EventLoopProxy<A::Message>, debug: &mut Debug, - window: &winit::window::Window, + windows: &HashMap<usize, winit::window::Window>, _graphics_info: impl FnOnce() -> compositor::Information + Copy, ) where A: Application, @@ -617,6 +623,8 @@ pub fn run_command<A, E>( use iced_native::system; use iced_native::window; + let window = windows.values().next().expect("No window found"); + for action in command.actions() { match action { command::Action::Future(future) => { |