diff options
-rw-r--r-- | svx/qa/unit/customshapes.cxx | 73 | ||||
-rw-r--r-- | svx/qa/unit/data/tdf148714_CurvedArrows.ppt | bin | 0 -> 99840 bytes | |||
-rw-r--r-- | svx/source/customshapes/EnhancedCustomShapeGeometry.cxx | 12 |
3 files changed, 81 insertions, 4 deletions
diff --git a/svx/qa/unit/customshapes.cxx b/svx/qa/unit/customshapes.cxx index fc671384e0c80..62e7728f75568 100644 --- a/svx/qa/unit/customshapes.cxx +++ b/svx/qa/unit/customshapes.cxx @@ -39,6 +39,8 @@ #include <com/sun/star/awt/Rectangle.hpp> #include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp> #include <com/sun/star/drawing/GraphicExportFilter.hpp> #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> #include <com/sun/star/drawing/XDrawPage.hpp> @@ -1304,6 +1306,77 @@ CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf148501_OctagonBevel) nColorDistance = aExpectedColor.GetColorError(aActualColor); CPPUNIT_ASSERT_LESS(sal_uInt16(6), nColorDistance); } + +bool lcl_getShapeSegments(uno::Sequence<drawing::EnhancedCustomShapeSegment>& rSegments, + const uno::Reference<drawing::XShape>& xShape) +{ + uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY_THROW); + uno::Any anotherAny = xShapeProps->getPropertyValue("CustomShapeGeometry"); + uno::Sequence<beans::PropertyValue> aCustomShapeGeometry; + if (!(anotherAny >>= aCustomShapeGeometry)) + return false; + uno::Sequence<beans::PropertyValue> aPathProps; + for (beans::PropertyValue const& rProp : std::as_const(aCustomShapeGeometry)) + { + if (rProp.Name == "Path") + { + rProp.Value >>= aPathProps; + break; + } + } + + for (beans::PropertyValue const& rProp : std::as_const(aPathProps)) + { + if (rProp.Name == "Segments") + { + rProp.Value >>= rSegments; + break; + } + } + if (rSegments.getLength() > 2) + return true; + else + return false; +} + +CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf148714_CurvedArrows) +{ + // Error was, that the line between 1. and 2. arc was missing. + OUString sURL = m_directories.getURLFromSrc(sDataDirectory) + "tdf148714_CurvedArrows.ppt"; + mxComponent = loadFromDesktop(sURL, "com.sun.star.presentation.PresentationDocument"); + + for (sal_Int32 nShapeIndex = 0; nShapeIndex < 4; nShapeIndex++) + { + uno::Reference<drawing::XShape> xShape(getShape(nShapeIndex)); + uno::Sequence<drawing::EnhancedCustomShapeSegment> aSegments; + CPPUNIT_ASSERT(lcl_getShapeSegments(aSegments, xShape)); + + if (nShapeIndex == 0 || nShapeIndex == 3) + { + // curvedDownArrow or curvedLeftArrow. Segments should start with VW. Without fix it was + // V with count 2, which means VV. + CPPUNIT_ASSERT_EQUAL( + sal_Int16(drawing::EnhancedCustomShapeSegmentCommand::CLOCKWISEARC), + aSegments[0].Command); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), aSegments[0].Count); + CPPUNIT_ASSERT_EQUAL( + sal_Int16(drawing::EnhancedCustomShapeSegmentCommand::CLOCKWISEARCTO), + aSegments[1].Command); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), aSegments[1].Count); + } + else + { + // curvedUpArrow or curvedRightArrow. Segments should start with BA. Without fix is was + // B with count 2, which means BB. + CPPUNIT_ASSERT_EQUAL(sal_Int16(drawing::EnhancedCustomShapeSegmentCommand::ARC), + aSegments[0].Command); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), aSegments[0].Count); + CPPUNIT_ASSERT_EQUAL(sal_Int16(drawing::EnhancedCustomShapeSegmentCommand::ARCTO), + aSegments[1].Command); + CPPUNIT_ASSERT_EQUAL(sal_Int16(1), aSegments[1].Count); + } + } +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/qa/unit/data/tdf148714_CurvedArrows.ppt b/svx/qa/unit/data/tdf148714_CurvedArrows.ppt Binary files differnew file mode 100644 index 0000000000000..23e4ed0ad3ebf --- /dev/null +++ b/svx/qa/unit/data/tdf148714_CurvedArrows.ppt diff --git a/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx b/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx index 7539bfd8015e1..0f999ed422090 100644 --- a/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx +++ b/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx @@ -1199,7 +1199,8 @@ const SvxMSDffVertPair mso_sptCurvedRightVert[] = }; const sal_uInt16 mso_sptCurvedRightSegm[] = { - 0xa408, + 0xa404, + 0xa304, 0x0003, 0xa508, 0x6000, @@ -1309,7 +1310,8 @@ const SvxMSDffVertPair mso_sptCurvedDownVert[] = }; const sal_uInt16 mso_sptCurvedDownSegm[] = { - 0xa608, + 0xa604, + 0xa504, 0x0003, 0xa308, 0x6000, @@ -1364,7 +1366,8 @@ const SvxMSDffVertPair mso_sptCurvedUpVert[] = }; const sal_uInt16 mso_sptCurvedUpSegm[] = { - 0xa408, + 0xa404, + 0xa304, 0x0003, 0xa508, 0x6000, @@ -1470,7 +1473,8 @@ const SvxMSDffVertPair mso_sptCurvedLeftVert[] = }; const sal_uInt16 mso_sptCurvedLeftSegm[] = { - 0xa608, + 0xa604, + 0xa504, 0x0003, 0xa308, 0x6000, |