diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-09-15 21:22:05 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2016-05-16 14:56:56 +0200 |
commit | 8bae722102ee987de2387878d4da24180d5b9933 (patch) | |
tree | cea1ad0dda8a85a63fcd6bc774ded100d3389e85 | |
parent | 559cc7568eea41ca5d41f20e34e316124aa78a87 (diff) |
move mask into ColorMaskElement too
Change-Id: I1bd5e2ee71aba088ed8b395a31977e7b567d8b48
Reviewed-on: https://gerrit.libreoffice.org/18635
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | include/vcl/salbtype.hxx | 77 |
1 files changed, 37 insertions, 40 deletions
diff --git a/include/vcl/salbtype.hxx b/include/vcl/salbtype.hxx index 34996051bba6..c11ae69d9330 100644 --- a/include/vcl/salbtype.hxx +++ b/include/vcl/salbtype.hxx @@ -191,11 +191,13 @@ public: struct VCL_DLLPUBLIC ColorMaskElement { + sal_uInt32 mnMask; int mnShift; int mnOrShift; sal_uInt8 mnOr; - ColorMaskElement() - : mnShift(0) + ColorMaskElement(sal_uInt32 nMask) + : mnMask(nMask) + , mnShift(0) , mnOrShift(0) , mnOr(0) { @@ -205,15 +207,12 @@ struct VCL_DLLPUBLIC ColorMaskElement // - ColorMask - class VCL_DLLPUBLIC ColorMask { - sal_uInt32 mnRMask; - sal_uInt32 mnGMask; - sal_uInt32 mnBMask; - sal_uInt32 mnAlphaChannel; ColorMaskElement maR; ColorMaskElement maG; ColorMaskElement maB; + sal_uInt32 mnAlphaChannel; - SAL_DLLPRIVATE inline bool ImplCalcMaskShift(sal_uInt32 nMask, ColorMaskElement &rOut) const; + SAL_DLLPRIVATE inline bool ImplCalcMaskShift(ColorMaskElement &rOut) const; public: @@ -624,34 +623,32 @@ inline ColorMask::ColorMask( sal_uInt32 nRedMask, sal_uInt32 nGreenMask, sal_uInt32 nBlueMask, sal_uInt32 nAlphaChannel ) - : mnRMask(nRedMask) - , mnGMask(nGreenMask) - , mnBMask(nBlueMask) + : maR(nRedMask) + , maG(nGreenMask) + , maB(nBlueMask) , mnAlphaChannel(nAlphaChannel) { - if (mnRMask) - ImplCalcMaskShift(mnRMask, maR); - if (mnGMask) - ImplCalcMaskShift(mnGMask, maG); - if (mnBMask) - ImplCalcMaskShift(mnBMask, maB); + ImplCalcMaskShift(maR); + ImplCalcMaskShift(maG); + ImplCalcMaskShift(maB); } -inline bool ColorMask::ImplCalcMaskShift(sal_uInt32 nMask, ColorMaskElement &rOut) const +inline bool ColorMask::ImplCalcMaskShift(ColorMaskElement &rElem) const { - long nShift; - long nRet; - sal_uLong nLen = 0UL; + if (rElem.mnMask == 0) + return true; // from which bit starts the mask? - for( nShift = 31L; ( nShift >= 0L ) && !( nMask & ( (sal_uLong)1 << (sal_uLong) nShift ) ); nShift-- ) - {} + int nShift = 31; + + while( nShift >= 0 && !( rElem.mnMask & ( 1 << nShift ) ) ) + --nShift; - rOut.mnShift = nShift - 7; + rElem.mnShift = nShift - 7; int nLen = 0; // XXX determine number of bits set => walk right until null - while( ( nShift >= 0L ) && ( nMask & ( (sal_uLong)1 << (sal_uLong) nShift ) ) ) + while( nShift >= 0 && ( rElem.mnMask & ( 1 << nShift ) ) ) { nShift--; nLen++; @@ -660,48 +657,48 @@ inline bool ColorMask::ImplCalcMaskShift(sal_uInt32 nMask, ColorMaskElement &rOu if (nLen > 8) // mask length must be 8 bits or less return false; - rOut.mnOrShift = 8 - nLen; - rOut.mnOr = static_cast<sal_uInt8>( ( 0xFF >> nLen ) << rOut.mnOrShift ); + rElem.mnOrShift = 8 - nLen; + rElem.mnOr = static_cast<sal_uInt8>( ( 0xFF >> nLen ) << rElem.mnOrShift ); return true; } inline sal_uLong ColorMask::GetRedMask() const { - return mnRMask; + return maR.mnMask; } inline sal_uLong ColorMask::GetGreenMask() const { - return mnGMask; + return maG.mnMask; } inline sal_uLong ColorMask::GetBlueMask() const { - return mnBMask; + return maB.mnMask; } inline void ColorMask::GetColorFor8Bit( BitmapColor& rColor, ConstHPBYTE pPixel ) const { const sal_uInt32 nVal = *pPixel; - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maR.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maR.mnShift, rColor ); } inline void ColorMask::SetColorFor8Bit( const BitmapColor& rColor, HPBYTE pPixel ) const { - *pPixel = (sal_uInt8) COLOR_TO_MASK( rColor, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); + *pPixel = (sal_uInt8) COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); } inline void ColorMask::GetColorFor16BitMSB( BitmapColor& rColor, ConstHPBYTE pPixel ) const { const sal_uInt32 nVal = pPixel[ 1 ] | ( (sal_uInt32) pPixel[ 0 ] << 8UL ); - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); } inline void ColorMask::SetColorFor16BitMSB( const BitmapColor& rColor, HPBYTE pPixel ) const { - const sal_uInt16 nVal = (sal_uInt16)COLOR_TO_MASK( rColor, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); + const sal_uInt16 nVal = (sal_uInt16)COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); pPixel[ 0 ] = (sal_uInt8)(nVal >> 8U); pPixel[ 1 ] = (sal_uInt8) nVal; @@ -711,12 +708,12 @@ inline void ColorMask::GetColorFor16BitLSB( BitmapColor& rColor, ConstHPBYTE pPi { const sal_uInt32 nVal = pPixel[ 0 ] | ( (sal_uInt32) pPixel[ 1 ] << 8UL ); - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); } inline void ColorMask::SetColorFor16BitLSB( const BitmapColor& rColor, HPBYTE pPixel ) const { - const sal_uInt16 nVal = (sal_uInt16)COLOR_TO_MASK( rColor, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); + const sal_uInt16 nVal = (sal_uInt16)COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); pPixel[ 0 ] = (sal_uInt8) nVal; pPixel[ 1 ] = (sal_uInt8)(nVal >> 8U); @@ -725,12 +722,12 @@ inline void ColorMask::SetColorFor16BitLSB( const BitmapColor& rColor, HPBYTE pP inline void ColorMask::GetColorFor24Bit( BitmapColor& rColor, ConstHPBYTE pPixel ) const { const sal_uInt32 nVal = pPixel[ 0 ] | ( (sal_uInt32) pPixel[ 1 ] << 8UL ) | ( (sal_uInt32) pPixel[ 2 ] << 16UL ); - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); } inline void ColorMask::SetColorFor24Bit( const BitmapColor& rColor, HPBYTE pPixel ) const { - const sal_uInt32 nVal = COLOR_TO_MASK( rColor, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); + const sal_uInt32 nVal = COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); pPixel[ 0 ] = (sal_uInt8) nVal; pPixel[ 1 ] = (sal_uInt8) ( nVal >> 8UL ); pPixel[ 2 ] = (sal_uInt8) ( nVal >> 16UL ); @@ -741,7 +738,7 @@ inline void ColorMask::GetColorFor32Bit( BitmapColor& rColor, ConstHPBYTE pPixel const sal_uInt32 nVal = (sal_uInt32) pPixel[ 0 ] | ( (sal_uInt32) pPixel[ 1 ] << 8UL ) | ( (sal_uInt32) pPixel[ 2 ] << 16UL ) | ( (sal_uInt32) pPixel[ 3 ] << 24UL ); - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); } inline void ColorMask::GetColorAndAlphaFor32Bit( BitmapColor& rColor, sal_uInt8& rAlpha, ConstHPBYTE pPixel ) const @@ -750,12 +747,12 @@ inline void ColorMask::GetColorAndAlphaFor32Bit( BitmapColor& rColor, sal_uInt8& ( (sal_uInt32) pPixel[ 2 ] << 16UL ) | ( (sal_uInt32) pPixel[ 3 ] << 24UL ); rAlpha = (sal_uInt8)(nVal >> 24); - MASK_TO_COLOR( nVal, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); } inline void ColorMask::SetColorFor32Bit( const BitmapColor& rColor, HPBYTE pPixel ) const { - const sal_uInt32 nVal = COLOR_TO_MASK( rColor, mnRMask, mnGMask, mnBMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); + const sal_uInt32 nVal = COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, mnAlphaChannel ); pPixel[ 0 ] = (sal_uInt8) nVal; pPixel[ 1 ] = (sal_uInt8) ( nVal >> 8UL ); pPixel[ 2 ] = (sal_uInt8) ( nVal >> 16UL ); |