diff options
Diffstat (limited to '')
| -rw-r--r-- | winit/src/application.rs | 54 | ||||
| -rw-r--r-- | winit/src/debug/basic.rs | 2 | ||||
| -rw-r--r-- | winit/src/settings/mod.rs (renamed from winit/src/settings.rs) | 14 | ||||
| -rw-r--r-- | winit/src/settings/not_windows.rs | 6 | ||||
| -rw-r--r-- | winit/src/settings/windows.rs | 9 | 
5 files changed, 67 insertions, 18 deletions
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>, +}  | 
