summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar hatoo <hato2000@gmail.com>2019-11-30 21:32:46 +0900
committerLibravatar hatoo <hato2000@gmail.com>2019-11-30 21:48:33 +0900
commit5077f1dc6a6aca5ab84dd89296fb70489393cf57 (patch)
treed6a90269600361a3a94c24a2aba110b1219d3e20
parentf0a857ddde7cf4739c1acde57e8df502e983a254 (diff)
downloadiced-5077f1dc6a6aca5ab84dd89296fb70489393cf57.tar.gz
iced-5077f1dc6a6aca5ab84dd89296fb70489393cf57.tar.bz2
iced-5077f1dc6a6aca5ab84dd89296fb70489393cf57.zip
Add platform specific settings
-rw-r--r--Cargo.toml3
-rw-r--r--src/settings/mod.rs (renamed from src/settings.rs)15
-rw-r--r--src/settings/not_windows.rs14
-rw-r--r--src/settings/windows.rs21
-rw-r--r--winit/Cargo.toml3
-rw-r--r--winit/src/application.rs21
-rw-r--r--winit/src/settings/mod.rs (renamed from winit/src/settings.rs)14
-rw-r--r--winit/src/settings/not_windows.rs6
-rw-r--r--winit/src/settings/windows.rs9
9 files changed, 106 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 7039a5b3..5361133c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -34,6 +34,9 @@ iced_wgpu = { version = "0.1.0", path = "wgpu" }
[target.'cfg(target_arch = "wasm32")'.dependencies]
iced_web = { version = "0.1.0", path = "web" }
+[target.'cfg(target_os = "windows")'.dependencies.winapi]
+version = "0.3.6"
+
[dev-dependencies]
env_logger = "0.7"
serde = { version = "1.0", features = ["derive"] }
diff --git a/src/settings.rs b/src/settings/mod.rs
index c9ece5ef..d64cfa13 100644
--- a/src/settings.rs
+++ b/src/settings/mod.rs
@@ -1,5 +1,15 @@
//! Configure your application.
+#[cfg(target_os = "windows")]
+#[path = "windows.rs"]
+pub mod platform;
+
+#[cfg(not(target_os = "windows"))]
+#[path = "not_windows.rs"]
+pub mod platform;
+
+pub use platform::PlatformSpecific;
+
/// The settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Settings {
@@ -22,6 +32,9 @@ pub struct Window {
/// Whether the window should have a border, a title bar, etc.
pub decorations: bool,
+
+ /// Platform specific Setting.
+ pub platform_specific: PlatformSpecific,
}
impl Default for Window {
@@ -30,6 +43,7 @@ impl Default for Window {
size: (1024, 768),
resizable: true,
decorations: true,
+ platform_specific: Default::default(),
}
}
}
@@ -42,6 +56,7 @@ impl From<Settings> for iced_winit::Settings {
size: settings.window.size,
resizable: settings.window.resizable,
decorations: settings.window.decorations,
+ platform_specific: settings.window.platform_specific.into(),
},
}
}
diff --git a/src/settings/not_windows.rs b/src/settings/not_windows.rs
new file mode 100644
index 00000000..1ae14c7f
--- /dev/null
+++ b/src/settings/not_windows.rs
@@ -0,0 +1,14 @@
+#![cfg(not(target_os = "windows"))]
+//! Platform specific settings for not Windows.
+
+/// The platform specific window settings of an application.
+#[cfg(not(target_os = "windows"))]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
+pub struct PlatformSpecific {}
+
+#[cfg(not(target_os = "windows"))]
+impl From<PlatformSpecific> for iced_winit::settings::PlatformSpecific {
+ fn from(_: PlatformSpecific) -> iced_winit::settings::PlatformSpecific {
+ iced_winit::settings::PlatformSpecific {}
+ }
+}
diff --git a/src/settings/windows.rs b/src/settings/windows.rs
new file mode 100644
index 00000000..0372111f
--- /dev/null
+++ b/src/settings/windows.rs
@@ -0,0 +1,21 @@
+#![cfg(target_os = "windows")]
+//! Platform specific settings for Windows.
+
+/// The platform specific window settings of an application.
+#[cfg(target_os = "windows")]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
+pub struct PlatformSpecific {
+ /// Parent Window
+ pub parent: Option<winapi::shared::windef::HWND>,
+}
+
+#[cfg(target_os = "windows")]
+impl From<PlatformSpecific> for iced_winit::settings::PlatformSpecific {
+ fn from(
+ platform_specific: PlatformSpecific,
+ ) -> iced_winit::settings::PlatformSpecific {
+ iced_winit::settings::PlatformSpecific {
+ parent: platform_specific.parent,
+ }
+ }
+}
diff --git a/winit/Cargo.toml b/winit/Cargo.toml
index 2a33255d..bc739c6d 100644
--- a/winit/Cargo.toml
+++ b/winit/Cargo.toml
@@ -15,3 +15,6 @@ iced_native = { version = "0.1.0-alpha", path = "../native" }
winit = { version = "0.20.0-alpha3", git = "https://github.com/rust-windowing/winit", rev = "709808eb4e69044705fcb214bcc30556db761405"}
futures = { version = "0.3", features = ["thread-pool"] }
log = "0.4"
+
+[target.'cfg(target_os = "windows")'.dependencies.winapi]
+version = "0.3.6" \ No newline at end of file
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 2a0e56b7..a75d57af 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -98,6 +98,7 @@ pub trait Application: Sized {
let (width, height) = settings.window.size;
+ #[cfg(not(target_os = "windows"))]
let window = WindowBuilder::new()
.with_title(&title)
.with_inner_size(winit::dpi::LogicalSize {
@@ -109,6 +110,26 @@ pub trait Application: Sized {
.build(&event_loop)
.expect("Open window");
+ #[cfg(target_os = "windows")]
+ let window = {
+ use winit::platform::windows::WindowBuilderExtWindows;
+
+ let mut window_builder = WindowBuilder::new()
+ .with_title(&title)
+ .with_inner_size(winit::dpi::LogicalSize {
+ width: f64::from(width),
+ height: f64::from(height),
+ })
+ .with_resizable(settings.window.resizable)
+ .with_decorations(settings.window.decorations);
+
+ if let Some(parent) = settings.window.platform_specific.parent {
+ window_builder = window_builder.with_parent_window(parent);
+ }
+
+ window_builder.build(&event_loop).expect("Open window")
+ };
+
let dpi = window.hidpi_factor();
let mut size = window.inner_size();
let mut new_size: Option<winit::dpi::LogicalSize> = None;
diff --git a/winit/src/settings.rs b/winit/src/settings/mod.rs
index 503b9dea..61a67bdb 100644
--- a/winit/src/settings.rs
+++ b/winit/src/settings/mod.rs
@@ -1,5 +1,15 @@
//! Configure your application.
+#[cfg(target_os = "windows")]
+#[path = "windows.rs"]
+pub mod platform;
+
+#[cfg(not(target_os = "windows"))]
+#[path = "not_windows.rs"]
+pub mod platform;
+
+pub use platform::PlatformSpecific;
+
/// The settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Settings {
@@ -20,6 +30,9 @@ pub struct Window {
/// Whether the window should have a border, a title bar, etc.
pub decorations: bool,
+
+ /// Platform specific Setting.
+ pub platform_specific: platform::PlatformSpecific,
}
impl Default for Window {
@@ -28,6 +41,7 @@ impl Default for Window {
size: (1024, 768),
resizable: true,
decorations: true,
+ platform_specific: Default::default(),
}
}
}
diff --git a/winit/src/settings/not_windows.rs b/winit/src/settings/not_windows.rs
new file mode 100644
index 00000000..5d703f84
--- /dev/null
+++ b/winit/src/settings/not_windows.rs
@@ -0,0 +1,6 @@
+#![cfg(not(target_os = "windows"))]
+//! Platform specific settings for not Windows.
+
+/// The platform specific window settings of an application.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
+pub struct PlatformSpecific {}
diff --git a/winit/src/settings/windows.rs b/winit/src/settings/windows.rs
new file mode 100644
index 00000000..76b8d067
--- /dev/null
+++ b/winit/src/settings/windows.rs
@@ -0,0 +1,9 @@
+#![cfg(target_os = "windows")]
+//! Platform specific settings for Windows.
+
+/// The platform specific window settings of an application.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
+pub struct PlatformSpecific {
+ /// Parent Window
+ pub parent: Option<winapi::shared::windef::HWND>,
+}