Kaydet (Commit) b8c8b0d0 authored tarafından Mark Page's avatar Mark Page Kaydeden (comit) Noel Grandin

Modify ImpGraphic class, GraphicReader context to use unique ptr

Change-Id: I51c3995f4a6e940a5235524eb94dd356b27ae8d7
Reviewed-on: https://gerrit.libreoffice.org/26955Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noelgrandin@gmail.com>
üst a4d40892
...@@ -192,10 +192,10 @@ public: ...@@ -192,10 +192,10 @@ public:
public: public:
GraphicReader* GetContext(); std::shared_ptr<GraphicReader>& GetContext();
void SetContext( GraphicReader* pReader ); void SetContext( const std::shared_ptr<GraphicReader> &pReader );
void SetDummyContext(bool value); void SetDummyContext(bool value);
bool IsDummyContext(); bool IsDummyContext();
private: private:
friend class GraphicObject; friend class GraphicObject;
......
...@@ -41,7 +41,7 @@ private: ...@@ -41,7 +41,7 @@ private:
BitmapEx maEx; BitmapEx maEx;
ImpSwapInfo maSwapInfo; ImpSwapInfo maSwapInfo;
std::unique_ptr<Animation> mpAnimation; std::unique_ptr<Animation> mpAnimation;
GraphicReader* mpContext; std::shared_ptr<GraphicReader> mpContext;
std::shared_ptr<ImpSwapFile> mpSwapFile; std::shared_ptr<ImpSwapFile> mpSwapFile;
std::unique_ptr<GfxLink> mpGfxLink; std::unique_ptr<GfxLink> mpGfxLink;
GraphicType meType; GraphicType meType;
...@@ -114,8 +114,8 @@ private: ...@@ -114,8 +114,8 @@ private:
private: private:
GraphicReader* ImplGetContext() { return mpContext;} std::shared_ptr<GraphicReader>& ImplGetContext() { return mpContext;}
void ImplSetContext( GraphicReader* pReader ); void ImplSetContext( const std::shared_ptr<GraphicReader>& pReader );
void ImplSetDummyContext( bool value ) { mbDummyContext = value; } void ImplSetDummyContext( bool value ) { mbDummyContext = value; }
bool ImplReadEmbedded( SvStream& rIStream ); bool ImplReadEmbedded( SvStream& rIStream );
bool ImplWriteEmbedded( SvStream& rOStream ); bool ImplWriteEmbedded( SvStream& rOStream );
......
...@@ -1330,17 +1330,17 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat ...@@ -1330,17 +1330,17 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat
css::uno::Sequence< css::beans::PropertyValue >* pFilterData, css::uno::Sequence< css::beans::PropertyValue >* pFilterData,
WMF_EXTERNALHEADER *pExtHeader ) WMF_EXTERNALHEADER *pExtHeader )
{ {
OUString aFilterName; OUString aFilterName;
OUString aExternalFilterName; OUString aExternalFilterName;
sal_uLong nStreamBegin; sal_uLong nStreamBegin;
sal_uInt16 nStatus; sal_uInt16 nStatus;
GraphicReader* pContext = rGraphic.GetContext(); std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
GfxLinkType eLinkType = GfxLinkType::NONE; GfxLinkType eLinkType = GfxLinkType::NONE;
bool bDummyContext = rGraphic.IsDummyContext(); bool bDummyContext = rGraphic.IsDummyContext();
const bool bLinkSet = rGraphic.IsLink(); const bool bLinkSet = rGraphic.IsLink();
FilterConfigItem* pFilterConfigItem = nullptr; FilterConfigItem* pFilterConfigItem = nullptr;
Size aPreviewSizeHint( 0, 0 ); Size aPreviewSizeHint( 0, 0 );
bool bAllowPartialStreamRead = false; bool bAllowPartialStreamRead = false;
bool bCreateNativeLink = true; bool bCreateNativeLink = true;
......
...@@ -885,18 +885,21 @@ ReadState GIFReader::ReadGIF( Graphic& rGraphic ) ...@@ -885,18 +885,21 @@ ReadState GIFReader::ReadGIF( Graphic& rGraphic )
VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic ) VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic )
{ {
std::unique_ptr<GIFReader> xGIFReader(static_cast<GIFReader*>(rGraphic.GetContext())); std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
rGraphic.SetContext(nullptr); rGraphic.SetContext(nullptr);
GIFReader* pGIFReader = dynamic_cast<GIFReader*>( pContext.get() );
if (!pGIFReader)
{
pContext = std::make_shared<GIFReader>( rStm );
pGIFReader = static_cast<GIFReader*>( pContext.get() );
}
SvStreamEndian nOldFormat = rStm.GetEndian(); SvStreamEndian nOldFormat = rStm.GetEndian();
rStm.SetEndian( SvStreamEndian::LITTLE ); rStm.SetEndian( SvStreamEndian::LITTLE );
if (!xGIFReader)
xGIFReader.reset(new GIFReader(rStm));
bool bRet = true; bool bRet = true;
ReadState eReadState = xGIFReader->ReadGIF(rGraphic); ReadState eReadState = pGIFReader->ReadGIF(rGraphic);
if (eReadState == GIFREAD_ERROR) if (eReadState == GIFREAD_ERROR)
{ {
...@@ -904,8 +907,8 @@ VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic ) ...@@ -904,8 +907,8 @@ VCL_DLLPUBLIC bool ImportGIF( SvStream & rStm, Graphic& rGraphic )
} }
else if (eReadState == GIFREAD_NEED_MORE) else if (eReadState == GIFREAD_NEED_MORE)
{ {
rGraphic = xGIFReader->GetIntermediateGraphic(); rGraphic = pGIFReader->GetIntermediateGraphic();
rGraphic.SetContext(xGIFReader.release()); rGraphic.SetContext(pContext);
} }
rStm.SetEndian(nOldFormat); rStm.SetEndian(nOldFormat);
......
...@@ -381,25 +381,25 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic ) ...@@ -381,25 +381,25 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic )
VCL_DLLPUBLIC bool ImportXBM( SvStream& rStm, Graphic& rGraphic ) VCL_DLLPUBLIC bool ImportXBM( SvStream& rStm, Graphic& rGraphic )
{ {
XBMReader* pXBMReader = static_cast<XBMReader*>( rGraphic.GetContext() ); std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
ReadState eReadState; rGraphic.SetContext(nullptr);
bool bRet = true; XBMReader* pXBMReader = dynamic_cast<XBMReader*>( pContext.get() );
if (!pXBMReader)
{
pContext = std::make_shared<XBMReader>( rStm );
pXBMReader = static_cast<XBMReader*>( pContext.get() );
}
if( !pXBMReader ) bool bRet = true;
pXBMReader = new XBMReader( rStm );
rGraphic.SetContext( nullptr ); ReadState eReadState = pXBMReader->ReadXBM( rGraphic );
eReadState = pXBMReader->ReadXBM( rGraphic );
if( eReadState == XBMREAD_ERROR ) if( eReadState == XBMREAD_ERROR )
{ {
bRet = false; bRet = false;
delete pXBMReader;
} }
else if( eReadState == XBMREAD_OK ) else if( eReadState == XBMREAD_NEED_MORE )
delete pXBMReader; rGraphic.SetContext( pContext );
else
rGraphic.SetContext( pXBMReader );
return bRet; return bRet;
} }
......
...@@ -723,25 +723,25 @@ bool XPMReader::ImplGetString() ...@@ -723,25 +723,25 @@ bool XPMReader::ImplGetString()
VCL_DLLPUBLIC bool ImportXPM( SvStream& rStm, Graphic& rGraphic ) VCL_DLLPUBLIC bool ImportXPM( SvStream& rStm, Graphic& rGraphic )
{ {
XPMReader* pXPMReader = static_cast<XPMReader*>(rGraphic.GetContext()); std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
ReadState eReadState; rGraphic.SetContext(nullptr);
bool bRet = true; XPMReader* pXPMReader = dynamic_cast<XPMReader*>( pContext.get() );
if (!pXPMReader)
{
pContext = std::make_shared<XPMReader>( rStm );
pXPMReader = static_cast<XPMReader*>( pContext.get() );
}
if( !pXPMReader ) bool bRet = true;
pXPMReader = new XPMReader( rStm );
rGraphic.SetContext( nullptr ); ReadState eReadState = pXPMReader->ReadXPM( rGraphic );
eReadState = pXPMReader->ReadXPM( rGraphic );
if( eReadState == XPMREAD_ERROR ) if( eReadState == XPMREAD_ERROR )
{ {
bRet = false; bRet = false;
delete pXPMReader;
} }
else if( eReadState == XPMREAD_OK ) else if( eReadState == XPMREAD_NEED_MORE )
delete pXPMReader; rGraphic.SetContext( pContext );
else
rGraphic.SetContext( pXPMReader );
return bRet; return bRet;
} }
......
...@@ -27,14 +27,15 @@ ...@@ -27,14 +27,15 @@
VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, void* pCallerData, GraphicFilterImportFlags nImportFlags ) VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, void* pCallerData, GraphicFilterImportFlags nImportFlags )
{ {
ReadState eReadState;
bool bReturn = true; bool bReturn = true;
JPEGReader* pJPEGReader = static_cast<JPEGReader*>( rGraphic.GetContext() ); std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
rGraphic.SetContext(nullptr);
if( !pJPEGReader ) JPEGReader* pJPEGReader = dynamic_cast<JPEGReader*>( pContext.get() );
if (!pJPEGReader)
{ {
pJPEGReader = new JPEGReader( rInputStream, pCallerData, bool( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg ) ); pContext = std::make_shared<JPEGReader>( rInputStream, pCallerData, bool( nImportFlags & GraphicFilterImportFlags::SetLogsizeForJpeg ) );
pJPEGReader = static_cast<JPEGReader*>( pContext.get() );
} }
if( nImportFlags & GraphicFilterImportFlags::ForPreview ) if( nImportFlags & GraphicFilterImportFlags::ForPreview )
...@@ -46,21 +47,15 @@ VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, void* ...@@ -46,21 +47,15 @@ VCL_DLLPUBLIC bool ImportJPEG( SvStream& rInputStream, Graphic& rGraphic, void*
pJPEGReader->DisablePreviewMode(); pJPEGReader->DisablePreviewMode();
} }
rGraphic.SetContext( nullptr ); ReadState eReadState = pJPEGReader->Read( rGraphic );
eReadState = pJPEGReader->Read( rGraphic );
if( eReadState == JPEGREAD_ERROR ) if( eReadState == JPEGREAD_ERROR )
{ {
bReturn = false; bReturn = false;
delete pJPEGReader;
}
else if( eReadState == JPEGREAD_OK )
{
delete pJPEGReader;
} }
else else if( eReadState == JPEGREAD_NEED_MORE )
{ {
rGraphic.SetContext( pJPEGReader ); rGraphic.SetContext( pContext );
} }
return bReturn; return bReturn;
......
...@@ -496,12 +496,12 @@ sal_uLong Graphic::GetAnimationLoopCount() const ...@@ -496,12 +496,12 @@ sal_uLong Graphic::GetAnimationLoopCount() const
return mpImpGraphic->ImplGetAnimationLoopCount(); return mpImpGraphic->ImplGetAnimationLoopCount();
} }
GraphicReader* Graphic::GetContext() std::shared_ptr<GraphicReader>& Graphic::GetContext()
{ {
return mpImpGraphic->ImplGetContext(); return mpImpGraphic->ImplGetContext();
} }
void Graphic::SetContext( GraphicReader* pReader ) void Graphic::SetContext( const std::shared_ptr<GraphicReader> &pReader )
{ {
mpImpGraphic->ImplSetContext( pReader ); mpImpGraphic->ImplSetContext( pReader );
} }
......
...@@ -95,7 +95,6 @@ Size GraphicReader::GetPreviewSize() const ...@@ -95,7 +95,6 @@ Size GraphicReader::GetPreviewSize() const
} }
ImpGraphic::ImpGraphic() : ImpGraphic::ImpGraphic() :
mpContext ( nullptr ),
meType ( GraphicType::NONE ), meType ( GraphicType::NONE ),
mnSizeBytes ( 0UL ), mnSizeBytes ( 0UL ),
mnRefCount ( 1UL ), mnRefCount ( 1UL ),
...@@ -108,7 +107,6 @@ ImpGraphic::ImpGraphic() : ...@@ -108,7 +107,6 @@ ImpGraphic::ImpGraphic() :
ImpGraphic::ImpGraphic( const ImpGraphic& rImpGraphic ) : ImpGraphic::ImpGraphic( const ImpGraphic& rImpGraphic ) :
maMetaFile ( rImpGraphic.maMetaFile ), maMetaFile ( rImpGraphic.maMetaFile ),
maEx ( rImpGraphic.maEx ), maEx ( rImpGraphic.maEx ),
mpContext ( nullptr ),
mpSwapFile ( rImpGraphic.mpSwapFile ), mpSwapFile ( rImpGraphic.mpSwapFile ),
meType ( rImpGraphic.meType ), meType ( rImpGraphic.meType ),
mnSizeBytes ( rImpGraphic.mnSizeBytes ), mnSizeBytes ( rImpGraphic.mnSizeBytes ),
...@@ -132,7 +130,6 @@ ImpGraphic::ImpGraphic( const ImpGraphic& rImpGraphic ) : ...@@ -132,7 +130,6 @@ ImpGraphic::ImpGraphic( const ImpGraphic& rImpGraphic ) :
ImpGraphic::ImpGraphic( const Bitmap& rBitmap ) : ImpGraphic::ImpGraphic( const Bitmap& rBitmap ) :
maEx ( rBitmap ), maEx ( rBitmap ),
mpContext ( nullptr ),
meType ( !rBitmap.IsEmpty() ? GraphicType::Bitmap : GraphicType::NONE ), meType ( !rBitmap.IsEmpty() ? GraphicType::Bitmap : GraphicType::NONE ),
mnSizeBytes ( 0UL ), mnSizeBytes ( 0UL ),
mnRefCount ( 1UL ), mnRefCount ( 1UL ),
...@@ -144,7 +141,6 @@ ImpGraphic::ImpGraphic( const Bitmap& rBitmap ) : ...@@ -144,7 +141,6 @@ ImpGraphic::ImpGraphic( const Bitmap& rBitmap ) :
ImpGraphic::ImpGraphic( const BitmapEx& rBitmapEx ) : ImpGraphic::ImpGraphic( const BitmapEx& rBitmapEx ) :
maEx ( rBitmapEx ), maEx ( rBitmapEx ),
mpContext ( nullptr ),
meType ( !rBitmapEx.IsEmpty() ? GraphicType::Bitmap : GraphicType::NONE ), meType ( !rBitmapEx.IsEmpty() ? GraphicType::Bitmap : GraphicType::NONE ),
mnSizeBytes ( 0UL ), mnSizeBytes ( 0UL ),
mnRefCount ( 1UL ), mnRefCount ( 1UL ),
...@@ -155,8 +151,7 @@ ImpGraphic::ImpGraphic( const BitmapEx& rBitmapEx ) : ...@@ -155,8 +151,7 @@ ImpGraphic::ImpGraphic( const BitmapEx& rBitmapEx ) :
} }
ImpGraphic::ImpGraphic(const SvgDataPtr& rSvgDataPtr) ImpGraphic::ImpGraphic(const SvgDataPtr& rSvgDataPtr)
: mpContext( nullptr ), : meType( rSvgDataPtr.get() ? GraphicType::Bitmap : GraphicType::NONE ),
meType( rSvgDataPtr.get() ? GraphicType::Bitmap : GraphicType::NONE ),
mnSizeBytes( 0UL ), mnSizeBytes( 0UL ),
mnRefCount( 1UL ), mnRefCount( 1UL ),
mbSwapOut( false ), mbSwapOut( false ),
...@@ -169,7 +164,6 @@ ImpGraphic::ImpGraphic(const SvgDataPtr& rSvgDataPtr) ...@@ -169,7 +164,6 @@ ImpGraphic::ImpGraphic(const SvgDataPtr& rSvgDataPtr)
ImpGraphic::ImpGraphic( const Animation& rAnimation ) : ImpGraphic::ImpGraphic( const Animation& rAnimation ) :
maEx ( rAnimation.GetBitmapEx() ), maEx ( rAnimation.GetBitmapEx() ),
mpAnimation ( o3tl::make_unique<Animation>( rAnimation ) ), mpAnimation ( o3tl::make_unique<Animation>( rAnimation ) ),
mpContext ( nullptr ),
meType ( GraphicType::Bitmap ), meType ( GraphicType::Bitmap ),
mnSizeBytes ( 0UL ), mnSizeBytes ( 0UL ),
mnRefCount ( 1UL ), mnRefCount ( 1UL ),
...@@ -181,7 +175,6 @@ ImpGraphic::ImpGraphic( const Animation& rAnimation ) : ...@@ -181,7 +175,6 @@ ImpGraphic::ImpGraphic( const Animation& rAnimation ) :
ImpGraphic::ImpGraphic( const GDIMetaFile& rMtf ) : ImpGraphic::ImpGraphic( const GDIMetaFile& rMtf ) :
maMetaFile ( rMtf ), maMetaFile ( rMtf ),
mpContext ( nullptr ),
meType ( GraphicType::GdiMetafile ), meType ( GraphicType::GdiMetafile ),
mnSizeBytes ( 0UL ), mnSizeBytes ( 0UL ),
mnRefCount ( 1UL ), mnRefCount ( 1UL ),
...@@ -194,7 +187,6 @@ ImpGraphic::ImpGraphic( const GDIMetaFile& rMtf ) : ...@@ -194,7 +187,6 @@ ImpGraphic::ImpGraphic( const GDIMetaFile& rMtf ) :
ImpGraphic::~ImpGraphic() ImpGraphic::~ImpGraphic()
{ {
ImplClear(); ImplClear();
delete mpContext;
} }
ImpGraphic& ImpGraphic::operator=( const ImpGraphic& rImpGraphic ) ImpGraphic& ImpGraphic::operator=( const ImpGraphic& rImpGraphic )
...@@ -908,9 +900,8 @@ sal_uLong ImpGraphic::ImplGetAnimationLoopCount() const ...@@ -908,9 +900,8 @@ sal_uLong ImpGraphic::ImplGetAnimationLoopCount() const
} }
void ImpGraphic::ImplSetContext( GraphicReader* pReader ) void ImpGraphic::ImplSetContext( const std::shared_ptr<GraphicReader>& pReader )
{ {
assert(!mpContext);
mpContext = pReader; mpContext = pReader;
mbDummyContext = false; mbDummyContext = false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment