diff --git a/desktop/src/app.rs b/desktop/src/app.rs index 1f7306c22..14b1c97ca 100644 --- a/desktop/src/app.rs +++ b/desktop/src/app.rs @@ -419,7 +419,15 @@ impl App { self.window.scale_factor(), ); - let _ = self.window.request_inner_size(window_size); + let viewport_size = self.window.inner_size(); + + if let Some(new_viewport_size) = self.window.request_inner_size(window_size) { + if new_viewport_size != viewport_size { + self.gui.borrow_mut().resize(new_viewport_size); + } else { + tracing::warn!("Unable to resize window"); + } + } self.window.set_fullscreen(if self.start_fullscreen { Some(Fullscreen::Borderless(None)) } else { diff --git a/desktop/src/gui/controller.rs b/desktop/src/gui/controller.rs index d821cfcc9..258cbf198 100644 --- a/desktop/src/gui/controller.rs +++ b/desktop/src/gui/controller.rs @@ -141,31 +141,35 @@ impl GuiController { &self.descriptors } + pub fn resize(&mut self, size: PhysicalSize) { + if size.width > 0 && size.height > 0 { + self.surface.configure( + &self.descriptors.device, + &wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: self.surface_format, + width: size.width, + height: size.height, + present_mode: Default::default(), + desired_maximum_frame_latency: 2, + alpha_mode: Default::default(), + view_formats: Default::default(), + }, + ); + self.movie_view_renderer.update_resolution( + &self.descriptors, + self.window.fullscreen().is_none() && !self.no_gui, + size.height, + self.window.scale_factor(), + ); + self.size = size; + } + } + #[must_use] pub fn handle_event(&mut self, event: &WindowEvent) -> bool { if let WindowEvent::Resized(size) = &event { - if size.width > 0 && size.height > 0 { - self.surface.configure( - &self.descriptors.device, - &wgpu::SurfaceConfiguration { - usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: self.surface_format, - width: size.width, - height: size.height, - present_mode: Default::default(), - desired_maximum_frame_latency: 2, - alpha_mode: Default::default(), - view_formats: Default::default(), - }, - ); - self.movie_view_renderer.update_resolution( - &self.descriptors, - self.window.fullscreen().is_none() && !self.no_gui, - size.height, - self.window.scale_factor(), - ); - self.size = *size; - } + self.resize(*size); } if let WindowEvent::ThemeChanged(theme) = &event {