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