[1/2] gdiplus: implemented GdipSetClipPath
Nikolay Sivov
bunglehead at gmail.com
Fri Sep 26 13:59:26 CDT 2008
Changelog:
- implemented GdipSetClipPath. Helps Free DWG Viewer in #12495.
>From 832656ab37c5de8f9cea0bf40b9bc1b887b3cb58 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Fri, 26 Sep 2008 22:18:09 +0400
Subject: Implemented GdipSetClipPath with basic tests
---
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/graphics.c | 13 +++++++++++++
dlls/gdiplus/tests/graphics.c | 7 +++++++
include/gdiplusflat.h | 1 +
4 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 0faf01b..7244a81 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -508,7 +508,7 @@
@ stdcall GdipSetAdjustableArrowCapWidth(ptr long)
@ stub GdipSetClipGraphics
@ stub GdipSetClipHrgn
-@ stub GdipSetClipPath
+@ stdcall GdipSetClipPath(ptr ptr long)
@ stdcall GdipSetClipRect(ptr long long long long long)
@ stdcall GdipSetClipRectI(ptr long long long long long)
@ stdcall GdipSetClipRegion(ptr ptr long)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index b36e31c..3b5d8f0 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -2948,6 +2948,19 @@ GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics *graphics, REAL dx,
return GdipTranslateMatrix(graphics->worldtrans, dx, dy, order);
}
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics *graphics, GpPath *path, CombineMode mode)
+{
+ TRACE("(%p, %p, %d)\n", graphics, path, mode);
+
+ if(!graphics)
+ return InvalidParameter;
+
+ if(graphics->busy)
+ return ObjectBusy;
+
+ return GdipCombineRegionPath(graphics->clip, path, mode);
+}
+
GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics *graphics, REAL x, REAL y,
REAL width, REAL height,
CombineMode mode)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c
index c000843..6f38446 100644
--- a/dlls/gdiplus/tests/graphics.c
+++ b/dlls/gdiplus/tests/graphics.c
@@ -706,6 +706,8 @@ static void test_Get_Release_DC(void)
expect(ObjectBusy, status); status = Ok;
status = GdipTranslateWorldTransform(graphics, 0.0, 0.0, MatrixOrderPrepend);
expect(ObjectBusy, status); status = Ok;
+ status = GdipSetClipPath(graphics, path, CombineModeReplace);
+ expect(ObjectBusy, status); status = Ok;
status = GdipSetClipRect(graphics, 0.0, 0.0, 10.0, 10.0, CombineModeReplace);
expect(ObjectBusy, status); status = Ok;
status = GdipSetClipRectI(graphics, 0, 0, 10, 10, CombineModeReplace);
@@ -804,6 +806,11 @@ static void test_get_set_clip(void)
status = GdipSetClipRegion(graphics, NULL, CombineModeReplace);
expect(InvalidParameter, status);
+ status = GdipSetClipPath(NULL, NULL, CombineModeReplace);
+ expect(InvalidParameter, status);
+ status = GdipSetClipPath(graphics, NULL, CombineModeReplace);
+ expect(InvalidParameter, status);
+
res = FALSE;
status = GdipGetClip(graphics, clip);
expect(Ok, status);
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index efef67c..7b36a73 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -533,6 +533,7 @@ GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion *, INT, INT);
GpStatus WINGDIPAPI GdipFlush(GpGraphics*, GpFlushIntention);
GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
--
1.4.4.4
More information about the wine-patches
mailing list