gdiplus: Added GdipDrawRectangles.
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 319303f..68ceb4b 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -1228,6 +1228,48 @@
     return Ok;
 }
 
+GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics *graphics, GpPen *pen,
+    GpRectF* rects, INT count)
+{
+    GpPointF *ptf;
+    POINT *pti;
+    INT save_state, i;
+
+    if(!graphics || !pen || !rects || count < 1)
+        return InvalidParameter;
+
+    ptf = GdipAlloc(4 * count * sizeof(GpPointF));
+    pti = GdipAlloc(4 * count * sizeof(POINT));
+
+    if(!ptf || !pti){
+        GdipFree(ptf);
+        GdipFree(pti);
+        return OutOfMemory;
+    }
+
+    for(i = 0; i < count; i++){
+        ptf[4 * i + 3].X = ptf[4 * i].X = rects[i].X;
+        ptf[4 * i + 1].Y = ptf[4 * i].Y = rects[i].Y;
+        ptf[4 * i + 2].X = ptf[4 * i + 1].X = rects[i].X + rects[i].Width;
+        ptf[4 * i + 3].Y = ptf[4 * i + 2].Y = rects[i].Y + rects[i].Height;
+    }
+
+    save_state = prepare_dc(graphics, pen);
+    SelectObject(graphics->hdc, GetStockObject(NULL_BRUSH));
+
+    transform_and_round_points(graphics, pti, ptf, 4 * count);
+
+    for(i = 0; i < count; i++)
+        Polygon(graphics->hdc, &pti[4 * i], 4);
+
+    restore_dc(graphics, save_state);
+
+    GdipFree(ptf);
+    GdipFree(pti);
+
+    return Ok;
+}
+
 GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *path)
 {
     INT save_state;