commit
11495b48ee
@ -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;
|
||||||
9
src/window/mode.rs
Normal file
9
src/window/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,
|
||||||
|
}
|
||||||
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.
|
||||||
@ -72,6 +72,18 @@ pub trait Application: Sized {
|
|||||||
/// [`Application`]: trait.Application.html
|
/// [`Application`]: trait.Application.html
|
||||||
fn view(&mut self) -> Element<'_, Self::Message, Self::Renderer>;
|
fn view(&mut self) -> Element<'_, Self::Message, Self::Renderer>;
|
||||||
|
|
||||||
|
/// Returns the current [`Application`] mode.
|
||||||
|
///
|
||||||
|
/// The runtime will automatically transition your application if a new mode
|
||||||
|
/// is returned.
|
||||||
|
///
|
||||||
|
/// By default, an application will run in windowed mode.
|
||||||
|
///
|
||||||
|
/// [`Application`]: trait.Application.html
|
||||||
|
fn mode(&self) -> Mode {
|
||||||
|
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
|
||||||
@ -110,6 +122,7 @@ pub trait Application: Sized {
|
|||||||
subscription_pool.update(subscription, &mut thread_pool, &proxy);
|
subscription_pool.update(subscription, &mut thread_pool, &proxy);
|
||||||
|
|
||||||
let mut title = application.title();
|
let mut title = application.title();
|
||||||
|
let mut mode = application.mode();
|
||||||
|
|
||||||
let window = {
|
let window = {
|
||||||
let mut window_builder = WindowBuilder::new();
|
let mut window_builder = WindowBuilder::new();
|
||||||
@ -123,7 +136,11 @@ pub trait Application: Sized {
|
|||||||
height: f64::from(height),
|
height: f64::from(height),
|
||||||
})
|
})
|
||||||
.with_resizable(settings.window.resizable)
|
.with_resizable(settings.window.resizable)
|
||||||
.with_decorations(settings.window.decorations);
|
.with_decorations(settings.window.decorations)
|
||||||
|
.with_fullscreen(conversion::fullscreen(
|
||||||
|
event_loop.primary_monitor(),
|
||||||
|
mode,
|
||||||
|
));
|
||||||
|
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
{
|
{
|
||||||
@ -244,6 +261,18 @@ pub trait Application: Sized {
|
|||||||
title = new_title;
|
title = new_title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update window mode
|
||||||
|
let new_mode = application.mode();
|
||||||
|
|
||||||
|
if mode != new_mode {
|
||||||
|
window.set_fullscreen(conversion::fullscreen(
|
||||||
|
window.current_monitor(),
|
||||||
|
new_mode,
|
||||||
|
));
|
||||||
|
|
||||||
|
mode = new_mode;
|
||||||
|
}
|
||||||
|
|
||||||
let user_interface = build_user_interface(
|
let user_interface = build_user_interface(
|
||||||
&mut application,
|
&mut application,
|
||||||
temp_cache,
|
temp_cache,
|
||||||
|
|||||||
@ -7,10 +7,25 @@ use crate::{
|
|||||||
keyboard::{KeyCode, ModifiersState},
|
keyboard::{KeyCode, ModifiersState},
|
||||||
mouse, ButtonState,
|
mouse, ButtonState,
|
||||||
},
|
},
|
||||||
MouseCursor,
|
Mode, MouseCursor,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Convert a `MouseCursor` from [`iced_native`] to a [`winit`] cursor icon.
|
/// Converts a [`Mode`] to a [`winit`] fullscreen mode.
|
||||||
|
///
|
||||||
|
/// [`Mode`]:
|
||||||
|
pub fn fullscreen(
|
||||||
|
monitor: winit::monitor::MonitorHandle,
|
||||||
|
mode: Mode,
|
||||||
|
) -> Option<winit::window::Fullscreen> {
|
||||||
|
match mode {
|
||||||
|
Mode::Windowed => None,
|
||||||
|
Mode::Fullscreen => {
|
||||||
|
Some(winit::window::Fullscreen::Borderless(monitor))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 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
|
||||||
@ -26,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
|
||||||
@ -39,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
|
||||||
@ -50,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
|
||||||
@ -66,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…
x
Reference in New Issue
Block a user