HRESULT WINAPI Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
{
- DWORD ret;
-
- /* FIXME implement hal setMode */
- if((ret = Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight,
- dwBPP, dwRefreshRate, dwFlags)) == DD_OK)
- {
- return ret;
+ IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+ BOOL dummy = TRUE;
+ DWORD ret;
+
+ /* FIXME check the refresrate if it same if it not same do the mode switch */
+ if ((This->DirectDrawGlobal.vmiData.dwDisplayHeight == dwHeight) &&
+ (This->DirectDrawGlobal.vmiData.dwDisplayWidth == dwWidth) &&
+ (This->DirectDrawGlobal.vmiData.ddpfDisplay.dwRGBBitCount == dwBPP))
+ {
+
+ return DD_OK;
+ }
+
+ /* Check use the Hal or Hel for SetMode */
+ if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETMODE)
+ {
+ ret = Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
}
-
- ret = Hel_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
-
- return ret;
+ else
+ {
+ ret = Hel_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
+ }
+
+ if (ret == DD_OK)
+ {
+ DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
+ /* FIXME fill the This->DirectDrawGlobal.vmiData right */
+ }
+
+ return ret;
}
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
if (pUnkOuter!=NULL)
return DDERR_INVALIDPARAMS;
- if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize)
+ if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize && sizeof(DDSURFACEDESC)!=pDDSD->dwSize)
return DDERR_UNSUPPORTED;
// the nasty com stuff
HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 src,
HRESULT WINAPI Main_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD pNumCodes, LPDWORD pCodes)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
LPDIRECTDRAWSURFACE7 *lplpGDIDDSSurface)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status)
HRESULT WINAPI Main_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7 iface, HDC hdc,
LPDIRECTDRAWSURFACE7 *lpDDS)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_RestoreAllSurfaces(LPDIRECTDRAW7 iface)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_TestCooperativeLevel(LPDIRECTDRAW7 iface)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_GetDeviceIdentifier(LPDIRECTDRAW7 iface,
LPDDDEVICEIDENTIFIER2 pDDDI, DWORD dwFlags)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_StartModeTest(LPDIRECTDRAW7 iface, LPSIZE pModes,
DWORD dwNumModes, DWORD dwFlags)
{
- DX_STUB;
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_EvaluateMode(LPDIRECTDRAW7 iface,DWORD a,DWORD* b)
{
- DX_STUB;
+ DX_STUB;
}
IDirectDraw7Vtbl DirectDraw7_Vtable =