diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 6ae02698fca..425503fb891 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -445,9 +445,6 @@ IDirectDrawImpl_SetCooperativeLevel(IDirectDraw7 *iface, { This->dest_window = hwnd; } - - IWineD3DDevice_SetFullscreen(This->wineD3DDevice, - FALSE); } else if(cooplevel & DDSCL_FULLSCREEN) { @@ -467,8 +464,6 @@ IDirectDrawImpl_SetCooperativeLevel(IDirectDraw7 *iface, */ This->cooperative_level &= ~DDSCL_NORMAL; - IWineD3DDevice_SetFullscreen(This->wineD3DDevice, - TRUE); /* Don't override focus windows or private device windows */ if( hwnd && diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index b89db16e050..91da15a803a 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1299,7 +1299,7 @@ static LONG fullscreen_exStyle(LONG orig_exStyle) { return exStyle; } -static void WINAPI IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *iface, HWND window) { +static void WINAPI IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *iface, HWND window, UINT w, UINT h) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; LONG style, exStyle; @@ -1329,7 +1329,7 @@ static void WINAPI IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *ifac /* Inform the window about the update. */ SetWindowPos(window, HWND_TOP, 0, 0, - This->ddraw_width, This->ddraw_height, SWP_FRAMECHANGED); + w, h, SWP_FRAMECHANGED); ShowWindow(window, SW_NORMAL); } @@ -1433,8 +1433,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic object->win_handle = This->createParms.hFocusWindow; } if(!This->ddraw_window) { - if(This->ddraw_fullscreen && object->win_handle) { - IWineD3DDeviceImpl_SetupFullscreenWindow(iface, object->win_handle); + if(!pPresentationParameters->Windowed && object->win_handle) { + IWineD3DDeviceImpl_SetupFullscreenWindow(iface, object->win_handle, + pPresentationParameters->BackBufferWidth, + pPresentationParameters->BackBufferHeight); } This->ddraw_window = object->win_handle; } @@ -1528,7 +1530,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic IWineD3DDevice_SetDisplayMode(iface, 0, &mode); displaymode_set = TRUE; - IWineD3DDevice_SetFullscreen(iface, TRUE); } /** @@ -2442,25 +2443,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_UninitGDI(IWineD3DDevice *iface, D3DCB_ return WINED3D_OK; } -static void WINAPI IWineD3DDeviceImpl_SetFullscreen(IWineD3DDevice *iface, BOOL fullscreen) { - IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; - TRACE("(%p) Setting DDraw fullscreen mode to %s\n", This, fullscreen ? "true" : "false"); - - /* Setup the window for fullscreen mode */ - if(fullscreen && !This->ddraw_fullscreen) { - IWineD3DDeviceImpl_SetupFullscreenWindow(iface, This->ddraw_window); - } else if(!fullscreen && This->ddraw_fullscreen) { - IWineD3DDeviceImpl_RestoreWindow(iface, This->ddraw_window); - } - - /* DirectDraw apps can change between fullscreen and windowed mode after device creation with - * IDirectDraw7::SetCooperativeLevel. The GDI surface implementation needs to know this. - * DDraw doesn't necessarily have a swapchain, so we have to store the fullscreen flag - * separately. - */ - This->ddraw_fullscreen = fullscreen; -} - /* Enables thread safety in the wined3d device and its resources. Called by DirectDraw * from SetCooperativeLevel if DDSCL_MULTITHREADED is specified, and by d3d8/9 from * CreateDevice if D3DCREATE_MULTITHREADED is passed. @@ -2529,10 +2511,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDisplayMode(IWineD3DDevice *iface, U This->ddraw_height = pMode->Height; This->ddraw_format = pMode->Format; - /* Only do this with a window of course, and only if we're fullscreened */ - if(This->ddraw_window && This->ddraw_fullscreen) - MoveWindow(This->ddraw_window, 0, 0, pMode->Width, pMode->Height, TRUE); - /* And finally clip mouse to our screen */ SetRect(&clip_rc, 0, 0, pMode->Width, pMode->Height); ClipCursor(&clip_rc); @@ -7417,9 +7395,25 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Reset(IWineD3DDevice* iface, WINED3DPRE (swapchain->presentParms.Windowed && !pPresentationParameters->Windowed) || DisplayModeChanged) { - IWineD3DDevice_SetFullscreen(iface, !pPresentationParameters->Windowed); - swapchain->presentParms.Windowed = pPresentationParameters->Windowed; IWineD3DDevice_SetDisplayMode(iface, 0, &mode); + + if(This->ddraw_window && !pPresentationParameters->Windowed) { + if(swapchain->presentParms.Windowed) { + /* switch from windowed to fs */ + IWineD3DDeviceImpl_SetupFullscreenWindow(iface, This->ddraw_window, + pPresentationParameters->BackBufferWidth, + pPresentationParameters->BackBufferHeight); + } else { + /* Fullscreen -> fullscreen mode change */ + MoveWindow(This->ddraw_window, 0, 0, + pPresentationParameters->BackBufferWidth, pPresentationParameters->BackBufferHeight, + TRUE); + } + } else if(This->ddraw_window && !swapchain->presentParms.Windowed) { + /* Fullscreen -> windowed switch */ + IWineD3DDeviceImpl_RestoreWindow(iface, This->ddraw_window); + } + swapchain->presentParms.Windowed = pPresentationParameters->Windowed; } else if(!pPresentationParameters->Windowed) { DWORD style = This->style, exStyle = This->exStyle; /* If we're in fullscreen, and the mode wasn't changed, we have to get the window back into @@ -7428,7 +7422,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Reset(IWineD3DDevice* iface, WINED3DPRE */ This->style = 0; This->exStyle = 0; - IWineD3DDeviceImpl_SetupFullscreenWindow(iface, This->ddraw_window); + IWineD3DDeviceImpl_SetupFullscreenWindow(iface, This->ddraw_window, + pPresentationParameters->BackBufferWidth, + pPresentationParameters->BackBufferHeight); This->style = style; This->exStyle = exStyle; } @@ -7704,7 +7700,6 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl = IWineD3DDeviceImpl_InitGDI, IWineD3DDeviceImpl_Uninit3D, IWineD3DDeviceImpl_UninitGDI, - IWineD3DDeviceImpl_SetFullscreen, IWineD3DDeviceImpl_SetMultithreaded, IWineD3DDeviceImpl_EvictManagedResources, IWineD3DDeviceImpl_GetAvailableTextureMem, @@ -7850,7 +7845,6 @@ const IWineD3DDeviceVtbl IWineD3DDevice_DirtyConst_Vtbl = IWineD3DDeviceImpl_InitGDI, IWineD3DDeviceImpl_Uninit3D, IWineD3DDeviceImpl_UninitGDI, - IWineD3DDeviceImpl_SetFullscreen, IWineD3DDeviceImpl_SetMultithreaded, IWineD3DDeviceImpl_EvictManagedResources, IWineD3DDeviceImpl_GetAvailableTextureMem, diff --git a/dlls/wined3d/swapchain_gdi.c b/dlls/wined3d/swapchain_gdi.c index 658ea2faaf0..41a5475e209 100644 --- a/dlls/wined3d/swapchain_gdi.c +++ b/dlls/wined3d/swapchain_gdi.c @@ -101,9 +101,9 @@ void x11_copy_to_screen(IWineD3DSwapChainImpl *This, LPRECT rc) { } /* Front buffer coordinates are screen coordinates. Map them to the destination - * window if not fullscreened - */ - if(!front->resource.wineD3DDevice->ddraw_fullscreen) { + * window if not fullscreened + */ + if(This->presentParms.Windowed) { ClientToScreen(hDisplayWnd, &offset); } #if 0 diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 3cdfd1ad579..ee1e1e8d209 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -923,7 +923,6 @@ struct IWineD3DDeviceImpl HWND ddraw_window; DWORD ddraw_width, ddraw_height; WINED3DFORMAT ddraw_format; - BOOL ddraw_fullscreen; /* Final position fixup constant */ float posFixup[4]; diff --git a/include/wine/wined3d_interface.h b/include/wine/wined3d_interface.h index 72ee7fd39e2..0768b0afcba 100644 --- a/include/wine/wined3d_interface.h +++ b/include/wine/wined3d_interface.h @@ -377,7 +377,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase) STDMETHOD(InitGDI)(THIS_ WINED3DPRESENT_PARAMETERS* pPresentationParameters, D3DCB_CREATEADDITIONALSWAPCHAIN D3DCB_CreateAdditionalSwapChain); STDMETHOD(Uninit3D)(THIS, D3DCB_DESTROYSURFACEFN pFn, D3DCB_DESTROYSWAPCHAINFN pFn2); STDMETHOD(UninitGDI)(THIS, D3DCB_DESTROYSWAPCHAINFN pFn2); - STDMETHOD_(void, SetFullscreen)(THIS_ BOOL fullscreen); STDMETHOD_(void, SetMultithreaded)(THIS); STDMETHOD(EvictManagedResources)(THIS) PURE; STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; @@ -518,7 +517,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase) #define IWineD3DDevice_InitGDI(p, a, b) (p)->lpVtbl->InitGDI(p, a, b) #define IWineD3DDevice_Uninit3D(p, a, b) (p)->lpVtbl->Uninit3D(p, a, b) #define IWineD3DDevice_UninitGDI(p, a) (p)->lpVtbl->UninitGDI(p, a) -#define IWineD3DDevice_SetFullscreen(p, a) (p)->lpVtbl->SetFullscreen(p, a) #define IWineD3DDevice_SetMultithreaded(p) (p)->lpVtbl->SetMultithreaded(p) #define IWineD3DDevice_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) #define IWineD3DDevice_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)