Kaydet (Commit) dbfed66e authored tarafından Miklos Vajna's avatar Miklos Vajna

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.

Change-Id: I7c65319258136288520bd24fa2bf8e3c598b0878
üst 53e53582
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#include <drawingml/shapestylecontext.hxx> #include <drawingml/shapestylecontext.hxx>
#include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XPropertyState.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> #include <boost/optional.hpp>
...@@ -76,9 +79,33 @@ oox::core::ContextHandlerRef WpsContext::onCreateContext(sal_Int32 nElementToken ...@@ -76,9 +79,33 @@ oox::core::ContextHandlerRef WpsContext::onCreateContext(sal_Int32 nElementToken
} }
else else
{ {
comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry")); // Get the existing rotation of the shape.
aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(sal_Int32(-270)); drawing::HomogenMatrix3 aMatrix;
xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList())); 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) != NormAngle360(nRotation * 100) / 100)
{
comphelper::SequenceAsHashMap aCustomShapeGeometry(xPropertySet->getPropertyValue("CustomShapeGeometry"));
aCustomShapeGeometry["TextPreRotateAngle"] = uno::makeAny(nRotation);
xPropertySet->setPropertyValue("CustomShapeGeometry", uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList()));
}
} }
} }
......
...@@ -2758,6 +2758,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx") ...@@ -2758,6 +2758,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx")
CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty<sal_Int16>(xTableRows->getByIndex(0), "SizeType")); 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 #endif
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
......
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