From 9f452d02e97fe6b00a8bb67608f7fab80f36e99a Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 10 Mar 2011 16:42:30 -0600 Subject: [PATCH 1/4] gdiplus: Use GdipFillPath to implement GdipFillPolygon. --- dlls/gdiplus/graphics.c | 46 +++++++++++----------------------------------- 1 files changed, 11 insertions(+), 35 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 262828b..f2ebfba 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) - { - FIXME("graphics object has no HDC\n"); - return Ok; - } - - ptf = GdipAlloc(count * sizeof(GpPointF)); - pti = GdipAlloc(count * sizeof(POINT)); - if(!ptf || !pti){ - retval = OutOfMemory; - goto end; - } - - memcpy(ptf, points, count * sizeof(GpPointF)); + stat = GdipCreatePath(fillMode, &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); + if (stat == Ok) + { + stat = GdipAddPathPolygon(path, points, count); - RestoreDC(graphics->hdc, save_state); + if (stat == Ok) + stat = GdipFillPath(graphics, brush, path); -end: - GdipFree(ptf); - GdipFree(pti); + GdipDeletePath(path); + } - return retval; + return stat; } GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics *graphics, GpBrush *brush, -- 1.7.1