summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorGrzegorz Araminowicz <g.araminowicz@gmail.com>2017-06-30 13:30:27 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2017-07-11 13:50:24 +0200
commita7b7614c7cab42cd0839752635db81e25e1e50a1 (patch)
tree60967214af52cf8455eba83012de3fd396bf0dc5 /oox
parent20571c472528c4f98fe3f55700d134915d32a49a (diff)
SmartArt: reuse existing diagram shape for root shape
it prevents creating unnecessary expanded shape hierarchy and allows layout algorithm to know parent's size Change-Id: Ieb991a74bd662e359f5cf479a7480893e0b13d45 Reviewed-on: https://gerrit.libreoffice.org/39410 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/diagram/diagram.cxx12
-rw-r--r--oox/source/drawingml/diagram/diagramlayoutatoms.hxx15
-rwxr-xr-xoox/source/drawingml/diagram/layoutatomvisitors.cxx9
-rw-r--r--oox/source/drawingml/diagram/layoutnodecontext.cxx2
4 files changed, 27 insertions, 11 deletions
diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx
index 467d7005b534..533156bbfb86 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -317,13 +317,19 @@ void Diagram::addTo( const ShapePtr & pParentShape )
// collect data, init maps
build( );
+ if (pParentShape->getSize().Width == 0 || pParentShape->getSize().Height == 0)
+ SAL_WARN("oox.drawingml", "Diagram cannot be correctly laid out. Size: "
+ << pParentShape->getSize().Width << "x" << pParentShape->getSize().Height);
+
pParentShape->setChildSize(pParentShape->getSize());
- // create Shape hierarchy
- ShapeCreationVisitor aCreationVisitor(pParentShape, *this);
if( mpLayout->getNode() )
+ {
+ // create Shape hierarchy
+ ShapeCreationVisitor aCreationVisitor(pParentShape, *this);
+ mpLayout->getNode()->setExistingShape(pParentShape);
mpLayout->getNode()->accept( aCreationVisitor );
-
+ }
pParentShape->setDiagramDoms( getDomsAsPropertyValues() );
}
diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
index 2df1af060ec2..d5b9fcdf9e29 100644
--- a/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.hxx
@@ -238,10 +238,14 @@ public:
{ msStyleLabel = sLabel; }
void setChildOrder( sal_Int32 nOrder )
{ mnChildOrder = nOrder; }
- void setShape( const ShapePtr& pShape )
- { mpShape = pShape; }
- const ShapePtr& getShape() const
- { return mpShape; }
+ void setShapeTemplate( const ShapePtr& pShape )
+ { mpShapeTemplate = pShape; }
+ void setExistingShape( const ShapePtr& pShape )
+ { mpExistingShape = pShape; }
+ const ShapePtr& getShapeTemplate() const
+ { return mpShapeTemplate; }
+ const ShapePtr& getExistingShape() const
+ { return mpExistingShape; }
bool setupShape( const ShapePtr& rShape,
const Diagram& rDgm,
@@ -251,7 +255,8 @@ private:
VarMap mVariables;
OUString msMoveWith;
OUString msStyleLabel;
- ShapePtr mpShape;
+ ShapePtr mpShapeTemplate;
+ ShapePtr mpExistingShape;
sal_Int32 mnChildOrder;
};
diff --git a/oox/source/drawingml/diagram/layoutatomvisitors.cxx b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
index a0c1609ba927..fd6e9d7b7e1b 100755
--- a/oox/source/drawingml/diagram/layoutatomvisitors.cxx
+++ b/oox/source/drawingml/diagram/layoutatomvisitors.cxx
@@ -94,8 +94,13 @@ void ShapeCreationVisitor::visit(ChooseAtom& rAtom)
void ShapeCreationVisitor::visit(LayoutNode& rAtom)
{
ShapePtr pCurrParent(mpParentShape);
- ShapePtr pCurrShape(rAtom.getShape());
- if( pCurrShape )
+ ShapePtr pCurrShape(rAtom.getShapeTemplate());
+
+ if (rAtom.getExistingShape())
+ {
+ rAtom.setupShape(rAtom.getExistingShape(), mrDgm, mnCurrIdx);
+ }
+ else if( pCurrShape )
{
SAL_INFO(
"oox.drawingml",
diff --git a/oox/source/drawingml/diagram/layoutnodecontext.cxx b/oox/source/drawingml/diagram/layoutnodecontext.cxx
index d96a49b0529e..5d66de142c96 100644
--- a/oox/source/drawingml/diagram/layoutnodecontext.cxx
+++ b/oox/source/drawingml/diagram/layoutnodecontext.cxx
@@ -263,7 +263,7 @@ LayoutNodeContext::onCreateContext( ::sal_Int32 aElement,
pShape.reset( new Shape("com.sun.star.drawing.GroupShape") );
}
- pNode->setShape( pShape );
+ pNode->setShapeTemplate( pShape );
return new ShapeContext( *this, ShapePtr(), pShape );
}
else