Use "outer" positions in all window-related operations

This commit is contained in:
Héctor Ramón Jiménez 2024-12-06 04:28:06 +01:00
parent f2c9b6b2ff
commit a0acaba866
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
2 changed files with 17 additions and 2 deletions

View file

@ -508,10 +508,25 @@ where
log::info!("Window attributes for id `{id:#?}`: {window_attributes:#?}");
// On macOS, the `position` in `WindowAttributes` represents the "inner"
// position of the window; while on other platforms it's the "outer" position.
// We fix the inconsistency on macOS by positioning the window after creation.
#[cfg(target_os = "macos")]
let mut window_attributes = window_attributes;
#[cfg(target_os = "macos")]
let position =
window_attributes.position.take();
let window = event_loop
.create_window(window_attributes)
.expect("Create window");
#[cfg(target_os = "macos")]
if let Some(position) = position {
window.set_outer_position(position);
}
#[cfg(target_arch = "wasm32")]
{
use winit::platform::web::WindowExtWebSys;
@ -1310,7 +1325,7 @@ fn run_action<P, C>(
if let Some(window) = window_manager.get(id) {
let position = window
.raw
.inner_position()
.outer_position()
.map(|position| {
let position = position
.to_logical::<f32>(window.raw.scale_factor());

View file

@ -165,7 +165,7 @@ where
{
pub fn position(&self) -> Option<Point> {
self.raw
.inner_position()
.outer_position()
.ok()
.map(|position| position.to_logical(self.raw.scale_factor()))
.map(|position| Point {