summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/oox/drawingml/shape.hxx2
-rw-r--r--oox/source/drawingml/shape.cxx17
-rw-r--r--oox/source/ppt/pptshapegroupcontext.cxx23
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx19
-rw-r--r--sd/qa/unit/import-tests-smartart.cxx1
5 files changed, 35 insertions, 27 deletions
diff --git a/include/oox/drawingml/shape.hxx b/include/oox/drawingml/shape.hxx
index 4b25aa49e223..e7d06476656d 100644
--- a/include/oox/drawingml/shape.hxx
+++ b/include/oox/drawingml/shape.hxx
@@ -227,6 +227,8 @@ public:
/// Changes reference semantics to value semantics for fill properties.
void cloneFillProperties();
+ void keepDiagramDrawing(::oox::core::XmlFilterBase& rFilterBase, const OUString& rFragmentPath);
+
protected:
enum FrameType
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 0c522bdfe63e..3c84428389a5 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -64,6 +64,7 @@
#include <com/sun/star/beans/XMultiPropertySet.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/xml/AttributeData.hpp>
+#include <com/sun/star/xml/dom/XDocument.hpp>
#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
#include <com/sun/star/drawing/HomogenMatrix3.hpp>
#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
@@ -1388,6 +1389,22 @@ Reference< XShape > const & Shape::createAndInsert(
return mxShape;
}
+void Shape::keepDiagramDrawing(XmlFilterBase& rFilterBase, const OUString& rFragmentPath)
+{
+ uno::Sequence<uno::Any> diagramDrawing(2);
+ // drawingValue[0] => dom, drawingValue[1] => Sequence of associated relationships
+
+ sal_Int32 length = maDiagramDoms.getLength();
+ maDiagramDoms.realloc(length + 1);
+
+ diagramDrawing[0] <<= rFilterBase.importFragment(rFragmentPath);
+ diagramDrawing[1] <<= resolveRelationshipsOfTypeFromOfficeDoc(rFilterBase, rFragmentPath, "image");
+
+ beans::PropertyValue* pValue = maDiagramDoms.getArray();
+ pValue[length].Name = "OOXDrawing";
+ pValue[length].Value <<= diagramDrawing;
+}
+
void Shape::keepDiagramCompatibilityInfo()
{
try
diff --git a/oox/source/ppt/pptshapegroupcontext.cxx b/oox/source/ppt/pptshapegroupcontext.cxx
index c53b69823c9b..c2e5f2f2c9b4 100644
--- a/oox/source/ppt/pptshapegroupcontext.cxx
+++ b/oox/source/ppt/pptshapegroupcontext.cxx
@@ -134,16 +134,19 @@ void PPTShapeGroupContext::importExtDrawings( )
if( pGraphicShape )
{
for (auto const& extDrawing : pGraphicShape->getExtDrawings())
- {
- getFilter().importFragment( new ExtDrawingFragmentHandler( getFilter(), getFragmentPathFromRelId(extDrawing),
- mpSlidePersistPtr,
- meShapeLocation,
- mpGroupShapePtr,
- pGraphicShape ) );
- // Apply font color imported from color fragment
- if( pGraphicShape->getFontRefColorForNodes().isUsed() )
- applyFontRefColor(mpGroupShapePtr, pGraphicShape->getFontRefColorForNodes());
- }
+ {
+ OUString aFragmentPath = getFragmentPathFromRelId(extDrawing);
+ getFilter().importFragment( new ExtDrawingFragmentHandler( getFilter(), aFragmentPath,
+ mpSlidePersistPtr,
+ meShapeLocation,
+ mpGroupShapePtr,
+ pGraphicShape ) );
+ pGraphicShape->keepDiagramDrawing(getFilter(), aFragmentPath);
+
+ // Apply font color imported from color fragment
+ if( pGraphicShape->getFontRefColorForNodes().isUsed() )
+ applyFontRefColor(mpGroupShapePtr, pGraphicShape->getFontRefColorForNodes());
+ }
pGraphicShape = oox::drawingml::ShapePtr( nullptr );
}
}
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index 4abd405c234e..32533eadf825 100644
--- a/oox/source/shape/ShapeContextHandler.cxx
+++ b/oox/source/shape/ShapeContextHandler.cxx
@@ -431,23 +431,8 @@ ShapeContextHandler::getShape()
oox::drawingml::ShapePtr pShapePtr( new Shape( "com.sun.star.drawing.GroupShape" ) );
pShapePtr->setDiagramType();
mxFilterBase->importFragment(new ShapeDrawingFragmentHandler(*mxFilterBase, aFragmentPath, pShapePtr));
-
- uno::Sequence<beans::PropertyValue> aValue(mpShape->getDiagramDoms());
- uno::Sequence < uno::Any > diagramDrawing(2);
- // drawingValue[0] => dom, drawingValue[1] => Sequence of associated relationships
-
- sal_Int32 length = aValue.getLength();
- aValue.realloc(length+1);
-
- diagramDrawing[0] <<= mxFilterBase->importFragment( aFragmentPath );
- diagramDrawing[1] <<= pShapePtr->resolveRelationshipsOfTypeFromOfficeDoc(
- *mxFilterBase, aFragmentPath, "image" );
-
- beans::PropertyValue* pValue = aValue.getArray();
- pValue[length].Name = "OOXDrawing";
- pValue[length].Value <<= diagramDrawing;
-
- pShapePtr->setDiagramDoms( aValue );
+ pShapePtr->setDiagramDoms(mpShape->getDiagramDoms());
+ pShapePtr->keepDiagramDrawing(*mxFilterBase, aFragmentPath);
pShapePtr->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix, pShapePtr->getFillProperties() );
xResult = pShapePtr->getXShape();
diff --git a/sd/qa/unit/import-tests-smartart.cxx b/sd/qa/unit/import-tests-smartart.cxx
index 81474f2071ae..3d3194098b8b 100644
--- a/sd/qa/unit/import-tests-smartart.cxx
+++ b/sd/qa/unit/import-tests-smartart.cxx
@@ -1007,6 +1007,7 @@ void SdImportTestSmartArt::testInteropGrabBag()
CPPUNIT_ASSERT(aGrabBag.find("OOXLayout") != aGrabBag.end());
CPPUNIT_ASSERT(aGrabBag.find("OOXStyle") != aGrabBag.end());
CPPUNIT_ASSERT(aGrabBag.find("OOXColor") != aGrabBag.end());
+ CPPUNIT_ASSERT(aGrabBag.find("OOXDrawing") != aGrabBag.end());
xDocShRef->DoClose();
}