diff options
Diffstat (limited to 'winit/src/window.rs')
-rw-r--r-- | winit/src/window.rs | 94 |
1 files changed, 58 insertions, 36 deletions
diff --git a/winit/src/window.rs b/winit/src/window.rs index 961562bd..88cd3f14 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -2,67 +2,86 @@ use crate::command::{self, Command}; use iced_native::window; -pub use window::{frames, Event, Mode, RedrawRequest, UserAttention}; +pub use window::{Event, Id, Mode, RedrawRequest, frames, UserAttention}; -/// Closes the current window and exits the application. -pub fn close<Message>() -> Command<Message> { - Command::single(command::Action::Window(window::Action::Close)) +/// Closes the window. +pub fn close<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::Close)) } /// Begins dragging the window while the left mouse button is held. -pub fn drag<Message>() -> Command<Message> { - Command::single(command::Action::Window(window::Action::Drag)) +pub fn drag<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::Drag)) +} + +/// Spawns a new window. +pub fn spawn<Message>( + id: window::Id, + settings: window::Settings, +) -> Command<Message> { + Command::single(command::Action::Window( + id, + window::Action::Spawn { settings }, + )) } /// Resizes the window to the given logical dimensions. -pub fn resize<Message>(width: u32, height: u32) -> Command<Message> { - Command::single(command::Action::Window(window::Action::Resize { - width, - height, - })) +pub fn resize<Message>( + id: window::Id, + width: u32, + height: u32, +) -> Command<Message> { + Command::single(command::Action::Window( + id, + window::Action::Resize { width, height }, + )) } /// Maximizes the window. -pub fn maximize<Message>(maximized: bool) -> Command<Message> { - Command::single(command::Action::Window(window::Action::Maximize( - maximized, - ))) +pub fn maximize<Message>(id: window::Id, maximized: bool) -> Command<Message> { + Command::single(command::Action::Window( + id, + window::Action::Maximize(maximized), + )) } /// Minimes the window. -pub fn minimize<Message>(minimized: bool) -> Command<Message> { - Command::single(command::Action::Window(window::Action::Minimize( - minimized, - ))) +pub fn minimize<Message>(id: window::Id, minimized: bool) -> Command<Message> { + Command::single(command::Action::Window( + id, + window::Action::Minimize(minimized), + )) } /// Moves a window to the given logical coordinates. -pub fn move_to<Message>(x: i32, y: i32) -> Command<Message> { - Command::single(command::Action::Window(window::Action::Move { x, y })) +pub fn move_to<Message>(id: window::Id, x: i32, y: i32) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::Move { x, y })) } -/// Sets the [`Mode`] of the window. -pub fn change_mode<Message>(mode: Mode) -> Command<Message> { - Command::single(command::Action::Window(window::Action::ChangeMode(mode))) +/// Changes the [`Mode`] of the window. +pub fn change_mode<Message>(id: window::Id, mode: Mode) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ChangeMode(mode))) } /// Fetches the current [`Mode`] of the window. pub fn fetch_mode<Message>( + id: window::Id, f: impl FnOnce(Mode) -> Message + 'static, ) -> Command<Message> { - Command::single(command::Action::Window(window::Action::FetchMode( - Box::new(f), - ))) + Command::single(command::Action::Window( + id, + window::Action::FetchMode(Box::new(f)), + )) } /// Toggles the window to maximized or back. -pub fn toggle_maximize<Message>() -> Command<Message> { - Command::single(command::Action::Window(window::Action::ToggleMaximize)) +pub fn toggle_maximize<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ToggleMaximize)) } /// Toggles the window decorations. -pub fn toggle_decorations<Message>() -> Command<Message> { - Command::single(command::Action::Window(window::Action::ToggleDecorations)) +pub fn toggle_decorations<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ToggleDecorations)) } /// Request user attention to the window, this has no effect if the application @@ -72,9 +91,11 @@ pub fn toggle_decorations<Message>() -> Command<Message> { /// Providing `None` will unset the request for user attention. Unsetting the request for /// user attention might not be done automatically by the WM when the window receives input. pub fn request_user_attention<Message>( + id: window::Id, user_attention: Option<UserAttention>, ) -> Command<Message> { Command::single(command::Action::Window( + id, window::Action::RequestUserAttention(user_attention), )) } @@ -85,22 +106,23 @@ pub fn request_user_attention<Message>( /// This [`Command`] steals input focus from other applications. Do not use this method unless /// you are certain that's what the user wants. Focus stealing can cause an extremely disruptive /// user experience. -pub fn gain_focus<Message>() -> Command<Message> { - Command::single(command::Action::Window(window::Action::GainFocus)) +pub fn gain_focus<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::GainFocus)) } /// Changes whether or not the window will always be on top of other windows. -pub fn change_always_on_top<Message>(on_top: bool) -> Command<Message> { - Command::single(command::Action::Window(window::Action::ChangeAlwaysOnTop( +pub fn change_always_on_top<Message>(id: window::Id, on_top: bool) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ChangeAlwaysOnTop( on_top, ))) } /// Fetches an identifier unique to the window. pub fn fetch_id<Message>( + id: window::Id, f: impl FnOnce(u64) -> Message + 'static, ) -> Command<Message> { - Command::single(command::Action::Window(window::Action::FetchId(Box::new( + Command::single(command::Action::Window(id: window::Id, window::Action::FetchId(Box::new( f, )))) } |