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 143be66d..e59e2782 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 4ed157f0..83fbde30 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 dd4007f3..577ad5cd 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 add163a0..d98236f5 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 90c1fc2d..7a3665a2 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 5dea52c0..e845b83b 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 7e69b53d..94a2f541 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 463705bf..63e39481 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 0eb76160..575e4da7 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 70c5330a..6a6f0255 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 9ed2de06..052f5746 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