From c96492b95660640eb2dd66a77c96ad32d5d5b0ae Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 16 Jan 2020 05:54:22 +0100 Subject: Expose `window::Mode` in `iced` Although the Fullscreen API in the Web platform has some limitations, it is still useful to be able to support fullscreen on the native side. --- src/application.rs | 23 ++++++++++++++++++++++- src/lib.rs | 1 + src/settings.rs | 28 +++------------------------- src/window.rs | 6 ++++++ src/window/mode.rs | 9 +++++++++ src/window/settings.rs | 22 ++++++++++++++++++++++ 6 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 src/window.rs create mode 100644 src/window/mode.rs create mode 100644 src/window/settings.rs (limited to 'src') diff --git a/src/application.rs b/src/application.rs index 5ea64ba8..b940cc17 100644 --- a/src/application.rs +++ b/src/application.rs @@ -1,4 +1,4 @@ -use crate::{Command, Element, Settings, Subscription}; +use crate::{window, Command, Element, Settings, Subscription}; /// An interactive cross-platform application. /// @@ -138,6 +138,20 @@ pub trait Application: Sized { /// [`Application`]: trait.Application.html fn view(&mut self) -> Element<'_, Self::Message>; + /// Returns the current [`Application`] mode. + /// + /// The runtime will automatically transition your application if a new mode + /// is returned. + /// + /// Currently, the mode only has an effect in native platforms. + /// + /// By default, an application will run in windowed mode. + /// + /// [`Application`]: trait.Application.html + fn mode(&self) -> window::Mode { + window::Mode::Windowed + } + /// Runs the [`Application`]. /// /// This method will take control of the current thread and __will NOT @@ -183,6 +197,13 @@ where self.0.title() } + fn mode(&self) -> iced_winit::Mode { + match self.0.mode() { + window::Mode::Windowed => iced_winit::Mode::Windowed, + window::Mode::Fullscreen => iced_winit::Mode::Fullscreen, + } + } + fn update(&mut self, message: Self::Message) -> Command { self.0.update(message) } diff --git a/src/lib.rs b/src/lib.rs index 1ef11378..759dea2f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -189,6 +189,7 @@ mod platform; mod sandbox; pub mod settings; +pub mod window; pub use application::Application; pub use platform::*; diff --git a/src/settings.rs b/src/settings.rs index e20edc97..77c7e0b9 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -1,14 +1,15 @@ //! Configure your application. +use crate::window; /// The settings of an application. #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct Settings { - /// The [`Window`] settings. + /// The window settings. /// /// They will be ignored on the Web. /// /// [`Window`]: struct.Window.html - pub window: Window, + pub window: window::Settings, /// The bytes of the font that will be used by default. /// @@ -17,29 +18,6 @@ pub struct Settings { pub default_font: Option<&'static [u8]>, } -/// The window settings of an application. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub struct Window { - /// The size of the window. - pub size: (u32, u32), - - /// Whether the window should be resizable or not. - pub resizable: bool, - - /// Whether the window should have a border, a title bar, etc. or not. - pub decorations: bool, -} - -impl Default for Window { - fn default() -> Window { - Window { - size: (1024, 768), - resizable: true, - decorations: true, - } - } -} - #[cfg(not(target_arch = "wasm32"))] impl From for iced_winit::Settings { fn from(settings: Settings) -> iced_winit::Settings { diff --git a/src/window.rs b/src/window.rs new file mode 100644 index 00000000..54ea2a02 --- /dev/null +++ b/src/window.rs @@ -0,0 +1,6 @@ +//! Configure the window of your application in native platforms. +mod mode; +mod settings; + +pub use mode::Mode; +pub use settings::Settings; diff --git a/src/window/mode.rs b/src/window/mode.rs new file mode 100644 index 00000000..37464711 --- /dev/null +++ b/src/window/mode.rs @@ -0,0 +1,9 @@ +/// The mode of a window-based application. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Mode { + /// The application appears in its own window. + Windowed, + + /// The application takes the whole screen of its current monitor. + Fullscreen, +} diff --git a/src/window/settings.rs b/src/window/settings.rs new file mode 100644 index 00000000..a31d2af2 --- /dev/null +++ b/src/window/settings.rs @@ -0,0 +1,22 @@ +/// The window settings of an application. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Settings { + /// The size of the window. + pub size: (u32, u32), + + /// Whether the window should be resizable or not. + pub resizable: bool, + + /// Whether the window should have a border, a title bar, etc. or not. + pub decorations: bool, +} + +impl Default for Settings { + fn default() -> Settings { + Settings { + size: (1024, 768), + resizable: true, + decorations: true, + } + } +} -- cgit