[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - oox/source sw/qa

Miklos Vajna vmiklos at collabora.co.uk
Mon Aug 17 06:35:23 PDT 2015


 oox/source/shape/WpsContext.cxx             |   33 +++++++++++++++++++++++++---
 sw/qa/extras/ooxmlimport/data/tdf87924.docx |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx    |    8 ++++++
 3 files changed, 38 insertions(+), 3 deletions(-)

New commits:
commit ace88a7d68c27871597f634b350be224aee26e11
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Aug 3 09:19:17 2015 +0200

    tdf#87924 DOCX import: rot=90 and vert=vert270 means no text rotation
    
    If the shape is rotated 90 degrees clockwise and the text is further
    rotated 270 degrees clockwise that means we shouldn't do anything with
    the text and the result will be correct.
    
    Also: cid#1315264 incorrect expression
    
    (cherry picked from commit dbfed66eebde65f5844a0f1a2cfe548ad4eda962 and
    1c09657c5c25cf941588610eeab653217399f9b5)
    
    Change-Id: I7c65319258136288520bd24fa2bf8e3c598b0878
    Reviewed-on: https://gerrit.libreoffice.org/17807
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/shape/WpsContext.cxx b/oox/source/shape/WpsContext.cxx
index a22d6b8..657071b 100644
--- a/oox/source/shape/WpsContext.cxx
+++ b/oox/source/shape/WpsContext.cxx
@@ -13,6 +13,9 @@
 #include <drawingml/shapestylecontext.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/drawing/HomogenMatrix3.hpp>
+#include <basegfx/tuple/b2dtuple.hxx>
+#include <svx/svdtrans.hxx>
 
 #include <boost/optional.hpp>
 
@@ -76,9 +79,33 @@ oox::core::ContextHandlerRef WpsContext::onCreateContext(sal_Int32 nElementToken
                 }
                 else
                 {
-                    comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry"));
-                    aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(sal_Int32(-270));
-                    xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList()));
+                    // Get the existing rotation of the shape.
+                    drawing::HomogenMatrix3 aMatrix;
+                    xPropertySet->getPropertyValue("Transformation") >>= aMatrix;
+                    basegfx::B2DHomMatrix aTransformation;
+                    aTransformation.set(0, 0, aMatrix.Line1.Column1);
+                    aTransformation.set(0, 1, aMatrix.Line1.Column2);
+                    aTransformation.set(0, 2, aMatrix.Line1.Column3);
+                    aTransformation.set(1, 0, aMatrix.Line1.Column1);
+                    aTransformation.set(1, 1, aMatrix.Line2.Column2);
+                    aTransformation.set(1, 2, aMatrix.Line3.Column3);
+                    aTransformation.set(2, 0, aMatrix.Line1.Column1);
+                    aTransformation.set(2, 1, aMatrix.Line2.Column2);
+                    aTransformation.set(2, 2, aMatrix.Line3.Column3);
+                    basegfx::B2DTuple aScale;
+                    basegfx::B2DTuple aTranslate;
+                    double fRotate = 0;
+                    double fShearX = 0;
+                    aTransformation.decompose(aScale, aTranslate, fRotate, fShearX);
+
+                    // If the text is not rotated the way the shape wants it already, set the angle.
+                    const sal_Int32 nRotation = -270;
+                    if (basegfx::rad2deg(fRotate) != static_cast<double>(NormAngle360(nRotation * 100)) / 100)
+                    {
+                        comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry"));
+                        aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(nRotation);
+                        xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList()));
+                    }
                 }
             }
 
diff --git a/sw/qa/extras/ooxmlimport/data/tdf87924.docx b/sw/qa/extras/ooxmlimport/data/tdf87924.docx
new file mode 100644
index 0000000..5265d66
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf87924.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 8830582..291d982 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2759,6 +2759,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx")
     CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty<sal_Int16>(xTableRows->getByIndex(0), "SizeType"));
 }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf87924, "tdf87924.docx")
+{
+    uno::Reference<beans::XPropertySet> xPropertySet(getShape(1), uno::UNO_QUERY);
+    comphelper::SequenceAsHashMap aGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry"));
+    // This was -270, the text rotation angle was set when it should not be rotated.
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), aGeometry["TextPreRotateAngle"].get<sal_Int32>());
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list