diff --git a/plugins/window-state/src/lib.rs b/plugins/window-state/src/lib.rs index 1f4abdd6..b1b6cafe 100644 --- a/plugins/window-state/src/lib.rs +++ b/plugins/window-state/src/lib.rs @@ -14,7 +14,7 @@ use bitflags::bitflags; use serde::{Deserialize, Serialize}; use tauri::{ plugin::{Builder as PluginBuilder, TauriPlugin}, - Manager, Monitor, PhysicalPosition, PhysicalSize, RunEvent, Runtime, WebviewWindow, Window, + LogicalSize, Manager, Monitor, PhysicalPosition, PhysicalSize, RunEvent, Runtime, WebviewWindow, Window, WindowEvent, }; @@ -184,7 +184,7 @@ impl WindowExt for Window { } if flags.contains(StateFlags::SIZE) { - self.set_size(PhysicalSize { + self.set_size(LogicalSize { width: state.width, height: state.height, })?; @@ -224,9 +224,12 @@ impl WindowExt for Window { should_show = state.visible; } else { let mut metadata = WindowState::default(); - if flags.contains(StateFlags::SIZE) { - let size = self.inner_size()?; + let scale_factor = self + .current_monitor()? + .map(|m| m.scale_factor()) + .unwrap_or(1.); + let size = self.inner_size()?.to_logical(scale_factor); metadata.width = size.width; metadata.height = size.height; } @@ -300,7 +303,12 @@ impl WindowExtInternal for Window { } if flags.contains(StateFlags::SIZE) && !is_maximized && !is_minimized { - let size = self.inner_size()?; + let scale_factor = self + .current_monitor()? + .map(|m| m.scale_factor()) + .unwrap_or(1.); + let size = self.inner_size()?.to_logical(scale_factor); + // It doesn't make sense to save a window with 0 height or width if size.width > 0 && size.height > 0 { state.width = size.width; @@ -523,11 +531,13 @@ impl Builder { } trait MonitorExt { - fn intersects(&self, position: PhysicalPosition, size: PhysicalSize) -> bool; + fn intersects(&self, position: PhysicalPosition, size: LogicalSize) -> bool; } impl MonitorExt for Monitor { - fn intersects(&self, position: PhysicalPosition, size: PhysicalSize) -> bool { + fn intersects(&self, position: PhysicalPosition, size: LogicalSize) -> bool { + let size = size.to_physical::(self.scale_factor()); + let PhysicalPosition { x, y } = *self.position(); let PhysicalSize { width, height } = *self.size();