[Libreoffice-commits] core.git: forms/source include/vcl vcl/source
Noel Grandin
noel.grandin at collabora.co.uk
Tue Jun 5 12:44:50 UTC 2018
forms/source/component/imgprod.cxx | 82 ++++++++-----------------------------
include/vcl/bitmapex.hxx | 7 +++
vcl/source/gdi/bitmapex.cxx | 55 ++++++++++++++++++++++++
3 files changed, 81 insertions(+), 63 deletions(-)
New commits:
commit 1c4cd77beeec3b40fb73afa8b77dbf897451a2aa
Author: Noel Grandin <noel.grandin at collabora.co.uk>
Date: Tue Jun 5 10:04:07 2018 +0200
forms - move the Bitmap accessing code inside BitmapEx
Change-Id: I58d5200332c133146adb6bb99b4b88697f03990a
Reviewed-on: https://gerrit.libreoffice.org/55313
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/forms/source/component/imgprod.cxx b/forms/source/component/imgprod.cxx
index 3b161e3d6d2c..0b55ecd942f1 100644
--- a/forms/source/component/imgprod.cxx
+++ b/forms/source/component/imgprod.cxx
@@ -329,71 +329,27 @@ void ImageProducer::ImplUpdateData( const Graphic& rGraphic )
void ImageProducer::ImplInitConsumer( const Graphic& rGraphic )
{
- Bitmap aBmp( rGraphic.GetBitmapEx().GetBitmap() );
- BitmapReadAccess* pBmpAcc = aBmp.AcquireReadAccess();
-
- if( pBmpAcc )
+ sal_uInt32 nRMask = 0;
+ sal_uInt32 nGMask = 0;
+ sal_uInt32 nBMask = 0;
+ sal_uInt32 nAMask = 0;
+ sal_uInt32 nWidth = 0;
+ sal_uInt32 nHeight = 0;
+ sal_uInt8 nBitCount = 0;
+ css::uno::Sequence< sal_Int32 > aRGBPal;
+ rGraphic.GetBitmapEx().GetColorModel(aRGBPal, nRMask, nGMask, nBMask, nAMask, mnTransIndex, nWidth, nHeight, nBitCount);
+
+ // create temporary list to hold interfaces
+ ConsumerList_t aTmp = maConsList;
+
+ // iterate through interfaces
+ for (auto const& elem : aTmp)
{
- sal_uInt16 nPalCount = 0;
- sal_uInt32 nRMask = 0;
- sal_uInt32 nGMask = 0;
- sal_uInt32 nBMask = 0;
- sal_uInt32 nAMask = 0;
- css::uno::Sequence< sal_Int32 > aRGBPal;
-
- if( pBmpAcc->HasPalette() )
- {
- nPalCount = pBmpAcc->GetPaletteEntryCount();
-
- if( nPalCount )
- {
- aRGBPal = css::uno::Sequence< sal_Int32 >( nPalCount + 1 );
-
- sal_Int32* pTmp = aRGBPal.getArray();
-
- for( sal_uInt32 i = 0; i < nPalCount; i++, pTmp++ )
- {
- const BitmapColor& rCol = pBmpAcc->GetPaletteColor( static_cast<sal_uInt16>(i) );
-
- *pTmp = static_cast<sal_Int32>(rCol.GetRed()) << sal_Int32(24);
- *pTmp |= static_cast<sal_Int32>(rCol.GetGreen()) << sal_Int32(16);
- *pTmp |= static_cast<sal_Int32>(rCol.GetBlue()) << sal_Int32(8);
- *pTmp |= sal_Int32(0x000000ffL);
- }
-
- if( rGraphic.IsTransparent() )
- {
- // append transparent entry
- *pTmp = sal_Int32(0xffffff00L);
- mnTransIndex = nPalCount;
- nPalCount++;
- }
- else
- mnTransIndex = 0;
-
- }
- }
- else
- {
- nRMask = 0xff000000UL;
- nGMask = 0x00ff0000UL;
- nBMask = 0x0000ff00UL;
- nAMask = 0x000000ffUL;
- }
-
- // create temporary list to hold interfaces
- ConsumerList_t aTmp = maConsList;
-
- // iterate through interfaces
- for (auto const& elem : aTmp)
- {
- elem->init( pBmpAcc->Width(), pBmpAcc->Height() );
- elem->setColorModel( pBmpAcc->GetBitCount(),aRGBPal, nRMask, nGMask, nBMask, nAMask );
- }
-
- Bitmap::ReleaseAccess( pBmpAcc );
- mbConsInit = true;
+ elem->init( nWidth, nHeight );
+ elem->setColorModel( nBitCount,aRGBPal, nRMask, nGMask, nBMask, nAMask );
}
+
+ mbConsInit = true;
}
diff --git a/include/vcl/bitmapex.hxx b/include/vcl/bitmapex.hxx
index b62c3cb5a2fa..e5656be11591 100644
--- a/include/vcl/bitmapex.hxx
+++ b/include/vcl/bitmapex.hxx
@@ -431,6 +431,13 @@ public:
void AdjustTransparency( sal_uInt8 cTrans );
void CombineMaskOr(Color maskColor, sal_uInt8 nTol);
+
+ /**
+ * Retrieves the color model data we need for the XImageConsumer stuff.
+ */
+ void GetColorModel(css::uno::Sequence< sal_Int32 >& rRGBPalette,
+ sal_uInt32& rnRedMask, sal_uInt32& rnGreenMask, sal_uInt32& rnBlueMask, sal_uInt32& rnAlphaMask, sal_uInt32& rnTransparencyIndex,
+ sal_uInt32& rnWidth, sal_uInt32& rnHeight, sal_uInt8& rnBitCount);
public:
SAL_DLLPRIVATE std::shared_ptr<SalBitmap> const & ImplGetBitmapSalBitmap() const { return maBitmap.ImplGetSalBitmap(); }
diff --git a/vcl/source/gdi/bitmapex.cxx b/vcl/source/gdi/bitmapex.cxx
index 3fb232e3c1c1..a369efe1ebf7 100644
--- a/vcl/source/gdi/bitmapex.cxx
+++ b/vcl/source/gdi/bitmapex.cxx
@@ -1444,4 +1444,59 @@ void BitmapEx::CombineMaskOr(Color maskColor, sal_uInt8 nTol)
meTransparent = TransparentType::Bitmap;
}
+/**
+ * Retrieves the color model data we need for the XImageConsumer stuff.
+ */
+void BitmapEx::GetColorModel(css::uno::Sequence< sal_Int32 >& rRGBPalette,
+ sal_uInt32& rnRedMask, sal_uInt32& rnGreenMask, sal_uInt32& rnBlueMask, sal_uInt32& rnAlphaMask, sal_uInt32& rnTransparencyIndex,
+ sal_uInt32& rnWidth, sal_uInt32& rnHeight, sal_uInt8& rnBitCount)
+{
+ Bitmap::ScopedReadAccess pReadAccess( maBitmap );
+ assert( pReadAccess );
+
+ if( pReadAccess->HasPalette() )
+ {
+ sal_uInt16 nPalCount = pReadAccess->GetPaletteEntryCount();
+
+ if( nPalCount )
+ {
+ rRGBPalette = css::uno::Sequence< sal_Int32 >( nPalCount + 1 );
+
+ sal_Int32* pTmp = rRGBPalette.getArray();
+
+ for( sal_uInt32 i = 0; i < nPalCount; i++, pTmp++ )
+ {
+ const BitmapColor& rCol = pReadAccess->GetPaletteColor( static_cast<sal_uInt16>(i) );
+
+ *pTmp = static_cast<sal_Int32>(rCol.GetRed()) << sal_Int32(24);
+ *pTmp |= static_cast<sal_Int32>(rCol.GetGreen()) << sal_Int32(16);
+ *pTmp |= static_cast<sal_Int32>(rCol.GetBlue()) << sal_Int32(8);
+ *pTmp |= sal_Int32(0x000000ffL);
+ }
+
+ if( IsTransparent() )
+ {
+ // append transparent entry
+ *pTmp = sal_Int32(0xffffff00L);
+ rnTransparencyIndex = nPalCount;
+ nPalCount++;
+ }
+ else
+ rnTransparencyIndex = 0;
+ }
+ }
+ else
+ {
+ rnRedMask = 0xff000000UL;
+ rnGreenMask = 0x00ff0000UL;
+ rnBlueMask = 0x0000ff00UL;
+ rnAlphaMask = 0x000000ffUL;
+ rnTransparencyIndex = 0;
+ }
+
+ rnWidth = pReadAccess->Width();
+ rnHeight = pReadAccess->Height();
+ rnBitCount = pReadAccess->GetBitCount();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list