From e61e0d23218c307f64d12fbffa2e4a4675597e71 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 6 Mar 2023 01:40:47 +0100 Subject: [PATCH] #209 support clipper from hwnd for New Robinson --- src/ddclipper.c | 4 ---- src/ddsurface.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) 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);