[Win32SS]

- Implement Exclude Update Region, for testing. See CORE-12649.

svn path=/trunk/; revision=73888
This commit is contained in:
James Tabor 2017-02-22 17:50:38 +00:00
parent 482d43b875
commit 81652fd827
3 changed files with 77 additions and 13 deletions

View file

@ -2063,7 +2063,7 @@ NTAPI
NtUserEvent(
DWORD Unknown0);
DWORD
INT
NTAPI
NtUserExcludeUpdateRgn(
HDC hDC,
@ -2470,7 +2470,7 @@ NtUserGetUpdateRect(
LPRECT lpRect,
BOOL fErase);
int
INT
NTAPI
NtUserGetUpdateRgn(
HWND hWnd,

View file

@ -104,17 +104,6 @@ NtUserEvent(
return 0;
}
DWORD
APIENTRY
NtUserExcludeUpdateRgn(
HDC hDC,
HWND hWnd)
{
STUB
return 0;
}
BOOL
APIENTRY
NtUserGetAltTabInfo(

View file

@ -2473,6 +2473,81 @@ NtUserDrawCaption(HWND hWnd,
return NtUserDrawCaptionTemp(hWnd, hDC, lpRc, 0, 0, NULL, uFlags);
}
INT FASTCALL
co_UserExcludeUpdateRgn(HDC hDC, PWND Window)
{
POINT pt;
RECT rc;
if (Window->hrgnUpdate)
{
if (Window->hrgnUpdate == HRGN_WINDOW)
{
return NtGdiIntersectClipRect(hDC, 0, 0, 0, 0);
}
else
{
INT ret = ERROR;
HRGN hrgn = NtGdiCreateRectRgn(0,0,0,0);
if ( hrgn && GreGetDCPoint( hDC, GdiGetDCOrg, &pt) )
{
if ( NtGdiGetRandomRgn( hDC, hrgn, CLIPRGN) == NULLREGION )
{
NtGdiOffsetRgn(hrgn, pt.x, pt.y);
}
else
{
HRGN hrgnScreen;
PMONITOR pm = UserGetPrimaryMonitor();
hrgnScreen = NtGdiCreateRectRgn(0,0,0,0);
NtGdiCombineRgn(hrgnScreen, hrgnScreen, pm->hrgnMonitor, RGN_OR);
NtGdiCombineRgn(hrgn, hrgnScreen, NULL, RGN_COPY);
GreDeleteObject(hrgnScreen);
}
NtGdiCombineRgn(hrgn, hrgn, Window->hrgnUpdate, RGN_DIFF);
NtGdiOffsetRgn(hrgn, -pt.x, -pt.y);
ret = NtGdiExtSelectClipRgn(hDC, hrgn, RGN_COPY);
GreDeleteObject(hrgn);
}
return ret;
}
}
else
{
return GdiGetClipBox( hDC, &rc);
}
}
INT
APIENTRY
NtUserExcludeUpdateRgn(
HDC hDC,
HWND hWnd)
{
INT ret = ERROR;
PWND pWnd;
TRACE("Enter NtUserExcludeUpdateRgn\n");
UserEnterExclusive();
pWnd = UserGetWindowObject(hWnd);
if (hDC && pWnd)
ret = co_UserExcludeUpdateRgn(hDC, pWnd);
TRACE("Leave NtUserExcludeUpdateRgn, ret=%i\n", ret);
UserLeave();
return ret;
}
BOOL
APIENTRY
NtUserInvalidateRect(