in libs/screen/image.cpp [283:355]
void fillRect(Image_ img, int x, int y, int w, int h, int c) {
if (w == 0 || h == 0 || x >= img->width() || y >= img->height())
return;
int x2 = x + w - 1;
int y2 = y + h - 1;
if (x2 < 0 || y2 < 0)
return;
img->clamp(&x2, &y2);
img->clamp(&x, &y);
w = x2 - x + 1;
h = y2 - y + 1;
if (!img->hasPadding() && x == 0 && y == 0 && w == img->width() && h == img->height()) {
fill(img, c);
return;
}
img->makeWritable();
auto bh = img->byteHeight();
uint8_t f = img->fillMask(c);
uint8_t *p = img->pix(x, y);
while (w-- > 0) {
if (img->bpp() == 1) {
auto ptr = p;
unsigned mask = 0x01 << (y & 7);
for (int i = 0; i < h; ++i) {
if (mask == 0x100) {
if (h - i >= 8) {
*++ptr = f;
i += 7;
continue;
} else {
mask = 0x01;
++ptr;
}
}
if (c)
*ptr |= mask;
else
*ptr &= ~mask;
mask <<= 1;
}
} else if (img->bpp() == 4) {
auto ptr = p;
unsigned mask = 0x0f;
if (y & 1)
mask <<= 4;
for (int i = 0; i < h; ++i) {
if (mask == 0xf00) {
if (h - i >= 2) {
*++ptr = f;
i++;
continue;
} else {
mask = 0x0f;
ptr++;
}
}
*ptr = (*ptr & ~mask) | (f & mask);
mask <<= 4;
}
}
p += bh;
}
}