mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 16:40:27 +00:00
more seh fixed
svn path=/trunk/; revision=27034
This commit is contained in:
parent
32740d717d
commit
201a7b042d
1 changed files with 117 additions and 68 deletions
|
@ -107,32 +107,39 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
|
||||||
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
HRESULT ret = DD_OK;
|
||||||
|
|
||||||
|
_SEH_TRY
|
||||||
|
{
|
||||||
// FIXME: Check primary if surface is locked / busy etc.
|
// FIXME: Check primary if surface is locked / busy etc.
|
||||||
|
|
||||||
// Check Parameters
|
// Check Parameters
|
||||||
if(dwFlags != 0)
|
if(dwFlags != 0)
|
||||||
{
|
{
|
||||||
return DDERR_INVALIDPARAMS;
|
ret = DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
if ((!dwHeight || This->lpLcl->lpGbl->vmiData.dwDisplayHeight == dwHeight) &&
|
if ((!dwHeight || This->lpLcl->lpGbl->vmiData.dwDisplayHeight == dwHeight) &&
|
||||||
(!dwWidth || This->lpLcl->lpGbl->vmiData.dwDisplayWidth == dwWidth) &&
|
(!dwWidth || This->lpLcl->lpGbl->vmiData.dwDisplayWidth == dwWidth) &&
|
||||||
(!dwBPP || This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwRGBBitCount == dwBPP) &&
|
(!dwBPP || This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwRGBBitCount == dwBPP) &&
|
||||||
(!dwRefreshRate || This->lpLcl->lpGbl->dwMonitorFrequency == dwRefreshRate))
|
(!dwRefreshRate || This->lpLcl->lpGbl->dwMonitorFrequency == dwRefreshRate))
|
||||||
{
|
{
|
||||||
return DD_OK; // nothing to do here for us
|
ret = DD_OK; // nothing to do here for us
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Here we go
|
// Here we go
|
||||||
DEVMODE DevMode;
|
DEVMODE DevMode;
|
||||||
DevMode.dmFields = 0;
|
DevMode.dmFields = 0;
|
||||||
if(dwHeight)
|
|
||||||
|
if (dwHeight)
|
||||||
DevMode.dmFields |= DM_PELSHEIGHT;
|
DevMode.dmFields |= DM_PELSHEIGHT;
|
||||||
if(dwWidth)
|
if (dwWidth)
|
||||||
DevMode.dmFields |= DM_PELSWIDTH;
|
DevMode.dmFields |= DM_PELSWIDTH;
|
||||||
if(dwBPP)
|
if (dwBPP)
|
||||||
DevMode.dmFields |= DM_BITSPERPEL;
|
DevMode.dmFields |= DM_BITSPERPEL;
|
||||||
if(dwRefreshRate)
|
if (dwRefreshRate)
|
||||||
DevMode.dmFields |= DM_DISPLAYFREQUENCY;
|
DevMode.dmFields |= DM_DISPLAYFREQUENCY;
|
||||||
|
|
||||||
DevMode.dmPelsHeight = dwHeight;
|
DevMode.dmPelsHeight = dwHeight;
|
||||||
|
@ -144,19 +151,28 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
|
||||||
|
|
||||||
if(retval == DISP_CHANGE_BADMODE)
|
if(retval == DISP_CHANGE_BADMODE)
|
||||||
{
|
{
|
||||||
return DDERR_UNSUPPORTED;
|
ret = DDERR_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
else if(retval != DISP_CHANGE_SUCCESSFUL)
|
else if(retval != DISP_CHANGE_SUCCESSFUL)
|
||||||
{
|
{
|
||||||
return DDERR_GENERIC;
|
ret = DDERR_GENERIC;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// Update Interals
|
// Update Interals
|
||||||
BOOL ModeChanged;
|
BOOL ModeChanged;
|
||||||
DdReenableDirectDrawObject(This->lpLcl->lpGbl, &ModeChanged);
|
DdReenableDirectDrawObject(This->lpLcl->lpGbl, &ModeChanged);
|
||||||
StartDirectDraw((LPDIRECTDRAW)iface, 0, TRUE);
|
StartDirectDraw((LPDIRECTDRAW)iface, 0, TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
return DD_OK;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
|
@ -165,12 +181,20 @@ Main_DirectDraw_RestoreDisplayMode (LPDIRECTDRAW7 iface)
|
||||||
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
_SEH_TRY
|
||||||
|
{
|
||||||
ChangeDisplaySettings(NULL, 0);
|
ChangeDisplaySettings(NULL, 0);
|
||||||
|
|
||||||
// Update Interals
|
// Update Interals
|
||||||
BOOL ModeChanged;
|
BOOL ModeChanged;
|
||||||
DdReenableDirectDrawObject(This->lpLcl->lpGbl, &ModeChanged);
|
DdReenableDirectDrawObject(This->lpLcl->lpGbl, &ModeChanged);
|
||||||
StartDirectDraw((LPDIRECTDRAW)iface, 0, TRUE);
|
StartDirectDraw((LPDIRECTDRAW)iface, 0, TRUE);
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
@ -178,29 +202,48 @@ Main_DirectDraw_RestoreDisplayMode (LPDIRECTDRAW7 iface)
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DirectDraw_GetMonitorFrequency (LPDIRECTDRAW7 iface, LPDWORD lpFreq)
|
Main_DirectDraw_GetMonitorFrequency (LPDIRECTDRAW7 iface, LPDWORD lpFreq)
|
||||||
{
|
{
|
||||||
|
HRESULT retVal = DD_OK;
|
||||||
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (lpFreq == NULL)
|
_SEH_TRY
|
||||||
return DDERR_INVALIDPARAMS;
|
{
|
||||||
|
if(IsBadWritePtr(lpFreq,sizeof(LPDWORD)))
|
||||||
|
{
|
||||||
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
*lpFreq = This->lpLcl->lpGbl->dwMonitorFrequency;
|
*lpFreq = This->lpLcl->lpGbl->dwMonitorFrequency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
return DD_OK;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DirectDraw_GetDisplayMode (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
Main_DirectDraw_GetDisplayMode (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
||||||
{
|
{
|
||||||
|
HRESULT retVal = DD_OK;
|
||||||
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pDDSD == NULL)
|
_SEH_TRY
|
||||||
return DDERR_INVALIDPARAMS;
|
{
|
||||||
|
if(IsBadWritePtr(pDDSD,sizeof(LPDWORD)))
|
||||||
if (pDDSD->dwSize != sizeof(DDSURFACEDESC2))
|
{
|
||||||
return DDERR_INVALIDPARAMS;
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
|
}
|
||||||
|
else if (pDDSD->dwSize != sizeof(DDSURFACEDESC2))
|
||||||
|
{
|
||||||
|
retVal = DDERR_INVALIDPARAMS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// FIXME: More stucture members might need to be filled
|
// FIXME: More stucture members might need to be filled
|
||||||
|
|
||||||
pDDSD->dwFlags |= DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_PITCH | DDSD_REFRESHRATE;
|
pDDSD->dwFlags |= DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT | DDSD_PITCH | DDSD_REFRESHRATE;
|
||||||
|
@ -209,6 +252,12 @@ Main_DirectDraw_GetDisplayMode (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
||||||
pDDSD->ddpfPixelFormat = This->lpLcl->lpGbl->vmiData.ddpfDisplay;
|
pDDSD->ddpfPixelFormat = This->lpLcl->lpGbl->vmiData.ddpfDisplay;
|
||||||
pDDSD->dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency;
|
pDDSD->dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency;
|
||||||
pDDSD->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch;
|
pDDSD->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
return DD_OK;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue