diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c3ff26..d6d87ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `PendingApp::on_startup` accepts a callback that will be invoked once the event loop is executing. - `WindowBehavior::moved` is called when the window moves. +- `RunningWindow::outer_size` is a new function that returns the window's + current size including decorations. ### Changed diff --git a/src/window.rs b/src/window.rs index d3488aa..e0e909e 100644 --- a/src/window.rs +++ b/src/window.rs @@ -238,6 +238,7 @@ where occluded: winit.is_visible().unwrap_or(false), focused: winit.has_focus(), inner_size: winit.inner_size(), + outer_size: winit.outer_size(), position: winit.inner_position().unwrap_or_default(), scale: winit.scale_factor(), theme: winit.theme().unwrap_or(Theme::Dark), @@ -290,6 +291,7 @@ where responses: SyncChannel, app: App, inner_size: PhysicalSize, + outer_size: PhysicalSize, position: PhysicalPosition, cursor_position: Option>, mouse_buttons: HashSet, @@ -394,7 +396,13 @@ where self.window.set_max_inner_size(Some(new_size)); } - /// Returns the current locpositionation of the window, in pixels. + /// Returns the current outer size of the window, in pixels. + #[must_use] + pub const fn outer_size(&self) -> PhysicalSize { + self.outer_size + } + + /// Returns the current position of the window, in pixels. #[must_use] pub const fn position(&self) -> PhysicalPosition { self.position @@ -567,15 +575,19 @@ where // callbacks are invoked. self.scale = scale_factor; let new_inner_size = self.window.inner_size(); - let inner_size_changed = self.inner_size != new_inner_size; + let new_outer_size = self.window.outer_size(); self.inner_size = new_inner_size; + self.outer_size = new_outer_size; behavior.scale_factor_changed(self); - if inner_size_changed { + if self.inner_size != new_inner_size || self.outer_size != new_outer_size { behavior.resized(self); } } WindowEvent::Resized(new_inner_size) => { - if self.inner_size != new_inner_size { + let new_outer_size = self.window.outer_size(); + let outer_size_changed = new_outer_size != self.outer_size; + self.outer_size = new_outer_size; + if outer_size_changed || self.inner_size != new_inner_size { self.inner_size = new_inner_size; behavior.resized(self); }