diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 2e747ce1758..4ce7989ac65 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -192,8 +192,8 @@ @ stdcall GdipDrawPath(ptr ptr ptr) @ stdcall GdipDrawPie(ptr ptr long long long long long long) @ stdcall GdipDrawPieI(ptr ptr long long long long long long) -@ stub GdipDrawPolygon -@ stub GdipDrawPolygonI +@ stdcall GdipDrawPolygon(ptr ptr ptr long) +@ stdcall GdipDrawPolygonI(ptr ptr ptr long) @ stdcall GdipDrawRectangle(ptr ptr long long long long) @ stdcall GdipDrawRectangleI(ptr ptr long long long long) @ stdcall GdipDrawRectangles(ptr ptr ptr long) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 238712afccf..c6a4e33eb12 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -2161,3 +2161,47 @@ GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpGraphics *graph return NotImplemented; } + +GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics *graphics,GpPen *pen,GDIPCONST GpPointF *points, + INT count) +{ + INT save_state; + POINT *pti; + + if(!graphics || !pen || count<=0) + return InvalidParameter; + + pti = GdipAlloc(sizeof(POINT) * count); + + save_state = prepare_dc(graphics, pen); + SelectObject(graphics->hdc, GetStockObject(NULL_BRUSH)); + + transform_and_round_points(graphics, pti, (GpPointF*)points, count); + Polygon(graphics->hdc, pti, count); + + restore_dc(graphics, save_state); + GdipFree(pti); + + return Ok; +} + +GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics *graphics,GpPen *pen,GDIPCONST GpPoint *points, + INT count) +{ + GpStatus ret; + GpPointF *ptf; + INT i; + + if(count<=0) return InvalidParameter; + ptf = GdipAlloc(sizeof(GpPointF) * count); + + for(i = 0;i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + ret = GdipDrawPolygon(graphics,pen,ptf,count); + GdipFree(ptf); + + return ret; +} diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index ba2c6eefbd9..1e04a236133 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -94,6 +94,8 @@ GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*); GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL); +GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*, INT); +GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*, INT); GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);