sw/qa/extras/ooxmlexport/data/tdf89890.docx      |binary
 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(-)

New commits:
commit 6cef4a01e0ef59cd025cf3ee3e5d93eb0a89dda1
Author: Miklos Vajna <vmik...@collabora.co.uk>
Date:   Fri Jun 26 09:02:31 2015 +0200

    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 <c...@libreoffice.org>
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/sw/qa/extras/ooxmlexport/data/tdf89890.docx 
b/sw/qa/extras/ooxmlexport/data/tdf89890.docx
new file mode 100644
index 0000000..8b3e8eb
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 fc05887..20be877 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 21140f3..3727353 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 481dbdf..b19b861 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;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to