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:
parent
b3992ddcd1
commit
c96e3e226f
@ -112,6 +112,7 @@ private:
|
||||
bool ImpUpdateGraphicLink( bool bAsynchron = true ) const;
|
||||
void ImpSetLinkedGraphic( const Graphic& rGraphic );
|
||||
DECL_LINK( ImpSwapHdl, const GraphicObject*, SvStream* );
|
||||
DECL_LINK( ReplacementSwapHdl, const GraphicObject*, SvStream* );
|
||||
void onGraphicChanged();
|
||||
GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const;
|
||||
|
||||
|
@ -439,8 +439,15 @@ const GraphicObject* SdrGrafObj::GetReplacementGraphicObject() const
|
||||
const_cast< SdrGrafObj* >(this)->mpReplacementGraphic = new GraphicObject(rSvgDataPtr->getReplacement());
|
||||
}
|
||||
else if (pGraphic->GetGraphic().getPdfData().hasElements())
|
||||
{
|
||||
// Replacement graphic for bitmap + PDF is just the bitmap.
|
||||
const_cast<SdrGrafObj*>(this)->mpReplacementGraphic = new GraphicObject(pGraphic->GetGraphic().GetBitmapEx());
|
||||
}
|
||||
if (mpReplacementGraphic)
|
||||
{
|
||||
mpReplacementGraphic->SetSwapStreamHdl(
|
||||
LINK(const_cast<SdrGrafObj*>(this), SdrGrafObj, ReplacementSwapHdl));
|
||||
}
|
||||
}
|
||||
|
||||
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* )
|
||||
{
|
||||
SvStream* pRet = GRFMGR_AUTOSWAPSTREAM_NONE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user