changeset 19408:df307a050359

further improvements to fullscreen switching.
author vayne
date Wed, 16 Aug 2006 16:21:17 +0000
parents c3dc9a93f56e
children 37decab2ed46
files Gui/win32/gui.c Gui/win32/interface.c
diffstat 2 files changed, 16 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/Gui/win32/gui.c	Wed Aug 16 11:06:40 2006 +0000
+++ b/Gui/win32/gui.c	Wed Aug 16 16:21:17 2006 +0000
@@ -556,7 +556,6 @@
             int tmpheight=0;
             static uint32_t rect_width;
             static uint32_t rect_height;
-            DWORD style, flags;
             RECT rd;
             POINT pt;
             while(ShowCursor(TRUE) <= 0){}
@@ -581,18 +580,10 @@
             rd.right = rd.left + rect_width;
             rd.bottom = rd.top + rect_height;
 
-            if(fullscreen)
-            {
-                style = WS_VISIBLE | WS_POPUP;
-                flags = SWP_NOZORDER | SWP_FRAMECHANGED;
-            } else {
-                style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX;
-                flags = SWP_NOOWNERZORDER;
-            }
-
-            AdjustWindowRect(&rd, style, 0);
+            AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0);
             SetWindowPos(hWnd, 0, fullscreen?0:pt.x+rd.left, fullscreen?0:pt.y+rd.top,
-                         fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, flags);
+                         fullscreen?vo_screenwidth:rd.right-rd.left, fullscreen?vo_screenheight:rd.bottom-rd.top, SWP_NOOWNERZORDER);
+            SetForegroundWindow(hWnd);
             return 0;
         }
         case WM_PAINT:
--- a/Gui/win32/interface.c	Wed Aug 16 11:06:40 2006 +0000
+++ b/Gui/win32/interface.c	Wed Aug 16 16:21:17 2006 +0000
@@ -403,7 +403,7 @@
     if (mygui->playlist->current == (mygui->playlist->trackcount - 1))
         mygui->playlist->current = 0;
 
-    fullscreen = vo_fs = 0;
+    fullscreen = 0;
     guiGetEvent(guiCEvent, (void *) guiSetStop);
 }
 
@@ -697,32 +697,31 @@
             {
                 case MP_CMD_GUI_FULLSCREEN:
                 {
+                    DWORD style;
+                    /* vo_directx's fullscreen window */
+                    HWND hWndFS = FindWindow(NULL, "MPlayer Fullscreen");
+
                     if(!guiIntfStruct.sh_video) break;
 
-                    /* FIXME: vo_directx is behaving unexpectedly, this maintains current functionality */
-                    if(!sub_window || (&video_driver_list && strstr(video_driver_list[0], "directx")))
+                    if(!sub_window)
                     {
                         video_out->control(VOCTRL_FULLSCREEN, 0);
                         break;
                     }
 
-                    if(!fullscreen)
+                    if(!fullscreen && IsWindowVisible(mygui->subwindow) && !IsIconic(mygui->subwindow))
                         GetWindowRect(mygui->subwindow, &old_rect);
 
                     if(fullscreen)
                     {
-                        fullscreen = vo_fs = 0;
-                        vo_dwidth = guiIntfStruct.MovieWidth = old_rect.right-old_rect.left;
-                        vo_dheight = guiIntfStruct.MovieHeight = old_rect.bottom-old_rect.top;
-                        vo_dx = old_rect.left;
-                        vo_dy = old_rect.top;
+                        fullscreen = 0;
+                        style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX;
                     } else {
-                        fullscreen = vo_fs = 1;
-                        vo_dwidth = guiIntfStruct.MovieWidth = vo_screenwidth;
-                        vo_dheight = guiIntfStruct.MovieHeight = vo_screenheight;
-                        vo_dx = 0;
-                        vo_dy = 0;
+                        fullscreen = 1;
+                        style = WS_VISIBLE | WS_POPUP;
+                        if(hWndFS) DestroyWindow(hWndFS);
                     }
+                    SetWindowLong(mygui->subwindow, GWL_STYLE, style);
                     mpcodecs_config_vo(guiIntfStruct.sh_video, guiIntfStruct.MovieWidth,
                                        guiIntfStruct.MovieHeight, 0);
                     break;