Implement IDirectDrawClipper_GetClipList for case where we have a
handle to a window.
This commit is contained in:
parent
8680ce1a0e
commit
9e2e594a1c
|
@ -143,15 +143,43 @@ ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) {
|
|||
*/
|
||||
HRESULT WINAPI Main_DirectDrawClipper_GetClipList(
|
||||
LPDIRECTDRAWCLIPPER iface, LPRECT lpRect, LPRGNDATA lpClipList,
|
||||
LPDWORD lpdwSize
|
||||
) {
|
||||
LPDWORD lpdwSize)
|
||||
{
|
||||
ICOM_THIS(IDirectDrawClipperImpl,iface);
|
||||
|
||||
TRACE("(%p,%p,%p,%p)\n", This, lpRect, lpClipList, lpdwSize);
|
||||
|
||||
if (This->hWnd)
|
||||
{
|
||||
HDC hDC = GetDCEx(This->hWnd, NULL, DCX_WINDOW);
|
||||
if (hDC)
|
||||
{
|
||||
HRGN hRgn = CreateRectRgn(0,0,0,0);
|
||||
if (GetRandomRgn(hDC, hRgn, SYSRGN))
|
||||
{
|
||||
if (lpRect)
|
||||
{
|
||||
HRGN hRgnClip = CreateRectRgn(lpRect->left, lpRect->top,
|
||||
lpRect->right, lpRect->bottom);
|
||||
CombineRgn(hRgn, hRgn, hRgnClip, RGN_AND);
|
||||
DeleteObject(hRgnClip);
|
||||
}
|
||||
*lpdwSize = GetRegionData(hRgn, *lpdwSize, lpClipList);
|
||||
}
|
||||
DeleteObject(hRgn);
|
||||
ReleaseDC(This->hWnd, hDC);
|
||||
}
|
||||
return DD_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
static int warned = 0;
|
||||
if (warned++ < 10)
|
||||
FIXME("(%p,%p,%p,%p),stub!\n",This,lpRect,lpClipList,lpdwSize);
|
||||
if (lpdwSize) *lpdwSize=0;
|
||||
return DDERR_NOCLIPLIST;
|
||||
}
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* IDirectDrawClipper::SetClipList
|
||||
|
|
Loading…
Reference in New Issue