diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2019-02-26 09:44:00 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-02-26 10:44:31 +0100 |
commit | 159e33ec661b2ce038b2642b2f30600ce7901d1b (patch) | |
tree | b2cd2dc577d732ce2ad377a55936e79d0fb94d59 /oox | |
parent | 3caf379f1c6398548c65bb7a83e3911d9a8bc444 (diff) |
oox smartart, picture strip: fix too many columns with aspect ratio request
The bugdoc has 3 items in the picture strip and PowerPoint laid this out
as a single column with 3 rows (as a snake algorithm). We used to put
the first two items to the first row and the third item to the second
row.
Improve out layout by taking into account what aspect ratio the child
algorithms request: this way it's obvious that we should use a single
column in case we have a large enough aspect ratio and few enough items.
(PowerPoint also uses multiple columns without the aspect ratio
request.)
Change-Id: I9f1158c04c665fc6a2c85e4ac3a1ed363b1c75fb
Reviewed-on: https://gerrit.libreoffice.org/68370
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx index 5af87e0851b8..d06661e4f7e0 100644 --- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx @@ -908,19 +908,34 @@ void AlgAtom::layoutShape( const ShapePtr& rShape, sal_Int32 nCol = 1; sal_Int32 nRow = 1; - for ( ; nRow<nCount; nRow++) + double fChildAspectRatio = rShape->getChildren()[0]->getAspectRatio(); + if (nCount <= fChildAspectRatio) + // Child aspect ratio request (width/height) is N, and we have at most N shapes. + // This means we don't need multiple columns. + nRow = nCount; + else { - nCol = (nCount+nRow-1) / nRow; - const double fShapeHeight = rShape->getSize().Height; - const double fShapeWidth = rShape->getSize().Width; - if ((fShapeHeight / nCol) / (fShapeWidth / nRow) >= fAspectRatio) - break; + for ( ; nRow<nCount; nRow++) + { + nCol = (nCount+nRow-1) / nRow; + const double fShapeHeight = rShape->getSize().Height; + const double fShapeWidth = rShape->getSize().Width; + if ((fShapeHeight / nCol) / (fShapeWidth / nRow) >= fAspectRatio) + break; + } } SAL_INFO("oox.drawingml", "Snake layout grid: " << nCol << "x" << nRow); sal_Int32 nWidth = rShape->getSize().Width / (nCol + (nCol-1)*fSpace); - const awt::Size aChildSize(nWidth, nWidth * fAspectRatio); + awt::Size aChildSize(nWidth, nWidth * fAspectRatio); + if (nCol == 1 && nRow > 1) + { + // We have a single column, so count the height based on the parent height, not + // based on width. + sal_Int32 nHeight = rShape->getSize().Height / (nRow + (nRow - 1) * fSpace); + aChildSize = awt::Size(rShape->getSize().Width, nHeight); + } awt::Point aCurrPos(0, 0); if (nIncX == -1) |