Vincent Povirk : gdiplus: Use GdipFillPath to implement GdipFillPolygonI.

Alexandre Julliard julliard at winehq.org
Thu Mar 17 12:27:00 CDT 2011


Module: wine
Branch: master
Commit: 5190f8a5f1c41b10a1b7d1d0837cf78cebd41862
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5190f8a5f1c41b10a1b7d1d0837cf78cebd41862

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Mar 10 16:45:41 2011 -0600

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,




More information about the wine-cvs mailing list