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