include/vcl/pdfextoutdevdata.hxx | 2 + vcl/source/gdi/pdfextoutdevdata.cxx | 27 ++++++++++++++++++---- vcl/source/gdi/pdfwriter_impl.hxx | 2 - vcl/source/gdi/pdfwriter_impl2.cxx | 44 ++++++++++++++++++++++++++---------- 4 files changed, 57 insertions(+), 18 deletions(-)
New commits: commit 7ea774d54badc9e75550a897c6dfbd1859013885 Author: Marco Cecchetti <[email protected]> Date: Fri Feb 19 18:12:49 2016 +0100 pdf export - avoid to export png as jpeg Conflicts: vcl/source/gdi/pdfextoutdevdata.cxx Change-Id: Iafa5d4b347da46dedb9431b6870f34b2b6fcad99 diff --git a/vcl/source/gdi/pdfextoutdevdata.cxx b/vcl/source/gdi/pdfextoutdevdata.cxx index 37d999a..0466cfb 100644 --- a/vcl/source/gdi/pdfextoutdevdata.cxx +++ b/vcl/source/gdi/pdfextoutdevdata.cxx @@ -408,11 +408,19 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc else if ( aBeg->eAct == PDFExtOutDevDataSync::EndGroupGfxLink ) { Graphic& rGraphic = mGraphics.front(); - if ( rGraphic.IsLink() && rGraphic.GetLink().GetType() == GFX_LINK_TYPE_NATIVE_JPG ) + if ( rGraphic.IsLink() ) { - mbGroupIgnoreGDIMtfActions = rOutDevData.GetIsLosslessCompression() && !rOutDevData.GetIsReduceImageResolution(); - if ( !mbGroupIgnoreGDIMtfActions ) + GfxLinkType eType = rGraphic.GetLink().GetType(); + if ( eType == GFX_LINK_TYPE_NATIVE_JPG ) + { + mbGroupIgnoreGDIMtfActions = rOutDevData.GetIsLosslessCompression() && !rOutDevData.GetIsReduceImageResolution(); + if ( !mbGroupIgnoreGDIMtfActions ) + mCurrentGraphic = rGraphic; + } + else if ( eType == GFX_LINK_TYPE_NATIVE_PNG ) + { mCurrentGraphic = rGraphic; + } } break; } diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx index 257d8a6..0d14428 100644 --- a/vcl/source/gdi/pdfwriter_impl2.cxx +++ b/vcl/source/gdi/pdfwriter_impl2.cxx @@ -96,7 +96,13 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz aBitmapEx.Mirror( nMirrorFlags ); } - bool bIsJpeg = (i_Graphic.GetType() != GRAPHIC_NONE) && (i_Graphic.GetBitmapEx() == aBitmapEx); + bool bIsJpeg = false, bIsPng = false; + if( i_Graphic.GetType() != GRAPHIC_NONE && i_Graphic.GetBitmapEx() == aBitmapEx ) + { + GfxLinkType eType = i_Graphic.GetLink().GetType(); + bIsJpeg = (eType == GFX_LINK_TYPE_NATIVE_JPG); + bIsPng = (eType == GFX_LINK_TYPE_NATIVE_PNG); + } if( i_rContext.m_nMaxImageResolution > 50 ) { @@ -154,7 +160,7 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz aBitmapEx.Convert( eConv ); } bool bUseJPGCompression = !i_rContext.m_bOnlyLosslessCompression; - if ( ( aSizePixel.Width() < 32 ) || ( aSizePixel.Height() < 32 ) ) + if ( bIsPng || ( aSizePixel.Width() < 32 ) || ( aSizePixel.Height() < 32 ) ) bUseJPGCompression = false; SvMemoryStream aStrm; commit 3b6a9a5bc06555f2c05e62c0932a7af9cd20a6fa Author: Marco Cecchetti <[email protected]> Date: Fri Feb 19 16:41:20 2016 +0100 pdf export - jpeg exporting is too expensive - de-pointer-ized Refactored: Graphic* ---> Graphic Conflicts: vcl/source/gdi/pdfextoutdevdata.cxx Conflicts: vcl/source/gdi/pdfextoutdevdata.cxx vcl/source/gdi/pdfwriter_impl2.cxx Change-Id: I4f49957f8bd060e34a4f54cfcce00994c52bc71e diff --git a/include/vcl/pdfextoutdevdata.hxx b/include/vcl/pdfextoutdevdata.hxx index 7efc561..1140180 100644 --- a/include/vcl/pdfextoutdevdata.hxx +++ b/include/vcl/pdfextoutdevdata.hxx @@ -146,7 +146,7 @@ public: std::vector< PDFExtOutDevBookmarkEntry >& GetBookmarks() { return maBookmarks;} - const Graphic* GetCurrentGraphic() const; + Graphic GetCurrentGraphic() const; /** Start a new group of render output diff --git a/vcl/source/gdi/pdfextoutdevdata.cxx b/vcl/source/gdi/pdfextoutdevdata.cxx index 2fbab28..37d999a 100644 --- a/vcl/source/gdi/pdfextoutdevdata.cxx +++ b/vcl/source/gdi/pdfextoutdevdata.cxx @@ -294,7 +294,7 @@ struct PageSyncData std::deque< PDFWriter::StructAttribute > mParaStructAttributes; std::deque< PDFWriter::StructAttributeValue > mParaStructAttributeValues; std::deque< Graphic > mGraphics; - Graphic* mpCurrentGraphic; + Graphic mCurrentGraphic; std::deque< std::shared_ptr< PDFWriter::AnyWidget > > mControls; GlobalSyncData* mpGlobalData; @@ -303,8 +303,7 @@ struct PageSyncData explicit PageSyncData( GlobalSyncData* pGlobal ) - : mpCurrentGraphic ( nullptr ) - , mbGroupIgnoreGDIMtfActions ( false ) + : mbGroupIgnoreGDIMtfActions ( false ) { mpGlobalData = pGlobal; } void PushAction( const OutputDevice& rOutDev, const PDFExtOutDevDataSync::Action eAct ); @@ -412,7 +411,8 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc if ( rGraphic.IsLink() && rGraphic.GetLink().GetType() == GFX_LINK_TYPE_NATIVE_JPG ) { mbGroupIgnoreGDIMtfActions = rOutDevData.GetIsLosslessCompression() && !rOutDevData.GetIsReduceImageResolution(); - mpCurrentGraphic = mbGroupIgnoreGDIMtfActions ? nullptr : &rGraphic; + if ( !mbGroupIgnoreGDIMtfActions ) + mCurrentGraphic = rGraphic; } break; } @@ -467,7 +467,7 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc } mbGroupIgnoreGDIMtfActions = false; } - mpCurrentGraphic = nullptr; + mCurrentGraphic.Clear(); } break; case PDFExtOutDevDataSync::CreateNamedDest: @@ -520,9 +520,9 @@ PDFExtOutDevData::~PDFExtOutDevData() delete mpGlobalSyncData; } -const Graphic* PDFExtOutDevData::GetCurrentGraphic() const +Graphic PDFExtOutDevData::GetCurrentGraphic() const { - return mpPageSyncData->mpCurrentGraphic; + return mpPageSyncData->mCurrentGraphic; } void PDFExtOutDevData::SetDocumentLocale( const css::lang::Locale& rLoc ) diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx index d4d8f3a..306bb15 100644 --- a/vcl/source/gdi/pdfwriter_impl.hxx +++ b/vcl/source/gdi/pdfwriter_impl.hxx @@ -1011,7 +1011,7 @@ i12626 // helper for playMetafile void implWriteGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient, VirtualDevice* pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& ); - void implWriteBitmapEx( const Point& rPoint, const Size& rSize, const BitmapEx& rBitmapEx, const Graphic* i_pGraphic, + void implWriteBitmapEx( const Point& rPoint, const Size& rSize, const BitmapEx& rBitmapEx, Graphic i_pGraphic, VirtualDevice* pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& ); // helpers for CCITT 1bit bitmap stream diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx index b74234b..257d8a6 100644 --- a/vcl/source/gdi/pdfwriter_impl2.cxx +++ b/vcl/source/gdi/pdfwriter_impl2.cxx @@ -65,7 +65,7 @@ void PDFWriterImpl::implWriteGradient( const tools::PolyPolygon& i_rPolyPoly, co m_rOuterFace.Pop(); } -void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSize, const BitmapEx& i_rBitmapEx, const Graphic* i_pGraphic, +void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSize, const BitmapEx& i_rBitmapEx, Graphic i_Graphic, VirtualDevice* i_pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& i_rContext ) { if ( !i_rBitmapEx.IsEmpty() && i_rSize.Width() && i_rSize.Height() ) @@ -96,7 +96,7 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz aBitmapEx.Mirror( nMirrorFlags ); } - bool bIsJpeg = i_pGraphic && (i_pGraphic->GetBitmapEx() == aBitmapEx); + bool bIsJpeg = (i_Graphic.GetType() != GRAPHIC_NONE) && (i_Graphic.GetBitmapEx() == aBitmapEx); if( i_rContext.m_nMaxImageResolution > 50 ) { @@ -487,8 +487,9 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa xVDev->EnableMapMode( false ); xVDev->DrawMask( aPoint, aDstSizePixel, aMask, Color( COL_WHITE ) ); aAlpha = xVDev->GetBitmap( aPoint, aDstSizePixel ); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( rPos, rSize, BitmapEx( aPaint, aAlpha ), pGraphic, pDummyVDev, i_rContext ); + + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( rPos, rSize, BitmapEx( aPaint, aAlpha ), aGraphic, pDummyVDev, i_rContext ); } } } @@ -788,16 +789,16 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa if( ! ( aSize.Width() && aSize.Height() ) ) aSize = pDummyVDev->PixelToLogic( aBitmapEx.GetSizePixel() ); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, aGraphic, pDummyVDev, i_rContext ); } break; case( MetaActionType::BMPSCALE ): { const MetaBmpScaleAction* pA = static_cast<const MetaBmpScaleAction*>(pAction); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), BitmapEx( pA->GetBitmap() ), pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), BitmapEx( pA->GetBitmap() ), aGraphic, pDummyVDev, i_rContext ); } break; @@ -806,8 +807,8 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa const MetaBmpScalePartAction* pA = static_cast<const MetaBmpScalePartAction*>(pAction); BitmapEx aBitmapEx( pA->GetBitmap() ); aBitmapEx.Crop( Rectangle( pA->GetSrcPoint(), pA->GetSrcSize() ) ); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, aGraphic, pDummyVDev, i_rContext ); } break; @@ -817,16 +818,16 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa BitmapEx aBitmapEx( pA->GetBitmapEx() ); Size aSize( OutputDevice::LogicToLogic( aBitmapEx.GetPrefSize(), aBitmapEx.GetPrefMapMode(), pDummyVDev->GetMapMode() ) ); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, aGraphic, pDummyVDev, i_rContext ); } break; case( MetaActionType::BMPEXSCALE ): { const MetaBmpExScaleAction* pA = static_cast<const MetaBmpExScaleAction*>(pAction); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), pA->GetBitmapEx(), pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), pA->GetBitmapEx(), aGraphic, pDummyVDev, i_rContext ); } break; @@ -835,8 +836,8 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa const MetaBmpExScalePartAction* pA = static_cast<const MetaBmpExScalePartAction*>(pAction); BitmapEx aBitmapEx( pA->GetBitmapEx() ); aBitmapEx.Crop( Rectangle( pA->GetSrcPoint(), pA->GetSrcSize() ) ); - const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; - implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pGraphic, pDummyVDev, i_rContext ); + Graphic aGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : Graphic(); + implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, aGraphic, pDummyVDev, i_rContext ); } break; commit afd0aa9c8609fbaf1a95993d6ccae0967e4826ca Author: Marco Cecchetti <[email protected]> Date: Fri Feb 19 13:42:24 2016 +0100 pdf export - jpeg exporting is too expensive - workaround Avoid to zip bitmap when the original image is a Jpeg Conflicts: vcl/source/gdi/pdfextoutdevdata.cxx Change-Id: I396759ca40ed3730bb29585370b2f8900fcc693c diff --git a/include/vcl/pdfextoutdevdata.hxx b/include/vcl/pdfextoutdevdata.hxx index 477f668..7efc561 100644 --- a/include/vcl/pdfextoutdevdata.hxx +++ b/include/vcl/pdfextoutdevdata.hxx @@ -146,6 +146,8 @@ public: std::vector< PDFExtOutDevBookmarkEntry >& GetBookmarks() { return maBookmarks;} + const Graphic* GetCurrentGraphic() const; + /** Start a new group of render output Use this method to group render output. diff --git a/vcl/source/gdi/pdfextoutdevdata.cxx b/vcl/source/gdi/pdfextoutdevdata.cxx index 8212f85..2fbab28 100644 --- a/vcl/source/gdi/pdfextoutdevdata.cxx +++ b/vcl/source/gdi/pdfextoutdevdata.cxx @@ -294,13 +294,18 @@ struct PageSyncData std::deque< PDFWriter::StructAttribute > mParaStructAttributes; std::deque< PDFWriter::StructAttributeValue > mParaStructAttributeValues; std::deque< Graphic > mGraphics; + Graphic* mpCurrentGraphic; std::deque< std::shared_ptr< PDFWriter::AnyWidget > > mControls; GlobalSyncData* mpGlobalData; bool mbGroupIgnoreGDIMtfActions; - explicit PageSyncData( GlobalSyncData* pGlobal ) : mbGroupIgnoreGDIMtfActions ( false ) { mpGlobalData = pGlobal; } + + explicit PageSyncData( GlobalSyncData* pGlobal ) + : mpCurrentGraphic ( nullptr ) + , mbGroupIgnoreGDIMtfActions ( false ) + { mpGlobalData = pGlobal; } void PushAction( const OutputDevice& rOutDev, const PDFExtOutDevDataSync::Action eAct ); bool PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAction, const PDFExtOutDevData& rOutDevData ); @@ -403,13 +408,11 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc } else if ( aBeg->eAct == PDFExtOutDevDataSync::EndGroupGfxLink ) { - if ( rOutDevData.GetIsLosslessCompression() && !rOutDevData.GetIsReduceImageResolution() ) + Graphic& rGraphic = mGraphics.front(); + if ( rGraphic.IsLink() && rGraphic.GetLink().GetType() == GFX_LINK_TYPE_NATIVE_JPG ) { - Graphic& rGraphic = mGraphics.front(); - if ( rGraphic.IsLink() && rGraphic.GetLink().GetType() == GFX_LINK_TYPE_NATIVE_JPG ) - { - mbGroupIgnoreGDIMtfActions = true; - } + mbGroupIgnoreGDIMtfActions = rOutDevData.GetIsLosslessCompression() && !rOutDevData.GetIsReduceImageResolution(); + mpCurrentGraphic = mbGroupIgnoreGDIMtfActions ? nullptr : &rGraphic; } break; } @@ -464,6 +467,7 @@ bool PageSyncData::PlaySyncPageAct( PDFWriter& rWriter, sal_uInt32& rCurGDIMtfAc } mbGroupIgnoreGDIMtfActions = false; } + mpCurrentGraphic = nullptr; } break; case PDFExtOutDevDataSync::CreateNamedDest: @@ -516,6 +520,11 @@ PDFExtOutDevData::~PDFExtOutDevData() delete mpGlobalSyncData; } +const Graphic* PDFExtOutDevData::GetCurrentGraphic() const +{ + return mpPageSyncData->mpCurrentGraphic; +} + void PDFExtOutDevData::SetDocumentLocale( const css::lang::Locale& rLoc ) { maDocLocale = rLoc; diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx index 77b0d47..d4d8f3a 100644 --- a/vcl/source/gdi/pdfwriter_impl.hxx +++ b/vcl/source/gdi/pdfwriter_impl.hxx @@ -1011,7 +1011,7 @@ i12626 // helper for playMetafile void implWriteGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient, VirtualDevice* pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& ); - void implWriteBitmapEx( const Point& rPoint, const Size& rSize, const BitmapEx& rBitmapEx, + void implWriteBitmapEx( const Point& rPoint, const Size& rSize, const BitmapEx& rBitmapEx, const Graphic* i_pGraphic, VirtualDevice* pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& ); // helpers for CCITT 1bit bitmap stream diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx index 8e47b84..b74234b 100644 --- a/vcl/source/gdi/pdfwriter_impl2.cxx +++ b/vcl/source/gdi/pdfwriter_impl2.cxx @@ -65,7 +65,7 @@ void PDFWriterImpl::implWriteGradient( const tools::PolyPolygon& i_rPolyPoly, co m_rOuterFace.Pop(); } -void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSize, const BitmapEx& i_rBitmapEx, +void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSize, const BitmapEx& i_rBitmapEx, const Graphic* i_pGraphic, VirtualDevice* i_pDummyVDev, const vcl::PDFWriter::PlayMetafileContext& i_rContext ) { if ( !i_rBitmapEx.IsEmpty() && i_rSize.Width() && i_rSize.Height() ) @@ -95,6 +95,9 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz { aBitmapEx.Mirror( nMirrorFlags ); } + + bool bIsJpeg = i_pGraphic && (i_pGraphic->GetBitmapEx() == aBitmapEx); + if( i_rContext.m_nMaxImageResolution > 50 ) { // do downsampling if necessary @@ -160,8 +163,10 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz bool bTrueColorJPG = true; if ( bUseJPGCompression ) { - sal_uInt32 nZippedFileSize; // sj: we will calculate the filesize of a zipped bitmap - { // to determine if jpeg compression is useful + + sal_uInt32 nZippedFileSize = 0; // sj: we will calculate the filesize of a zipped bitmap + if ( !bIsJpeg ) // to determine if jpeg compression is useful + { SvMemoryStream aTemp; aTemp.SetCompressMode( aTemp.GetCompressMode() | SvStreamCompressFlags::ZBITMAP ); aTemp.SetVersion( SOFFICE_FILEFORMAT_40 ); // sj: up from version 40 our bitmap stream operator @@ -203,7 +208,7 @@ void PDFWriterImpl::implWriteBitmapEx( const Point& i_rPoint, const Size& i_rSiz aOutMediaProperties[2].Value <<= aFilterData; xGraphicProvider->storeGraphic( xGraphic, aOutMediaProperties ); xOut->flush(); - if ( xSeekable->getLength() > nZippedFileSize ) + if ( !bIsJpeg && xSeekable->getLength() > nZippedFileSize ) { bUseJPGCompression = false; } @@ -482,7 +487,8 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa xVDev->EnableMapMode( false ); xVDev->DrawMask( aPoint, aDstSizePixel, aMask, Color( COL_WHITE ) ); aAlpha = xVDev->GetBitmap( aPoint, aDstSizePixel ); - implWriteBitmapEx( rPos, rSize, BitmapEx( aPaint, aAlpha ), pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( rPos, rSize, BitmapEx( aPaint, aAlpha ), pGraphic, pDummyVDev, i_rContext ); } } } @@ -781,14 +787,17 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa aBitmapEx.GetPrefMapMode(), pDummyVDev->GetMapMode() ) ); if( ! ( aSize.Width() && aSize.Height() ) ) aSize = pDummyVDev->PixelToLogic( aBitmapEx.GetSizePixel() ); - implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pDummyVDev, i_rContext ); + + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pGraphic, pDummyVDev, i_rContext ); } break; case( MetaActionType::BMPSCALE ): { const MetaBmpScaleAction* pA = static_cast<const MetaBmpScaleAction*>(pAction); - implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), BitmapEx( pA->GetBitmap() ), pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), BitmapEx( pA->GetBitmap() ), pGraphic, pDummyVDev, i_rContext ); } break; @@ -797,7 +806,8 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa const MetaBmpScalePartAction* pA = static_cast<const MetaBmpScalePartAction*>(pAction); BitmapEx aBitmapEx( pA->GetBitmap() ); aBitmapEx.Crop( Rectangle( pA->GetSrcPoint(), pA->GetSrcSize() ) ); - implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pGraphic, pDummyVDev, i_rContext ); } break; @@ -807,14 +817,16 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa BitmapEx aBitmapEx( pA->GetBitmapEx() ); Size aSize( OutputDevice::LogicToLogic( aBitmapEx.GetPrefSize(), aBitmapEx.GetPrefMapMode(), pDummyVDev->GetMapMode() ) ); - implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetPoint(), aSize, aBitmapEx, pGraphic, pDummyVDev, i_rContext ); } break; case( MetaActionType::BMPEXSCALE ): { const MetaBmpExScaleAction* pA = static_cast<const MetaBmpExScaleAction*>(pAction); - implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), pA->GetBitmapEx(), pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetPoint(), pA->GetSize(), pA->GetBitmapEx(), pGraphic, pDummyVDev, i_rContext ); } break; @@ -823,7 +835,8 @@ void PDFWriterImpl::playMetafile( const GDIMetaFile& i_rMtf, vcl::PDFExtOutDevDa const MetaBmpExScalePartAction* pA = static_cast<const MetaBmpExScalePartAction*>(pAction); BitmapEx aBitmapEx( pA->GetBitmapEx() ); aBitmapEx.Crop( Rectangle( pA->GetSrcPoint(), pA->GetSrcSize() ) ); - implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pDummyVDev, i_rContext ); + const Graphic* pGraphic = i_pOutDevData ? i_pOutDevData->GetCurrentGraphic() : nullptr; + implWriteBitmapEx( pA->GetDestPoint(), pA->GetDestSize(), aBitmapEx, pGraphic, pDummyVDev, i_rContext ); } break; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
