[Libreoffice-commits] core.git: Branch 'private/vmiklos/image-rework' - 3 commits - filter/source sw/source writerfilter/source

Miklos Vajna vmiklos at collabora.co.uk
Thu Apr 19 15:37:46 UTC 2018


 filter/source/msfilter/msdffimp.cxx            |    9 +++++++-
 sw/source/filter/html/htmlgrin.cxx             |   28 ++++++++++++++++++++++++-
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |    9 +++++++-
 3 files changed, 43 insertions(+), 3 deletions(-)

New commits:
commit e997dce19086b7e23c44e86a6c908b726845bc4d
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Apr 19 17:35:19 2018 +0200

    sw HTML import: lazy-read inline images
    
    Explicitly use the graphic descriptor to provide the image size,
    otherwise later Graphic::GetSizePixel() will swap in the graphic during
    HTML import.
    
    Change-Id: Ib785ce4f0fd31e09b148d2d53ed29dc4deee7b86

diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx
index 869d92c3c435..3b3c4f93acb1 100644
--- a/sw/source/filter/html/htmlgrin.cxx
+++ b/sw/source/filter/html/htmlgrin.cxx
@@ -480,8 +480,34 @@ IMAGE_SETEVENT:
         std::unique_ptr<SvMemoryStream> const pStream(aGraphicURL.getData());
         if (pStream)
         {
-            if (ERRCODE_NONE == GraphicFilter::GetGraphicFilter().ImportGraphic(aGraphic, "", *pStream))
+            GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();
+            aGraphic = rFilter.ImportUnloadedGraphic(*pStream);
+            if (aGraphic)
+            {
                 sGrfNm.clear();
+
+                if (!bHeightProvided || !bWidthProvided)
+                {
+                    pStream->Seek(0);
+                    GraphicDescriptor aDescriptor(*pStream, /*pPath=*/nullptr);
+                    if (aDescriptor.Detect(/*bExtendedInfo=*/true))
+                    {
+                        nWidth = aDescriptor.GetSizePixel().getWidth();
+                        if (nWidth)
+                            bWidthProvided = true;
+
+                        nHeight = aDescriptor.GetSizePixel().getHeight();
+                        if (nHeight)
+                            bHeightProvided = true;
+                    }
+                }
+            }
+
+            if (!sGrfNm.isEmpty())
+            {
+                if (ERRCODE_NONE == rFilter.ImportGraphic(aGraphic, "", *pStream))
+                    sGrfNm.clear();
+            }
         }
     }
     else if (m_sBaseURL.isEmpty() || !aGraphicData.isEmpty())
commit 5f11766adf9e99ee323ca6d8ecb14d8fb3cd4770
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Apr 19 14:42:38 2018 +0200

    sw RTF import: use GraphicDescriptor to determine size
    
    The size info in the markup is optional, and 0x0 is not a great default.
    
    Change-Id: I12506a98db2044ca76a4290eebb46bde7f6c1137

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 371c16181d18..8ecb88d8d319 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -35,6 +35,7 @@
 #include <rtl/uri.hxx>
 #include <rtl/tencinfo.h>
 #include <oox/helper/graphichelper.hxx>
+#include <vcl/graphicfilter.hxx>
 #include "rtfsdrimport.hxx"
 #include "rtfreferenceproperties.hxx"
 #include "rtfskipdestination.hxx"
@@ -891,7 +892,13 @@ void RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XS
         // provided by picw and pich.
 
         Graphic aGraphic(xGraphic);
-        Size aSize(aGraphic.GetPrefSize());
+        Size aSize;
+        pStream->Seek(0);
+        GraphicDescriptor aDescriptor(*pStream, /*pPath=*/nullptr);
+        if (aDescriptor.Detect(/*bExtendedInfo=*/true))
+            aSize = aDescriptor.GetSizePixel();
+        else
+            aSize = aGraphic.GetPrefSize();
         MapMode aMap(MapUnit::Map100thMM);
         if (aGraphic.GetPrefMapMode().GetMapUnit() == MapUnit::MapPixel)
             aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, aMap);
commit 2ca1ebbfad366dc871c394772c7ca05b95c84358
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Apr 19 13:56:55 2018 +0200

    DOC import: lazy-read images
    
    At least JPEG files are now only loaded when the user scrolls to the
    relevant page.
    
    Change-Id: I9699927282b99bcb71a0d271a20bbfd56a361ee8

diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index 2e842b106f78..21a22a153999 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -6513,7 +6513,14 @@ bool SvxMSDffManager::GetBLIPDirect( SvStream& rBLIPStream, Graphic& rData, tool
         else
         {   // and unleash our filter
             GraphicFilter& rGF = GraphicFilter::GetGraphicFilter();
-            nRes = rGF.ImportGraphic( rData, "", *pGrStream );
+            Graphic aGraphic = rGF.ImportUnloadedGraphic(*pGrStream);
+            if (aGraphic)
+            {
+                rData = aGraphic;
+                nRes = ERRCODE_NONE;
+            }
+            else
+                nRes = rGF.ImportGraphic( rData, "", *pGrStream );
 
             // SJ: I40472, sometimes the aspect ratio (aMtfSize100) does not match and we get scaling problems,
             // then it is better to use the prefsize that is stored within the metafile. Bug #72846# for what the


More information about the Libreoffice-commits mailing list