From 6c59e6942fdeecf8405f0b0ee1098aeb4bef9e60 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Sat, 7 Sep 2024 09:15:00 -0700 Subject: [PATCH] Supporting both inner and outer position --- CHANGELOG.md | 3 +++ src/window.rs | 30 +++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6d87ce..ac2d7e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `PendingApp::new_with_event_callback` - `WindowBehavior::run_witH_event_callback` - `WindowBehavior::run_witH_context_and_event_callback` +- `RunningWindow::position` has been split into `RunningWindow::inner_position` + and `RunningWindow::outer_position`. `RunningWindow::set_position` has been + renamed to `RunningWindow::set_outer_position`. ### Added diff --git a/src/window.rs b/src/window.rs index e0e909e..e83d483 100644 --- a/src/window.rs +++ b/src/window.rs @@ -239,7 +239,8 @@ where focused: winit.has_focus(), inner_size: winit.inner_size(), outer_size: winit.outer_size(), - position: winit.inner_position().unwrap_or_default(), + inner_position: winit.inner_position().unwrap_or_default(), + outer_position: winit.outer_position().unwrap_or_default(), scale: winit.scale_factor(), theme: winit.theme().unwrap_or(Theme::Dark), window: winit, @@ -292,7 +293,8 @@ where app: App, inner_size: PhysicalSize, outer_size: PhysicalSize, - position: PhysicalPosition, + outer_position: PhysicalPosition, + inner_position: PhysicalPosition, cursor_position: Option>, mouse_buttons: HashSet, keys: HashSet, @@ -402,14 +404,20 @@ where self.outer_size } - /// Returns the current position of the window, in pixels. + /// Returns the current outer position of the window, in pixels. #[must_use] - pub const fn position(&self) -> PhysicalPosition { - self.position + pub const fn outer_position(&self) -> PhysicalPosition { + self.outer_position + } + + /// Returns the current inner position of the window, in pixels. + #[must_use] + pub const fn inner_position(&self) -> PhysicalPosition { + self.inner_position } /// Sets the current position of the window, in pixels. - pub fn set_position(&self, new_position: PhysicalPosition) { + pub fn set_outer_position(&self, new_position: PhysicalPosition) { self.window.set_outer_position(new_position); } @@ -592,9 +600,13 @@ where behavior.resized(self); } } - WindowEvent::Moved(position) => { - if self.position != position { - self.position = position; + WindowEvent::Moved(outer_position) => { + let inner_position = self.window.inner_position().unwrap_or_default(); + if self.outer_position != outer_position + || self.inner_position != inner_position + { + self.outer_position = outer_position; + self.inner_position = inner_position; behavior.moved(self); } }