[4/4] gdiplus: stub for GdipFlattenPath with tests (try2)
Nikolay Sivov
bunglehead at gmail.com
Fri Aug 29 06:47:05 CDT 2008
Changelog:
- try2: start points are preserved after flattening so todo is wrong for them
- stub GdipFlattenPath with tests
---
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/graphicspath.c | 13 ++++++
dlls/gdiplus/tests/graphicspath.c | 75 +++++++++++++++++++++++++++++++++++++
include/gdiplusflat.h | 1 +
4 files changed, 90 insertions(+), 1 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 94123fa..725c024 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -233,7 +233,7 @@
@ stdcall GdipFillRegion(ptr ptr ptr)
@ stdcall GdipFindFirstImageItem(ptr ptr)
@ stub GdipFindNextImageItem
-@ stub GdipFlattenPath
+@ stdcall GdipFlattenPath(ptr ptr long)
@ stdcall GdipFlush(ptr long)
@ stdcall GdipFree(ptr)
@ stub GdipGetAdjustableArrowCapFillState
diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index 7727721..d0f5dc0 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -816,6 +816,19 @@ GpStatus WINGDIPAPI GdipDeletePath(GpPath *path)
return Ok;
}
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath *path, GpMatrix* matrix, REAL flatness)
+{
+ static int calls;
+
+ if(!path)
+ return InvalidParameter;
+
+ if(!(calls++))
+ FIXME("not implemented\n");
+
+ return NotImplemented;
+}
+
GpStatus WINGDIPAPI GdipGetPathData(GpPath *path, GpPathData* pathData)
{
TRACE("(%p, %p)\n", path, pathData);
diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c
index 5fad0b1..31f30de 100644
--- a/dlls/gdiplus/tests/graphicspath.c
+++ b/dlls/gdiplus/tests/graphicspath.c
@@ -886,6 +886,80 @@ static void test_addpie(void)
GdipDeletePath(path);
}
+static path_test_t flattenellipse_path[] = {
+ {100.0, 25.0,PathPointTypeStart, 0, 0}, /*0*/
+ {99.0, 30.0, PathPointTypeLine, 0, 1}, /*1*/
+ {96.0, 34.8, PathPointTypeLine, 0, 1}, /*2*/
+ {91.5, 39.0, PathPointTypeLine, 0, 1}, /*3*/
+ {85.5, 42.8, PathPointTypeLine, 0, 1}, /*4*/
+ {69.5, 48.0, PathPointTypeLine, 0, 1}, /*5*/
+ {50.0, 50.0, PathPointTypeLine, 0, 1}, /*6*/
+ {30.5, 48.0, PathPointTypeLine, 0, 1}, /*7*/
+ {14.8, 42.8, PathPointTypeLine, 0, 1}, /*8*/
+ {8.5, 39.0, PathPointTypeLine, 0, 1}, /*9*/
+ {4.0, 34.8, PathPointTypeLine, 0, 1}, /*10*/
+ {1.0, 30.0, PathPointTypeLine, 0, 1}, /*11*/
+ {0.0, 25.0, PathPointTypeLine, 0, 1}, /*12*/
+ {1.0, 20.0, PathPointTypeLine, 0, 1}, /*13*/
+ {4.0, 15.3, PathPointTypeLine, 0, 1}, /*14*/
+ {8.5, 11.0, PathPointTypeLine, 0, 1}, /*15*/
+ {14.8, 7.3, PathPointTypeLine, 0, 1}, /*16*/
+ {30.5, 2.0, PathPointTypeLine, 0, 1}, /*17*/
+ {50.0, 0.0, PathPointTypeLine, 0, 1}, /*18*/
+ {69.5, 2.0, PathPointTypeLine, 0, 1}, /*19*/
+ {85.5, 7.3, PathPointTypeLine, 0, 1}, /*20*/
+ {91.5, 11.0, PathPointTypeLine, 0, 1}, /*21*/
+ {96.0, 15.3, PathPointTypeLine, 0, 1}, /*22*/
+ {99.0, 20.0, PathPointTypeLine, 0, 1}, /*23*/
+ {100.0,25.0, PathPointTypeLine | PathPointTypeCloseSubpath, 0, 1} /*24*/
+ };
+
+static path_test_t flattenarc_path[] = {
+ {100.0, 25.0,PathPointTypeStart, 0, 0}, /*0*/
+ {99.0, 30.0, PathPointTypeLine, 0, 1}, /*1*/
+ {96.0, 34.8, PathPointTypeLine, 0, 1}, /*2*/
+ {91.5, 39.0, PathPointTypeLine, 0, 1}, /*3*/
+ {85.5, 42.8, PathPointTypeLine, 0, 1}, /*4*/
+ {69.5, 48.0, PathPointTypeLine, 0, 1}, /*5*/
+ {50.0, 50.0, PathPointTypeLine, 0, 1} /*6*/
+ };
+
+static void test_flatten(void)
+{
+ GpStatus status;
+ GpPath *path;
+ GpMatrix *m;
+
+ status = GdipCreatePath(FillModeAlternate, &path);
+ expect(Ok, status);
+ status = GdipCreateMatrix(&m);
+ expect(Ok, status);
+
+ /* NULL arguments */
+ status = GdipFlattenPath(NULL, NULL, 0.0);
+ expect(InvalidParameter, status);
+ status = GdipFlattenPath(NULL, m, 0.0);
+ expect(InvalidParameter, status);
+
+ status = GdipAddPathEllipse(path, 0.0, 0.0, 100.0, 50.0);
+ expect(Ok, status);
+
+ status = GdipFlattenPath(path, NULL, 1.0);
+ todo_wine expect(Ok, status);
+ ok_path(path, flattenellipse_path, sizeof(flattenellipse_path)/sizeof(path_test_t), TRUE);
+
+ status = GdipResetPath(path);
+ expect(Ok, status);
+ status = GdipAddPathArc(path, 0.0, 0.0, 100.0, 50.0, 0.0, 90.0);
+ expect(Ok, status);
+ status = GdipFlattenPath(path, NULL, 1.0);
+ todo_wine expect(Ok, status);
+ ok_path(path, flattenarc_path, sizeof(flattenarc_path)/sizeof(path_test_t), TRUE);
+
+ GdipDeleteMatrix(m);
+ GdipDeletePath(path);
+}
+
START_TEST(graphicspath)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -913,6 +987,7 @@ START_TEST(graphicspath)
test_addclosedcurve();
test_reverse();
test_addpie();
+ test_flatten();
GdiplusShutdown(gdiplusToken);
}
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 0b4a67f..12e8d94 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -288,6 +288,7 @@ GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,
GpFillMode,GpPath**);
GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);
GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);
GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);
--
1.4.4.4
More information about the wine-patches
mailing list