summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-06-26 09:02:31 +0200
committerChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>2015-06-27 01:08:20 +0000
commit6cef4a01e0ef59cd025cf3ee3e5d93eb0a89dda1 (patch)
tree8a742bd9b046bb4076a2e99a9cb020dacb83957b
parent1802e4c903a0597c9cb5c2ef752fe68486e197b1 (diff)
tdf#89890 DOCX import: fix too large num pic bullet
Reading SwWW8ImplReader::CoreLoad()'s "update graphic bullet information" block, it turns out that the numbering picture bullet's height should be independent from the supplied bitmap, and only its aspect ratio should be respected. (cherry picked from commit eab89b7f024a8c86decdcb3362c40c40a7df37df) Change-Id: I1300aa0397a8098df2a3170af795fbba47fd2a9e Reviewed-on: https://gerrit.libreoffice.org/16502 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf89890.docxbin0 -> 41925 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport.cxx23
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport4.cxx2
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx14
4 files changed, 38 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/data/tdf89890.docx b/sw/qa/extras/ooxmlexport/data/tdf89890.docx
new file mode 100644
index 000000000000..8b3e8ebe189b
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf89890.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index fc05887962b4..20be877a78d9 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -703,6 +703,29 @@ DECLARE_OOXMLEXPORT_TEST(testTdf79639, "tdf79639.docx")
CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), xDrawPage->getCount());
}
+DECLARE_OOXMLEXPORT_TEST(testTdf89890, "tdf89890.docx")
+{
+ // Numbering picture bullet was too large.
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aProps;
+ xLevels->getByIndex(0) >>= aProps; // 1st level
+
+ bool bFound = false;
+ for (int i = 0; i < aProps.getLength(); ++i)
+ {
+ const beans::PropertyValue& rProp = aProps[i];
+
+ if (rProp.Name == "GraphicSize")
+ {
+ // Height of the graphic was too large: 4382 after import, then 2485 after roundtrip.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(279), rProp.Value.get<awt::Size>().Height);
+ bFound = true;
+ }
+ }
+ CPPUNIT_ASSERT(bFound);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index 21140f319830..372735313b7a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -353,7 +353,7 @@ DECLARE_OOXMLEXPORT_TEST(testFDO74215, "FDO74215.docx")
xmlDocPtr pXmlDoc = parseExport("word/numbering.xml");
if (!pXmlDoc)
return;
- assertXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style", "width:6.4pt;height:6.4pt");
+ assertXPath(pXmlDoc, "/w:numbering/w:numPicBullet[2]/w:pict/v:shape", "style", "width:7.9pt;height:7.9pt");
}
DECLARE_OOXMLEXPORT_TEST(testColumnBreak_ColumnCountIsZero,"fdo74153.docx")
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index 481dbdf317ea..b19b8618b2f7 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -887,6 +887,20 @@ void ListsManager::lcl_sprm( Sprm& rSprm )
case NS_ooxml::LN_CT_NumPicBullet_pict:
{
uno::Reference<drawing::XShape> xShape = m_rDMapper.PopPendingShape();
+
+ // Respect only the aspect ratio of the picture, not its size.
+ awt::Size aPrefSize = xShape->getSize();
+ // See SwDefBulletConfig::InitFont(), default height is 14.
+ const int nFontHeight = 14;
+ // Point -> mm100.
+ const int nHeight = nFontHeight * 35;
+ if (aPrefSize.Height * aPrefSize.Width != 0)
+ {
+ int nWidth = (nHeight * aPrefSize.Width) / aPrefSize.Height;
+ awt::Size aSize(nWidth, nHeight);
+ xShape->setSize(aSize);
+ }
+
m_pCurrentNumPicBullet->SetShape(xShape);
}
break;