From 86d55d43c5f49ac5e87196cb1d4153626e292e18 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 10 Mar 2011 16:42:30 -0600 Subject: [PATCH] gdiplus: Use GdipFillPath to implement GdipFillPolygon. --- dlls/gdiplus/graphics.c | 48 +++++++++++------------------------------ 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 262828bd426..f2ebfba4298 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -3511,10 +3511,8 @@ GpStatus WINGDIPAPI GdipFillPieI(GpGraphics *graphics, GpBrush *brush, INT x, 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; + GpStatus stat; + GpPath *path; TRACE("(%p, %p, %p, %d, %d)\n", graphics, brush, points, count, fillMode); @@ -3524,41 +3522,19 @@ GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics *graphics, GpBrush *brush, if(graphics->busy) return ObjectBusy; - if(!graphics->hdc) + stat = GdipCreatePath(fillMode, &path); + + if (stat == Ok) { - FIXME("graphics object has no HDC\n"); - return Ok; + stat = GdipAddPathPolygon(path, points, count); + + if (stat == Ok) + stat = GdipFillPath(graphics, brush, path); + + GdipDeletePath(path); } - 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); - SetPolyFillMode(graphics->hdc, (fillMode == FillModeAlternate ? ALTERNATE - : WINDING)); - - transform_and_round_points(graphics, pti, ptf, count); - - BeginPath(graphics->hdc); - Polygon(graphics->hdc, pti, count); - EndPath(graphics->hdc); - - brush_fill_path(graphics, brush); - - RestoreDC(graphics->hdc, save_state); - -end: - GdipFree(ptf); - GdipFree(pti); - - return retval; + return stat; } GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush,