summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-06-26 09:02:31 +0200
committerCaolán McNamara <caolanm@redhat.com>2015-07-08 10:44:53 +0000
commite3d78d605905ef23b15002a29f0f3a6de5cc12ac (patch)
tree37f4dba45ca8e91a1a6039c0bc185d0b6690fd8b
parent492f860898a08500bf164ba55db83bf086835458 (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. Reviewed-on: https://gerrit.libreoffice.org/16500 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit eab89b7f024a8c86decdcb3362c40c40a7df37df) Conflicts: sw/qa/extras/ooxmlexport/ooxmlexport.cxx Change-Id: I1300aa0397a8098df2a3170af795fbba47fd2a9e Reviewed-on: https://gerrit.libreoffice.org/16844 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.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 ac4b246d474f..2e4b8a33536b 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -638,6 +638,29 @@ DECLARE_OOXMLEXPORT_TEST(testTdf91261, "tdf91261.docx")
}
+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 e187959c3013..9a495fd2a944 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 2412f8c6f078..17786ea53f18 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -877,6 +877,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;