From fe2ce3a08b61f5629181148e53d4ec39b58ced1c Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Wed, 25 Jul 2007 19:15:24 -0700 Subject: [PATCH] gdiplus: Added GdipAddPathEllipse. --- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/graphicspath.c | 30 ++++++++++++++++++++++++++++++ include/gdiplusflat.h | 1 + 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 74ba0473bf5..02b1e18c4ea 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -14,7 +14,7 @@ @ stub GdipAddPathCurve3I @ stub GdipAddPathCurve @ stub GdipAddPathCurveI -@ stub GdipAddPathEllipse +@ stdcall GdipAddPathEllipse(ptr long long long long) @ stub GdipAddPathEllipseI @ stdcall GdipAddPathLine2(ptr ptr long) @ stub GdipAddPathLine2I diff --git a/dlls/gdiplus/graphicspath.c b/dlls/gdiplus/graphicspath.c index d0594822a34..4fe99e071c2 100644 --- a/dlls/gdiplus/graphicspath.c +++ b/dlls/gdiplus/graphicspath.c @@ -121,6 +121,36 @@ GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath *path, GDIPCONST GpPointF *points, return Ok; } +GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width, + REAL height) +{ + INT old_count, numpts; + + if(!path) + return InvalidParameter; + + if(!lengthen_path(path, MAX_ARC_PTS)) + return OutOfMemory; + + old_count = path->pathdata.Count; + if((numpts = arc2polybezier(&path->pathdata.Points[old_count], x, y, width, + height, 0.0, 360.0)) != MAX_ARC_PTS){ + ERR("expected %d points but got %d\n", MAX_ARC_PTS, numpts); + return GenericError; + } + + memset(&path->pathdata.Types[old_count + 1], PathPointTypeBezier, + MAX_ARC_PTS - 1); + + /* An ellipse is an instrinsic figure (always its own subpath). */ + path->pathdata.Types[old_count] = PathPointTypeStart; + path->pathdata.Types[old_count + MAX_ARC_PTS - 1] |= PathPointTypeCloseSubpath; + path->newfigure = TRUE; + path->pathdata.Count += MAX_ARC_PTS; + + return Ok; +} + GpStatus WINGDIPAPI GdipAddPathLine2(GpPath *path, GDIPCONST GpPointF *points, INT count) { diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 816f32d7404..d56c45c1c48 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -89,6 +89,7 @@ GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL); GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);