gtk4: Consider surface scale factor when proposing window dimensions

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/issues/646

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2125>
This commit is contained in:
Sebastian Dröge 2025-03-10 14:07:28 +02:00
parent 780c724902
commit 5c912446a9

View file

@ -98,14 +98,31 @@ impl WidgetImpl for RenderWidget {
fn snapshot(&self, snapshot: &gtk::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)