include/vcl/BitmapBuffer.hxx | 48 +++ include/vcl/BitmapColor.hxx | 226 +++++++++++++++++ include/vcl/BitmapPalette.hxx | 136 ++++++++++ include/vcl/ColorMask.hxx | 207 +++++++++++++++ include/vcl/Scanline.hxx | 68 +++++ include/vcl/salbtype.hxx | 546 ------------------------------------------ solenv/clang-format/blacklist | 5 7 files changed, 695 insertions(+), 541 deletions(-)
New commits: commit e9651c2509004e2113864e15d74b8637966083ab Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Apr 15 00:08:12 2019 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Apr 15 01:57:27 2019 +0200 break up classes in salbtype into own files But still keep salbtype where all of them are included for now. Change-Id: I54cdf7a8872ad5bb592402a4bce0f3b8f869c6b2 Reviewed-on: https://gerrit.libreoffice.org/70737 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/include/vcl/BitmapBuffer.hxx b/include/vcl/BitmapBuffer.hxx new file mode 100644 index 000000000000..2a064951c447 --- /dev/null +++ b/include/vcl/BitmapBuffer.hxx @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_BITMAPBUFFER_HXX +#define INCLUDED_VCL_BITMAPBUFFER_HXX + +#include <vcl/dllapi.h> +#include <vcl/BitmapPalette.hxx> +#include <vcl/ColorMask.hxx> +#include <vcl/Scanline.hxx> + +struct SalTwoRect; + +struct VCL_DLLPUBLIC BitmapBuffer +{ + ScanlineFormat mnFormat; + long mnWidth; + long mnHeight; + long mnScanlineSize; + sal_uInt16 mnBitCount; + ColorMask maColorMask; + BitmapPalette maPalette; + sal_uInt8* mpBits; +}; + +VCL_DLLPUBLIC std::unique_ptr<BitmapBuffer> StretchAndConvert( + const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect, + ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal = nullptr, const ColorMask* pDstMask = nullptr ); + +#endif // INCLUDED_VCL_BITMAPBUFFER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/BitmapColor.hxx b/include/vcl/BitmapColor.hxx new file mode 100644 index 000000000000..7df493e7b38d --- /dev/null +++ b/include/vcl/BitmapColor.hxx @@ -0,0 +1,226 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_BITMAPCOLOR_HXX +#define INCLUDED_VCL_BITMAPCOLOR_HXX + +#include <vcl/dllapi.h> +#include <tools/color.hxx> +#include <memory> + +class VCL_DLLPUBLIC BitmapColor final +{ +private: + sal_uInt8 mcBlueOrIndex; + sal_uInt8 mcGreen; + sal_uInt8 mcRed; + sal_uInt8 mcAlpha; + +public: + + inline BitmapColor(); + constexpr BitmapColor( sal_uInt8 cRed, sal_uInt8 cGreen, sal_uInt8 cBlue, sal_uInt8 cAlpha = 0 ); + + inline BitmapColor( const Color& rColor ); + explicit inline BitmapColor( sal_uInt8 cIndex ); + + inline bool operator==( const BitmapColor& rBitmapColor ) const; + inline bool operator!=( const BitmapColor& rBitmapColor ) const; + + inline sal_uInt8 GetRed() const; + inline void SetRed( sal_uInt8 cRed ); + + inline sal_uInt8 GetGreen() const; + inline void SetGreen( sal_uInt8 cGreen ); + + inline sal_uInt8 GetBlue() const; + inline void SetBlue( sal_uInt8 cBlue ); + + inline sal_uInt8 GetIndex() const; + inline void SetIndex( sal_uInt8 cIndex ); + + Color GetColor() const; + + inline sal_uInt8 GetAlpha() const; + inline void SetAlpha( sal_uInt8 cAlpha ); + + inline sal_uInt8 GetBlueOrIndex() const; + + inline BitmapColor& Invert(); + + inline sal_uInt8 GetLuminance() const; + + inline BitmapColor& Merge( const BitmapColor& rColor, sal_uInt8 cTransparency ); + + inline sal_uInt16 GetColorError( const BitmapColor& rBitmapColor ) const; +}; + +template<typename charT, typename traits> +inline std::basic_ostream<charT, traits>& operator <<(std::basic_ostream<charT, traits>& rStream, const BitmapColor& rColor) +{ + return rStream << "#(" << std::hex << std::setfill ('0') << std::setw(2) << static_cast<int>(rColor.GetRed()) + << std::setw(2) << static_cast<int>(rColor.GetGreen()) + << std::setw(2) << static_cast<int>(rColor.GetBlueOrIndex()) + << std::setw(2) << static_cast<int>(rColor.GetAlpha()) << ")"; +} + +inline BitmapColor::BitmapColor() : + mcBlueOrIndex (0), + mcGreen (0), + mcRed (0), + mcAlpha (0) +{ +} + +constexpr BitmapColor::BitmapColor(sal_uInt8 cRed, sal_uInt8 cGreen, sal_uInt8 cBlue, sal_uInt8 cAlpha) : + mcBlueOrIndex ( cBlue ), + mcGreen ( cGreen ), + mcRed ( cRed ), + mcAlpha ( cAlpha ) +{ +} + +inline BitmapColor::BitmapColor( const Color& rColor ) : + mcBlueOrIndex ( rColor.GetBlue() ), + mcGreen ( rColor.GetGreen() ), + mcRed ( rColor.GetRed() ), + mcAlpha ( rColor.GetTransparency() ) +{ +} + +inline BitmapColor::BitmapColor( sal_uInt8 cIndex ) : + mcBlueOrIndex ( cIndex ), + mcGreen ( 0 ), + mcRed ( 0 ), + mcAlpha ( 0 ) +{ +} + +inline bool BitmapColor::operator==( const BitmapColor& rBitmapColor ) const +{ + return mcBlueOrIndex == rBitmapColor.mcBlueOrIndex && + mcGreen == rBitmapColor.mcGreen && + mcRed == rBitmapColor.mcRed && + mcAlpha == rBitmapColor.mcAlpha; +} + +inline bool BitmapColor::operator!=( const BitmapColor& rBitmapColor ) const +{ + return !( *this == rBitmapColor ); +} + +inline sal_uInt8 BitmapColor::GetRed() const +{ + return mcRed; +} + +inline void BitmapColor::SetRed( sal_uInt8 cRed ) +{ + mcRed = cRed; +} + +inline sal_uInt8 BitmapColor::GetGreen() const +{ + return mcGreen; +} + +inline void BitmapColor::SetGreen( sal_uInt8 cGreen ) +{ + mcGreen = cGreen; +} + +inline sal_uInt8 BitmapColor::GetBlue() const +{ + return mcBlueOrIndex; +} + +inline void BitmapColor::SetBlue( sal_uInt8 cBlue ) +{ + mcBlueOrIndex = cBlue; +} + +inline sal_uInt8 BitmapColor::GetIndex() const +{ + return mcBlueOrIndex; +} + +inline void BitmapColor::SetIndex( sal_uInt8 cIndex ) +{ + mcBlueOrIndex = cIndex; +} + +inline Color BitmapColor::GetColor() const +{ + return Color(mcAlpha, mcRed, mcGreen, mcBlueOrIndex); +} + +inline sal_uInt8 BitmapColor::GetAlpha() const +{ + return mcAlpha; +} + +inline void BitmapColor::SetAlpha( sal_uInt8 cAlpha ) +{ + mcAlpha = cAlpha; +} + +inline sal_uInt8 BitmapColor::GetBlueOrIndex() const +{ + // #i47518# Yield a value regardless of mbIndex + return mcBlueOrIndex; +} + +inline BitmapColor& BitmapColor::Invert() +{ + mcBlueOrIndex = ~mcBlueOrIndex; + mcGreen = ~mcGreen; + mcRed = ~mcRed; + + return *this; +} + +inline sal_uInt8 BitmapColor::GetLuminance() const +{ + return (static_cast<sal_uInt32>(mcBlueOrIndex) * 28 + + static_cast<sal_uInt32>(mcGreen) * 151 + + static_cast<sal_uInt32>(mcRed) * 77) >> 8; +} + + +inline BitmapColor& BitmapColor::Merge( const BitmapColor& rBitmapColor, sal_uInt8 cTransparency ) +{ + mcBlueOrIndex = ColorChannelMerge( mcBlueOrIndex, rBitmapColor.mcBlueOrIndex, cTransparency ); + mcGreen = ColorChannelMerge( mcGreen, rBitmapColor.mcGreen, cTransparency ); + mcRed = ColorChannelMerge( mcRed, rBitmapColor.mcRed, cTransparency ); + + return *this; +} + + +inline sal_uInt16 BitmapColor::GetColorError( const BitmapColor& rBitmapColor ) const +{ + return static_cast<sal_uInt16>( + abs( static_cast<int>(mcBlueOrIndex) - static_cast<int>(rBitmapColor.mcBlueOrIndex) ) + + abs( static_cast<int>(mcGreen) - static_cast<int>(rBitmapColor.mcGreen) ) + + abs( static_cast<int>(mcRed) - static_cast<int>(rBitmapColor.mcRed) ) ); +} + +#endif // INCLUDED_VCL_BITMAPCOLOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/BitmapPalette.hxx b/include/vcl/BitmapPalette.hxx new file mode 100644 index 000000000000..1e61c8ecf1c5 --- /dev/null +++ b/include/vcl/BitmapPalette.hxx @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_BITMAPPALETTE_HXX +#define INCLUDED_VCL_BITMAPPALETTE_HXX + +#include <vcl/dllapi.h> +#include <vcl/BitmapColor.hxx> +#include <vcl/checksum.hxx> +#include <vector> + +class VCL_DLLPUBLIC BitmapPalette +{ + friend class SalBitmap; + friend class BitmapAccess; + +private: + + std::vector<BitmapColor> maBitmapColor; + +public: + + SAL_DLLPRIVATE const BitmapColor* ImplGetColorBuffer() const + { + return maBitmapColor.data(); + } + + SAL_DLLPRIVATE BitmapColor* ImplGetColorBuffer() + { + return maBitmapColor.data(); + } + + BitmapChecksum GetChecksum() const + { + return vcl_get_checksum(0, maBitmapColor.data(), maBitmapColor.size() * sizeof(BitmapColor)); + } + +public: + + BitmapPalette() + { + } + + BitmapPalette(sal_uInt16 nCount) + : maBitmapColor(nCount) + { + } + + bool operator==( const BitmapPalette& rBitmapPalette ) const + { + return maBitmapColor == rBitmapPalette.maBitmapColor; + } + + bool operator!=(const BitmapPalette& rBitmapPalette) const + { + return !( *this == rBitmapPalette ); + } + + bool operator!() + { + return maBitmapColor.empty(); + } + + sal_uInt16 GetEntryCount() const + { + return maBitmapColor.size(); + } + + void SetEntryCount(sal_uInt16 nCount) + { + maBitmapColor.resize(nCount); + } + + const BitmapColor& operator[](sal_uInt16 nIndex) const + { + assert(nIndex < maBitmapColor.size() && "Palette index is out of range"); + return maBitmapColor[nIndex]; + } + + BitmapColor& operator[](sal_uInt16 nIndex) + { + assert(nIndex < maBitmapColor.size() && "Palette index is out of range"); + return maBitmapColor[nIndex]; + } + + sal_uInt16 GetBestIndex(const BitmapColor& rCol) const + { + sal_uInt16 nRetIndex = 0; + + if (!maBitmapColor.empty()) + { + for (size_t j = 0; j < maBitmapColor.size(); ++j) + { + if (rCol == maBitmapColor[j]) + { + return j; + } + } + + sal_uInt16 nLastErr = SAL_MAX_UINT16; + for (size_t i = 0; i < maBitmapColor.size(); ++i) + { + const sal_uInt16 nActErr = rCol.GetColorError(maBitmapColor[i]); + if ( nActErr < nLastErr ) + { + nLastErr = nActErr; + nRetIndex = i; + } + } + } + + return nRetIndex; + } + + bool IsGreyPalette() const; +}; + +#endif // INCLUDED_VCL_BITMAPPALETTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/ColorMask.hxx b/include/vcl/ColorMask.hxx new file mode 100644 index 000000000000..8705cea6008b --- /dev/null +++ b/include/vcl/ColorMask.hxx @@ -0,0 +1,207 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_COLORMASK_HXX +#define INCLUDED_VCL_COLORMASK_HXX + +#include <vcl/dllapi.h> +#include <vcl/BitmapColor.hxx> + +#define MASK_TO_COLOR( d_nVal, d_RM, d_GM, d_BM, d_RS, d_GS, d_BS, d_Col ) \ +const sal_uInt8 _def_cR = static_cast<sal_uInt8>( d_RS < 0 ? ( (d_nVal) & d_RM ) << -d_RS : ( (d_nVal) & d_RM ) >> d_RS ); \ +const sal_uInt8 _def_cG = static_cast<sal_uInt8>( d_GS < 0 ? ( (d_nVal) & d_GM ) << -d_GS : ( (d_nVal) & d_GM ) >> d_GS ); \ +const sal_uInt8 _def_cB = static_cast<sal_uInt8>( d_BS < 0 ? ( (d_nVal) & d_BM ) << -d_BS : ( (d_nVal) & d_BM ) >> d_BS ); \ +d_Col = BitmapColor( static_cast<sal_uInt8>( _def_cR | ( ( _def_cR & maR.mnOr ) >> maR.mnOrShift ) ), \ + static_cast<sal_uInt8>( _def_cG | ( ( _def_cG & maG.mnOr ) >> maG.mnOrShift ) ), \ + static_cast<sal_uInt8>( _def_cB | ( ( _def_cB & maB.mnOr ) >> maB.mnOrShift ) ) ); + + +#define COLOR_TO_MASK( d_rCol, d_RM, d_GM, d_BM, d_RS, d_GS, d_BS, d_ALPHA ) \ +( ( ( ( d_RS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetRed()) >> -d_RS ) : \ + ( static_cast<sal_uInt32>((d_rCol).GetRed()) << d_RS ) ) & d_RM ) | \ + ( ( ( d_GS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetGreen()) >> -d_GS ) : \ + ( static_cast<sal_uInt32>((d_rCol).GetGreen()) << d_GS ) ) & d_GM ) | \ + ( ( ( d_BS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetBlue()) >> -d_BS ) : \ + ( static_cast<sal_uInt32>((d_rCol).GetBlue()) << d_BS ) ) & d_BM ) | \ + d_ALPHA ) + + +struct VCL_DLLPUBLIC ColorMaskElement +{ + sal_uInt32 mnMask; + int mnShift; + int mnOrShift; + sal_uInt8 mnOr; + explicit ColorMaskElement(sal_uInt32 nMask = 0) + : mnMask(nMask) + , mnShift(0) + , mnOrShift(0) + , mnOr(0) + { + } + bool CalcMaskShift() + { + if (mnMask == 0) + return true; + + // from which bit starts the mask? + int nShift = 31; + + while( nShift >= 0 && !( mnMask & ( 1 << nShift ) ) ) + --nShift; + + mnShift = nShift - 7; + int nLen = 0; + + // XXX determine number of bits set => walk right until null + while( nShift >= 0 && ( mnMask & ( 1 << nShift ) ) ) + { + nShift--; + nLen++; + } + + if (nLen > 8) // mask length must be 8 bits or less + return false; + + mnOrShift = 8 - nLen; + mnOr = static_cast<sal_uInt8>( ( 0xFF >> nLen ) << mnOrShift ); + + return true; + } +}; + +class VCL_DLLPUBLIC ColorMask +{ + ColorMaskElement maR; + ColorMaskElement maG; + ColorMaskElement maB; + +public: + + ColorMask(const ColorMaskElement& rRedMask = ColorMaskElement(), + const ColorMaskElement& rGreenMask = ColorMaskElement(), + const ColorMaskElement& rBlueMask = ColorMaskElement()) + : maR(rRedMask) + , maG(rGreenMask) + , maB(rBlueMask) + { + } + + inline sal_uInt32 GetRedMask() const; + inline sal_uInt32 GetGreenMask() const; + inline sal_uInt32 GetBlueMask() const; + + inline void GetColorFor8Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const; + inline void SetColorFor8Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const; + + inline void GetColorFor16BitMSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const; + inline void SetColorFor16BitMSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const; + inline void GetColorFor16BitLSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const; + inline void SetColorFor16BitLSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const; + + inline void GetColorFor32Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const; + inline void GetColorAndAlphaFor32Bit( BitmapColor& rColor, sal_uInt8& rAlpha, const sal_uInt8* pPixel ) const; + inline void SetColorFor32Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const; +}; + +inline sal_uInt32 ColorMask::GetRedMask() const +{ + return maR.mnMask; +} + +inline sal_uInt32 ColorMask::GetGreenMask() const +{ + return maG.mnMask; +} + +inline sal_uInt32 ColorMask::GetBlueMask() const +{ + return maB.mnMask; +} + +inline void ColorMask::GetColorFor8Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = *pPixel; + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maR.mnShift, rColor ); +} + +inline void ColorMask::SetColorFor8Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const +{ + *pPixel = static_cast<sal_uInt8>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); +} + +inline void ColorMask::GetColorFor16BitMSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = pPixel[ 1 ] | ( static_cast<sal_uInt32>(pPixel[ 0 ]) << 8 ); + + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); +} + +inline void ColorMask::SetColorFor16BitMSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const +{ + const sal_uInt16 nVal = static_cast<sal_uInt16>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); + + pPixel[ 0 ] = static_cast<sal_uInt8>(nVal >> 8); + pPixel[ 1 ] = static_cast<sal_uInt8>(nVal); +} + +inline void ColorMask::GetColorFor16BitLSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = pPixel[ 0 ] | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ); + + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); +} + +inline void ColorMask::SetColorFor16BitLSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const +{ + const sal_uInt16 nVal = static_cast<sal_uInt16>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); + + pPixel[ 0 ] = static_cast<sal_uInt8>(nVal); + pPixel[ 1 ] = static_cast<sal_uInt8>(nVal >> 8); +} + +inline void ColorMask::GetColorFor32Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = static_cast<sal_uInt32>(pPixel[ 0 ]) | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ) | + ( static_cast<sal_uInt32>(pPixel[ 2 ]) << 16 ) | ( static_cast<sal_uInt32>(pPixel[ 3 ]) << 24 ); + + 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, const sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = static_cast<sal_uInt32>(pPixel[ 0 ]) | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ) | + ( static_cast<sal_uInt32>(pPixel[ 2 ]) << 16 ) | ( static_cast<sal_uInt32>(pPixel[ 3 ]) << 24 ); + rAlpha = static_cast<sal_uInt8>(nVal >> 24); + + MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); +} + +inline void ColorMask::SetColorFor32Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const +{ + const sal_uInt32 nVal = COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ ); + pPixel[ 0 ] = static_cast<sal_uInt8>(nVal); + pPixel[ 1 ] = static_cast<sal_uInt8>( nVal >> 8 ); + pPixel[ 2 ] = static_cast<sal_uInt8>( nVal >> 16 ); + pPixel[ 3 ] = static_cast<sal_uInt8>( nVal >> 24 ); +} + +#endif // INCLUDED_VCL_COLORMASK_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/Scanline.hxx b/include/vcl/Scanline.hxx new file mode 100644 index 000000000000..d855f78a2e54 --- /dev/null +++ b/include/vcl/Scanline.hxx @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_VCL_SCANLINE_HXX +#define INCLUDED_VCL_SCANLINE_HXX + +#include <vcl/dllapi.h> +#include <o3tl/typed_flags_set.hxx> + +typedef sal_uInt8* Scanline; +typedef const sal_uInt8* ConstScanline; + +enum class ScanlineFormat { + NONE = 0x00000000, + + N1BitMsbPal = 0x00000001, + N1BitLsbPal = 0x00000002, + + N4BitMsnPal = 0x00000004, + N4BitLsnPal = 0x00000008, + + N8BitPal = 0x00000010, + N8BitTcMask = 0x00000020, + + N16BitTcMsbMask = 0x00000040, + N16BitTcLsbMask = 0x00000080, + + N24BitTcBgr = 0x00000100, + N24BitTcRgb = 0x00000200, + + N32BitTcAbgr = 0x00000800, + N32BitTcArgb = 0x00001000, + N32BitTcBgra = 0x00002000, + N32BitTcRgba = 0x00004000, + N32BitTcMask = 0x00008000, + + TopDown = 0x00010000 // scanline adjustment +}; + +namespace o3tl +{ + template<> struct typed_flags<ScanlineFormat> : is_typed_flags<ScanlineFormat, 0x0001fbff> {}; +} + +inline ScanlineFormat RemoveScanline(ScanlineFormat nFormat) +{ + return nFormat & ~ScanlineFormat::TopDown; +} + +#endif // INCLUDED_VCL_SCANLINE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/salbtype.hxx b/include/vcl/salbtype.hxx index 8a0f8bb6e424..17d86ed3e4f9 100644 --- a/include/vcl/salbtype.hxx +++ b/include/vcl/salbtype.hxx @@ -20,320 +20,11 @@ #ifndef INCLUDED_VCL_SALBTYPE_HXX #define INCLUDED_VCL_SALBTYPE_HXX -#include <vcl/checksum.hxx> -#include <tools/color.hxx> -#include <vcl/dllapi.h> -#include <o3tl/typed_flags_set.hxx> -#include <vector> -#include <memory> - -struct SalTwoRect; -typedef sal_uInt8* Scanline; -typedef const sal_uInt8* ConstScanline; - -enum class ScanlineFormat { - NONE = 0x00000000, - - N1BitMsbPal = 0x00000001, - N1BitLsbPal = 0x00000002, - - N4BitMsnPal = 0x00000004, - N4BitLsnPal = 0x00000008, - - N8BitPal = 0x00000010, - N8BitTcMask = 0x00000020, - - N16BitTcMsbMask = 0x00000040, - N16BitTcLsbMask = 0x00000080, - - N24BitTcBgr = 0x00000100, - N24BitTcRgb = 0x00000200, - - N32BitTcAbgr = 0x00000800, - N32BitTcArgb = 0x00001000, - N32BitTcBgra = 0x00002000, - N32BitTcRgba = 0x00004000, - N32BitTcMask = 0x00008000, - - TopDown = 0x00010000 // scanline adjustment -}; -namespace o3tl { - template<> struct typed_flags<ScanlineFormat> : is_typed_flags<ScanlineFormat, 0x0001fbff> {}; -} -inline ScanlineFormat RemoveScanline(ScanlineFormat nFormat) { return nFormat & ~ScanlineFormat::TopDown; } - - -#define MASK_TO_COLOR( d_nVal, d_RM, d_GM, d_BM, d_RS, d_GS, d_BS, d_Col ) \ -const sal_uInt8 _def_cR = static_cast<sal_uInt8>( d_RS < 0 ? ( (d_nVal) & d_RM ) << -d_RS : ( (d_nVal) & d_RM ) >> d_RS ); \ -const sal_uInt8 _def_cG = static_cast<sal_uInt8>( d_GS < 0 ? ( (d_nVal) & d_GM ) << -d_GS : ( (d_nVal) & d_GM ) >> d_GS ); \ -const sal_uInt8 _def_cB = static_cast<sal_uInt8>( d_BS < 0 ? ( (d_nVal) & d_BM ) << -d_BS : ( (d_nVal) & d_BM ) >> d_BS ); \ -d_Col = BitmapColor( static_cast<sal_uInt8>( _def_cR | ( ( _def_cR & maR.mnOr ) >> maR.mnOrShift ) ), \ - static_cast<sal_uInt8>( _def_cG | ( ( _def_cG & maG.mnOr ) >> maG.mnOrShift ) ), \ - static_cast<sal_uInt8>( _def_cB | ( ( _def_cB & maB.mnOr ) >> maB.mnOrShift ) ) ); - - -#define COLOR_TO_MASK( d_rCol, d_RM, d_GM, d_BM, d_RS, d_GS, d_BS, d_ALPHA ) \ -( ( ( ( d_RS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetRed()) >> -d_RS ) : \ - ( static_cast<sal_uInt32>((d_rCol).GetRed()) << d_RS ) ) & d_RM ) | \ - ( ( ( d_GS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetGreen()) >> -d_GS ) : \ - ( static_cast<sal_uInt32>((d_rCol).GetGreen()) << d_GS ) ) & d_GM ) | \ - ( ( ( d_BS < 0 ) ? ( static_cast<sal_uInt32>((d_rCol).GetBlue()) >> -d_BS ) : \ - ( static_cast<sal_uInt32>((d_rCol).GetBlue()) << d_BS ) ) & d_BM ) | \ - d_ALPHA ) - - -class VCL_DLLPUBLIC BitmapColor final -{ -private: - - sal_uInt8 mcBlueOrIndex; - sal_uInt8 mcGreen; - sal_uInt8 mcRed; - sal_uInt8 mcAlpha; - -public: - - inline BitmapColor(); - constexpr BitmapColor( sal_uInt8 cRed, sal_uInt8 cGreen, sal_uInt8 cBlue, sal_uInt8 cAlpha = 0 ); - - inline BitmapColor( const Color& rColor ); - explicit inline BitmapColor( sal_uInt8 cIndex ); - - inline bool operator==( const BitmapColor& rBitmapColor ) const; - inline bool operator!=( const BitmapColor& rBitmapColor ) const; - - inline sal_uInt8 GetRed() const; - inline void SetRed( sal_uInt8 cRed ); - - inline sal_uInt8 GetGreen() const; - inline void SetGreen( sal_uInt8 cGreen ); - - inline sal_uInt8 GetBlue() const; - inline void SetBlue( sal_uInt8 cBlue ); - - inline sal_uInt8 GetIndex() const; - inline void SetIndex( sal_uInt8 cIndex ); - - Color GetColor() const; - - inline sal_uInt8 GetAlpha() const; - inline void SetAlpha( sal_uInt8 cAlpha ); - - inline sal_uInt8 GetBlueOrIndex() const; - - inline BitmapColor& Invert(); - - inline sal_uInt8 GetLuminance() const; - - inline BitmapColor& Merge( const BitmapColor& rColor, sal_uInt8 cTransparency ); - - inline sal_uInt16 GetColorError( const BitmapColor& rBitmapColor ) const; -}; - -template<typename charT, typename traits> -inline std::basic_ostream<charT, traits>& operator <<(std::basic_ostream<charT, traits>& rStream, const BitmapColor& rColor) -{ - return rStream << "#(" << std::hex << std::setfill ('0') << std::setw(2) << static_cast<int>(rColor.GetRed()) - << std::setw(2) << static_cast<int>(rColor.GetGreen()) - << std::setw(2) << static_cast<int>(rColor.GetBlueOrIndex()) - << std::setw(2) << static_cast<int>(rColor.GetAlpha()) << ")"; -} - -class VCL_DLLPUBLIC BitmapPalette -{ - friend class SalBitmap; - friend class BitmapAccess; - -private: - - std::vector<BitmapColor> maBitmapColor; - -public: - - SAL_DLLPRIVATE const BitmapColor* ImplGetColorBuffer() const - { - return maBitmapColor.data(); - } - - SAL_DLLPRIVATE BitmapColor* ImplGetColorBuffer() - { - return maBitmapColor.data(); - } - - BitmapChecksum GetChecksum() const - { - return vcl_get_checksum(0, maBitmapColor.data(), maBitmapColor.size() * sizeof(BitmapColor)); - } - -public: - - BitmapPalette() - { - } - - BitmapPalette(sal_uInt16 nCount) - : maBitmapColor(nCount) - { - } - - bool operator==( const BitmapPalette& rBitmapPalette ) const - { - return maBitmapColor == rBitmapPalette.maBitmapColor; - } - - bool operator!=(const BitmapPalette& rBitmapPalette) const - { - return !( *this == rBitmapPalette ); - } - - bool operator!() - { - return maBitmapColor.empty(); - } - - sal_uInt16 GetEntryCount() const - { - return maBitmapColor.size(); - } - - void SetEntryCount(sal_uInt16 nCount) - { - maBitmapColor.resize(nCount); - } - - const BitmapColor& operator[](sal_uInt16 nIndex) const - { - assert(nIndex < maBitmapColor.size() && "Palette index is out of range"); - return maBitmapColor[nIndex]; - } - - BitmapColor& operator[](sal_uInt16 nIndex) - { - assert(nIndex < maBitmapColor.size() && "Palette index is out of range"); - return maBitmapColor[nIndex]; - } - - sal_uInt16 GetBestIndex(const BitmapColor& rCol) const - { - sal_uInt16 nRetIndex = 0; - - if (!maBitmapColor.empty()) - { - for (size_t j = 0; j < maBitmapColor.size(); ++j) - { - if (rCol == maBitmapColor[j]) - { - return j; - } - } - - sal_uInt16 nLastErr = SAL_MAX_UINT16; - for (size_t i = 0; i < maBitmapColor.size(); ++i) - { - const sal_uInt16 nActErr = rCol.GetColorError(maBitmapColor[i]); - if ( nActErr < nLastErr ) - { - nLastErr = nActErr; - nRetIndex = i; - } - } - } - - return nRetIndex; - } - - bool IsGreyPalette() const; -}; - -struct VCL_DLLPUBLIC ColorMaskElement -{ - sal_uInt32 mnMask; - int mnShift; - int mnOrShift; - sal_uInt8 mnOr; - explicit ColorMaskElement(sal_uInt32 nMask = 0) - : mnMask(nMask) - , mnShift(0) - , mnOrShift(0) - , mnOr(0) - { - } - bool CalcMaskShift() - { - if (mnMask == 0) - return true; - - // from which bit starts the mask? - int nShift = 31; - - while( nShift >= 0 && !( mnMask & ( 1 << nShift ) ) ) - --nShift; - - mnShift = nShift - 7; - int nLen = 0; - - // XXX determine number of bits set => walk right until null - while( nShift >= 0 && ( mnMask & ( 1 << nShift ) ) ) - { - nShift--; - nLen++; - } - - if (nLen > 8) // mask length must be 8 bits or less - return false; - - mnOrShift = 8 - nLen; - mnOr = static_cast<sal_uInt8>( ( 0xFF >> nLen ) << mnOrShift ); - - return true; - } -}; - -class VCL_DLLPUBLIC ColorMask -{ - ColorMaskElement maR; - ColorMaskElement maG; - ColorMaskElement maB; - -public: - - ColorMask(const ColorMaskElement& rRedMask = ColorMaskElement(), - const ColorMaskElement& rGreenMask = ColorMaskElement(), - const ColorMaskElement& rBlueMask = ColorMaskElement()) - : maR(rRedMask) - , maG(rGreenMask) - , maB(rBlueMask) - { - } - - inline sal_uInt32 GetRedMask() const; - inline sal_uInt32 GetGreenMask() const; - inline sal_uInt32 GetBlueMask() const; - - inline void GetColorFor8Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const; - inline void SetColorFor8Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const; - - inline void GetColorFor16BitMSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const; - inline void SetColorFor16BitMSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const; - inline void GetColorFor16BitLSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const; - inline void SetColorFor16BitLSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const; - - inline void GetColorFor32Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const; - inline void GetColorAndAlphaFor32Bit( BitmapColor& rColor, sal_uInt8& rAlpha, const sal_uInt8* pPixel ) const; - inline void SetColorFor32Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const; -}; - -struct VCL_DLLPUBLIC BitmapBuffer -{ - ScanlineFormat mnFormat; - long mnWidth; - long mnHeight; - long mnScanlineSize; - sal_uInt16 mnBitCount; - ColorMask maColorMask; - BitmapPalette maPalette; - sal_uInt8* mpBits; -}; +#include <vcl/Scanline.hxx> +#include <vcl/BitmapColor.hxx> +#include <vcl/BitmapPalette.hxx> +#include <vcl/ColorMask.hxx> +#include <vcl/BitmapBuffer.hxx> enum class BitmapAccessMode { @@ -342,233 +33,6 @@ enum class BitmapAccessMode Write }; -VCL_DLLPUBLIC std::unique_ptr<BitmapBuffer> StretchAndConvert( - const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect, - ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal = nullptr, const ColorMask* pDstMask = nullptr ); - -inline BitmapColor::BitmapColor() : - mcBlueOrIndex (0), - mcGreen (0), - mcRed (0), - mcAlpha (0) -{ -} - -constexpr BitmapColor::BitmapColor(sal_uInt8 cRed, sal_uInt8 cGreen, sal_uInt8 cBlue, sal_uInt8 cAlpha) : - mcBlueOrIndex ( cBlue ), - mcGreen ( cGreen ), - mcRed ( cRed ), - mcAlpha ( cAlpha ) -{ -} - -inline BitmapColor::BitmapColor( const Color& rColor ) : - mcBlueOrIndex ( rColor.GetBlue() ), - mcGreen ( rColor.GetGreen() ), - mcRed ( rColor.GetRed() ), - mcAlpha ( rColor.GetTransparency() ) -{ -} - -inline BitmapColor::BitmapColor( sal_uInt8 cIndex ) : - mcBlueOrIndex ( cIndex ), - mcGreen ( 0 ), - mcRed ( 0 ), - mcAlpha ( 0 ) -{ -} - -inline bool BitmapColor::operator==( const BitmapColor& rBitmapColor ) const -{ - return mcBlueOrIndex == rBitmapColor.mcBlueOrIndex && - mcGreen == rBitmapColor.mcGreen && - mcRed == rBitmapColor.mcRed && - mcAlpha == rBitmapColor.mcAlpha; -} - -inline bool BitmapColor::operator!=( const BitmapColor& rBitmapColor ) const -{ - return !( *this == rBitmapColor ); -} - -inline sal_uInt8 BitmapColor::GetRed() const -{ - return mcRed; -} - -inline void BitmapColor::SetRed( sal_uInt8 cRed ) -{ - mcRed = cRed; -} - -inline sal_uInt8 BitmapColor::GetGreen() const -{ - return mcGreen; -} - -inline void BitmapColor::SetGreen( sal_uInt8 cGreen ) -{ - mcGreen = cGreen; -} - -inline sal_uInt8 BitmapColor::GetBlue() const -{ - return mcBlueOrIndex; -} - -inline void BitmapColor::SetBlue( sal_uInt8 cBlue ) -{ - mcBlueOrIndex = cBlue; -} - -inline sal_uInt8 BitmapColor::GetIndex() const -{ - return mcBlueOrIndex; -} - -inline void BitmapColor::SetIndex( sal_uInt8 cIndex ) -{ - mcBlueOrIndex = cIndex; -} - -inline Color BitmapColor::GetColor() const -{ - return Color(mcAlpha, mcRed, mcGreen, mcBlueOrIndex); -} - -inline sal_uInt8 BitmapColor::GetAlpha() const -{ - return mcAlpha; -} - -inline void BitmapColor::SetAlpha( sal_uInt8 cAlpha ) -{ - mcAlpha = cAlpha; -} - -inline sal_uInt8 BitmapColor::GetBlueOrIndex() const -{ - // #i47518# Yield a value regardless of mbIndex - return mcBlueOrIndex; -} - -inline BitmapColor& BitmapColor::Invert() -{ - mcBlueOrIndex = ~mcBlueOrIndex; - mcGreen = ~mcGreen; - mcRed = ~mcRed; - - return *this; -} - -inline sal_uInt8 BitmapColor::GetLuminance() const -{ - return (static_cast<sal_uInt32>(mcBlueOrIndex) * 28 - + static_cast<sal_uInt32>(mcGreen) * 151 - + static_cast<sal_uInt32>(mcRed) * 77) >> 8; -} - - -inline BitmapColor& BitmapColor::Merge( const BitmapColor& rBitmapColor, sal_uInt8 cTransparency ) -{ - mcBlueOrIndex = ColorChannelMerge( mcBlueOrIndex, rBitmapColor.mcBlueOrIndex, cTransparency ); - mcGreen = ColorChannelMerge( mcGreen, rBitmapColor.mcGreen, cTransparency ); - mcRed = ColorChannelMerge( mcRed, rBitmapColor.mcRed, cTransparency ); - - return *this; -} - - -inline sal_uInt16 BitmapColor::GetColorError( const BitmapColor& rBitmapColor ) const -{ - return static_cast<sal_uInt16>( - abs( static_cast<int>(mcBlueOrIndex) - static_cast<int>(rBitmapColor.mcBlueOrIndex) ) + - abs( static_cast<int>(mcGreen) - static_cast<int>(rBitmapColor.mcGreen) ) + - abs( static_cast<int>(mcRed) - static_cast<int>(rBitmapColor.mcRed) ) ); -} - -inline sal_uInt32 ColorMask::GetRedMask() const -{ - return maR.mnMask; -} - -inline sal_uInt32 ColorMask::GetGreenMask() const -{ - return maG.mnMask; -} - -inline sal_uInt32 ColorMask::GetBlueMask() const -{ - return maB.mnMask; -} - -inline void ColorMask::GetColorFor8Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = *pPixel; - MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maR.mnShift, rColor ); -} - -inline void ColorMask::SetColorFor8Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const -{ - *pPixel = static_cast<sal_uInt8>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); -} - -inline void ColorMask::GetColorFor16BitMSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = pPixel[ 1 ] | ( static_cast<sal_uInt32>(pPixel[ 0 ]) << 8 ); - - MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); -} - -inline void ColorMask::SetColorFor16BitMSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const -{ - const sal_uInt16 nVal = static_cast<sal_uInt16>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); - - pPixel[ 0 ] = static_cast<sal_uInt8>(nVal >> 8); - pPixel[ 1 ] = static_cast<sal_uInt8>(nVal); -} - -inline void ColorMask::GetColorFor16BitLSB( BitmapColor& rColor, const sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = pPixel[ 0 ] | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ); - - MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); -} - -inline void ColorMask::SetColorFor16BitLSB( const BitmapColor& rColor, sal_uInt8* pPixel ) const -{ - const sal_uInt16 nVal = static_cast<sal_uInt16>(COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ )); - - pPixel[ 0 ] = static_cast<sal_uInt8>(nVal); - pPixel[ 1 ] = static_cast<sal_uInt8>(nVal >> 8); -} - -inline void ColorMask::GetColorFor32Bit( BitmapColor& rColor, const sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = static_cast<sal_uInt32>(pPixel[ 0 ]) | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ) | - ( static_cast<sal_uInt32>(pPixel[ 2 ]) << 16 ) | ( static_cast<sal_uInt32>(pPixel[ 3 ]) << 24 ); - - 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, const sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = static_cast<sal_uInt32>(pPixel[ 0 ]) | ( static_cast<sal_uInt32>(pPixel[ 1 ]) << 8 ) | - ( static_cast<sal_uInt32>(pPixel[ 2 ]) << 16 ) | ( static_cast<sal_uInt32>(pPixel[ 3 ]) << 24 ); - rAlpha = static_cast<sal_uInt8>(nVal >> 24); - - MASK_TO_COLOR( nVal, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, rColor ); -} - -inline void ColorMask::SetColorFor32Bit( const BitmapColor& rColor, sal_uInt8* pPixel ) const -{ - const sal_uInt32 nVal = COLOR_TO_MASK( rColor, maR.mnMask, maG.mnMask, maB.mnMask, maR.mnShift, maG.mnShift, maB.mnShift, 0/*nAlphaChannel*/ ); - pPixel[ 0 ] = static_cast<sal_uInt8>(nVal); - pPixel[ 1 ] = static_cast<sal_uInt8>( nVal >> 8 ); - pPixel[ 2 ] = static_cast<sal_uInt8>( nVal >> 16 ); - pPixel[ 3 ] = static_cast<sal_uInt8>( nVal >> 24 ); -} - #endif // INCLUDED_VCL_SALBTYPE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist index ccd57fa3c047..f7bafad27c4f 100644 --- a/solenv/clang-format/blacklist +++ b/solenv/clang-format/blacklist @@ -7781,6 +7781,10 @@ include/vbahelper/vbatextframe.hxx include/vbahelper/vbawindowbase.hxx include/vcl/AccessibleBrowseBoxObjType.hxx include/vcl/BitmapTools.hxx +include/vcl/BitmapBuffer.hxx +include/vcl/BitmapColor.hxx +include/vcl/BitmapPalette.hxx +include/vcl/ColorMask.hxx include/vcl/EnumContext.hxx include/vcl/FilterConfigItem.hxx include/vcl/GraphicNativeMetadata.hxx @@ -7795,6 +7799,7 @@ include/vcl/IconThemeScanner.hxx include/vcl/IconThemeSelector.hxx include/vcl/ImageTree.hxx include/vcl/NotebookbarContextControl.hxx +include/vcl/Scanline.hxx include/vcl/abstdlg.hxx include/vcl/accel.hxx include/vcl/accessiblefactory.hxx _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits