Diffstat (limited to 'noncore/comm/keypebble/krfbbuffer.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/comm/keypebble/krfbbuffer.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/noncore/comm/keypebble/krfbbuffer.cpp b/noncore/comm/keypebble/krfbbuffer.cpp index 4885261..5a52f31 100644 --- a/noncore/comm/keypebble/krfbbuffer.cpp +++ b/noncore/comm/keypebble/krfbbuffer.cpp @@ -150,7 +150,38 @@ void KRFBBuffer::drawRawRectChunk( void *data, *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 ); |