diff --git a/video/gtk4/src/sink/render_widget/imp.rs b/video/gtk4/src/sink/render_widget/imp.rs index 1c8bf4bd..f31e7892 100644 --- a/video/gtk4/src/sink/render_widget/imp.rs +++ b/video/gtk4/src/sink/render_widget/imp.rs @@ -98,14 +98,31 @@ impl WidgetImpl for RenderWidget { fn snapshot(&self, snapshot: >k::Snapshot) { let window_width = self.obj().width() as u32; let window_height = self.obj().height() as u32; - let new_size = (window_width, window_height); + let scale = { + #[cfg(feature = "gtk_v4_12")] + { + if let Some(surface) = self.obj().native().and_then(|native| native.surface()) { + surface.scale() + } else { + self.obj().scale_factor() as f64 + } + } + #[cfg(not(feature = "gtk_v4_12"))] + { + self.obj().scale_factor() as f64 + } + }; + let new_size = ( + f64::ceil(window_width as f64 * scale) as u32, + f64::ceil(window_height as f64 * scale) as u32, + ); let updated = self.window_size.replace(new_size) != new_size; if updated { let element = self.element.borrow(); let element = element.as_ref().unwrap(); - element.set_property("window-width", window_width); - element.set_property("window-height", window_height); + element.set_property("window-width", new_size.0); + element.set_property("window-height", new_size.1); } self.parent_snapshot(snapshot)