[Libreoffice-commits] core.git: vcl/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 20 20:00:01 UTC 2020
vcl/source/gdi/impgraph.cxx | 448 +++++++++++++++++++++-----------------------
1 file changed, 222 insertions(+), 226 deletions(-)
New commits:
commit 43f0452e174d21c5d71dbb26e1243326eb9ed22e
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Mon Apr 20 10:57:01 2020 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Mon Apr 20 21:59:25 2020 +0200
flatten some code in ImpGraph
Change-Id: Iee30822dd977ff380e01c7564a2d211d9a3542cc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92566
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx
index 573e4292ab0c..9deb69a836e4 100644
--- a/vcl/source/gdi/impgraph.cxx
+++ b/vcl/source/gdi/impgraph.cxx
@@ -929,32 +929,32 @@ void ImpGraphic::ImplSetPrefMapMode( const MapMode& rPrefMapMode )
sal_uLong ImpGraphic::ImplGetSizeBytes() const
{
- if( 0 == mnSizeBytes )
- {
- if (mbPrepared)
- ensureAvailable();
+ if( mnSizeBytes )
+ return mnSizeBytes;
- if( meType == GraphicType::Bitmap )
+ if (mbPrepared)
+ ensureAvailable();
+
+ if( meType == GraphicType::Bitmap )
+ {
+ if(maVectorGraphicData.get())
{
- if(maVectorGraphicData.get())
- {
- std::pair<VectorGraphicData::State, size_t> tmp(maVectorGraphicData->getSizeBytes());
- if (VectorGraphicData::State::UNPARSED == tmp.first)
- {
- return tmp.second; // don't cache it until Vector Graphic Data is parsed
- }
- mnSizeBytes = tmp.second;
- }
- else
+ std::pair<VectorGraphicData::State, size_t> tmp(maVectorGraphicData->getSizeBytes());
+ if (VectorGraphicData::State::UNPARSED == tmp.first)
{
- mnSizeBytes = mpAnimation ? mpAnimation->GetSizeBytes() : maEx.GetSizeBytes();
+ return tmp.second; // don't cache it until Vector Graphic Data is parsed
}
+ mnSizeBytes = tmp.second;
}
- else if( meType == GraphicType::GdiMetafile )
+ else
{
- mnSizeBytes = maMetaFile.GetSizeBytes();
+ mnSizeBytes = mpAnimation ? mpAnimation->GetSizeBytes() : maEx.GetSizeBytes();
}
}
+ else if( meType == GraphicType::GdiMetafile )
+ {
+ mnSizeBytes = maMetaFile.GetSizeBytes();
+ }
return mnSizeBytes;
}
@@ -962,36 +962,36 @@ sal_uLong ImpGraphic::ImplGetSizeBytes() const
void ImpGraphic::ImplDraw( OutputDevice* pOutDev, const Point& rDestPt ) const
{
ensureAvailable();
- if( ImplIsSupportedGraphic() && !ImplIsSwapOut() )
+ if( !ImplIsSupportedGraphic() || ImplIsSwapOut() )
+ return;
+
+ switch( meType )
{
- switch( meType )
- {
- case GraphicType::Default:
- break;
+ case GraphicType::Default:
+ break;
- case GraphicType::Bitmap:
+ case GraphicType::Bitmap:
+ {
+ if(maVectorGraphicData.get() && !maEx)
{
- if(maVectorGraphicData.get() && !maEx)
- {
- // use maEx as local buffer for rendered svg
- const_cast< ImpGraphic* >(this)->maEx = getVectorGraphicReplacement();
- }
-
- if ( mpAnimation )
- {
- mpAnimation->Draw( pOutDev, rDestPt );
- }
- else
- {
- maEx.Draw( pOutDev, rDestPt );
- }
+ // use maEx as local buffer for rendered svg
+ const_cast< ImpGraphic* >(this)->maEx = getVectorGraphicReplacement();
}
- break;
- default:
- ImplDraw( pOutDev, rDestPt, maMetaFile.GetPrefSize() );
- break;
+ if ( mpAnimation )
+ {
+ mpAnimation->Draw( pOutDev, rDestPt );
+ }
+ else
+ {
+ maEx.Draw( pOutDev, rDestPt );
+ }
}
+ break;
+
+ default:
+ ImplDraw( pOutDev, rDestPt, maMetaFile.GetPrefSize() );
+ break;
}
}
@@ -999,40 +999,40 @@ void ImpGraphic::ImplDraw( OutputDevice* pOutDev,
const Point& rDestPt, const Size& rDestSize ) const
{
ensureAvailable();
- if( ImplIsSupportedGraphic() && !ImplIsSwapOut() )
+ if( !ImplIsSupportedGraphic() || ImplIsSwapOut() )
+ return;
+
+ switch( meType )
{
- switch( meType )
- {
- case GraphicType::Default:
- break;
+ case GraphicType::Default:
+ break;
- case GraphicType::Bitmap:
+ case GraphicType::Bitmap:
+ {
+ if(maVectorGraphicData.get() && maEx.IsEmpty())
{
- if(maVectorGraphicData.get() && maEx.IsEmpty())
- {
- // use maEx as local buffer for rendered svg
- const_cast< ImpGraphic* >(this)->maEx = getVectorGraphicReplacement();
- }
-
- if( mpAnimation )
- {
- mpAnimation->Draw( pOutDev, rDestPt, rDestSize );
- }
- else
- {
- maEx.Draw( pOutDev, rDestPt, rDestSize );
- }
+ // use maEx as local buffer for rendered svg
+ const_cast< ImpGraphic* >(this)->maEx = getVectorGraphicReplacement();
}
- break;
- default:
+ if( mpAnimation )
{
- const_cast<ImpGraphic*>(this)->maMetaFile.WindStart();
- const_cast<ImpGraphic*>(this)->maMetaFile.Play( pOutDev, rDestPt, rDestSize );
- const_cast<ImpGraphic*>(this)->maMetaFile.WindStart();
+ mpAnimation->Draw( pOutDev, rDestPt, rDestSize );
+ }
+ else
+ {
+ maEx.Draw( pOutDev, rDestPt, rDestSize );
}
- break;
}
+ break;
+
+ default:
+ {
+ const_cast<ImpGraphic*>(this)->maMetaFile.WindStart();
+ const_cast<ImpGraphic*>(this)->maMetaFile.Play( pOutDev, rDestPt, rDestSize );
+ const_cast<ImpGraphic*>(this)->maMetaFile.WindStart();
+ }
+ break;
}
}
@@ -1224,120 +1224,118 @@ bool ImpGraphic::ImplReadEmbedded( SvStream& rIStm )
bool ImpGraphic::ImplWriteEmbedded( SvStream& rOStm )
{
- bool bRet = false;
-
ensureAvailable();
- if( ( meType != GraphicType::NONE ) && ( meType != GraphicType::Default ) && !ImplIsSwapOut() )
+ if( ( meType == GraphicType::NONE ) || ( meType == GraphicType::Default ) || ImplIsSwapOut() )
+ return false;
+
+ const MapMode aMapMode( ImplGetPrefMapMode() );
+ const Size aSize( ImplGetPrefSize() );
+ const SvStreamEndian nOldFormat = rOStm.GetEndian();
+ sal_uLong nDataFieldPos;
+
+ rOStm.SetEndian( SvStreamEndian::LITTLE );
+
+ // write correct version ( old style/new style header )
+ if( rOStm.GetVersion() >= SOFFICE_FILEFORMAT_50 )
{
- const MapMode aMapMode( ImplGetPrefMapMode() );
- const Size aSize( ImplGetPrefSize() );
- const SvStreamEndian nOldFormat = rOStm.GetEndian();
- sal_uLong nDataFieldPos;
+ // write ID for new format (5.0)
+ rOStm.WriteUInt32( GRAPHIC_FORMAT_50 );
- rOStm.SetEndian( SvStreamEndian::LITTLE );
+ // write new style header
+ VersionCompat aCompat( rOStm, StreamMode::WRITE, 1 );
- // write correct version ( old style/new style header )
- if( rOStm.GetVersion() >= SOFFICE_FILEFORMAT_50 )
- {
- // write ID for new format (5.0)
- rOStm.WriteUInt32( GRAPHIC_FORMAT_50 );
+ rOStm.WriteInt32( static_cast<sal_Int32>(meType) );
- // write new style header
- VersionCompat aCompat( rOStm, StreamMode::WRITE, 1 );
+ // data size is updated later
+ nDataFieldPos = rOStm.Tell();
+ rOStm.WriteInt32( 0 );
- rOStm.WriteInt32( static_cast<sal_Int32>(meType) );
+ TypeSerializer aSerializer(rOStm);
+ aSerializer.writeSize(aSize);
- // data size is updated later
- nDataFieldPos = rOStm.Tell();
- rOStm.WriteInt32( 0 );
+ WriteMapMode( rOStm, aMapMode );
+ }
+ else
+ {
+ // write old style (<=4.0) header
+ rOStm.WriteInt32( static_cast<sal_Int32>(meType) );
+
+ // data size is updated later
+ nDataFieldPos = rOStm.Tell();
+ rOStm.WriteInt32( 0 );
+ rOStm.WriteInt32( aSize.Width() );
+ rOStm.WriteInt32( aSize.Height() );
+ rOStm.WriteInt32( static_cast<sal_uInt16>(aMapMode.GetMapUnit()) );
+ rOStm.WriteInt32( aMapMode.GetScaleX().GetNumerator() );
+ rOStm.WriteInt32( aMapMode.GetScaleX().GetDenominator() );
+ rOStm.WriteInt32( aMapMode.GetScaleY().GetNumerator() );
+ rOStm.WriteInt32( aMapMode.GetScaleY().GetDenominator() );
+ rOStm.WriteInt32( aMapMode.GetOrigin().X() );
+ rOStm.WriteInt32( aMapMode.GetOrigin().Y() );
+ }
- TypeSerializer aSerializer(rOStm);
- aSerializer.writeSize(aSize);
+ bool bRet = false;
+ // write data block
+ if( !rOStm.GetError() )
+ {
+ const sal_uLong nDataStart = rOStm.Tell();
- WriteMapMode( rOStm, aMapMode );
- }
- else
- {
- // write old style (<=4.0) header
- rOStm.WriteInt32( static_cast<sal_Int32>(meType) );
-
- // data size is updated later
- nDataFieldPos = rOStm.Tell();
- rOStm.WriteInt32( 0 );
- rOStm.WriteInt32( aSize.Width() );
- rOStm.WriteInt32( aSize.Height() );
- rOStm.WriteInt32( static_cast<sal_uInt16>(aMapMode.GetMapUnit()) );
- rOStm.WriteInt32( aMapMode.GetScaleX().GetNumerator() );
- rOStm.WriteInt32( aMapMode.GetScaleX().GetDenominator() );
- rOStm.WriteInt32( aMapMode.GetScaleY().GetNumerator() );
- rOStm.WriteInt32( aMapMode.GetScaleY().GetDenominator() );
- rOStm.WriteInt32( aMapMode.GetOrigin().X() );
- rOStm.WriteInt32( aMapMode.GetOrigin().Y() );
- }
+ if( ImplIsSupportedGraphic() )
+ WriteImpGraphic( rOStm, *this );
- // write data block
if( !rOStm.GetError() )
{
- const sal_uLong nDataStart = rOStm.Tell();
-
- if( ImplIsSupportedGraphic() )
- WriteImpGraphic( rOStm, *this );
-
- if( !rOStm.GetError() )
- {
- const sal_uLong nStmPos2 = rOStm.Tell();
- rOStm.Seek( nDataFieldPos );
- rOStm.WriteInt32( nStmPos2 - nDataStart );
- rOStm.Seek( nStmPos2 );
- bRet = true;
- }
+ const sal_uLong nStmPos2 = rOStm.Tell();
+ rOStm.Seek( nDataFieldPos );
+ rOStm.WriteInt32( nStmPos2 - nDataStart );
+ rOStm.Seek( nStmPos2 );
+ bRet = true;
}
-
- rOStm.SetEndian( nOldFormat );
}
+ rOStm.SetEndian( nOldFormat );
+
return bRet;
}
bool ImpGraphic::ImplSwapOut()
{
- bool bRet = false;
- if( !ImplIsSwapOut() )
+ if( ImplIsSwapOut() )
+ return false;
+
+ ::utl::TempFile aTempFile;
+ const INetURLObject aTmpURL( aTempFile.GetURL() );
+
+ if( aTmpURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ).isEmpty() )
+ return false;
+
+ std::unique_ptr<SvStream> xOStm;
+ try
+ {
+ xOStm = ::utl::UcbStreamHelper::CreateStream( aTmpURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
+ }
+ catch( const css::uno::Exception& )
{
- ::utl::TempFile aTempFile;
- const INetURLObject aTmpURL( aTempFile.GetURL() );
+ }
+ if( !xOStm )
+ return false;
- if( !aTmpURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ).isEmpty() )
- {
- std::unique_ptr<SvStream> xOStm;
- try
- {
- xOStm = ::utl::UcbStreamHelper::CreateStream( aTmpURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), StreamMode::READWRITE | StreamMode::SHARE_DENYWRITE );
- }
- catch( const css::uno::Exception& )
- {
- }
- if( xOStm )
- {
- xOStm->SetVersion( SOFFICE_FILEFORMAT_50 );
- xOStm->SetCompressMode( SvStreamCompressFlags::NATIVE );
+ xOStm->SetVersion( SOFFICE_FILEFORMAT_50 );
+ xOStm->SetCompressMode( SvStreamCompressFlags::NATIVE );
- bRet = ImplSwapOut( xOStm.get() );
- if( bRet )
- {
- mpSwapFile = std::make_shared<ImpSwapFile>();
- mpSwapFile->aSwapURL = aTmpURL;
- mpSwapFile->maOriginURL = getOriginURL();
- }
- else
- {
- xOStm.reset();
- utl::UCBContentHelper::Kill(aTmpURL.GetMainURL(INetURLObject::DecodeMechanism::NONE));
- }
- }
- }
+ bool bRet = ImplSwapOut( xOStm.get() );
+ if( bRet )
+ {
+ mpSwapFile = std::make_shared<ImpSwapFile>();
+ mpSwapFile->aSwapURL = aTmpURL;
+ mpSwapFile->maOriginURL = getOriginURL();
+ }
+ else
+ {
+ xOStm.reset();
+ utl::UCBContentHelper::Kill(aTmpURL.GetMainURL(INetURLObject::DecodeMechanism::NONE));
}
if (bRet)
@@ -1347,28 +1345,27 @@ bool ImpGraphic::ImplSwapOut()
bool ImpGraphic::ImplSwapOut( SvStream* xOStm )
{
+ if( !xOStm )
+ {
+ SAL_WARN("vcl.gdi", "Graphic SwapOut: No stream for swap out!");
+ return false;
+ }
+
+ xOStm->SetBufferSize( GRAPHIC_STREAMBUFSIZE );
+
bool bRet = false;
- if( xOStm )
+ if( !xOStm->GetError() && ImplWriteEmbedded( *xOStm ) )
{
- xOStm->SetBufferSize( GRAPHIC_STREAMBUFSIZE );
+ xOStm->Flush();
- if( !xOStm->GetError() && ImplWriteEmbedded( *xOStm ) )
+ if( !xOStm->GetError() )
{
- xOStm->Flush();
-
- if( !xOStm->GetError() )
- {
- ImplCreateSwapInfo();
- ImplClearGraphics();
- bRet = mbSwapOut = true;
- }
+ ImplCreateSwapInfo();
+ ImplClearGraphics();
+ bRet = mbSwapOut = true;
}
}
- else
- {
- SAL_WARN("vcl.gdi", "Graphic SwapOut: No stream for swap out!");
- }
return bRet;
}
@@ -1387,25 +1384,24 @@ bool ImpGraphic::ensureAvailable() const
bool ImpGraphic::loadPrepared()
{
Graphic aGraphic;
- if (mpGfxLink->LoadNative(aGraphic))
- {
- GraphicExternalLink aLink = maGraphicExternalLink;
+ if (!mpGfxLink->LoadNative(aGraphic))
+ return false;
- Size aPrefSize = maSwapInfo.maPrefSize;
- MapMode aPrefMapMode = maSwapInfo.maPrefMapMode;
- *this = *aGraphic.ImplGetImpGraphic();
- if (aPrefSize.getWidth() && aPrefSize.getHeight() && aPrefMapMode == ImplGetPrefMapMode())
- {
- // Use custom preferred size if it was set when the graphic was still unloaded.
- // Only set the size in case the unloaded and loaded unit matches.
- ImplSetPrefSize(aPrefSize);
- }
+ GraphicExternalLink aLink = maGraphicExternalLink;
- maGraphicExternalLink = aLink;
-
- return true;
+ Size aPrefSize = maSwapInfo.maPrefSize;
+ MapMode aPrefMapMode = maSwapInfo.maPrefMapMode;
+ *this = *aGraphic.ImplGetImpGraphic();
+ if (aPrefSize.getWidth() && aPrefSize.getHeight() && aPrefMapMode == ImplGetPrefMapMode())
+ {
+ // Use custom preferred size if it was set when the graphic was still unloaded.
+ // Only set the size in case the unloaded and loaded unit matches.
+ ImplSetPrefSize(aPrefSize);
}
- return false;
+
+ maGraphicExternalLink = aLink;
+
+ return true;
}
bool ImpGraphic::ImplSwapIn()
@@ -1461,40 +1457,40 @@ bool ImpGraphic::ImplSwapIn( SvStream* xIStm )
{
bool bRet = false;
- if( xIStm )
- {
- xIStm->SetBufferSize( GRAPHIC_STREAMBUFSIZE );
+ if( !xIStm )
+ return false;
- if( !xIStm->GetError() )
- {
- //keep the swap file alive, because its quite possibly the backing storage
- //for xIStm
- std::shared_ptr<ImpSwapFile> xSwapFile(std::move(mpSwapFile));
- assert(!mpSwapFile);
+ xIStm->SetBufferSize( GRAPHIC_STREAMBUFSIZE );
- std::shared_ptr<GraphicReader> xContext(std::move(mpContext));
- assert(!mpContext);
+ if( xIStm->GetError() )
+ return false;
- bool bDummyContext = mbDummyContext;
- mbDummyContext = false;
+ //keep the swap file alive, because its quite possibly the backing storage
+ //for xIStm
+ std::shared_ptr<ImpSwapFile> xSwapFile(std::move(mpSwapFile));
+ assert(!mpSwapFile);
- bRet = ImplReadEmbedded( *xIStm );
+ std::shared_ptr<GraphicReader> xContext(std::move(mpContext));
+ assert(!mpContext);
- //restore ownership of the swap file and context
- mpSwapFile = std::move(xSwapFile);
- mpContext = std::move(xContext);
- mbDummyContext = bDummyContext;
+ bool bDummyContext = mbDummyContext;
+ mbDummyContext = false;
- if (!bRet)
- {
- //throw away swapfile, etc.
- ImplClear();
- }
+ bRet = ImplReadEmbedded( *xIStm );
- mbSwapOut = false;
- }
+ //restore ownership of the swap file and context
+ mpSwapFile = std::move(xSwapFile);
+ mpContext = std::move(xContext);
+ mbDummyContext = bDummyContext;
+
+ if (!bRet)
+ {
+ //throw away swapfile, etc.
+ ImplClear();
}
+ mbSwapOut = false;
+
return bRet;
}
@@ -1561,25 +1557,25 @@ BitmapChecksum ImpGraphic::ImplGetChecksum() const
bool ImpGraphic::ImplExportNative( SvStream& rOStm ) const
{
- bool bResult = false;
-
ensureAvailable();
- if( !rOStm.GetError() )
+ if( rOStm.GetError() )
+ return false;
+
+ bool bResult = false;
+
+ if( !ImplIsSwapOut() )
{
- if( !ImplIsSwapOut() )
+ if( mpGfxLink && mpGfxLink->IsNative() )
+ bResult = mpGfxLink->ExportNative( rOStm );
+ else
{
- if( mpGfxLink && mpGfxLink->IsNative() )
- bResult = mpGfxLink->ExportNative( rOStm );
- else
- {
- WriteImpGraphic( rOStm, *this );
- bResult = ( rOStm.GetError() == ERRCODE_NONE );
- }
+ WriteImpGraphic( rOStm, *this );
+ bResult = ( rOStm.GetError() == ERRCODE_NONE );
}
- else
- rOStm.SetError( SVSTREAM_GENERALERROR );
}
+ else
+ rOStm.SetError( SVSTREAM_GENERALERROR );
return bResult;
}
More information about the Libreoffice-commits
mailing list