diff options
| -rw-r--r-- | glutin/src/multi_window.rs | 79 | ||||
| -rw-r--r-- | native/src/window/action.rs | 15 | ||||
| -rw-r--r-- | winit/src/application.rs | 5 | ||||
| -rw-r--r-- | winit/src/multi_window.rs | 79 | ||||
| -rw-r--r-- | winit/src/window.rs | 16 | 
5 files changed, 123 insertions, 71 deletions
| diff --git a/glutin/src/multi_window.rs b/glutin/src/multi_window.rs index ce34aa31..2a66a816 100644 --- a/glutin/src/multi_window.rs +++ b/glutin/src/multi_window.rs @@ -682,41 +682,52 @@ pub fn run_command<A, E>(                      clipboard.write(contents);                  }              }, -            command::Action::Window(id, action) => { -                let window = windows.get(&id).expect("No window found"); - -                match action { -                    window::Action::Resize { width, height } => { -                        window.set_inner_size(glutin::dpi::LogicalSize { -                            width, -                            height, -                        }); -                    } -                    window::Action::Move { x, y } => { -                        window.set_outer_position( -                            glutin::dpi::LogicalPosition { x, y }, -                        ); -                    } -                    window::Action::SetMode(mode) => { -                        window.set_visible(conversion::visible(mode)); -                        window.set_fullscreen(conversion::fullscreen( -                            window.primary_monitor(), -                            mode, -                        )); -                    } -                    window::Action::FetchMode(tag) => { -                        let mode = if window.is_visible().unwrap_or(true) { -                            conversion::mode(window.fullscreen()) -                        } else { -                            window::Mode::Hidden -                        }; - -                        proxy -                            .send_event(Event::Application(tag(mode))) -                            .expect("Send message to event loop"); -                    } +            command::Action::Window(id, action) => match action { +                window::Action::Spawn { settings } => { +                    proxy +                        .send_event(Event::NewWindow(id, settings.into())) +                        .expect("Send message to event loop");                  } -            } +                window::Action::Close => { +                    proxy +                        .send_event(Event::CloseWindow(id)) +                        .expect("Send message to event loop"); +                } +                window::Action::Resize { width, height } => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_inner_size(glutin::dpi::LogicalSize { +                        width, +                        height, +                    }); +                } +                window::Action::Move { x, y } => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_outer_position(glutin::dpi::LogicalPosition { +                        x, +                        y, +                    }); +                } +                window::Action::SetMode(mode) => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_visible(conversion::visible(mode)); +                    window.set_fullscreen(conversion::fullscreen( +                        window.primary_monitor(), +                        mode, +                    )); +                } +                window::Action::FetchMode(tag) => { +                    let window = windows.get(&id).expect("No window found"); +                    let mode = if window.is_visible().unwrap_or(true) { +                        conversion::mode(window.fullscreen()) +                    } else { +                        window::Mode::Hidden +                    }; + +                    proxy +                        .send_event(Event::Application(tag(mode))) +                        .expect("Send message to event loop"); +                } +            },              command::Action::System(action) => match action {                  system::Action::QueryInformation(_tag) => {                      #[cfg(feature = "iced_winit/system")] diff --git a/native/src/window/action.rs b/native/src/window/action.rs index 37fcc273..0587f25c 100644 --- a/native/src/window/action.rs +++ b/native/src/window/action.rs @@ -1,4 +1,4 @@ -use crate::window::{Mode, UserAttention}; +use crate::window::{self, Mode, UserAttention};  use iced_futures::MaybeSend;  use std::fmt; @@ -13,6 +13,11 @@ pub enum Action<T> {      /// There’s no guarantee that this will work unless the left mouse      /// button was pressed immediately before this function is called.      Drag, +    /// TODO(derezzedex) +    Spawn { +        /// TODO(derezzedex) +        settings: window::Settings, +    },      /// Resize the window.      Resize {          /// The new logical width of the window @@ -34,9 +39,9 @@ pub enum Action<T> {          y: i32,      },      /// Set the [`Mode`] of the window. -    SetMode(Mode), +    SetMode(window::Mode),      /// Fetch the current [`Mode`] of the window. -    FetchMode(Box<dyn FnOnce(Mode) -> T + 'static>), +    FetchMode(Box<dyn FnOnce(window::Mode) -> T + 'static>),      /// Sets the window to maximized or back      ToggleMaximize,      /// Toggles whether window has decorations @@ -81,6 +86,7 @@ impl<T> Action<T> {          T: 'static,      {          match self { +            Self::Spawn { settings } => Action::Spawn { settings },              Self::Close => Action::Close,              Self::Drag => Action::Drag,              Self::Resize { width, height } => Action::Resize { width, height }, @@ -104,6 +110,9 @@ impl<T> fmt::Debug for Action<T> {          match self {              Self::Close => write!(f, "Action::Close"),              Self::Drag => write!(f, "Action::Drag"), +            Self::Spawn { settings } => { +                write!(f, "Action::Spawn {{ settings: {:?} }}", settings) +            }              Self::Resize { width, height } => write!(                  f,                  "Action::Resize {{ widget: {}, height: {} }}", diff --git a/winit/src/application.rs b/winit/src/application.rs index 4486f5d9..910f3d94 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -675,6 +675,11 @@ pub fn run_command<A, E>(                  window::Action::Drag => {                      let _res = window.drag_window();                  } +                window::Action::Spawn { .. } | window::Action::Close => { +                    log::info!( +                        "This is only available on `multi_window::Application`" +                    ) +                }                  window::Action::Resize { width, height } => {                      window.set_inner_size(winit::dpi::LogicalSize {                          width, diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs index 9f46b88d..1d71d801 100644 --- a/winit/src/multi_window.rs +++ b/winit/src/multi_window.rs @@ -855,41 +855,52 @@ pub fn run_command<A, E>(                      clipboard.write(contents);                  }              }, -            command::Action::Window(id, action) => { -                let window = windows.get(&id).expect("No window found"); - -                match action { -                    window::Action::Resize { width, height } => { -                        window.set_inner_size(winit::dpi::LogicalSize { -                            width, -                            height, -                        }); -                    } -                    window::Action::Move { x, y } => { -                        window.set_outer_position( -                            winit::dpi::LogicalPosition { x, y }, -                        ); -                    } -                    window::Action::SetMode(mode) => { -                        window.set_visible(conversion::visible(mode)); -                        window.set_fullscreen(conversion::fullscreen( -                            window.primary_monitor(), -                            mode, -                        )); -                    } -                    window::Action::FetchMode(tag) => { -                        let mode = if window.is_visible().unwrap_or(true) { -                            conversion::mode(window.fullscreen()) -                        } else { -                            window::Mode::Hidden -                        }; - -                        proxy -                            .send_event(Event::Application(tag(mode))) -                            .expect("Send message to event loop"); -                    } +            command::Action::Window(id, action) => match action { +                window::Action::Spawn { settings } => { +                    proxy +                        .send_event(Event::NewWindow(id, settings.into())) +                        .expect("Send message to event loop");                  } -            } +                window::Action::Close => { +                    proxy +                        .send_event(Event::CloseWindow(id)) +                        .expect("Send message to event loop"); +                } +                window::Action::Resize { width, height } => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_inner_size(winit::dpi::LogicalSize { +                        width, +                        height, +                    }); +                } +                window::Action::Move { x, y } => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_outer_position(winit::dpi::LogicalPosition { +                        x, +                        y, +                    }); +                } +                window::Action::SetMode(mode) => { +                    let window = windows.get(&id).expect("No window found"); +                    window.set_visible(conversion::visible(mode)); +                    window.set_fullscreen(conversion::fullscreen( +                        window.primary_monitor(), +                        mode, +                    )); +                } +                window::Action::FetchMode(tag) => { +                    let window = windows.get(&id).expect("No window found"); +                    let mode = if window.is_visible().unwrap_or(true) { +                        conversion::mode(window.fullscreen()) +                    } else { +                        window::Mode::Hidden +                    }; + +                    proxy +                        .send_event(Event::Application(tag(mode))) +                        .expect("Send message to event loop"); +                } +            },              command::Action::System(action) => match action {                  system::Action::QueryInformation(_tag) => {                      #[cfg(feature = "system")] diff --git a/winit/src/window.rs b/winit/src/window.rs index d9bc0d83..fba863ef 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -14,6 +14,22 @@ pub fn drag<Message>() -> Command<Message> {      Command::single(command::Action::Window(window::Action::Drag))  } +/// TODO(derezzedex) +pub fn spawn<Message>( +    id: window::Id, +    settings: window::Settings, +) -> Command<Message> { +    Command::single(command::Action::Window( +        id, +        window::Action::Spawn { settings }, +    )) +} + +/// TODO(derezzedex) +pub fn close<Message>(id: window::Id) -> Command<Message> { +    Command::single(command::Action::Window(id, window::Action::Close)) +} +  /// Resizes the window to the given logical dimensions.  pub fn resize<Message>(      id: window::Id, | 
