Module: wine Branch: master Commit: 7ce48b034609b642a6e9fdba935082d8185d3da1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ce48b034609b642a6e9fdba93... Author: Nikolay Sivov <bunglehead(a)gmail.com> Date: Tue Apr 29 00:10:15 2008 +0400 gdiplus: Implemented GdipFillRectangles/GdipFillRectanglesI. --- dlls/gdiplus/gdiplus.spec | 4 ++-- dlls/gdiplus/graphics.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ include/gdiplusflat.h | 2 ++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index c6a57a4..0aca002 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -228,8 +228,8 @@ @ stdcall GdipFillPolygonI(ptr ptr ptr long long) @ stdcall GdipFillRectangle(ptr ptr long long long long) @ stdcall GdipFillRectangleI(ptr ptr long long long long) -@ stub GdipFillRectangles -@ stub GdipFillRectanglesI +@ stdcall GdipFillRectangles(ptr ptr long) +@ stdcall GdipFillRectanglesI(ptr ptr long) @ stub GdipFillRegion @ stdcall GdipFindFirstImageItem(ptr ptr) @ stub GdipFindNextImageItem diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 1cba138..d60e7d3 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -1922,6 +1922,50 @@ GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics *graphics, GpBrush *brush, return Ok; } +GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics *graphics, GpBrush *brush, GDIPCONST GpRectF *rects, + INT count) +{ + GpStatus ret; + INT i; + + if(!rects) + return InvalidParameter; + + for(i = 0; i < count; i++){ + ret = GdipFillRectangle(graphics, brush, rects[i].X, rects[i].Y, rects[i].Width, rects[i].Height); + if(ret != Ok) return ret; + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics *graphics, GpBrush *brush, GDIPCONST GpRect *rects, + INT count) +{ + GpRectF *rectsF; + GpStatus ret; + INT i; + + if(!rects || count <= 0) + return InvalidParameter; + + rectsF = GdipAlloc(sizeof(GpRectF)*count); + if(!rectsF) + return OutOfMemory; + + for(i = 0; i < count; i++){ + rectsF[i].X = (REAL)rects[i].X; + rectsF[i].Y = (REAL)rects[i].Y; + rectsF[i].X = (REAL)rects[i].Width; + rectsF[i].Height = (REAL)rects[i].Height; + } + + ret = GdipFillRectangles(graphics,brush,rectsF,count); + GdipFree(rectsF); + + return ret; +} + /* FIXME: Compositing mode is not used anywhere except the getter/setter. */ GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics *graphics, CompositingMode *mode) diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 244656f..5c9e0f9 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -119,6 +119,8 @@ GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,IN GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT); +GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT); +GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT); GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*); GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*); GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);