From 6467526469d91f72d05fc3851b797ec5018cb122 Mon Sep 17 00:00:00 2001 From: Evan Stade Date: Mon, 23 Jul 2007 20:24:35 -0700 Subject: [PATCH] gdiplus: Added GdipFillPolygonI. --- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/graphics.c | 20 ++++++++++++++++ include/gdiplusflat.h | 2 ++ include/gdiplusgpstubs.h | 1 + include/gdiplustypes.h | 48 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+), 1 deletion(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index c2880e82de1..e59516c6277 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -214,7 +214,7 @@ @ stub GdipFillPolygon2 @ stub GdipFillPolygon2I @ stub GdipFillPolygon -@ stub GdipFillPolygonI +@ stdcall GdipFillPolygonI(ptr ptr ptr long long) @ stub GdipFillRectangle @ stub GdipFillRectangleI @ stub GdipFillRectangles diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 93b207987a3..64ac4fe1799 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -974,6 +974,26 @@ GpStatus WINGDIPAPI GdipFillPie(GpGraphics *graphics, GpBrush *brush, REAL x, width, height, startAngle, sweepAngle); } +GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush, + GDIPCONST GpPoint *points, INT count, GpFillMode fillMode) +{ + INT save_state; + + if(!graphics || !brush || !points || !count) + return InvalidParameter; + + save_state = SaveDC(graphics->hdc); + EndPath(graphics->hdc); + SelectObject(graphics->hdc, brush->gdibrush); + SelectObject(graphics->hdc, GetStockObject(NULL_PEN)); + SetPolyFillMode(graphics->hdc, (fillMode == FillModeAlternate ? ALTERNATE + : WINDING)); + Polygon(graphics->hdc, (GDIPCONST POINT*) points, count); + + RestoreDC(graphics->hdc, save_state); + return Ok; +} + /* FIXME: Compositing quality is not used anywhere except the getter/setter. */ GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics *graphics, CompositingQuality *quality) diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 446cb989d3c..706aa277afa 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -58,6 +58,8 @@ GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*); GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL); +GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT, + GpFillMode); GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*); GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*); GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*); diff --git a/include/gdiplusgpstubs.h b/include/gdiplusgpstubs.h index 0e431c5edee..70da0653aa7 100644 --- a/include/gdiplusgpstubs.h +++ b/include/gdiplusgpstubs.h @@ -55,5 +55,6 @@ typedef LineJoin GpLineJoin; typedef DashCap GpDashCap; typedef DashStyle GpDashStyle; typedef MatrixOrder GpMatrixOrder; +typedef Point GpPoint; #endif diff --git a/include/gdiplustypes.h b/include/gdiplustypes.h index 9404376416a..426ab7a0d74 100644 --- a/include/gdiplustypes.h +++ b/include/gdiplustypes.h @@ -47,6 +47,48 @@ enum Status{ #ifdef __cplusplus +class Point +{ +public: + Point() + { + X = Y = 0; + } + + Point(IN const Point &pt) + { + X = pt.X; + Y = pt.Y; + } + + /* FIXME: missing constructor that takes a Size */ + + Point(IN INT x, IN INT y) + { + X = x; + Y = y; + } + + Point operator+(IN const Point& pt) const + { + return Point(X + pt.X, Y + pt.Y); + } + + Point operator-(IN const Point& pt) const + { + return Point(X - pt.X, Y - pt.Y); + } + + BOOL Equals(IN const Point& pt) + { + return (X == pt.X) && (Y == pt.Y); + } + +public: + INT X; + INT Y; +}; + class PointF { public: @@ -134,6 +176,12 @@ public: #else /* end of c++ typedefs */ +typedef struct Point +{ + INT X; + INT Y; +} Point; + typedef struct PointF { REAL X;