diff --git a/crates/bevy_winit/src/system.rs b/crates/bevy_winit/src/system.rs index f8518580bfd79..c4ff0950d0f4c 100644 --- a/crates/bevy_winit/src/system.rs +++ b/crates/bevy_winit/src/system.rs @@ -354,6 +354,26 @@ pub(crate) fn changed_windows( } } + // Set position before size so the window is on the correct monitor + // (and thus using the correct scale factor) when size is applied. + if window.position != cache.position + && let Some(position) = crate::winit_window_position( + &window.position, + &window.resolution, + &monitors, + winit_window.primary_monitor(), + winit_window.current_monitor(), + ) { + let should_set = match winit_window.outer_position() { + Ok(current_position) => current_position != position, + _ => true, + }; + + if should_set { + winit_window.set_outer_position(position); + } + } + if window.resolution != cache.resolution { let mut physical_size = PhysicalSize::new( window.resolution.physical_width(), @@ -444,24 +464,6 @@ pub(crate) fn changed_windows( ); } - if window.position != cache.position - && let Some(position) = crate::winit_window_position( - &window.position, - &window.resolution, - &monitors, - winit_window.primary_monitor(), - winit_window.current_monitor(), - ) { - let should_set = match winit_window.outer_position() { - Ok(current_position) => current_position != position, - _ => true, - }; - - if should_set { - winit_window.set_outer_position(position); - } - } - if let Some(maximized) = window.internal.take_maximize_request() { winit_window.set_maximized(maximized); }