From 15fae169a1abd53a826f7bd82073d3cf84505c9e Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 10 Mar 2011 16:45:41 -0600 Subject: [PATCH 2/4] gdiplus: Use GdipFillPath to implement GdipFillPolygonI. --- dlls/gdiplus/graphics.c | 47 ++++++++++------------------------------------- 1 files changed, 10 insertions(+), 37 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index f2ebfba..b0b4d08 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -3540,10 +3540,8 @@ GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics *graphics, GpBrush *brush, GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush, GDIPCONST GpPoint *points, INT count, GpFillMode fillMode) { - INT save_state, i; - 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); @@ -3553,44 +3551,19 @@ GpStatus WINGDIPAPI GdipFillPolygonI(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 = GdipAddPathPolygonI(path, points, count); - ptf = GdipAlloc(count * sizeof(GpPointF)); - pti = GdipAlloc(count * sizeof(POINT)); - if(!ptf || !pti){ - retval = OutOfMemory; - goto end; - } + if (stat == Ok) + stat = GdipFillPath(graphics, brush, path); - for(i = 0; i < count; i ++){ - ptf[i].X = (REAL) points[i].X; - ptf[i].Y = (REAL) points[i].Y; + GdipDeletePath(path); } - 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 GdipFillPolygon2(GpGraphics *graphics, GpBrush *brush, -- 1.7.1