changeset 4734:cc375edb5eda

added support for runtime fullscreen switching
author alex
date Sun, 17 Feb 2002 02:01:45 +0000
parents 5bad0d74f6ea
children 21eca91fece7
files libvo/vo_x11.c
diffstat 1 files changed, 51 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_x11.c	Sun Feb 17 01:07:45 2002 +0000
+++ b/libvo/vo_x11.c	Sun Feb 17 02:01:45 2002 +0000
@@ -12,6 +12,7 @@
  *
  * 15 & 16 bpp support added by Franck Sicard <Franck.Sicard@solsoft.fr>
  * use swScaler instead of lots of tricky converters by Michael Niedermayer <michaelni@gmx.at>
+ * runtime fullscreen switching by alex
  *
  */
 
@@ -42,6 +43,8 @@
 #include "../postproc/swscale.h"
 #include "../postproc/rgb2rgb.h"
 
+#include "../mp_msg.h"
+
 static vo_info_t vo_info =
 {
         "X11 ( XImage/Shm )",
@@ -484,7 +487,7 @@
   static int old_vo_dwidth=-1;
   static int old_vo_dheight=-1;
   
-  if((old_vo_dwidth != vo_dwidth || old_vo_dheight != vo_dheight) && y==0 && zoomFlag)
+  if((old_vo_dwidth != vo_dwidth || old_vo_dheight != vo_dheight) /*&& y==0*/ && zoomFlag)
   {
     int newW= vo_dwidth;
     int newH= vo_dheight;
@@ -586,11 +589,58 @@
   return 0;
 }
 
+/* for runtime fullscreen switching */
+static int vo_fs_oldx = -1;
+static int vo_fs_oldy = -1;
+static int vo_fs_oldwidth = -1;
+static int vo_fs_oldheight = -1;
+
 static uint32_t control(uint32_t request, void *data, ...)
 {
   switch (request) {
   case VOCTRL_QUERY_FORMAT:
     return query_format(*((uint32_t*)data));
+  case VOCTRL_GUISUPPORT:
+    return VO_TRUE;
+  case VOCTRL_FULLSCREEN:
+    if (!zoomFlag)
+    {
+	mp_msg(MSGT_VO, MSGL_WARN, "X11 Fullscreen: not available without zooming enabled\n");
+	return VO_NOTAVAIL;
+    }
+    if ((vo_fs_oldwidth == -1) && (vo_fs_oldheight == -1))
+    {
+	int foo;
+	Window root;
+
+	XGetGeometry(mDisplay, mywindow, &root, &foo, &foo,
+	    &vo_fs_oldwidth, &vo_fs_oldheight, &foo, &foo);
+	XTranslateCoordinates(mDisplay, mywindow, root, 0, 0,
+	    &vo_fs_oldx, &vo_fs_oldy, &foo);
+
+	mp_msg(MSGT_VO,MSGL_V,"X11 Fullscreen: saved old place: %dx%d-%dx%d\n",
+	    vo_fs_oldx, vo_fs_oldy, vo_fs_oldwidth, vo_fs_oldheight);
+	
+	/* resize */
+	vo_dwidth = vo_screenwidth;
+	vo_dheight = vo_screenheight;
+	XMoveResizeWindow(mDisplay, mywindow, 0, 0,
+	    vo_screenwidth, vo_screenheight);
+	vo_x11_decoration( mDisplay,mywindow,0 );
+    }
+    else
+    {
+	XMoveResizeWindow(mDisplay, mywindow, vo_fs_oldx, vo_fs_oldy, 
+	    vo_fs_oldwidth, vo_fs_oldheight);
+
+	/* restore */
+	vo_dwidth = vo_fs_oldwidth;
+	vo_dheight = vo_fs_oldheight;
+	
+	/* clean */
+	vo_fs_oldwidth = -1;
+	vo_fs_oldheight = -1;
+    }
   }
   return VO_NOTIMPL;
 }