diff --git a/src/ddclipper.c b/src/ddclipper.c index 30ba4ce..28fc283 100644 --- a/src/ddclipper.c +++ b/src/ddclipper.c @@ -7,9 +7,6 @@ HRESULT ddc_GetClipList(IDirectDrawClipperImpl* This, LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSiz) { - return DDERR_NOCLIPLIST; - - /* Keep this commented out until we found a game that actually needs it if (!This->region) return DDERR_NOCLIPLIST; @@ -45,7 +42,6 @@ HRESULT ddc_GetClipList(IDirectDrawClipperImpl* This, LPRECT lpRect, LPRGNDATA l return DDERR_REGIONTOOSMALL; return DD_OK; - */ } HRESULT ddc_GetHWnd(IDirectDrawClipperImpl* This, HWND FAR* lphWnd) diff --git a/src/ddsurface.c b/src/ddsurface.c index 34de913..b8ff738 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -988,8 +988,20 @@ HRESULT dds_ReleaseDC(IDirectDrawSurfaceImpl* This, HDC hDC) HRESULT dds_SetClipper(IDirectDrawSurfaceImpl* This, IDirectDrawClipperImpl* lpClipper) { if (lpClipper) + { IDirectDrawClipper_AddRef(lpClipper); + if ((This->caps & DDSCAPS_PRIMARYSURFACE) && lpClipper->hwnd) + { + if (lpClipper->region) + DeleteObject(lpClipper->region); + + RECT rc = { 0, 0, This->width, This->height }; + + lpClipper->region = CreateRectRgnIndirect(&rc); + } + } + if (This->clipper) IDirectDrawClipper_Release(This->clipper);