1*4882a593SmuzhiyunFrom cccbc3856787adac05756f76a825ccdaea5fa3aa Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Thu, 4 May 2023 17:52:33 +0800
4*4882a593SmuzhiyunSubject: [PATCH 18/20] gl: x11: Honor render-rectangle for toplevel window
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunTested on RK3588 evb with:
7*4882a593Smuzhiyungst-launch-1.0 videotestsrc ! glimagesink render-rectangle='<100,200,300,400>'
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
10*4882a593Smuzhiyun---
11*4882a593Smuzhiyun gst-libs/gst/gl/x11/gstglwindow_x11.c | 13 +++++++++++++
12*4882a593Smuzhiyun 1 file changed, 13 insertions(+)
13*4882a593Smuzhiyun
14*4882a593Smuzhiyundiff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c
15*4882a593Smuzhiyunindex 7ee1ded..6d2293e 100644
16*4882a593Smuzhiyun--- a/gst-libs/gst/gl/x11/gstglwindow_x11.c
17*4882a593Smuzhiyun+++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c
18*4882a593Smuzhiyun@@ -229,6 +229,13 @@ gst_gl_window_x11_create_window (GstGLWindowX11 * window_x11)
19*4882a593Smuzhiyun       window_x11->visual_info->depth, InputOutput,
20*4882a593Smuzhiyun       window_x11->visual_info->visual, mask, &win_attr);
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun+  /* Set USPosition for toplevel window */
23*4882a593Smuzhiyun+  if (!window_x11->parent_win) {
24*4882a593Smuzhiyun+    XSizeHints hints = {0};
25*4882a593Smuzhiyun+    hints.flags  = USPosition;
26*4882a593Smuzhiyun+    XSetWMNormalHints (window_x11->device, window_x11->internal_win_id, &hints);
27*4882a593Smuzhiyun+  }
28*4882a593Smuzhiyun+
29*4882a593Smuzhiyun   gst_gl_window_x11_handle_events (GST_GL_WINDOW (window_x11),
30*4882a593Smuzhiyun       window_x11->priv->handle_events);
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun@@ -408,6 +415,12 @@ _show_window (GstGLWindow * window)
33*4882a593Smuzhiyun   guint width = window_x11->priv->preferred_width;
34*4882a593Smuzhiyun   guint height = window_x11->priv->preferred_height;
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun+  if (window_x11->priv->render_rect.w > 0 &&
37*4882a593Smuzhiyun+      window_x11->priv->render_rect.h > 0) {
38*4882a593Smuzhiyun+    width = window_x11->priv->render_rect.w;
39*4882a593Smuzhiyun+    height = window_x11->priv->render_rect.h;
40*4882a593Smuzhiyun+  }
41*4882a593Smuzhiyun+
42*4882a593Smuzhiyun   if (!window_x11->visible) {
43*4882a593Smuzhiyun     if (!window_x11->parent_win) {
44*4882a593Smuzhiyun       XResizeWindow (window_x11->device, window_x11->internal_win_id,
45*4882a593Smuzhiyun--
46*4882a593Smuzhiyun2.20.1
47*4882a593Smuzhiyun
48