From aa37a70efbb46a193a8b9ed90f17ec9fb30eb3ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 15 Jun 2015 21:29:46 +0200 Subject: [PATCH] gtkglwidget: Calculate the viewport size ourselves Getting the current viewport and modifying it relatively will produce an interesting feedback loop during widget resizing. Over a few frames we will gradually move the viewport a bit until it converged again, adding unnecessary additional borders at the top and left. --- ext/gtk/gtkgstglwidget.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/ext/gtk/gtkgstglwidget.c b/ext/gtk/gtkgstglwidget.c index d9b65e3..96ac861 100644 --- a/ext/gtk/gtkgstglwidget.c +++ b/ext/gtk/gtkgstglwidget.c @@ -210,22 +210,24 @@ _redraw_texture (GtkGstGLWidget * gst_widget, guint tex) if (gst_widget->priv->force_aspect_ratio) { GstVideoRectangle src, dst, result; - gint gtk_viewport[4]; + gint widget_width, widget_height, widget_scale; gl->ClearColor (0.0, 0.0, 0.0, 0.0); gl->Clear (GL_COLOR_BUFFER_BIT); - gl->GetIntegerv (GL_VIEWPORT, gtk_viewport); + widget_scale = gtk_widget_get_scale_factor ((GtkWidget *) gst_widget); + widget_width = gtk_widget_get_allocated_width ((GtkWidget *) gst_widget); + widget_height = gtk_widget_get_allocated_height ((GtkWidget *) gst_widget); src.x = 0; src.y = 0; src.w = gst_widget->priv->display_width; src.h = gst_widget->priv->display_height; - dst.x = gtk_viewport[0]; - dst.y = gtk_viewport[1]; - dst.w = gtk_viewport[2]; - dst.h = gtk_viewport[3]; + dst.x = 0; + dst.y = 0; + dst.w = widget_width * widget_scale; + dst.h = widget_height * widget_scale; gst_video_sink_center_rect (src, dst, &result, TRUE); -- 2.7.4