Nikolay Sivov : gdiplus: Stub for GdipFlattenPath with tests.

Alexandre Julliard julliard at winehq.org
Fri Aug 29 07:31:04 CDT 2008


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

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Fri Aug 29 15:47:05 2008 +0400

gdiplus: Stub for 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..47d8205 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*);




More information about the wine-cvs mailing list