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.
This commit is contained in:
parent
d6b20d3e79
commit
c96492b956
@ -1,8 +1,6 @@
|
|||||||
//! Build window-based GUI applications.
|
//! Build window-based GUI applications.
|
||||||
mod event;
|
mod event;
|
||||||
mod mode;
|
|
||||||
mod renderer;
|
mod renderer;
|
||||||
|
|
||||||
pub use event::Event;
|
pub use event::Event;
|
||||||
pub use mode::Mode;
|
|
||||||
pub use renderer::{Renderer, Target};
|
pub use renderer::{Renderer, Target};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::{Command, Element, Settings, Subscription};
|
use crate::{window, Command, Element, Settings, Subscription};
|
||||||
|
|
||||||
/// An interactive cross-platform application.
|
/// An interactive cross-platform application.
|
||||||
///
|
///
|
||||||
@ -138,6 +138,20 @@ pub trait Application: Sized {
|
|||||||
/// [`Application`]: trait.Application.html
|
/// [`Application`]: trait.Application.html
|
||||||
fn view(&mut self) -> Element<'_, Self::Message>;
|
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`].
|
/// Runs the [`Application`].
|
||||||
///
|
///
|
||||||
/// This method will take control of the current thread and __will NOT
|
/// This method will take control of the current thread and __will NOT
|
||||||
@ -183,6 +197,13 @@ where
|
|||||||
self.0.title()
|
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::Message> {
|
fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
|
||||||
self.0.update(message)
|
self.0.update(message)
|
||||||
}
|
}
|
||||||
|
@ -189,6 +189,7 @@ mod platform;
|
|||||||
mod sandbox;
|
mod sandbox;
|
||||||
|
|
||||||
pub mod settings;
|
pub mod settings;
|
||||||
|
pub mod window;
|
||||||
|
|
||||||
pub use application::Application;
|
pub use application::Application;
|
||||||
pub use platform::*;
|
pub use platform::*;
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
//! Configure your application.
|
//! Configure your application.
|
||||||
|
use crate::window;
|
||||||
|
|
||||||
/// The settings of an application.
|
/// The settings of an application.
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
||||||
pub struct Settings {
|
pub struct Settings {
|
||||||
/// The [`Window`] settings.
|
/// The window settings.
|
||||||
///
|
///
|
||||||
/// They will be ignored on the Web.
|
/// They will be ignored on the Web.
|
||||||
///
|
///
|
||||||
/// [`Window`]: struct.Window.html
|
/// [`Window`]: struct.Window.html
|
||||||
pub window: Window,
|
pub window: window::Settings,
|
||||||
|
|
||||||
/// The bytes of the font that will be used by default.
|
/// The bytes of the font that will be used by default.
|
||||||
///
|
///
|
||||||
@ -17,29 +18,6 @@ pub struct Settings {
|
|||||||
pub default_font: Option<&'static [u8]>,
|
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"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
impl From<Settings> for iced_winit::Settings {
|
impl From<Settings> for iced_winit::Settings {
|
||||||
fn from(settings: Settings) -> iced_winit::Settings {
|
fn from(settings: Settings) -> iced_winit::Settings {
|
||||||
|
6
src/window.rs
Normal file
6
src/window.rs
Normal file
@ -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;
|
22
src/window/settings.rs
Normal file
22
src/window/settings.rs
Normal file
@ -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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,7 @@ use crate::{
|
|||||||
conversion,
|
conversion,
|
||||||
input::{keyboard, mouse},
|
input::{keyboard, mouse},
|
||||||
subscription, window, Cache, Clipboard, Command, Debug, Element, Event,
|
subscription, window, Cache, Clipboard, Command, Debug, Element, Event,
|
||||||
MouseCursor, Settings, Size, Subscription, UserInterface,
|
Mode, MouseCursor, Settings, Size, Subscription, UserInterface,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An interactive, native cross-platform application.
|
/// An interactive, native cross-platform application.
|
||||||
@ -80,8 +80,8 @@ pub trait Application: Sized {
|
|||||||
/// By default, an application will run in windowed mode.
|
/// By default, an application will run in windowed mode.
|
||||||
///
|
///
|
||||||
/// [`Application`]: trait.Application.html
|
/// [`Application`]: trait.Application.html
|
||||||
fn mode(&self) -> window::Mode {
|
fn mode(&self) -> Mode {
|
||||||
window::Mode::Windowed
|
Mode::Windowed
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs the [`Application`].
|
/// Runs the [`Application`].
|
||||||
|
@ -7,23 +7,25 @@ use crate::{
|
|||||||
keyboard::{KeyCode, ModifiersState},
|
keyboard::{KeyCode, ModifiersState},
|
||||||
mouse, ButtonState,
|
mouse, ButtonState,
|
||||||
},
|
},
|
||||||
window, MouseCursor,
|
Mode, MouseCursor,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Convert a `Mode` from [`iced_native`] to a [`winit`] fullscreen mode.
|
/// Converts a [`Mode`] to a [`winit`] fullscreen mode.
|
||||||
|
///
|
||||||
|
/// [`Mode`]:
|
||||||
pub fn fullscreen(
|
pub fn fullscreen(
|
||||||
monitor: winit::monitor::MonitorHandle,
|
monitor: winit::monitor::MonitorHandle,
|
||||||
mode: window::Mode,
|
mode: Mode,
|
||||||
) -> Option<winit::window::Fullscreen> {
|
) -> Option<winit::window::Fullscreen> {
|
||||||
match mode {
|
match mode {
|
||||||
window::Mode::Windowed => None,
|
Mode::Windowed => None,
|
||||||
window::Mode::Fullscreen => {
|
Mode::Fullscreen => {
|
||||||
Some(winit::window::Fullscreen::Borderless(monitor))
|
Some(winit::window::Fullscreen::Borderless(monitor))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a `MouseCursor` from [`iced_native`] to a [`winit`] cursor icon.
|
/// Converts a `MouseCursor` from [`iced_native`] to a [`winit`] cursor icon.
|
||||||
///
|
///
|
||||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||||
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
||||||
@ -39,7 +41,7 @@ pub fn mouse_cursor(mouse_cursor: MouseCursor) -> winit::window::CursorIcon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a `MouseButton` from [`winit`] to an [`iced_native`] mouse button.
|
/// Converts a `MouseButton` from [`winit`] to an [`iced_native`] mouse button.
|
||||||
///
|
///
|
||||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||||
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
||||||
@ -52,7 +54,7 @@ pub fn mouse_button(mouse_button: winit::event::MouseButton) -> mouse::Button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert an `ElementState` from [`winit`] to an [`iced_native`] button state.
|
/// Converts an `ElementState` from [`winit`] to an [`iced_native`] button state.
|
||||||
///
|
///
|
||||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||||
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
||||||
@ -63,8 +65,8 @@ pub fn button_state(element_state: winit::event::ElementState) -> ButtonState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert some `ModifiersState` from [`winit`] to an [`iced_native`] modifiers
|
/// Converts some `ModifiersState` from [`winit`] to an [`iced_native`]
|
||||||
/// state.
|
/// modifiers state.
|
||||||
///
|
///
|
||||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||||
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
||||||
@ -79,7 +81,7 @@ pub fn modifiers_state(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a `VirtualKeyCode` from [`winit`] to an [`iced_native`] key code.
|
/// Converts a `VirtualKeyCode` from [`winit`] to an [`iced_native`] key code.
|
||||||
///
|
///
|
||||||
/// [`winit`]: https://github.com/rust-windowing/winit
|
/// [`winit`]: https://github.com/rust-windowing/winit
|
||||||
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
/// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
|
||||||
|
@ -30,6 +30,7 @@ pub mod settings;
|
|||||||
|
|
||||||
mod application;
|
mod application;
|
||||||
mod clipboard;
|
mod clipboard;
|
||||||
|
mod mode;
|
||||||
mod subscription;
|
mod subscription;
|
||||||
|
|
||||||
// We disable debug capabilities on release builds unless the `debug` feature
|
// We disable debug capabilities on release builds unless the `debug` feature
|
||||||
@ -42,6 +43,7 @@ mod debug;
|
|||||||
mod debug;
|
mod debug;
|
||||||
|
|
||||||
pub use application::Application;
|
pub use application::Application;
|
||||||
|
pub use mode::Mode;
|
||||||
pub use settings::Settings;
|
pub use settings::Settings;
|
||||||
|
|
||||||
use clipboard::Clipboard;
|
use clipboard::Clipboard;
|
||||||
|
9
winit/src/mode.rs
Normal file
9
winit/src/mode.rs
Normal file
@ -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,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user