summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-30 18:00:15 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-03-30 18:10:15 +0200
commitc4c5216e3b69d732b0518d510f95675a4ba7010b (patch)
tree25e14890319bbab46aeb5133ef1c694959b9f694 /winit
parent6e9ab1cd6f5358d323040379e3aadbed2cc4f7f8 (diff)
downloadiced-c4c5216e3b69d732b0518d510f95675a4ba7010b.tar.gz
iced-c4c5216e3b69d732b0518d510f95675a4ba7010b.tar.bz2
iced-c4c5216e3b69d732b0518d510f95675a4ba7010b.zip
Allow passing external state to `Application::new`
Diffstat (limited to 'winit')
-rw-r--r--winit/src/application.rs21
-rw-r--r--winit/src/settings.rs (renamed from winit/src/settings/mod.rs)19
2 files changed, 24 insertions, 16 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index b9d5fed8..d5f957bf 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -28,7 +28,13 @@ pub trait Application: Sized {
/// [`Application`]: trait.Application.html
type Message: std::fmt::Debug + Send;
- /// Initializes the [`Application`].
+ /// The data needed to initialize your [`Application`].
+ ///
+ /// [`Application`]: trait.Application.html
+ type Flags;
+
+ /// Initializes the [`Application`] with the flags provided to
+ /// [`run`] as part of the [`Settings`]:
///
/// Here is where you should return the initial state of your app.
///
@@ -38,7 +44,9 @@ pub trait Application: Sized {
/// request, etc.
///
/// [`Application`]: trait.Application.html
- fn new() -> (Self, Command<Self::Message>);
+ /// [`run`]: #method.run.html
+ /// [`Settings`]: struct.Settings.html
+ fn new(flags: Self::Flags) -> (Self, Command<Self::Message>);
/// Returns the current title of the [`Application`].
///
@@ -90,7 +98,7 @@ pub trait Application: Sized {
Mode::Windowed
}
- /// Runs the [`Application`].
+ /// Runs the [`Application`] with the provided [`Settings`].
///
/// This method will take control of the current thread and __will NOT
/// return__.
@@ -98,8 +106,9 @@ pub trait Application: Sized {
/// It should probably be that last thing you call in your `main` function.
///
/// [`Application`]: trait.Application.html
+ /// [`Settings`]: struct.Settings.html
fn run(
- settings: Settings,
+ settings: Settings<Self::Flags>,
backend_settings: <Self::Backend as window::Backend>::Settings,
) where
Self: 'static,
@@ -123,7 +132,9 @@ pub trait Application: Sized {
Runtime::new(executor, Proxy::new(event_loop.create_proxy()))
};
- let (mut application, init_command) = runtime.enter(Self::new);
+ let flags = settings.flags;
+ let (mut application, init_command) =
+ runtime.enter(|| Self::new(flags));
runtime.spawn(init_command);
let subscription = application.subscription();
diff --git a/winit/src/settings/mod.rs b/winit/src/settings.rs
index b2290b46..d58c51f0 100644
--- a/winit/src/settings/mod.rs
+++ b/winit/src/settings.rs
@@ -1,28 +1,25 @@
//! Configure your application.
#[cfg(target_os = "windows")]
-#[path = "windows.rs"]
+#[path = "settings/windows.rs"]
mod platform;
#[cfg(not(target_os = "windows"))]
-#[path = "not_windows.rs"]
+#[path = "settings/not_windows.rs"]
mod platform;
pub use platform::PlatformSpecific;
/// The settings of an application.
-#[derive(Debug, Clone, Copy, PartialEq)]
-pub struct Settings {
+#[derive(Debug, Clone, Copy, PartialEq, Default)]
+pub struct Settings<Flags> {
/// The [`Window`] settings
///
/// [`Window`]: struct.Window.html
pub window: Window,
-}
-impl Default for Settings {
- fn default() -> Settings {
- Settings {
- window: Window::default(),
- }
- }
+ /// The data needed to initialize an [`Application`].
+ ///
+ /// [`Application`]: trait.Application.html
+ pub flags: Flags,
}
/// The window settings of an application.