Andrew Nguyen : gdi32: Check the region handle in GetClipRgn later.
Alexandre Julliard
julliard at winehq.org
Tue Feb 16 11:44:40 CST 2010
Module: wine
Branch: master
Commit: a504867a89d1d8efd37516e360d12413da5ec745
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a504867a89d1d8efd37516e360d12413da5ec745
Author: Andrew Nguyen <arethusa26 at gmail.com>
Date: Tue Feb 16 01:35:35 2010 -0600
gdi32: Check the region handle in GetClipRgn later.
---
dlls/gdi32/clipping.c | 2 +-
dlls/gdi32/tests/clipping.c | 88 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 1 deletions(-)
diff --git a/dlls/gdi32/clipping.c b/dlls/gdi32/clipping.c
index 4e294b6..a942fe1 100644
--- a/dlls/gdi32/clipping.c
+++ b/dlls/gdi32/clipping.c
@@ -385,7 +385,7 @@ INT WINAPI GetClipRgn( HDC hdc, HRGN hRgn )
{
INT ret = -1;
DC * dc;
- if (hRgn && (dc = get_dc_ptr( hdc )))
+ if ((dc = get_dc_ptr( hdc )))
{
if( dc->hClipRgn )
{
diff --git a/dlls/gdi32/tests/clipping.c b/dlls/gdi32/tests/clipping.c
index 06cb22a..0bca179 100644
--- a/dlls/gdi32/tests/clipping.c
+++ b/dlls/gdi32/tests/clipping.c
@@ -265,8 +265,96 @@ static void test_ExtCreateRegion(void)
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)
{
test_GetRandomRgn();
test_ExtCreateRegion();
+ test_GetClipRgn();
}
More information about the wine-cvs
mailing list