summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-04-23 14:10:10 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-04-23 15:23:18 +0200
commita0f5c5e6d16ef9e3db140a922912ff2a49a224b7 (patch)
tree2f813cb48409c8a53fdc99defaa79266ea9a2117
parentcd511523fdf2cae9c28588aaf181259d04dfa932 (diff)
sw HTML import: lazy-read inline images
Also prefer Graphic::GetPrefSize() over Graphic::GetSizePixel(), since the previous does not swap in the image. Change-Id: I100da14716448e72b687ce8ad1800326f0b3735e Reviewed-on: https://gerrit.libreoffice.org/53322 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r--sw/qa/extras/htmlimport/data/image-lazy-read.html11
-rw-r--r--sw/qa/extras/htmlimport/htmlimport.cxx8
-rw-r--r--sw/source/filter/html/htmlgrin.cxx21
3 files changed, 38 insertions, 2 deletions
diff --git a/sw/qa/extras/htmlimport/data/image-lazy-read.html b/sw/qa/extras/htmlimport/data/image-lazy-read.html
new file mode 100644
index 000000000000..afc19a7a62d0
--- /dev/null
+++ b/sw/qa/extras/htmlimport/data/image-lazy-read.html
@@ -0,0 +1,11 @@
+<html>
+<p>
+aaa
+</p>
+<p style="margin-bottom: 0cm; line-height: 100%; page-break-before: always">
+bbb
+</p>
+<p style="margin-bottom: 0cm; line-height: 100%; page-break-before: always">
+<img src="data:image/png;base64,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">
+</p>
+</html>
diff --git a/sw/qa/extras/htmlimport/htmlimport.cxx b/sw/qa/extras/htmlimport/htmlimport.cxx
index 5829cdcd4d31..fecd3c53b5b6 100644
--- a/sw/qa/extras/htmlimport/htmlimport.cxx
+++ b/sw/qa/extras/htmlimport/htmlimport.cxx
@@ -224,6 +224,14 @@ DECLARE_HTMLIMPORT_TEST(testImageWidthAuto, "image-width-auto.html")
CPPUNIT_ASSERT_EQUAL(Size(1835, 560), rSize.GetSize());
}
+DECLARE_HTMLIMPORT_TEST(testImageLazyRead, "image-lazy-read.html")
+{
+ auto xGraphic = getProperty<uno::Reference<graphic::XGraphic>>(getShape(1), "Graphic");
+ Graphic aGraphic(xGraphic);
+ // This failed, import loaded the graphic, it wasn't lazy-read.
+ CPPUNIT_ASSERT(!aGraphic.isAvailable());
+}
+
DECLARE_HTMLIMPORT_TEST(testChangedby, "meta-changedby.html")
{
SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx
index 869d92c3c435..cb25a316277f 100644
--- a/sw/source/filter/html/htmlgrin.cxx
+++ b/sw/source/filter/html/htmlgrin.cxx
@@ -480,8 +480,25 @@ 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)
+ {
+ Size aPrefSize = aGraphic.GetPrefSize();
+ nWidth = aPrefSize.getWidth();
+ nHeight = aPrefSize.getHeight();
+ }
+ }
+
+ if (!sGrfNm.isEmpty())
+ {
+ if (ERRCODE_NONE == rFilter.ImportGraphic(aGraphic, "", *pStream))
+ sGrfNm.clear();
+ }
}
}
else if (m_sBaseURL.isEmpty() || !aGraphicData.isEmpty())
@@ -497,7 +514,7 @@ IMAGE_SETEVENT:
aGraphic.SetDefaultType();
}
- if (!bHeightProvided || !bWidthProvided)
+ if (!nHeight || !nWidth)
{
Size aPixelSize = aGraphic.GetSizePixel(Application::GetDefaultDevice());
if (!bWidthProvided)