#include "x11perf.h"
#include "bitmaps.h"
static XRectangle *rects;
static GC pgc;
int
InitRectangles(XParms xp, Parms p, int reps)
{
int i;
int size = p->special;
int step;
int x, y;
int rows;
int lw = 0;
pgc = xp->fggc;
if (p->bfont)
{
lw = atoi (p->bfont);
XSetLineAttributes(xp->d, xp->bggc, lw, LineSolid, CapButt, JoinMiter);
XSetLineAttributes(xp->d, xp->fggc, lw, LineSolid, CapButt, JoinMiter);
lw = (lw >> 1) + 1;
}
rects = (XRectangle *)malloc(p->objects * sizeof(XRectangle));
x = lw;
y = lw;
rows = 0;
if (xp->pack) {
step = size;
} else {
step = size + 1 + (size % 2);
}
for (i = 0; i != p->objects; i++) {
rects[i].x = x;
rects[i].y = y;
rects[i].width = rects[i].height = size;
y += step;
rows++;
if (y + size > HEIGHT || rows == MAXROWS) {
rows = 0;
y = lw;
x += step;
if (x + size > WIDTH) {
x = lw;
}
}
}
SetFillStyle(xp, p);
return reps;
}
void
DoRectangles(XParms xp, Parms p, int reps)
{
int i;
for (i = 0; i != reps; i++) {
XFillRectangles(xp->d, xp->w, pgc, rects, p->objects);
if (pgc == xp->bggc)
pgc = xp->fggc;
else
pgc = xp->bggc;
CheckAbort ();
}
}
void
DoOutlineRectangles(XParms xp, Parms p, int reps)
{
int i;
for (i = 0; i != reps; i++) {
XDrawRectangles (xp->d, xp->w, pgc, rects, p->objects);
if (pgc == xp->bggc)
pgc = xp->fggc;
else
pgc = xp->bggc;
CheckAbort ();
}
}
void
EndRectangles(XParms xp, Parms p)
{
free(rects);
}