summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2019-05-27 21:24:42 +0200
committerMiklos Vajna <vmiklos@collabora.com>2019-05-28 09:10:15 +0200
commit69b62cfcbd364d7f62142149c2f690104b217ca1 (patch)
tree2584b8fc78810624981ad10e2c834793258bb23f
parentd0d9acc7c6095e0bc640e073b9d8e2e19aaa8993 (diff)
tdf#125281 DOC import: fix size of lazy-loaded metafiles
Metafiles may have an external header, so once graphic data is read, we need to set the size explicitly. Otherwise the width of the EMF image in the bugdoc will be too small. Change-Id: I2441eda61278b0f4973db5d9aa14618ccd17c397 Reviewed-on: https://gerrit.libreoffice.org/73064 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r--filter/source/msfilter/msdffimp.cxx5
-rw-r--r--sw/qa/extras/ww8import/data/tdf125281.docbin0 -> 82432 bytes
-rw-r--r--sw/qa/extras/ww8import/ww8import.cxx17
3 files changed, 22 insertions, 0 deletions
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
index 8dbddea29cf1..1c31a10f7ec8 100644
--- a/filter/source/msfilter/msdffimp.cxx
+++ b/filter/source/msfilter/msdffimp.cxx
@@ -6610,6 +6610,11 @@ bool SvxMSDffManager::GetBLIPDirect( SvStream& rBLIPStream, Graphic& rData, tool
// size to the size of this record.
sal_uInt64 maxSize = pGrStream == &rBLIPStream ? nLength : 0;
Graphic aGraphic = rGF.ImportUnloadedGraphic(*pGrStream, maxSize);
+
+ // Size available in metafile header, set that here.
+ if (aMtfSize100.getWidth() && aMtfSize100.getHeight())
+ aGraphic.SetPrefSize(aMtfSize100);
+
if (!aGraphic.IsNone())
{
rData = aGraphic;
diff --git a/sw/qa/extras/ww8import/data/tdf125281.doc b/sw/qa/extras/ww8import/data/tdf125281.doc
new file mode 100644
index 000000000000..15146f9e3daf
--- /dev/null
+++ b/sw/qa/extras/ww8import/data/tdf125281.doc
Binary files differ
diff --git a/sw/qa/extras/ww8import/ww8import.cxx b/sw/qa/extras/ww8import/ww8import.cxx
index abdc2a335227..1af645f90cb1 100644
--- a/sw/qa/extras/ww8import/ww8import.cxx
+++ b/sw/qa/extras/ww8import/ww8import.cxx
@@ -14,6 +14,7 @@
#include <com/sun/star/graphic/XGraphic.hpp>
#include <viscrs.hxx>
#include <wrtsh.hxx>
+#include <ndgrf.hxx>
#include <editeng/boxitem.hxx>
#include <editeng/lrspitem.hxx>
#include <editeng/ulspitem.hxx>
@@ -204,6 +205,22 @@ DECLARE_WW8IMPORT_TEST(testTdf121734, "tdf121734.doc")
}
}
+DECLARE_WW8IMPORT_TEST(testTdf125281, "tdf125281.doc")
+{
+ // Load a .doc file which has an embedded .emf image.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SwNode* pNode = pDoc->GetNodes()[6];
+ CPPUNIT_ASSERT(pNode->IsGrfNode());
+ SwGrfNode* pGrfNode = pNode->GetGrfNode();
+ const Graphic& rGraphic = pGrfNode->GetGrf();
+
+ // Without the accompanying fix in place, this test would have failed, as pref size was 0 till
+ // an actual Paint() was performed (and even then, it was wrong).
+ long nExpected = 25664;
+ CPPUNIT_ASSERT_EQUAL(nExpected, rGraphic.GetPrefSize().getWidth());
+}
+
DECLARE_WW8IMPORT_TEST(testTdf122425_1, "tdf122425_1.doc")
{
// This is for header text in case we use a hack for fixed-height headers