[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