[Libreoffice-commits] core.git: oox/source
Grzegorz Araminowicz
g.araminowicz at gmail.com
Wed Aug 30 11:59:39 UTC 2017
oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 26 ++++++++++++++++----
1 file changed, 21 insertions(+), 5 deletions(-)
New commits:
commit 79b5d5037ba32f30ee383402314e12bfa965fb02
Author: Grzegorz Araminowicz <g.araminowicz at gmail.com>
Date: Tue Aug 22 17:04:01 2017 +0200
SmartArt: grDir snake algorithm parameter
Change-Id: I643ed981cc9d02e5118f09a3c04abcea2fc5ecd7
Reviewed-on: https://gerrit.libreoffice.org/41516
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
index 791381ccda87..147790f9f5db 100644
--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
+++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
@@ -400,6 +400,17 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
if (rShape->getChildren().empty() || rShape->getSize().Width == 0 || rShape->getSize().Height == 0)
break;
+ const sal_Int32 nDir = maMap.count(XML_grDir) ? maMap.find(XML_grDir)->second : XML_tL;
+ sal_Int32 nIncX = 1;
+ sal_Int32 nIncY = 1;
+ switch (nDir)
+ {
+ case XML_tL: nIncX = 1; nIncY = 1; break;
+ case XML_tR: nIncX = -1; nIncY = 1; break;
+ case XML_bL: nIncX = 1; nIncY = -1; break;
+ case XML_bR: nIncX = -1; nIncY = -1; break;
+ }
+
// TODO: get values from constraints
sal_Int32 nCount = rShape->getChildren().size();
double fSpace = 0.3;
@@ -420,8 +431,13 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
sal_Int32 nWidth = rShape->getSize().Width / (nCol + (nCol-1)*fSpace);
const awt::Size aChildSize(nWidth, nWidth * fAspectRatio);
- awt::Point aStartPos = rShape->getChildren().front()->getPosition();
- awt::Point aCurrPos = aStartPos;
+ awt::Point aCurrPos(0, 0);
+ if (nIncX == -1)
+ aCurrPos.X = rShape->getSize().Width - aChildSize.Width;
+ if (nIncY == -1)
+ aCurrPos.Y = rShape->getSize().Height - aChildSize.Height;
+
+ sal_Int32 nStartX = aCurrPos.X;
sal_Int32 nColIdx = 0;
for (auto & aCurrShape : rShape->getChildren())
@@ -429,11 +445,11 @@ void AlgAtom::layoutShape( const ShapePtr& rShape,
aCurrShape->setPosition(aCurrPos);
aCurrShape->setSize(aChildSize);
aCurrShape->setChildSize(aChildSize);
- aCurrPos.X += aChildSize.Width + fSpace*aChildSize.Width;
+ aCurrPos.X += nIncX * (aChildSize.Width + fSpace*aChildSize.Width);
if (++nColIdx == nCol)
{
- aStartPos.Y += aChildSize.Height + fSpace*aChildSize.Height;
- aCurrPos = aStartPos;
+ aCurrPos.X = nStartX;
+ aCurrPos.Y += nIncY * (aChildSize.Height + fSpace*aChildSize.Height);
nColIdx = 0;
}
}
More information about the Libreoffice-commits
mailing list