diff options
-rw-r--r-- | common/rfb/PixelBuffer.cxx | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/common/rfb/PixelBuffer.cxx b/common/rfb/PixelBuffer.cxx index b1359c2e..b03af1af 100644 --- a/common/rfb/PixelBuffer.cxx +++ b/common/rfb/PixelBuffer.cxx @@ -99,23 +99,43 @@ ModifiablePixelBuffer::~ModifiablePixelBuffer() void ModifiablePixelBuffer::fillRect(const Rect& r, Pixel pix) { int stride; - U8 *buf, pixbuf[4]; + U8 *buf; int w, h, b; - buf = getBufferRW(r, &stride); w = r.width(); h = r.height(); b = format.bpp/8; - format.bufferFromPixel(pixbuf, pix); + if (h == 0) + return; + + buf = getBufferRW(r, &stride); - while (h--) { - int w_ = w; - while (w_--) { + if (b == 1) { + while (h--) { + memset(buf, pix, w); + buf += stride * b; + } + } else { + U8 pixbuf[4], *start; + int w1; + + start = buf; + + format.bufferFromPixel(pixbuf, pix); + + w1 = w; + while (w1--) { memcpy(buf, pixbuf, b); buf += b; } buf += (stride - w) * b; + h--; + + while (h--) { + memcpy(buf, start, w * b); + buf += stride * b; + } } commitBufferRW(r); |