[MPlayer-cvslog] r35849 - in trunk/gui: interface.c wm/ws.c

ib subversion at mplayerhq.hu
Thu Jan 24 16:57:37 CET 2013


Author: ib
Date: Thu Jan 24 16:57:37 2013
New Revision: 35849

Log:
Realize a smooth and flicker-free video when resizing during playback.

During playback, prevent the window manager from automatically refresh
the background of the video window by setting the video window's
background to no defined background pixmap. After playback, set the
window's background again.

Additionally, add a doygen comment for wsWindowBackground() and remove
an old comment.

Patch with grateful support by Hans-Dieter Kosch, hdkosch kabelbw de.

Modified:
   trunk/gui/interface.c
   trunk/gui/wm/ws.c

Modified: trunk/gui/interface.c
==============================================================================
--- trunk/gui/interface.c	Thu Jan 24 16:34:10 2013	(r35848)
+++ trunk/gui/interface.c	Thu Jan 24 16:57:37 2013	(r35849)
@@ -787,6 +787,8 @@ int gui(int what, void *data)
         if (guiWinID >= 0)
             wsWindowMove(&guiApp.mainWindow, True, 0, guiInfo.VideoHeight);
 
+        wsWindowBackground(&guiApp.videoWindow, -1, -1, -1);
+
         break;
 
     case GUI_HANDLE_X_EVENT:

Modified: trunk/gui/wm/ws.c
==============================================================================
--- trunk/gui/wm/ws.c	Thu Jan 24 16:34:10 2013	(r35848)
+++ trunk/gui/wm/ws.c	Thu Jan 24 16:57:37 2013	(r35849)
@@ -1019,9 +1019,6 @@ void wsWindowIcon(Display *display, Wind
     }
 }
 
-// ----------------------------------------------------------------------------------------------
-//    Set window background to 'color'.
-// ----------------------------------------------------------------------------------------------
 /**
  * @brief Pack color components @a r, @a g and @a b into 15 bits.
  *
@@ -1066,6 +1063,16 @@ static int pack_rgb16(int r, int g, int 
     return pixel;
 }
 
+/**
+ * @brief Set and fill, or unset a window background.
+ *
+ * @param win pointer to a ws window structure
+ * @param r red (0 - 255, or -1)
+ * @param g green (0 - 255, or -1)
+ * @param b blue (0 - 255, or -1)
+ *
+ * @note Passing -1 for @a r, @a g and @a b unsets the background.
+ */
 void wsWindowBackground(wsWindow *win, int r, int g, int b)
 {
     int color = 0;
@@ -1101,8 +1108,12 @@ void wsWindowBackground(wsWindow *win, i
         ;
     }
 
+    if (r == -1 && g == -1 && b == -1)
+        XSetWindowBackgroundPixmap(wsDisplay, win->WindowID, None);
+    else {
     XSetWindowBackground(wsDisplay, win->WindowID, color);
     XClearWindow(wsDisplay, win->WindowID);
+    }
 }
 
 // ----------------------------------------------------------------------------------------------


More information about the MPlayer-cvslog mailing list