gdi32: Check the region handle in GetClipRgn later.

This commit is contained in:
Andrew Nguyen 2010-02-16 01:35:35 -06:00 committed by Alexandre Julliard
parent aa25fcded7
commit a504867a89
2 changed files with 89 additions and 1 deletions

View File

@ -385,7 +385,7 @@ INT WINAPI GetClipRgn( HDC hdc, HRGN hRgn )
{ {
INT ret = -1; INT ret = -1;
DC * dc; DC * dc;
if (hRgn && (dc = get_dc_ptr( hdc ))) if ((dc = get_dc_ptr( hdc )))
{ {
if( dc->hClipRgn ) if( dc->hClipRgn )
{ {

View File

@ -265,8 +265,96 @@ static void test_ExtCreateRegion(void)
DeleteObject(hrgn); DeleteObject(hrgn);
} }
static void test_GetClipRgn(void)
{
HDC hdc;
HRGN hrgn, hrgn2, hrgn3, hrgn4;
int ret;
/* Test calling GetClipRgn with NULL device context and region handles. */
ret = GetClipRgn(NULL, NULL);
ok(ret == -1, "Expected GetClipRgn to return -1, got %d\n", ret);
hdc = GetDC(NULL);
ok(hdc != NULL, "Expected GetDC to return a valid device context handle\n");
/* Test calling GetClipRgn with a valid device context and NULL region. */
ret = GetClipRgn(hdc, NULL);
ok(ret == 0 ||
ret == -1 /* Win9x */,
"Expected GetClipRgn to return 0, got %d\n", ret);
/* Initialize the test regions. */
hrgn = CreateRectRgn(100, 100, 100, 100);
ok(hrgn != NULL,
"Expected CreateRectRgn to return a handle to a new rectangular region\n");
hrgn2 = CreateRectRgn(1, 2, 3, 4);
ok(hrgn2 != NULL,
"Expected CreateRectRgn to return a handle to a new rectangular region\n");
hrgn3 = CreateRectRgn(1, 2, 3, 4);
ok(hrgn3 != NULL,
"Expected CreateRectRgn to return a handle to a new rectangular region\n");
hrgn4 = CreateRectRgn(1, 2, 3, 4);
ok(hrgn4 != NULL,
"Expected CreateRectRgn to return a handle to a new rectangular region\n");
/* Try getting a clipping region from the device context
* when the device context's clipping region isn't set. */
ret = GetClipRgn(hdc, hrgn2);
ok(ret == 0, "Expected GetClipRgn to return 0, got %d\n", ret);
/* The region passed to GetClipRgn should be unchanged. */
ret = EqualRgn(hrgn2, hrgn3);
ok(ret == 1,
"Expected EqualRgn to compare the two regions as equal, got %d\n", ret);
/* Try setting and getting back a clipping region. */
ret = SelectClipRgn(hdc, hrgn);
ok(ret == NULLREGION,
"Expected SelectClipRgn to return NULLREGION, got %d\n", ret);
/* Passing a NULL region handle when the device context
* has a clipping region results in an error. */
ret = GetClipRgn(hdc, NULL);
ok(ret == -1, "Expected GetClipRgn to return -1, got %d\n", ret);
ret = GetClipRgn(hdc, hrgn2);
ok(ret == 1, "Expected GetClipRgn to return 1, got %d\n", ret);
ret = EqualRgn(hrgn, hrgn2);
ok(ret == 1,
"Expected EqualRgn to compare the two regions as equal, got %d\n", ret);
/* Try unsetting and then query the clipping region. */
ret = SelectClipRgn(hdc, NULL);
ok(ret == SIMPLEREGION,
"Expected SelectClipRgn to return SIMPLEREGION, got %d\n", ret);
ret = GetClipRgn(hdc, NULL);
ok(ret == 0 ||
ret == -1 /* Win9x */,
"Expected GetClipRgn to return 0, got %d\n", ret);
ret = GetClipRgn(hdc, hrgn3);
ok(ret == 0, "Expected GetClipRgn to return 0, got %d\n", ret);
ret = EqualRgn(hrgn3, hrgn4);
ok(ret == 1,
"Expected EqualRgn to compare the two regions as equal, got %d\n", ret);
DeleteObject(hrgn4);
DeleteObject(hrgn3);
DeleteObject(hrgn2);
DeleteObject(hrgn);
ReleaseDC(NULL, hdc);
}
START_TEST(clipping) START_TEST(clipping)
{ {
test_GetRandomRgn(); test_GetRandomRgn();
test_ExtCreateRegion(); test_ExtCreateRegion();
test_GetClipRgn();
} }