Adam Petaccia : gdiplus: Implement GdipCombineRegionPath.

Alexandre Julliard julliard at winehq.org
Tue Aug 5 07:26:26 CDT 2008


Module: wine
Branch: master
Commit: 93eae5e83f867f6c455b27bc3a2e5261f1c144d8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=93eae5e83f867f6c455b27bc3a2e5261f1c144d8

Author: Adam Petaccia <adam at tpetaccia.com>
Date:   Mon Aug  4 13:56:59 2008 -0400

gdiplus: Implement GdipCombineRegionPath.

---

 dlls/gdiplus/region.c       |   34 ++++++++++++++++++++++++++++++++--
 dlls/gdiplus/tests/region.c |    1 -
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
index b66cbb4..11b5aa6 100644
--- a/dlls/gdiplus/region.c
+++ b/dlls/gdiplus/region.c
@@ -252,8 +252,38 @@ GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone)
 
 GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion *region, GpPath *path, CombineMode mode)
 {
-    FIXME("(%p %p %d): stub\n", region, path, mode);
-    return NotImplemented;
+    GpRegion *path_region;
+    region_element *left, *right = NULL;
+    GpStatus stat;
+
+    TRACE("%p %p %d\n", region, path, mode);
+
+    if (!(region && path))
+        return InvalidParameter;
+
+    stat = GdipCreateRegionPath(path, &path_region);
+    if (stat != Ok)
+        return stat;
+
+    left = GdipAlloc(sizeof(region_element));
+    if (!left)
+        goto out;
+    *left = region->node;
+
+    stat = clone_element(&path_region->node, &right);
+    if (stat != Ok)
+        goto out;
+
+    fuse_region(region, left, right, mode);
+
+    GdipDeleteRegion(path_region);
+    return Ok;
+
+out:
+    GdipFree(left);
+    delete_element(right);
+    GdipDeleteRegion(path_region);
+    return stat;
 }
 
 GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion *region,
diff --git a/dlls/gdiplus/tests/region.c b/dlls/gdiplus/tests/region.c
index 77b1e3b..df9e744 100644
--- a/dlls/gdiplus/tests/region.c
+++ b/dlls/gdiplus/tests/region.c
@@ -70,7 +70,6 @@ static void test_getregiondata(void)
     status = GdipGetRegionDataSize(region, &needed);
     ok(status == Ok, "status %08x\n", status);
     expect(20, needed);
-todo_wine
     status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
     ok(status == Ok, "status %08x\n", status);
     expect(20, needed);




More information about the wine-cvs mailing list