summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-09-15 21:22:05 +0100
committerJan Holesovsky <kendy@collabora.com>2016-05-16 14:56:56 +0200
commit8bae722102ee987de2387878d4da24180d5b9933 (patch)
treecea1ad0dda8a85a63fcd6bc774ded100d3389e85
parent559cc7568eea41ca5d41f20e34e316124aa78a87 (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.hxx77
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 );