-rw-r--r-- | noncore/comm/keypebble/krfbbuffer.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/noncore/comm/keypebble/krfbbuffer.cpp b/noncore/comm/keypebble/krfbbuffer.cpp index 92918d4..4cec0c2 100644 --- a/noncore/comm/keypebble/krfbbuffer.cpp +++ b/noncore/comm/keypebble/krfbbuffer.cpp @@ -64,137 +64,139 @@ void KRFBBuffer::keyPressEvent( QKeyEvent *e ) qWarning( "Buffer got a key" ); decoder->sendKeyPressEvent( e ); } void KRFBBuffer::keyReleaseEvent( QKeyEvent *e ) { decoder->sendKeyReleaseEvent( e ); } void KRFBBuffer::copyRect( int srcX, int srcY, int destX, int destY, int w, int h ) { // qWarning( "Got copy rect" ); bitBlt( pix, destX, destY, pix, srcX, srcY, w, h, CopyROP ); emit updated( destX, destY, w, h ); } void KRFBBuffer::drawRawRectChunk( void *data, int x, int y, int w, int h ) { QImage img( w, h, 32 ); int scaleFactor=decoder->con->options()->scaleFactor; int redMax = Swap16IfLE( decoder->format->redMax ); int greenMax = Swap16IfLE( decoder->format->greenMax ); int blueMax = Swap16IfLE( decoder->format->blueMax ); QPainter p( pix ); if ( decoder->format->bpp == 8 ) { uchar *d = (unsigned char *) data; uint r,g,b; for ( int j = 0; j < h; j++) { for ( int i = 0; i < w ; i++ ) { r = d[ j * w + i ]; r = r >> decoder->format->redShift; r = r & redMax; g = d[ j * w + i ]; g = g >> decoder->format->greenShift; g = g & greenMax; b = d[ j * w + i ]; b = b >> decoder->format->blueShift; b = b & blueMax; r = ( r * 255 ) / redMax; g = ( g * 255 ) / greenMax; b = ( b * 255 ) / blueMax; uint *p = ( uint * ) img.scanLine( j ) + i; *p = qRgb( r,g,b ); } } } else if ( decoder->format->bpp == 32 ) { ulong *d = (ulong *) data; ulong r,g,b; for ( int j = 0; j < h; j++ ) { for ( int i = 0; i < w ; i++ ) { ulong pixel = d[ j * w + i ]; pixel = Swap32IfLE( pixel ); r = pixel; r = r >> decoder->format->redShift; r = r & redMax; g = pixel; g = g >> decoder->format->greenShift; g = g & greenMax; b = pixel; b = b >> decoder->format->blueShift; b = b & blueMax; r = ( r * 255 ) / redMax; g = ( g * 255 ) / greenMax; b = ( b * 255 ) / blueMax; uint *p = ( uint * ) img.scanLine( j ) + i; *p = qRgb( r,g,b ); } } } else if (decoder->format->bpp == 16 ) { CARD16 *d = (CARD16 *) data; uint r,g,b; for ( int j = 0; j < h; j++ ) { for ( int i = 0; i < w ; i++ ) { CARD16 pixel = d[ j * w + i ]; pixel = Swap16IfLE( pixel ); r = pixel; r = r >> decoder->format->redShift; r = r & redMax; g = pixel; g = g >> decoder->format->greenShift; g = g & greenMax; b = pixel; b = b >> decoder->format->blueShift; b = b & blueMax; r = ( r * 255 ) / redMax; g = ( g * 255 ) / greenMax; b = ( b * 255 ) / blueMax; ulong *p = ( ulong * ) img.scanLine( j ) + i; *p = qRgb( r,g,b ); } } } else { p.setBrush( QBrush( Qt::black ) ); p.drawRect( x, y, w, h ); } if (scaleFactor > 1) { - p.drawImage( x/scaleFactor, y/scaleFactor, img.smoothScale(w/scaleFactor,h/scaleFactor) ); + /* FIXME: proper zero width/height handling */ + if (w/scaleFactor != 0) + p.drawImage( x/scaleFactor, y/scaleFactor, img.smoothScale(w/scaleFactor,h/scaleFactor) ); emit updated( x/scaleFactor, y/scaleFactor, w/scaleFactor, h/scaleFactor ); } else { p.drawImage( x, y, img); emit updated( x, y, w, h ); } } |