From 3f1e09ec0e5ecb3c80eff9e1e07e24d549502275 Mon Sep 17 00:00:00 2001 From: Simas Toleikis Date: Wed, 27 Jan 2021 20:01:17 +0200 Subject: [PATCH] Add Window::is_maximized method (#1804) --- CHANGELOG.md | 1 + examples/fullscreen.rs | 5 ++--- examples/window_debug.rs | 5 ++--- src/platform_impl/android/mod.rs | 4 ++++ src/platform_impl/ios/window.rs | 5 +++++ src/platform_impl/linux/mod.rs | 6 ++++++ src/platform_impl/macos/window.rs | 5 +++++ src/platform_impl/web/window.rs | 6 ++++++ src/platform_impl/windows/window.rs | 6 ++++++ src/platform_impl/windows/window_state.rs | 2 +- src/window.rs | 11 +++++++++++ 11 files changed, 49 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 143be66df..e59e27823 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased +- Added `is_maximized` method to `Window`. - On Windows, fix bug causing newly created windows to erroneously display the "wait" (spinning) cursor. - On Windows, change the default window size (1024x768) to match the default on other desktop platforms (800x600). - On Windows, fix bug causing mouse capture to not be released. diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs index 4ed157f04..83fbde30d 100644 --- a/examples/fullscreen.rs +++ b/examples/fullscreen.rs @@ -23,7 +23,6 @@ fn main() { _ => panic!("Please enter a valid number"), }); - let mut is_maximized = false; let mut decorations = true; let window = WindowBuilder::new() @@ -59,8 +58,8 @@ fn main() { println!("window.fullscreen {:?}", window.fullscreen()); } (VirtualKeyCode::M, ElementState::Pressed) => { - is_maximized = !is_maximized; - window.set_maximized(is_maximized); + let is_maximized = window.is_maximized(); + window.set_maximized(!is_maximized); } (VirtualKeyCode::D, ElementState::Pressed) => { decorations = !decorations; diff --git a/examples/window_debug.rs b/examples/window_debug.rs index dd4007f32..577ad5cd7 100644 --- a/examples/window_debug.rs +++ b/examples/window_debug.rs @@ -28,7 +28,6 @@ fn main() { eprintln!(" (X) Toggle maximized"); let mut minimized = false; - let mut maximized = false; let mut visible = true; event_loop.run(move |event, _, control_flow| { @@ -109,8 +108,8 @@ fn main() { window.set_visible(visible); } VirtualKeyCode::X => { - maximized = !maximized; - window.set_maximized(maximized); + let is_maximized = window.is_maximized(); + window.set_maximized(!is_maximized); } _ => (), }, diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index add163a05..d98236f55 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -496,6 +496,10 @@ impl Window { pub fn set_maximized(&self, _maximized: bool) {} + pub fn is_maximized(&self) -> bool { + false + } + pub fn set_fullscreen(&self, _monitor: Option) { warn!("Cannot set fullscreen on Android"); } diff --git a/src/platform_impl/ios/window.rs b/src/platform_impl/ios/window.rs index 90c1fc2da..7a3665a2b 100644 --- a/src/platform_impl/ios/window.rs +++ b/src/platform_impl/ios/window.rs @@ -190,6 +190,11 @@ impl Inner { warn!("`Window::set_maximized` is ignored on iOS") } + pub fn is_maximized(&self) -> bool { + warn!("`Window::is_maximized` is ignored on iOS"); + false + } + pub fn set_fullscreen(&self, monitor: Option) { unsafe { let uiscreen = match monitor { diff --git a/src/platform_impl/linux/mod.rs b/src/platform_impl/linux/mod.rs index 5dea52c07..e845b83be 100644 --- a/src/platform_impl/linux/mod.rs +++ b/src/platform_impl/linux/mod.rs @@ -373,6 +373,12 @@ impl Window { x11_or_wayland!(match self; Window(w) => w.set_maximized(maximized)) } + #[inline] + pub fn is_maximized(&self) -> bool { + // TODO: Not implemented + false + } + #[inline] pub fn set_minimized(&self, minimized: bool) { x11_or_wayland!(match self; Window(w) => w.set_minimized(minimized)) diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index 7e69b53dc..94a2f541c 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -730,6 +730,11 @@ impl UnownedWindow { shared_state_lock.fullscreen.clone() } + #[inline] + pub fn is_maximized(&self) -> bool { + self.is_zoomed() + } + #[inline] pub fn set_fullscreen(&self, fullscreen: Option) { trace!("Locked shared state in `set_fullscreen`"); diff --git a/src/platform_impl/web/window.rs b/src/platform_impl/web/window.rs index 463705bfe..63e394812 100644 --- a/src/platform_impl/web/window.rs +++ b/src/platform_impl/web/window.rs @@ -232,6 +232,12 @@ impl Window { // Intentionally a no-op, as canvases cannot be 'maximized' } + #[inline] + pub fn is_maximized(&self) -> bool { + // Canvas cannot be 'maximized' + false + } + #[inline] pub fn fullscreen(&self) -> Option { if self.canvas.borrow().is_fullscreen() { diff --git a/src/platform_impl/windows/window.rs b/src/platform_impl/windows/window.rs index 0eb761609..575e4da76 100644 --- a/src/platform_impl/windows/window.rs +++ b/src/platform_impl/windows/window.rs @@ -385,6 +385,12 @@ impl Window { }); } + #[inline] + pub fn is_maximized(&self) -> bool { + let window_state = self.window_state.lock(); + window_state.window_flags.contains(WindowFlags::MAXIMIZED) + } + #[inline] pub fn fullscreen(&self) -> Option { let window_state = self.window_state.lock(); diff --git a/src/platform_impl/windows/window_state.rs b/src/platform_impl/windows/window_state.rs index 70c5330ae..6a6f0255e 100644 --- a/src/platform_impl/windows/window_state.rs +++ b/src/platform_impl/windows/window_state.rs @@ -34,7 +34,7 @@ pub struct WindowState { pub current_theme: Theme, pub preferred_theme: Option, pub high_surrogate: Option, - window_flags: WindowFlags, + pub window_flags: WindowFlags, } #[derive(Clone)] diff --git a/src/window.rs b/src/window.rs index 9ed2de06a..052f5746e 100644 --- a/src/window.rs +++ b/src/window.rs @@ -597,6 +597,17 @@ impl Window { self.window.set_maximized(maximized) } + /// Gets the window's current maximized state. + /// + /// ## Platform-specific + /// + /// - **Wayland / X11:** Not implemented. + /// - **iOS / Android / Web:** Unsupported. + #[inline] + pub fn is_maximized(&self) -> bool { + self.window.is_maximized() + } + /// Sets the window to fullscreen or back. /// /// ## Platform-specific