diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/application.rs | 16 | ||||
| -rw-r--r-- | src/lib.rs | 6 | ||||
| -rw-r--r-- | src/sandbox.rs | 2 | ||||
| -rw-r--r-- | src/settings.rs | 20 | ||||
| -rw-r--r-- | src/window.rs | 2 | ||||
| -rw-r--r-- | src/window/position.rs | 33 | ||||
| -rw-r--r-- | src/window/settings.rs | 7 | 
7 files changed, 74 insertions, 12 deletions
diff --git a/src/application.rs b/src/application.rs index bda8558c..78280e98 100644 --- a/src/application.rs +++ b/src/application.rs @@ -1,6 +1,6 @@  use crate::window;  use crate::{ -    Clipboard, Color, Command, Element, Executor, Settings, Subscription, +    Clipboard, Color, Command, Element, Executor, Menu, Settings, Subscription,  };  /// An interactive cross-platform application. @@ -99,7 +99,7 @@ pub trait Application: Sized {      type Executor: Executor;      /// The type of __messages__ your [`Application`] will produce. -    type Message: std::fmt::Debug + Send; +    type Message: std::fmt::Debug + Clone + Send;      /// The data needed to initialize your [`Application`].      type Flags; @@ -191,6 +191,13 @@ pub trait Application: Sized {          false      } +    /// Returns the current system [`Menu`] of the [`Application`]. +    /// +    /// By default, it returns an empty [`Menu`]. +    fn menu(&self) -> Menu<Self::Message> { +        Menu::new() +    } +      /// Runs the [`Application`].      ///      /// On native platforms, this method will take control of the current thread @@ -208,6 +215,7 @@ pub trait Application: Sized {              let renderer_settings = crate::renderer::Settings {                  default_font: settings.default_font,                  default_text_size: settings.default_text_size, +                text_multithreading: settings.text_multithreading,                  antialiasing: if settings.antialiasing {                      Some(crate::renderer::settings::Antialiasing::MSAAx4)                  } else { @@ -296,6 +304,10 @@ where      fn should_exit(&self) -> bool {          self.0.should_exit()      } + +    fn menu(&self) -> Menu<Self::Message> { +        self.0.menu() +    }  }  #[cfg(target_arch = "wasm32")] @@ -245,7 +245,7 @@ pub use sandbox::Sandbox;  pub use settings::Settings;  pub use runtime::{ -    futures, Align, Background, Clipboard, Color, Command, Font, -    HorizontalAlignment, Length, Point, Rectangle, Size, Subscription, Vector, -    VerticalAlignment, +    futures, menu, Align, Background, Clipboard, Color, Command, Font, +    HorizontalAlignment, Length, Menu, Point, Rectangle, Size, Subscription, +    Vector, VerticalAlignment,  }; diff --git a/src/sandbox.rs b/src/sandbox.rs index 10b05a92..cb3cf624 100644 --- a/src/sandbox.rs +++ b/src/sandbox.rs @@ -88,7 +88,7 @@ use crate::{  /// ```  pub trait Sandbox {      /// The type of __messages__ your [`Sandbox`] will produce. -    type Message: std::fmt::Debug + Send; +    type Message: std::fmt::Debug + Clone + Send;      /// Initializes the [`Sandbox`].      /// diff --git a/src/settings.rs b/src/settings.rs index 2b32258d..480bf813 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -25,9 +25,11 @@ pub struct Settings<Flags> {      /// The default value is 20.      pub default_text_size: u16, -    /// Whether the [`Application`] should exit when the user requests the -    /// window to close (e.g. the user presses the close button). -    pub exit_on_close_request: bool, +    /// If enabled, spread text workload in multiple threads when multiple cores +    /// are available. +    /// +    /// By default, it is disabled. +    pub text_multithreading: bool,      /// If set to true, the renderer will try to perform antialiasing for some      /// primitives. @@ -39,6 +41,12 @@ pub struct Settings<Flags> {      ///      /// [`Canvas`]: crate::widget::Canvas      pub antialiasing: bool, + +    /// Whether the [`Application`] should exit when the user requests the +    /// window to close (e.g. the user presses the close button). +    /// +    /// By default, it is enabled. +    pub exit_on_close_request: bool,  }  impl<Flags> Settings<Flags> { @@ -53,8 +61,9 @@ impl<Flags> Settings<Flags> {              window: default_settings.window,              default_font: default_settings.default_font,              default_text_size: default_settings.default_text_size, -            exit_on_close_request: default_settings.exit_on_close_request, +            text_multithreading: default_settings.text_multithreading,              antialiasing: default_settings.antialiasing, +            exit_on_close_request: default_settings.exit_on_close_request,          }      }  } @@ -69,8 +78,9 @@ where              window: Default::default(),              default_font: Default::default(),              default_text_size: 20, -            exit_on_close_request: true, +            text_multithreading: false,              antialiasing: false, +            exit_on_close_request: true,          }      }  } diff --git a/src/window.rs b/src/window.rs index a2883b62..7d441062 100644 --- a/src/window.rs +++ b/src/window.rs @@ -1,9 +1,11 @@  //! Configure the window of your application in native platforms.  mod mode; +mod position;  mod settings;  pub mod icon;  pub use icon::Icon;  pub use mode::Mode; +pub use position::Position;  pub use settings::Settings; diff --git a/src/window/position.rs b/src/window/position.rs new file mode 100644 index 00000000..8535ef6a --- /dev/null +++ b/src/window/position.rs @@ -0,0 +1,33 @@ +/// The position of a window in a given screen. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Position { +    /// The platform-specific default position for a new window. +    Default, +    /// The window is completely centered on the screen. +    Centered, +    /// The window is positioned with specific coordinates: `(X, Y)`. +    /// +    /// When the decorations of the window are enabled, Windows 10 will add some +    /// invisible padding to the window. This padding gets included in the +    /// position. So if you have decorations enabled and want the window to be +    /// at (0, 0) you would have to set the position to +    /// `(PADDING_X, PADDING_Y)`. +    Specific(i32, i32), +} + +impl Default for Position { +    fn default() -> Self { +        Self::Default +    } +} + +#[cfg(not(target_arch = "wasm32"))] +impl From<Position> for iced_winit::Position { +    fn from(position: Position) -> Self { +        match position { +            Position::Default => Self::Default, +            Position::Centered => Self::Centered, +            Position::Specific(x, y) => Self::Specific(x, y), +        } +    } +} diff --git a/src/window/settings.rs b/src/window/settings.rs index 6b5d2985..ec6c3071 100644 --- a/src/window/settings.rs +++ b/src/window/settings.rs @@ -1,4 +1,4 @@ -use crate::window::Icon; +use crate::window::{Icon, Position};  /// The window settings of an application.  #[derive(Debug, Clone)] @@ -6,6 +6,9 @@ pub struct Settings {      /// The initial size of the window.      pub size: (u32, u32), +    /// The initial position of the window. +    pub position: Position, +      /// The minimum size of the window.      pub min_size: Option<(u32, u32)>, @@ -32,6 +35,7 @@ impl Default for Settings {      fn default() -> Settings {          Settings {              size: (1024, 768), +            position: Position::default(),              min_size: None,              max_size: None,              resizable: true, @@ -48,6 +52,7 @@ impl From<Settings> for iced_winit::settings::Window {      fn from(settings: Settings) -> Self {          Self {              size: settings.size, +            position: iced_winit::Position::from(settings.position),              min_size: settings.min_size,              max_size: settings.max_size,              resizable: settings.resizable,  | 
