diff options
-rw-r--r-- | oox/qa/unit/vml.cxx | 15 | ||||
-rw-r--r-- | oox/source/drawingml/graphicshapecontext.cxx | 3 | ||||
-rw-r--r-- | oox/source/drawingml/shape.cxx | 17 | ||||
-rw-r--r-- | sd/qa/unit/data/pptx/ole.pptx | bin | 0 -> 41588 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests-ooxml3.cxx | 21 |
5 files changed, 45 insertions, 11 deletions
diff --git a/oox/qa/unit/vml.cxx b/oox/qa/unit/vml.cxx index 9dcaaef83cc4..61730c744220 100644 --- a/oox/qa/unit/vml.cxx +++ b/oox/qa/unit/vml.cxx @@ -192,18 +192,13 @@ CPPUNIT_TEST_FIXTURE(OoxVmlTest, testGraphicStroke) uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY); - uno::Reference<beans::XPropertySet> xShape; - for (sal_Int32 i = 0; i < xDrawPage->getCount(); ++i) - { - uno::Reference<lang::XServiceInfo> xInfo(xDrawPage->getByIndex(i), uno::UNO_QUERY); - if (!xInfo->supportsService("com.sun.star.drawing.GraphicObjectShape")) - { - continue; - } + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount()); + uno::Reference<beans::XPropertySet> xShape; + uno::Reference<lang::XServiceInfo> xInfo(xDrawPage->getByIndex(0), uno::UNO_QUERY); + if (xInfo->supportsService("com.sun.star.drawing.OLE2Shape")) xShape.set(xInfo, uno::UNO_QUERY); - break; - } + CPPUNIT_ASSERT(xShape.is()); drawing::LineStyle eLineStyle{}; diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx index 6e4379c2e1ed..0f96d0a92d63 100644 --- a/oox/source/drawingml/graphicshapecontext.cxx +++ b/oox/source/drawingml/graphicshapecontext.cxx @@ -256,7 +256,8 @@ void OleObjectGraphicDataContext::onEndElement() { if( getCurrentElement() == PPT_TOKEN( oleObj ) && !isMCEStateEmpty() ) { - if( getMCEState() == MCE_STATE::FoundChoice && !mrOleObjectInfo.mbHasPicture ) + if (getMCEState() == MCE_STATE::FoundChoice && !mrOleObjectInfo.mbHasPicture + && mrOleObjectInfo.maShapeId.isEmpty()) setMCEState( MCE_STATE::Started ); } } diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 2a46f93a440e..0369f5ff732c 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1868,6 +1868,23 @@ Reference< XShape > const & Shape::createAndInsert( propertySet->setPropertyValue( "SoftEdgeRadius", Any(convertEmuToHmm(aEffectProperties.maSoftEdge.moRad.value()))); } + + // Set the stroke and fill-color properties of the OLE shape + if (aServiceName == "com.sun.star.drawing.OLE2Shape" && mxOleObjectInfo + && !mxOleObjectInfo->maShapeId.isEmpty()) + if (::oox::vml::Drawing* pVmlDrawing = rFilterBase.getVmlDrawing()) + if (const ::oox::vml::ShapeBase* pVmlShape + = pVmlDrawing->getShapes().getShapeById(mxOleObjectInfo->maShapeId)) + { + // Apply stroke props from the type model of the related VML shape. + ShapePropertyMap aPropMap(rFilterBase.getModelObjectHelper()); + pVmlShape->getTypeModel().maStrokeModel.pushToPropMap( + aPropMap, rFilterBase.getGraphicHelper()); + // And, fill-color properties as well... + pVmlShape->getTypeModel().maFillModel.pushToPropMap( + aPropMap, rFilterBase.getGraphicHelper()); + PropertySet(xSet).setProperties(aPropMap); + } } if (mxShape.is()) diff --git a/sd/qa/unit/data/pptx/ole.pptx b/sd/qa/unit/data/pptx/ole.pptx Binary files differnew file mode 100644 index 000000000000..b998e79e0d66 --- /dev/null +++ b/sd/qa/unit/data/pptx/ole.pptx diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx index c12a1f0ec4bd..e2ef6928104f 100644 --- a/sd/qa/unit/export-tests-ooxml3.cxx +++ b/sd/qa/unit/export-tests-ooxml3.cxx @@ -122,6 +122,7 @@ public: void testTdf149551_tbrl90(); void testTdf149551_btlr(); void testTdf94122_autoColor(); + void testTdf124333(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest3); @@ -209,6 +210,7 @@ public: CPPUNIT_TEST(testTdf149551_tbrl90); CPPUNIT_TEST(testTdf149551_btlr); CPPUNIT_TEST(testTdf94122_autoColor); + CPPUNIT_TEST(testTdf124333); CPPUNIT_TEST_SUITE_END(); virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override @@ -2260,6 +2262,25 @@ void SdOOXMLExportTest3::testTdf94122_autoColor() "val", "000000"); } +void SdOOXMLExportTest3::testTdf124333() +{ + // Document contains one rectangle and one embedded OLE object. + ::sd::DrawDocShellRef xDocShRef + = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/ole.pptx"), PPTX); + + // Without the fix in place, the number of shapes was 3. + CPPUNIT_ASSERT_EQUAL_MESSAGE("number of shapes is incorrect", sal_Int32(2), + getPage(0, xDocShRef)->getCount()); + + xDocShRef = saveAndReload(xDocShRef.get(), PPTX); + + // Check number of shapes after export. + CPPUNIT_ASSERT_EQUAL_MESSAGE("number of shapes is incorrect after export", sal_Int32(2), + getPage(0, xDocShRef)->getCount()); + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest3); CPPUNIT_PLUGIN_IMPLEMENT(); |