commit
						11495b48ee
					
				| @ -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::Message> { | ||||
|         self.0.update(message) | ||||
|     } | ||||
|  | ||||
| @ -189,6 +189,7 @@ mod platform; | ||||
| mod sandbox; | ||||
| 
 | ||||
| pub mod settings; | ||||
| pub mod window; | ||||
| 
 | ||||
| pub use application::Application; | ||||
| pub use platform::*; | ||||
|  | ||||
| @ -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<Settings> for 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, | ||||
|     input::{keyboard, mouse}, | ||||
|     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.
 | ||||
| @ -72,6 +72,18 @@ pub trait Application: Sized { | ||||
|     /// [`Application`]: trait.Application.html
 | ||||
|     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`].
 | ||||
|     ///
 | ||||
|     /// 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); | ||||
| 
 | ||||
|         let mut title = application.title(); | ||||
|         let mut mode = application.mode(); | ||||
| 
 | ||||
|         let window = { | ||||
|             let mut window_builder = WindowBuilder::new(); | ||||
| @ -123,7 +136,11 @@ pub trait Application: Sized { | ||||
|                     height: f64::from(height), | ||||
|                 }) | ||||
|                 .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")] | ||||
|             { | ||||
| @ -244,6 +261,18 @@ pub trait Application: Sized { | ||||
|                         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( | ||||
|                         &mut application, | ||||
|                         temp_cache, | ||||
|  | ||||
| @ -7,10 +7,25 @@ use crate::{ | ||||
|         keyboard::{KeyCode, ModifiersState}, | ||||
|         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
 | ||||
| /// [`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
 | ||||
| /// [`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
 | ||||
| /// [`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
 | ||||
| /// state.
 | ||||
| /// Converts some `ModifiersState` from [`winit`] to an [`iced_native`]
 | ||||
| /// modifiers state.
 | ||||
| ///
 | ||||
| /// [`winit`]: https://github.com/rust-windowing/winit
 | ||||
| /// [`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
 | ||||
| /// [`iced_native`]: https://github.com/hecrj/iced/tree/master/native
 | ||||
|  | ||||
| @ -30,6 +30,7 @@ pub mod settings; | ||||
| 
 | ||||
| mod application; | ||||
| mod clipboard; | ||||
| mod mode; | ||||
| mod subscription; | ||||
| 
 | ||||
| // We disable debug capabilities on release builds unless the `debug` feature
 | ||||
| @ -42,6 +43,7 @@ mod debug; | ||||
| mod debug; | ||||
| 
 | ||||
| pub use application::Application; | ||||
| pub use mode::Mode; | ||||
| pub use settings::Settings; | ||||
| 
 | ||||
| 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