Adam Petaccia : gdiplus: Implement GdipDeleteRegion.
Alexandre Julliard
julliard at winehq.org
Fri Jul 25 08:14:02 CDT 2008
Module: wine
Branch: master
Commit: 8a9438d560c1a1cc4d0f001ed1bafb1d1b45b17d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a9438d560c1a1cc4d0f001ed1bafb1d1b45b17d
Author: Adam Petaccia <adam at tpetaccia.com>
Date: Thu Jul 24 19:01:32 2008 -0400
gdiplus: Implement GdipDeleteRegion.
---
dlls/gdiplus/region.c | 32 ++++++++++++++++++++++++++++++--
dlls/gdiplus/tests/region.c | 4 +++-
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/dlls/gdiplus/region.c b/dlls/gdiplus/region.c
index d2997f4..0e96550 100644
--- a/dlls/gdiplus/region.c
+++ b/dlls/gdiplus/region.c
@@ -121,6 +121,27 @@ static inline GpStatus init_region(GpRegion* region, const RegionType type)
return Ok;
}
+static inline void delete_element(region_element* element)
+{
+ switch(element->type)
+ {
+ case RegionDataRect:
+ break;
+ case RegionDataPath:
+ GdipDeletePath(element->elementdata.pathdata.path);
+ break;
+ case RegionDataEmptyRect:
+ case RegionDataInfiniteRect:
+ break;
+ default:
+ delete_element(element->elementdata.combine.left);
+ delete_element(element->elementdata.combine.right);
+ GdipFree(element->elementdata.combine.left);
+ GdipFree(element->elementdata.combine.right);
+ break;
+ }
+}
+
GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone)
{
FIXME("(%p %p): stub\n", region, clone);
@@ -212,8 +233,15 @@ GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region)
GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region)
{
- FIXME("(%p): stub\n", region);
- return NotImplemented;
+ TRACE("%p\n", region);
+
+ if (!region)
+ return InvalidParameter;
+
+ delete_element(®ion->node);
+ GdipFree(region);
+
+ return Ok;
}
GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect)
diff --git a/dlls/gdiplus/tests/region.c b/dlls/gdiplus/tests/region.c
index e3ed8ec..a5064d1 100644
--- a/dlls/gdiplus/tests/region.c
+++ b/dlls/gdiplus/tests/region.c
@@ -108,6 +108,7 @@ todo_wine
expect_magic((DWORD*)(buf + 2));
expect_dword(buf + 3, 0);
expect_dword(buf + 4, RGNDATA_INFINITE_RECT);
+}
status = GdipDeleteRegion(region);
ok(status == Ok, "status %08x\n", status);
@@ -116,6 +117,8 @@ todo_wine
rect.Y = 20;
rect.Width = 100;
rect.Height = 200;
+todo_wine
+{
status = GdipCreateRegionRectI(&rect, ®ion);
ok(status == Ok, "status %08x\n", status);
status = GdipGetRegionDataSize(region, &needed);
@@ -216,7 +219,6 @@ todo_wine
expect_float(buf + 37, 22.0);
expect_float(buf + 38, 55.0);
-
status = GdipDeleteRegion(region2);
ok(status == Ok, "status %08x\n", status);
status = GdipDeleteRegion(region);
More information about the wine-cvs
mailing list