summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-12-04 04:01:12 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-12-04 04:01:12 +0100
commit561c3641c6ac62333550c3017561fa7a18663f00 (patch)
tree3e0a502ab8e37679899002e4664a148fc474a087 /winit
parent4293dcb2540144cc69a9f1370103bb780eca69f3 (diff)
parent6c145bbb239e87569bf4aa797ea7f8d34e25cf62 (diff)
downloadiced-561c3641c6ac62333550c3017561fa7a18663f00.tar.gz
iced-561c3641c6ac62333550c3017561fa7a18663f00.tar.bz2
iced-561c3641c6ac62333550c3017561fa7a18663f00.zip
Merge branch 'master' into feature/image-from-bytes
Diffstat (limited to 'winit')
-rw-r--r--winit/Cargo.toml3
-rw-r--r--winit/src/application.rs54
-rw-r--r--winit/src/debug/basic.rs2
-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
6 files changed, 70 insertions, 18 deletions
diff --git a/winit/Cargo.toml b/winit/Cargo.toml
index 2a33255d..b5b07449 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"
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 1042b412..3772a667 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -96,21 +96,35 @@ pub trait Application: Sized {
let mut title = application.title();
- let (width, height) = settings.window.size;
-
- let window = WindowBuilder::new()
- .with_title(&title)
- .with_inner_size(winit::dpi::LogicalSize {
- width: f64::from(width),
- height: f64::from(height),
- })
- .with_resizable(settings.window.resizable)
- .build(&event_loop)
- .expect("Open window");
+ let window = {
+ let mut window_builder = WindowBuilder::new();
+
+ let (width, height) = settings.window.size;
+
+ window_builder = window_builder
+ .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);
+
+ #[cfg(target_os = "windows")]
+ {
+ use winit::platform::windows::WindowBuilderExtWindows;
+
+ 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;
+ let mut resized = false;
let mut renderer = Self::Renderer::new();
@@ -143,6 +157,11 @@ pub trait Application: Sized {
event_loop.run(move |event, _, control_flow| match event {
event::Event::MainEventsCleared => {
+ if events.is_empty() && external_messages.is_empty() && !resized
+ {
+ return;
+ }
+
// TODO: We should be able to keep a user interface alive
// between events once we remove state references.
//
@@ -217,9 +236,9 @@ pub trait Application: Sized {
event::Event::RedrawRequested(_) => {
debug.render_started();
- if let Some(new_size) = new_size.take() {
+ if resized {
let dpi = window.hidpi_factor();
- let (width, height) = to_physical(new_size, dpi);
+ let (width, height) = to_physical(size, dpi);
target.resize(
width,
@@ -228,7 +247,7 @@ pub trait Application: Sized {
&renderer,
);
- size = new_size;
+ resized = false;
}
let new_mouse_cursor =
@@ -320,8 +339,9 @@ pub trait Application: Sized {
WindowEvent::CloseRequested => {
*control_flow = ControlFlow::Exit;
}
- WindowEvent::Resized(size) => {
- new_size = Some(size.into());
+ WindowEvent::Resized(new_size) => {
+ size = new_size;
+ resized = true;
log::debug!("Resized: {:?}", new_size);
}
diff --git a/winit/src/debug/basic.rs b/winit/src/debug/basic.rs
index 67c6d8a2..c9da392c 100644
--- a/winit/src/debug/basic.rs
+++ b/winit/src/debug/basic.rs
@@ -146,7 +146,7 @@ impl Debug {
let mut lines = Vec::new();
fn key_value<T: std::fmt::Debug>(key: &str, value: T) -> String {
- format!("{: <30} {:?}", key, value)
+ format!("{} {:?}", key, value)
}
lines.push(format!(
diff --git a/winit/src/settings.rs b/winit/src/settings/mod.rs
index d257ecd8..151d73d7 100644
--- a/winit/src/settings.rs
+++ b/winit/src/settings/mod.rs
@@ -1,5 +1,11 @@
//! Configure your application.
+#[cfg_attr(target_os = "windows", path = "windows.rs")]
+#[cfg_attr(not(target_os = "windows"), path = "not_windows.rs")]
+mod platform;
+
+pub use platform::PlatformSpecific;
+
/// The settings of an application.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Settings {
@@ -17,6 +23,12 @@ pub struct Window {
/// Whether the window should be resizable or not.
pub resizable: bool,
+
+ /// Whether the window should have a border, a title bar, etc.
+ pub decorations: bool,
+
+ /// Platform specific settings.
+ pub platform_specific: platform::PlatformSpecific,
}
impl Default for Window {
@@ -24,6 +36,8 @@ impl Default for Window {
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>,
+}