[Libreoffice-commits] core.git: Branch 'libreoffice-5-4' - include/svx svx/source

Michael Stahl mstahl at redhat.com
Mon Jul 17 10:29:08 UTC 2017


 include/svx/svdograf.hxx       |    1 +
 svx/source/svdraw/svdograf.cxx |   30 ++++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

New commits:
commit c60344481a60f77ff86e7e5f1f1e952f7ba76d90
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Jul 12 15:14:48 2017 +0200

    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
    (cherry picked from commit c96e3e226fe4eb8f25c54cce4d653d12eda63ce2)
    Reviewed-on: https://gerrit.libreoffice.org/39967
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>

diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx
index a8bc11bb2f94..2b66a4373e19 100644
--- a/include/svx/svdograf.hxx
+++ b/include/svx/svdograf.hxx
@@ -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;
 
diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx
index 5076d00b95c9..6ef0c7d3e07c 100644
--- a/svx/source/svdraw/svdograf.cxx
+++ b/svx/source/svdraw/svdograf.cxx
@@ -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;
@@ -1271,6 +1278,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;


More information about the Libreoffice-commits mailing list