diff libvo/vo_xv.c @ 4981:bfc652fc7f43

rewrite fullscreen support in some libvo driver
author pontscho
date Thu, 07 Mar 2002 17:50:25 +0000
parents 0e6e50c02f7b
children 53c569d36b2c
line wrap: on
line diff
--- a/libvo/vo_xv.c	Thu Mar 07 16:57:40 2002 +0000
+++ b/libvo/vo_xv.c	Thu Mar 07 17:50:25 2002 +0000
@@ -92,7 +92,7 @@
 
 static Window                 mRoot;
 static uint32_t               drwX,drwY,drwWidth,drwHeight,drwBorderWidth,drwDepth;
-static uint32_t               drwcX,drwcY,dwidth,dheight,mFullscreen;
+static uint32_t               drwcX,drwcY,dwidth,dheight;
 
 #ifdef HAVE_NEW_GUI
  static uint32_t               mdwidth,mdheight;
@@ -342,7 +342,10 @@
  mdheight=height;
 #endif
 
- mFullscreen=flags&1;
+ vo_fs=flags&1;
+ if ( vo_fs )
+  { vo_old_width=d_width; vo_old_height=d_height; }
+     
 #ifdef HAVE_XF86VM
  if( flags&0x02 ) vm = 1;
 #endif
@@ -377,7 +380,7 @@
       }
     else
 #endif
-   if ( mFullscreen )
+   if ( vo_fs )
     {
      hint.width=vo_screenwidth;
      hint.height=vo_screenheight;
@@ -423,7 +426,7 @@
 #endif
    );
    XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
-   if ( mFullscreen ) vo_x11_decoration( mDisplay,vo_window,0 );
+   if ( vo_fs ) vo_x11_decoration( mDisplay,vo_window,0 );
    XMapWindow(mDisplay, vo_window);
 #ifdef HAVE_XINERAMA
    vo_x11_xinerama_move(mDisplay,vo_window);
@@ -501,11 +504,9 @@
 #ifdef HAVE_NEW_GUI
       if ( vo_window != None )
        {
-        mFullscreen=0;
         dwidth=mdwidth; dheight=mdheight;
-        if ( ( vo_dwidth == vo_screenwidth )&&( vo_dheight == vo_screenheight ) )
+        if ( vo_fs )
          {
-          mFullscreen=1;
           dwidth=vo_screenwidth;
           dheight=vo_screenwidth * mdheight / mdwidth;
          }
@@ -519,7 +520,7 @@
      printf( "[xv] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
 
      aspect(&dwidth,&dheight,A_NOZOOM);
-     if ( mFullscreen )
+     if ( vo_fs )
       {
        aspect(&dwidth,&dheight,A_ZOOM);
        drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
@@ -583,21 +584,16 @@
    printf( "[xv] dcx: %d dcy: %d dx: %d dy: %d dw: %d dh: %d\n",drwcX,drwcY,drwX,drwY,drwWidth,drwHeight );
 
    #ifdef HAVE_NEW_GUI
-    if ( vo_window != None )
+    dwidth=mdwidth; dheight=mdheight;
+    if ( vo_fs )
      {
-      mFullscreen=0;
-      dwidth=mdwidth; dheight=mdheight;
-      if ( ( vo_dwidth == vo_screenwidth )&&( vo_dheight == vo_screenheight ) )
-       {
-        mFullscreen=1;
-        dwidth=vo_screenwidth;
-        dheight=vo_screenwidth * mdheight / mdwidth;
-       }
+      dwidth=vo_screenwidth;
+      dheight=vo_screenwidth * mdheight / mdwidth;
      }
    #endif
 
    aspect(&dwidth,&dheight,A_NOZOOM);
-   if ( mFullscreen )
+   if ( vo_fs )
     {
      aspect(&dwidth,&dheight,A_ZOOM);
      drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
@@ -612,7 +608,7 @@
  if ( e & VO_EVENT_EXPOSE )
   {
    XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0,  image_width, image_height, drwX, drwY, 1, 1, False);
-   XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0,  image_width, image_height, drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight), False);
+   XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0,  image_width, image_height, drwX,drwY,drwWidth,(vo_fs?drwHeight - 1:drwHeight), False);
   }
 }
 
@@ -623,7 +619,7 @@
 {
  XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf],
          0, 0,  image_width, image_height,
-         drwX,drwY,drwWidth,(mFullscreen?drwHeight - 1:drwHeight),
+         drwX,drwY,drwWidth,(vo_fs?drwHeight - 1:drwHeight),
          False);
  if (num_buffers>1){
     current_buf=(current_buf+1)%num_buffers;
@@ -824,6 +820,9 @@
     return query_format(*((uint32_t*)data));
   case VOCTRL_GET_IMAGE:
     return get_image(data);
+  case VOCTRL_FULLSCREEN:
+    vo_x11_fullscreen();
+    return VO_TRUE;
   }
   return VO_NOTIMPL;
 }