1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

addref on GetClipper and GetPalette

This commit is contained in:
FunkyFr3sh 2021-05-26 19:21:40 +02:00
parent e5652ba849
commit a8359e8e77

View File

@ -776,7 +776,15 @@ HRESULT dds_GetClipper(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWCLIPPER FAR* lp
if (lpClipper) if (lpClipper)
*lpClipper = (LPDIRECTDRAWCLIPPER)This->clipper; *lpClipper = (LPDIRECTDRAWCLIPPER)This->clipper;
return DD_OK; if (This->clipper)
{
IDirectDrawClipper_AddRef(This->clipper);
return DD_OK;
}
else
{
return DDERR_NOCLIPPERATTACHED;
}
} }
HRESULT dds_GetColorKey(IDirectDrawSurfaceImpl *This, DWORD flags, LPDDCOLORKEY colorKey) HRESULT dds_GetColorKey(IDirectDrawSurfaceImpl *This, DWORD flags, LPDDCOLORKEY colorKey)
@ -826,10 +834,12 @@ HRESULT dds_GetDC(IDirectDrawSurfaceImpl *This, HDC FAR *lpHDC)
HRESULT dds_GetPalette(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWPALETTE FAR *lplpDDPalette) HRESULT dds_GetPalette(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWPALETTE FAR *lplpDDPalette)
{ {
*lplpDDPalette = (LPDIRECTDRAWPALETTE)This->palette; if (lplpDDPalette)
*lplpDDPalette = (LPDIRECTDRAWPALETTE)This->palette;
if (This->palette) if (This->palette)
{ {
IDirectDrawPalette_AddRef(This->palette);
return DD_OK; return DD_OK;
} }
else else
@ -919,20 +929,14 @@ HRESULT dds_SetClipper(IDirectDrawSurfaceImpl* This, LPDIRECTDRAWCLIPPER lpClipp
HRESULT dds_SetPalette(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWPALETTE lpDDPalette) HRESULT dds_SetPalette(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWPALETTE lpDDPalette)
{ {
if (!lpDDPalette) if (lpDDPalette)
return DDERR_INVALIDPARAMS; IDirectDrawPalette_AddRef(lpDDPalette);
IDirectDrawPalette_AddRef(lpDDPalette);
if (This->palette) if (This->palette)
{
IDirectDrawPalette_Release(This->palette); IDirectDrawPalette_Release(This->palette);
}
EnterCriticalSection(&g_ddraw->cs); EnterCriticalSection(&g_ddraw->cs);
This->palette = (IDirectDrawPaletteImpl*)lpDDPalette; This->palette = (IDirectDrawPaletteImpl*)lpDDPalette;
LeaveCriticalSection(&g_ddraw->cs); LeaveCriticalSection(&g_ddraw->cs);
return DD_OK; return DD_OK;