[4/9] gdiplus: added GdipFillPolygon
Evan Stade
estade at gmail.com
Wed Aug 1 19:55:50 CDT 2007
Hi,
dlls/gdiplus/gdiplus.spec | 2 +-
dlls/gdiplus/graphics.c | 39 +++++++++++++++++++++++++++++++++++++++
include/gdiplusflat.h | 2 ++
3 files changed, 42 insertions(+), 1 deletions(-)
--
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec
index 81ff0ae..0087aef 100644
--- a/dlls/gdiplus/gdiplus.spec
+++ b/dlls/gdiplus/gdiplus.spec
@@ -224,7 +224,7 @@
@ stub GdipFillPieI
@ stub GdipFillPolygon2
@ stub GdipFillPolygon2I
-@ stub GdipFillPolygon
+@ stdcall GdipFillPolygon(ptr ptr ptr long long)
@ stdcall GdipFillPolygonI(ptr ptr ptr long long)
@ stub GdipFillRectangle
@ stub GdipFillRectangleI
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 2be9fc7..7c8fc16 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -1224,6 +1224,45 @@ GpStatus WINGDIPAPI GdipFillPie(GpGraphi
return Ok;
}
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics *graphics, GpBrush *brush,
+ GDIPCONST GpPointF *points, INT count, GpFillMode fillMode)
+{
+ INT save_state;
+ GpPointF *ptf = NULL;
+ POINT *pti = NULL;
+ GpStatus retval = Ok;
+
+ if(!graphics || !brush || !points || !count)
+ return InvalidParameter;
+
+ ptf = GdipAlloc(count * sizeof(GpPointF));
+ pti = GdipAlloc(count * sizeof(POINT));
+ if(!ptf || !pti){
+ retval = OutOfMemory;
+ goto end;
+ }
+
+ memcpy(ptf, points, count * sizeof(GpPointF));
+
+ 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));
+
+ transform_and_round_points(graphics, pti, ptf, count);
+ Polygon(graphics->hdc, pti, count);
+
+ RestoreDC(graphics->hdc, save_state);
+
+end:
+ GdipFree(ptf);
+ GdipFree(pti);
+
+ return retval;
+}
+
GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush,
GDIPCONST GpPoint *points, INT count, GpFillMode fillMode)
{
diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h
index 045c17b..cd4f3d6 100644
--- a/include/gdiplusflat.h
+++ b/include/gdiplusflat.h
@@ -102,6 +102,8 @@ GpStatus WINGDIPAPI GdipClosePathFigure(
GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,
+ INT,GpFillMode);
GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);
GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);
--
1.4.1
More information about the wine-patches
mailing list