Nikolay Sivov : gdiplus: Handle zero width/height in GdipAddPathPie.

Alexandre Julliard julliard at winehq.org
Tue Feb 10 07:45:25 CST 2009


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

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Mon Feb  9 23:25:06 2009 +0300

gdiplus: Handle zero width/height in GdipAddPathPie.

---

 dlls/gdiplus/graphicspath.c       |   11 +++++++++++
 dlls/gdiplus/tests/graphicspath.c |   21 ++++++++++++++++++++-
 2 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c
index 042d4a2..4703ace 100644
--- a/dlls/gdiplus/graphicspath.c
+++ b/dlls/gdiplus/graphicspath.c
@@ -723,6 +723,17 @@ GpStatus WINGDIPAPI GdipAddPathPie(GpPath *path, REAL x, REAL y, REAL width, REA
     if(!path)
         return InvalidParameter;
 
+    /* on zero width/height only start point added */
+    if(width <= 1e-7 || height <= 1e-7){
+        if(!lengthen_path(path, 1))
+            return OutOfMemory;
+        path->pathdata.Points[0].X = x + width  / 2.0;
+        path->pathdata.Points[0].Y = y + height / 2.0;
+        path->pathdata.Types[0] = PathPointTypeStart | PathPointTypeCloseSubpath;
+        path->pathdata.Count = 1;
+        return InvalidParameter;
+    }
+
     count = arc2polybezier(NULL, x, y, width, height, startAngle, sweepAngle);
 
     if(count == 0)
diff --git a/dlls/gdiplus/tests/graphicspath.c b/dlls/gdiplus/tests/graphicspath.c
index 416d80c..d256cac 100644
--- a/dlls/gdiplus/tests/graphicspath.c
+++ b/dlls/gdiplus/tests/graphicspath.c
@@ -907,7 +907,12 @@ static path_test_t addpie_path[] = {
     {79.4, 46.8, PathPointTypeBezier,0, 0}, /*3*/
     {63.9, 49.0, PathPointTypeBezier | PathPointTypeCloseSubpath,  0, 0} /*4*/
     };
-
+static path_test_t addpie_path2[] = {
+    {0.0, 30.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
+    };
+static path_test_t addpie_path3[] = {
+    {30.0, 0.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
+    };
 static void test_addpie(void)
 {
     GpStatus status;
@@ -922,6 +927,20 @@ static void test_addpie(void)
     status = GdipAddPathPie(path, 0.0, 0.0, 100.0, 50.0, 10.0, 50.0);
     expect(Ok, status);
     ok_path(path, addpie_path, sizeof(addpie_path)/sizeof(path_test_t), FALSE);
+    status = GdipResetPath(path);
+    expect(Ok, status);
+
+    /* zero width base ellipse */
+    status = GdipAddPathPie(path, 0.0, 0.0, 0.0, 60.0, -90.0, 24.0);
+    expect(InvalidParameter, status);
+    ok_path(path, addpie_path2, sizeof(addpie_path2)/sizeof(path_test_t), FALSE);
+    status = GdipResetPath(path);
+    expect(Ok, status);
+
+    /* zero height base ellipse */
+    status = GdipAddPathPie(path, 0.0, 0.0, 60.0, 0.0 , -90.0, 24.0);
+    expect(InvalidParameter, status);
+    ok_path(path, addpie_path3, sizeof(addpie_path3)/sizeof(path_test_t), FALSE);
 
     GdipDeletePath(path);
 }




More information about the wine-cvs mailing list