diff options
author | Tünde Tóth <toth.tunde@nisz.hu> | 2022-09-13 10:29:03 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2022-09-28 14:16:50 +0200 |
commit | adc042f95d3dbd65b778260025d59283146916e5 (patch) | |
tree | be039e80dd6ca2d4b2d8d2baa4c5af0f5ae11ebd /oox | |
parent | 36003e7644014cde9330bf45fee3815278a74035 (diff) |
tdf#124333 PPTX import: fix Z-order of embedded OLE objects
Choose mc:Choice in a:graphicData element
if the selected p:oleObj element has a shape id
to avoid of shape duplication which created also
bad layout/overlapping because of the different Z-order
of the duplicated shape.
Change-Id: Idecff4903c2d637bc82353f13352cac72413cec1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140041
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'oox')
-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 |
3 files changed, 24 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()) |