Mercurial > mplayer.hg
changeset 35755:589cf8a5f165
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.
author | ib |
---|---|
date | Thu, 24 Jan 2013 15:57:37 +0000 |
parents | 5b5a3108e59f |
children | 3919b6360e54 |
files | gui/interface.c gui/wm/ws.c |
diffstat | 2 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/gui/interface.c Thu Jan 24 15:34:10 2013 +0000 +++ b/gui/interface.c Thu Jan 24 15:57:37 2013 +0000 @@ -787,6 +787,8 @@ if (guiWinID >= 0) wsWindowMove(&guiApp.mainWindow, True, 0, guiInfo.VideoHeight); + wsWindowBackground(&guiApp.videoWindow, -1, -1, -1); + break; case GUI_HANDLE_X_EVENT:
--- a/gui/wm/ws.c Thu Jan 24 15:34:10 2013 +0000 +++ b/gui/wm/ws.c Thu Jan 24 15:57:37 2013 +0000 @@ -1019,9 +1019,6 @@ } } -// ---------------------------------------------------------------------------------------------- -// Set window background to 'color'. -// ---------------------------------------------------------------------------------------------- /** * @brief Pack color components @a r, @a g and @a b into 15 bits. * @@ -1066,6 +1063,16 @@ 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 @@ ; } + if (r == -1 && g == -1 && b == -1) + XSetWindowBackgroundPixmap(wsDisplay, win->WindowID, None); + else { XSetWindowBackground(wsDisplay, win->WindowID, color); XClearWindow(wsDisplay, win->WindowID); + } } // ----------------------------------------------------------------------------------------------