From 94c718b5b1eaff48a70c0bf3656ba32797d320b8 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 28 May 2024 00:33:05 +0200 Subject: [PATCH] adjust clipper logging and make clipper less strict --- inc/ddclipper.h | 1 + src/IDirectDraw/IDirectDrawClipper.c | 8 ++++---- src/ddclipper.c | 13 +++++++++++++ src/ddsurface.c | 17 ++++++++--------- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/inc/ddclipper.h b/inc/ddclipper.h index f9c02c4..3f23c93 100644 --- a/inc/ddclipper.h +++ b/inc/ddclipper.h @@ -12,6 +12,7 @@ HRESULT ddc_GetHWnd(IDirectDrawClipperImpl* This, HWND FAR* lphWnd); HRESULT ddc_IsClipListChanged(IDirectDrawClipperImpl* This, BOOL FAR* lpbChanged); HRESULT ddc_SetClipList(IDirectDrawClipperImpl* This, LPRGNDATA lpClipList, DWORD dwFlags); HRESULT ddc_SetHWnd(IDirectDrawClipperImpl* This, DWORD dwFlags, HWND hWnd); +HRESULT ddc_SetClipRect(IDirectDrawClipperImpl* This, LPRECT lpRect); HRESULT dd_CreateClipper(DWORD dwFlags, IDirectDrawClipperImpl** lplpDDClipper, IUnknown FAR* pUnkOuter); #endif diff --git a/src/IDirectDraw/IDirectDrawClipper.c b/src/IDirectDraw/IDirectDrawClipper.c index b07390f..34cd4de 100644 --- a/src/IDirectDraw/IDirectDrawClipper.c +++ b/src/IDirectDraw/IDirectDrawClipper.c @@ -47,7 +47,7 @@ HRESULT __stdcall IDirectDrawClipper__GetClipList( LPDWORD lpdwSiz) { TRACE( - "NOT_IMPLEMENTED -> %s(This=%p, lpRect=%p, lpClipList=%p, lpdwSiz=%p)\n", + "-> %s(This=%p, lpRect=%p, lpClipList=%p, lpdwSiz=%p)\n", __FUNCTION__, This, lpRect, @@ -56,7 +56,7 @@ HRESULT __stdcall IDirectDrawClipper__GetClipList( HRESULT ret = ddc_GetClipList(This, lpRect, lpClipList, lpdwSiz); - TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); + TRACE("<- %s\n", __FUNCTION__); return ret; } @@ -86,9 +86,9 @@ HRESULT __stdcall IDirectDrawClipper__IsClipListChanged(IDirectDrawClipperImpl* HRESULT __stdcall IDirectDrawClipper__SetClipList(IDirectDrawClipperImpl* This, LPRGNDATA lpClipList, DWORD dwFlags) { - TRACE("NOT_IMPLEMENTED -> %s(This=%p, lpClipList=%p, dwFlags=%08X)\n", __FUNCTION__, This, lpClipList, dwFlags); + TRACE("-> %s(This=%p, lpClipList=%p, dwFlags=%08X)\n", __FUNCTION__, This, lpClipList, dwFlags); HRESULT ret = ddc_SetClipList(This, lpClipList, dwFlags); - TRACE("NOT_IMPLEMENTED <- %s\n", __FUNCTION__); + TRACE("<- %s\n", __FUNCTION__); return ret; } diff --git a/src/ddclipper.c b/src/ddclipper.c index 14ec412..eeec712 100644 --- a/src/ddclipper.c +++ b/src/ddclipper.c @@ -172,6 +172,19 @@ HRESULT ddc_SetHWnd(IDirectDrawClipperImpl* This, DWORD dwFlags, HWND hWnd) return DD_OK; } +HRESULT ddc_SetClipRect(IDirectDrawClipperImpl* This, LPRECT lpRect) +{ + EnterCriticalSection(&This->cs); + + if (This->region) + DeleteObject(This->region); + + This->region = CreateRectRgnIndirect(lpRect); + + LeaveCriticalSection(&This->cs); + return DD_OK; +} + HRESULT dd_CreateClipper(DWORD dwFlags, IDirectDrawClipperImpl** lplpDDClipper, IUnknown FAR* pUnkOuter) { if (!lplpDDClipper) diff --git a/src/ddsurface.c b/src/ddsurface.c index 7d06d6c..c56d407 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -11,6 +11,7 @@ #include "utils.h" #include "blt.h" #include "config.h" +#include "ddclipper.h" #include "versionhelpers.h" @@ -90,7 +91,7 @@ HRESULT dds_Blt( { DWORD size = 0; - HRESULT result = IDirectDrawClipper_GetClipList(This->clipper, &dst_rect, NULL, &size); + HRESULT result = ddc_GetClipList(This->clipper, &dst_rect, NULL, &size); if (SUCCEEDED(result)) { @@ -98,7 +99,7 @@ HRESULT dds_Blt( if (list) { - if (SUCCEEDED(IDirectDrawClipper_GetClipList(This->clipper, &dst_rect, list, &size))) + if (SUCCEEDED(ddc_GetClipList(This->clipper, &dst_rect, list, &size))) { RECT* dst_c_rect = (RECT*)list->Buffer; @@ -125,11 +126,13 @@ HRESULT dds_Blt( } else if (result == DDERR_NOCLIPLIST) { - return DDERR_NOCLIPLIST; + TRACE(" DDERR_NOCLIPLIST\n"); + //return DDERR_NOCLIPLIST; } else { - return DDERR_INVALIDCLIPLIST; + TRACE(" DDERR_INVALIDCLIPLIST\n"); + //return DDERR_INVALIDCLIPLIST; } } @@ -1023,12 +1026,8 @@ HRESULT dds_SetClipper(IDirectDrawSurfaceImpl* This, IDirectDrawClipperImpl* lpC 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); + ddc_SetClipRect(lpClipper, &rc); } }