From e3d78d605905ef23b15002a29f0f3a6de5cc12ac Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 26 Jun 2015 09:02:31 +0200 Subject: tdf#89890 DOCX import: fix too large num pic bullet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Tested-by: Jenkins (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 Tested-by: Caolán McNamara --- sw/qa/extras/ooxmlexport/data/tdf89890.docx | Bin 0 -> 41925 bytes sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 23 +++++++++++++++++++++++ sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 2 +- writerfilter/source/dmapper/NumberingManager.cxx | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf89890.docx 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 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf89890.docx 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 xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY); + uno::Reference xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY); + uno::Sequence 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(279), rProp.Value.get().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 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; -- cgit v1.2.3