[Libreoffice-commits] core.git: sw/qa writerfilter/source

Miklos Vajna vmiklos at suse.cz
Tue Feb 5 09:38:27 PST 2013


 sw/qa/extras/rtfimport/data/fdo58076-2.rtf     |   24 ++++++++++++++++++++++++
 sw/qa/extras/rtfimport/rtfimport.cxx           |   10 ++++++++++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |   15 +++++++++++++++
 3 files changed, 49 insertions(+)

New commits:
commit 878c6f7cb4b7495de90581e8513d46053b8a38e9
Author: Miklos Vajna <vmiklos at suse.cz>
Date:   Tue Feb 5 18:16:12 2013 +0100

    fdo#58076 import RTF_SHPLEFT/TOP of ESCHER_ShpInst_PictureFrame
    
    Change-Id: Ia655743710778ea7d48a9b2221f22f55a4ccce32

diff --git a/sw/qa/extras/rtfimport/data/fdo58076-2.rtf b/sw/qa/extras/rtfimport/data/fdo58076-2.rtf
new file mode 100644
index 0000000..c918953
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo58076-2.rtf
@@ -0,0 +1,24 @@
+{\rtf1
+{\shp
+{\*\shpinst\shpleft8345\shptop64\shpright9943\shpbottom1804
+{\sp
+{\sn shapeType}
+{\sv 75}
+}
+{\sp
+{\sn pib}
+{\sv 
+{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0
+\picw2815\pich3073\picwgoal1596\pichgoal1742\pngblip\bliptag-949277018
+{\*\blipuid c76b2ea6c6392b9e41780fd0403d0bcd}
+89504e470d0a1a0a0000000d4948445200000010000000100802000000909168360000015049444154789c9592c14a02511486bf99714ccb322d7521140541cb
+6a11448b164150fb8a363d41f4083d40cba0655044d0a637a837682fd1a6a2488b10b23475bcb77b671c491dc1cee23077e67cf7fcff39139252f29f08b59e3e
+1dae8b4c45998ff501a82e070f5cbd3366733acb5c6fa609fc0872651236df0deeca7d002a6cc33d1b941a146ab49ca937e37610e0c590c5c92b67f926a07243
+b293613f8b1108a8a84aadb01575c9799edd0c895010a0ae71048e77b99b6a92e53861a387a48a6033c5d208c297a43ca8a3697601d217b010632dd9a9f34be0
+9968021698bea4c76ab72f5dd0d6216c3211e1bec2a0c5e59bce9303baa770c7bd38aca7d729692bcd4d512b53bb3b7cc2f45dd604ab098e67b499366025ce5e
+96a317fd2162e2d76bbbb725bdcd80b12a603aca4581e7aade97e14ec2916ca719ed96e4c54692f5241f755de7019641eacfaff10b469261dc6a800dd30000000049454e44ae426082}
+}
+}
+}
+}
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index c321ba6..bf19018 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -140,6 +140,7 @@ public:
     void testFdo48440();
     void testFdo58646();
     void testFdo59419();
+    void testFdo58076_2();
 
     CPPUNIT_TEST_SUITE(Test);
 #if !defined(MACOSX) && !defined(WNT)
@@ -251,6 +252,7 @@ void Test::run()
         {"fdo48440.rtf", &Test::testFdo48440},
         {"fdo58646.rtf", &Test::testFdo58646},
         {"fdo59419.rtf", &Test::testFdo59419},
+        {"fdo58076-2.rtf", &Test::testFdo58076_2},
     };
     header();
     for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
@@ -1088,6 +1090,14 @@ void Test::testFdo59419()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xTables->getCount());
 }
 
+void Test::testFdo58076_2()
+{
+    // Position of the picture wasn't correct.
+    uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xDraws(xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(TWIP_TO_MM100(8345)), getProperty<sal_Int32>(xDraws->getByIndex(0), "HoriOrientPosition"));
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 9e2ce72..607d955 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -64,6 +64,7 @@
 #include <ooxml/OOXMLFastTokens.hxx> // ooxml namespace
 #include <oox/token/namespaces.hxx> // oox namespace
 #include <oox/token/tokens.hxx>
+#include <dmapper/GraphicHelpers.hxx>
 
 #include <rtfsdrimport.hxx>
 #include <rtftokenizer.hxx>
@@ -73,6 +74,7 @@
 #include <rtffly.hxx>
 
 #define TWIP_TO_MM100(TWIP)     ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+#define MM100_TO_EMU(MM100)     (MM100 * 360)
 #define M_TOKEN(token) OOX_TOKEN(officeMath, token)
 #define OPEN_M_TOKEN( rtftok, ooxtok ) \
         case RTF_M##rtftok: \
@@ -808,6 +810,19 @@ int RTFDocumentImpl::resolvePict(bool bInline)
         aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_extent, pExtentValue);
         if (aAnchorWrapAttributes.size())
             aAnchorSprms.set(NS_ooxml::LN_EG_WrapType_wrapSquare, pAnchorWrapValue);
+
+        // See OOXMLFastContextHandler::positionOffset(), we can't just put values in an RTFValue.
+        if (m_aStates.top().aShape.nLeft > 0)
+        {
+            writerfilter::dmapper::PositionHandler::setPositionOffset(OUString::number(MM100_TO_EMU(m_aStates.top().aShape.nLeft)), false);
+            aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionH, RTFValue::Pointer_t(new RTFValue(RTFSprms())));
+        }
+        if (m_aStates.top().aShape.nTop > 0)
+        {
+            writerfilter::dmapper::PositionHandler::setPositionOffset(OUString::number(MM100_TO_EMU(m_aStates.top().aShape.nTop)), true);
+            aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionV, RTFValue::Pointer_t(new RTFValue(RTFSprms())));
+        }
+
         aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_docPr, pDocprValue);
         aAnchorSprms.set(NS_ooxml::LN_graphic_graphic, pGraphicValue);
         // anchor sprm


More information about the Libreoffice-commits mailing list