diff options
Diffstat (limited to 'winit')
| -rw-r--r-- | winit/src/application.rs | 14 | ||||
| -rw-r--r-- | winit/src/conversion.rs | 33 | ||||
| -rw-r--r-- | winit/src/window.rs | 16 | 
3 files changed, 62 insertions, 1 deletions
| diff --git a/winit/src/application.rs b/winit/src/application.rs index 23364209..ecec6043 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -640,6 +640,20 @@ pub fn run_command<A, E>(                          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 = conversion::mode(window.fullscreen()); + +                    proxy +                        .send_event(tag(mode)) +                        .expect("Send message to event loop"); +                }              },              command::Action::System(action) => match action {                  system::Action::QueryInformation(_tag) => { diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 05c9746e..ba5b0002 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -182,6 +182,39 @@ pub fn position(      }  } +/// Converts a [`window::Mode`] to a [`winit`] fullscreen mode. +/// +/// [`winit`]: https://github.com/rust-windowing/winit +pub fn fullscreen( +    monitor: Option<winit::monitor::MonitorHandle>, +    mode: window::Mode, +) -> Option<winit::window::Fullscreen> { +    match mode { +        window::Mode::Windowed | window::Mode::Hidden => None, +        window::Mode::Fullscreen => { +            Some(winit::window::Fullscreen::Borderless(monitor)) +        } +    } +} + +/// Converts a [`window::Mode`] to a visibility flag. +pub fn visible(mode: window::Mode) -> bool { +    match mode { +        window::Mode::Windowed | window::Mode::Fullscreen => true, +        window::Mode::Hidden => false, +    } +} + +/// Converts a [`winit`] fullscreen mode to a [`window::Mode`]. +/// +/// [`winit`]: https://github.com/rust-windowing/winit +pub fn mode(mode: Option<winit::window::Fullscreen>) -> window::Mode { +    match mode { +        None => window::Mode::Windowed, +        Some(_) => window::Mode::Fullscreen, +    } +} +  /// Converts a `MouseCursor` from [`iced_native`] to a [`winit`] cursor icon.  ///  /// [`winit`]: https://github.com/rust-windowing/winit diff --git a/winit/src/window.rs b/winit/src/window.rs index f3207e68..265139f7 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -2,7 +2,7 @@  use crate::command::{self, Command};  use iced_native::window; -pub use window::Event; +pub use window::{Event, Mode};  /// Resizes the window to the given logical dimensions.  pub fn resize<Message>(width: u32, height: u32) -> Command<Message> { @@ -16,3 +16,17 @@ pub fn resize<Message>(width: u32, height: u32) -> Command<Message> {  pub fn move_to<Message>(x: i32, y: i32) -> Command<Message> {      Command::single(command::Action::Window(window::Action::Move { x, y }))  } + +/// Sets the [`Mode`] of the window. +pub fn set_mode<Message>(mode: Mode) -> Command<Message> { +    Command::single(command::Action::Window(window::Action::SetMode(mode))) +} + +/// Fetches the current [`Mode`] of the window. +pub fn fetch_mode<Message>( +    f: impl FnOnce(Mode) -> Message + 'static, +) -> Command<Message> { +    Command::single(command::Action::Window(window::Action::FetchMode( +        Box::new(f), +    ))) +} | 
