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