Kaydet (Commit) 6cef4a01 authored tarafından Miklos Vajna's avatar Miklos Vajna Kaydeden (comit) Christian Lohmaier

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 eab89b7f)

Change-Id: I1300aa0397a8098df2a3170af795fbba47fd2a9e
Reviewed-on: https://gerrit.libreoffice.org/16502Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>
üst 1802e4c9
......@@ -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: */
......@@ -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")
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment