diff options
-rw-r--r-- | sw/qa/extras/odfexport/data/tdf103567.odt | bin | 0 -> 13562 bytes | |||
-rw-r--r-- | sw/qa/extras/odfexport/odfexport.cxx | 36 | ||||
-rw-r--r-- | xmloff/source/text/XMLTextFrameContext.cxx | 29 |
3 files changed, 65 insertions, 0 deletions
diff --git a/sw/qa/extras/odfexport/data/tdf103567.odt b/sw/qa/extras/odfexport/data/tdf103567.odt Binary files differnew file mode 100644 index 000000000000..cbd29bd298a5 --- /dev/null +++ b/sw/qa/extras/odfexport/data/tdf103567.odt diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx index f53ec92c9c02..e27b2da82320 100644 --- a/sw/qa/extras/odfexport/odfexport.cxx +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -17,6 +17,7 @@ #include <com/sun/star/awt/Gradient.hpp> #include <com/sun/star/container/XIndexReplace.hpp> #include <com/sun/star/drawing/FillStyle.hpp> +#include <com/sun/star/drawing/PointSequenceSequence.hpp> #include <com/sun/star/table/ShadowFormat.hpp> #include <com/sun/star/table/XCellRange.hpp> #include <com/sun/star/text/RelOrientation.hpp> @@ -109,6 +110,41 @@ DECLARE_ODFEXPORT_TEST(testMathObjectFlatExport, "2_MathType3.docx") CPPUNIT_ASSERT_EQUAL(OUString(" size 12{2+2=4} {}"), formula2); } +DECLARE_ODFEXPORT_TEST(testTdf103567, "tdf103567.odt") +{ + uno::Reference<drawing::XShape> const xShape(getShape(1)); + + // contour wrap polygon + css::drawing::PointSequenceSequence const pointss( + getProperty<css::drawing::PointSequenceSequence>(xShape, "ContourPolyPolygon")); + CPPUNIT_ASSERT_EQUAL(1, pointss.getLength()); + // for some reason this property exists with 199 points if it wasn't + // imported, that would be a fail + CPPUNIT_ASSERT_EQUAL(5, pointss[0].getLength()); + CPPUNIT_ASSERT_EQUAL( 0, pointss[0][0].X); + CPPUNIT_ASSERT_EQUAL(2672, pointss[0][0].Y); + CPPUNIT_ASSERT_EQUAL( 0, pointss[0][1].X); + CPPUNIT_ASSERT_EQUAL(1111, pointss[0][1].Y); + CPPUNIT_ASSERT_EQUAL(2672, pointss[0][2].X); + CPPUNIT_ASSERT_EQUAL(1111, pointss[0][2].Y); + CPPUNIT_ASSERT_EQUAL(2672, pointss[0][3].X); + CPPUNIT_ASSERT_EQUAL(2672, pointss[0][3].Y); + CPPUNIT_ASSERT_EQUAL( 0, pointss[0][4].X); + CPPUNIT_ASSERT_EQUAL(2672, pointss[0][4].Y); + + // image map, one rectangle + uno::Reference<container::XIndexContainer> const xImageMap( + getProperty<uno::Reference<container::XIndexContainer>>(xShape, "ImageMap")); + + uno::Reference<beans::XPropertySet> const xEntry(xImageMap->getByIndex(0), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(OUString("http://example.com/"), getProperty<OUString>(xEntry, "URL")); + awt::Rectangle const rect(getProperty<awt::Rectangle>(xEntry, "Boundary")); + CPPUNIT_ASSERT_EQUAL( 726, rect.X); + CPPUNIT_ASSERT_EQUAL(1718, rect.Y); + CPPUNIT_ASSERT_EQUAL(1347, rect.Width); + CPPUNIT_ASSERT_EQUAL( 408, rect.Height); +} + DECLARE_ODFEXPORT_TEST(testFramebackgrounds, "framebackgrounds.odt") { //Counting the Number of Frames and checking with the expected count diff --git a/xmloff/source/text/XMLTextFrameContext.cxx b/xmloff/source/text/XMLTextFrameContext.cxx index 4d7a03df8b98..20ee3842f933 100644 --- a/xmloff/source/text/XMLTextFrameContext.cxx +++ b/xmloff/source/text/XMLTextFrameContext.cxx @@ -1503,6 +1503,10 @@ SvXMLImportContext *XMLTextFrameContext::CreateChildContext( { if( IsXMLToken( rLocalName, XML_TITLE ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(), p_nPrefix, rLocalName, @@ -1510,6 +1514,10 @@ SvXMLImportContext *XMLTextFrameContext::CreateChildContext( } else if ( IsXMLToken( rLocalName, XML_DESC ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(), p_nPrefix, rLocalName, @@ -1522,24 +1530,40 @@ SvXMLImportContext *XMLTextFrameContext::CreateChildContext( Reference < XPropertySet > xPropSet; if( IsXMLToken( rLocalName, XML_CONTOUR_POLYGON ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } if( CreateIfNotThere( xPropSet ) ) pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName, xAttrList, xPropSet, false ); } else if( IsXMLToken( rLocalName, XML_CONTOUR_PATH ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } if( CreateIfNotThere( xPropSet ) ) pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName, xAttrList, xPropSet, true ); } else if( IsXMLToken( rLocalName, XML_IMAGE_MAP ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } if( CreateIfNotThere( xPropSet ) ) pContext = new XMLImageMapContext( GetImport(), p_nPrefix, rLocalName, xPropSet ); } } else if( (XML_NAMESPACE_OFFICE == p_nPrefix) && IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + m_xImplContext = solveMultipleImages(); + } // do we still have the frame object? Reference < XPropertySet > xPropSet; if( CreateIfNotThere( xPropSet ) ) @@ -1558,6 +1582,11 @@ SvXMLImportContext *XMLTextFrameContext::CreateChildContext( else if( p_nPrefix == XML_NAMESPACE_SVG && // #i68101# (IsXMLToken( rLocalName, XML_TITLE ) || IsXMLToken( rLocalName, XML_DESC ) ) ) { + if (getSupportsMultipleContents()) + { // tdf#103567 ensure props are set on surviving shape + // note: no more draw:image can be added once we get here + m_xImplContext = solveMultipleImages(); + } pContext = m_xImplContext->CreateChildContext( p_nPrefix, rLocalName, xAttrList ); } else |