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. Change-Id: I1300aa0397a8098df2a3170af795fbba47fd2a9e Reviewed-on: https://gerrit.libreoffice.org/16500 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
This commit is contained in:
BIN
sw/qa/extras/ooxmlexport/data/tdf89890.docx
Normal file
BIN
sw/qa/extras/ooxmlexport/data/tdf89890.docx
Normal file
Binary file not shown.
@@ -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")
|
||||
|
@@ -859,6 +859,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;
|
||||
|
Reference in New Issue
Block a user