diff --git a/src/windowing/popup_manager.rs b/src/windowing/popup_manager.rs index 9e1d588..5c7e07c 100644 --- a/src/windowing/popup_manager.rs +++ b/src/windowing/popup_manager.rs @@ -58,6 +58,7 @@ pub struct PopupManager { context: PopupContext, popups: RefCell>, current_scale_factor: RefCell, + current_output_size: RefCell, } impl PopupManager { @@ -66,6 +67,7 @@ impl PopupManager { context, popups: RefCell::new(Vec::new()), current_scale_factor: RefCell::new(initial_scale_factor), + current_output_size: RefCell::new(PhysicalSize::new(0, 0)), } } @@ -73,6 +75,10 @@ impl PopupManager { *self.current_scale_factor.borrow_mut() = scale_factor; } + pub fn update_output_size(&self, output_size: PhysicalSize) { + *self.current_output_size.borrow_mut() = output_size; + } + pub fn create_popup( &self, queue_handle: &QueueHandle, @@ -84,9 +90,14 @@ impl PopupManager { })?; let scale_factor = *self.current_scale_factor.borrow(); - info!("Creating popup window with scale factor {scale_factor}"); + let output_size = *self.current_output_size.borrow(); + info!("Creating popup window with scale factor {scale_factor} and output size {output_size:?}"); - let logical_size = slint::LogicalSize::new(360.0, 524.0); + #[allow(clippy::cast_precision_loss)] + let logical_size = slint::LogicalSize::new( + output_size.width as f32 / scale_factor, + output_size.height as f32 / scale_factor, + ); #[allow(clippy::cast_possible_truncation)] #[allow(clippy::cast_sign_loss)] let popup_size = PhysicalSize::new( diff --git a/src/windowing/state/mod.rs b/src/windowing/state/mod.rs index e1df235..c8f3979 100644 --- a/src/windowing/state/mod.rs +++ b/src/windowing/state/mod.rs @@ -249,8 +249,11 @@ impl WindowState { self.height } - pub const fn set_output_size(&mut self, output_size: PhysicalSize) { + pub fn set_output_size(&mut self, output_size: PhysicalSize) { self.output_size = output_size; + if let Some(popup_manager) = &self.popup_manager { + popup_manager.update_output_size(output_size); + } } pub const fn output_size(&self) -> &PhysicalSize {