svx: make SdrGrafObj::mpReplacementGraphic swappable
These GraphicObjects clog up the GraphicManager cache so it's effectively useless. Round-tripping the ML bugdoc, this doesn't provide much of a speed-up by itself, but together with the previous fix it goes from 3:00 to 1:30 (in an optimized build). Change-Id: If52e176c790b94ffef9984be53376a34345b06e3
This commit is contained in:
@@ -112,6 +112,7 @@ private:
|
|||||||
bool ImpUpdateGraphicLink( bool bAsynchron = true ) const;
|
bool ImpUpdateGraphicLink( bool bAsynchron = true ) const;
|
||||||
void ImpSetLinkedGraphic( const Graphic& rGraphic );
|
void ImpSetLinkedGraphic( const Graphic& rGraphic );
|
||||||
DECL_LINK( ImpSwapHdl, const GraphicObject*, SvStream* );
|
DECL_LINK( ImpSwapHdl, const GraphicObject*, SvStream* );
|
||||||
|
DECL_LINK( ReplacementSwapHdl, const GraphicObject*, SvStream* );
|
||||||
void onGraphicChanged();
|
void onGraphicChanged();
|
||||||
GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const;
|
GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const;
|
||||||
|
|
||||||
|
@@ -439,8 +439,15 @@ const GraphicObject* SdrGrafObj::GetReplacementGraphicObject() const
|
|||||||
const_cast< SdrGrafObj* >(this)->mpReplacementGraphic = new GraphicObject(rSvgDataPtr->getReplacement());
|
const_cast< SdrGrafObj* >(this)->mpReplacementGraphic = new GraphicObject(rSvgDataPtr->getReplacement());
|
||||||
}
|
}
|
||||||
else if (pGraphic->GetGraphic().getPdfData().hasElements())
|
else if (pGraphic->GetGraphic().getPdfData().hasElements())
|
||||||
|
{
|
||||||
// Replacement graphic for bitmap + PDF is just the bitmap.
|
// Replacement graphic for bitmap + PDF is just the bitmap.
|
||||||
const_cast<SdrGrafObj*>(this)->mpReplacementGraphic = new GraphicObject(pGraphic->GetGraphic().GetBitmapEx());
|
const_cast<SdrGrafObj*>(this)->mpReplacementGraphic = new GraphicObject(pGraphic->GetGraphic().GetBitmapEx());
|
||||||
|
}
|
||||||
|
if (mpReplacementGraphic)
|
||||||
|
{
|
||||||
|
mpReplacementGraphic->SetSwapStreamHdl(
|
||||||
|
LINK(const_cast<SdrGrafObj*>(this), SdrGrafObj, ReplacementSwapHdl));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mpReplacementGraphic;
|
return mpReplacementGraphic;
|
||||||
@@ -1279,6 +1286,29 @@ void SdrGrafObj::AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrink
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMPL_LINK(SdrGrafObj, ReplacementSwapHdl, const GraphicObject*, pO, SvStream*)
|
||||||
|
{
|
||||||
|
// replacement image is always swapped
|
||||||
|
if (pO->IsInSwapOut())
|
||||||
|
{
|
||||||
|
SdrSwapGraphicsMode const nSwapMode(pModel->GetSwapGraphicsMode());
|
||||||
|
if (nSwapMode & SdrSwapGraphicsMode::TEMP)
|
||||||
|
{
|
||||||
|
return GRFMGR_AUTOSWAPSTREAM_TEMP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pO->IsInSwapIn())
|
||||||
|
{
|
||||||
|
return GRFMGR_AUTOSWAPSTREAM_TEMP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert(!"why is swap handler being called?");
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRFMGR_AUTOSWAPSTREAM_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
IMPL_LINK( SdrGrafObj, ImpSwapHdl, const GraphicObject*, pO, SvStream* )
|
IMPL_LINK( SdrGrafObj, ImpSwapHdl, const GraphicObject*, pO, SvStream* )
|
||||||
{
|
{
|
||||||
SvStream* pRet = GRFMGR_AUTOSWAPSTREAM_NONE;
|
SvStream* pRet = GRFMGR_AUTOSWAPSTREAM_NONE;
|
||||||
|
Reference in New Issue
Block a user