Module: wine Branch: master Commit: 8b8864b727671eadd942a8978885efe8b807a9f5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8b8864b727671eadd942a89788...
Author: Nikolay Sivov bunglehead@gmail.com Date: Wed Jul 9 00:39:19 2008 +0400
gdiplus: Implemeted GdipDrawClosedCurve2 and GdipDrawClosedCurve2I.
---
dlls/gdiplus/gdiplus.spec | 4 +- dlls/gdiplus/graphics.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ include/gdiplusflat.h | 2 + 3 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index a1c4849..9b272eb 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -159,8 +159,8 @@ @ stdcall GdipDrawBeziers(ptr ptr ptr long) @ stdcall GdipDrawBeziersI(ptr ptr ptr long) @ stub GdipDrawCachedBitmap -@ stub GdipDrawClosedCurve2 -@ stub GdipDrawClosedCurve2I +@ stdcall GdipDrawClosedCurve2(ptr ptr ptr long long) +@ stdcall GdipDrawClosedCurve2I(ptr ptr ptr long long) @ stub GdipDrawClosedCurve @ stub GdipDrawClosedCurveI @ stdcall GdipDrawCurve2(ptr ptr ptr long long) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 6c9aa15..0f82404 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -1045,6 +1045,57 @@ GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics *graphics, GpPen *pen, return ret; }
+GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPointF *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + + if(!graphics || !pen || !points || count <= 0) + return InvalidParameter; + + /* make a full points copy.. */ + ptf = GdipAlloc(sizeof(GpPointF)*(count+1)); + if(!ptf) + return OutOfMemory; + memcpy(ptf, points, sizeof(GpPointF)*count); + + /* ..and add a first point as a last one */ + ptf[count] = ptf[0]; + + stat = GdipDrawCurve2(graphics, pen, ptf, count + 1, tension); + + GdipFree(ptf); + + return stat; +} + +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPoint *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + INT i; + + if(!points || count <= 0) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipDrawClosedCurve2(graphics, pen, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points, INT count) { diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 3deca53..7538165 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -85,6 +85,8 @@ GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,R GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);