diff options
-rw-r--r-- | oox/source/export/drawingml.cxx | 18 | ||||
-rwxr-xr-x | sd/qa/unit/data/odp/tdf59046.odp | bin | 0 -> 10800 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests-ooxml2.cxx | 12 |
3 files changed, 22 insertions, 8 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index deafd3477a7e..0951449950a3 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -2556,16 +2556,19 @@ void DrawingML::WritePolyPolygon( const tools::PolyPolygon& rPolyPolygon ) mpFS->startElementNS( XML_a, XML_pathLst, FSEND ); + const Rectangle aRect( rPolyPolygon.GetBoundRect() ); + + // Put all polygons of rPolyPolygon in the same path elemnt + // to subtract the overlapped areas. + mpFS->startElementNS( XML_a, XML_path, + XML_w, I64S( aRect.GetWidth() ), + XML_h, I64S( aRect.GetHeight() ), + FSEND ); + for( sal_uInt16 i = 0; i < rPolyPolygon.Count(); i ++ ) { const tools::Polygon& rPoly = rPolyPolygon[ i ]; - Rectangle aRect( rPoly.GetBoundRect() ); - - mpFS->startElementNS( XML_a, XML_path, - XML_w, I64S( aRect.GetWidth() ), - XML_h, I64S( aRect.GetHeight() ), - FSEND ); if( rPoly.GetSize() > 0 ) { @@ -2611,9 +2614,8 @@ void DrawingML::WritePolyPolygon( const tools::PolyPolygon& rPolyPolygon ) mpFS->endElementNS( XML_a, XML_lnTo ); } } - - mpFS->endElementNS( XML_a, XML_path ); } + mpFS->endElementNS( XML_a, XML_path ); mpFS->endElementNS( XML_a, XML_pathLst ); diff --git a/sd/qa/unit/data/odp/tdf59046.odp b/sd/qa/unit/data/odp/tdf59046.odp Binary files differnew file mode 100755 index 000000000000..5c56acb95c76 --- /dev/null +++ b/sd/qa/unit/data/odp/tdf59046.odp diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx index 26e5685b1f40..05ef4aa700aa 100644 --- a/sd/qa/unit/export-tests-ooxml2.cxx +++ b/sd/qa/unit/export-tests-ooxml2.cxx @@ -102,6 +102,7 @@ public: void testAuthorField(); void testTdf99224(); void testTdf92076(); + void testTdf59046(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest2); @@ -127,6 +128,7 @@ public: CPPUNIT_TEST(testAuthorField); CPPUNIT_TEST(testTdf99224); CPPUNIT_TEST(testTdf92076); + CPPUNIT_TEST(testTdf59046); CPPUNIT_TEST_SUITE_END(); @@ -747,6 +749,16 @@ void SdOOXMLExportTest2::testTdf92076() xShell->DoClose(); } +void SdOOXMLExportTest2::testTdf59046() +{ + sd::DrawDocShellRef xShell = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/odp/tdf59046.odp"), ODP); + utl::TempFile tempFile; + xShell = saveAndReload(xShell.get(), PPTX, &tempFile); + xShell->DoClose(); + xmlDocPtr pXmlDocRels = parseExport(tempFile, "ppt/slides/slide1.xml"); + assertXPath(pXmlDocRels, "/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:custGeom/a:pathLst/a:path", 1); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest2); CPPUNIT_PLUGIN_IMPLEMENT(); |