diff options
-rw-r--r-- | svx/qa/unit/data/auto-height-multi-col-shape.pptx | bin | 0 -> 16350 bytes | |||
-rw-r--r-- | svx/qa/unit/svdraw.cxx | 27 | ||||
-rw-r--r-- | svx/source/svdraw/svdoashp.cxx | 11 |
3 files changed, 38 insertions, 0 deletions
diff --git a/svx/qa/unit/data/auto-height-multi-col-shape.pptx b/svx/qa/unit/data/auto-height-multi-col-shape.pptx Binary files differnew file mode 100644 index 000000000000..12f232b0f236 --- /dev/null +++ b/svx/qa/unit/data/auto-height-multi-col-shape.pptx diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx index 783420d56fea..6d4b4457b2c1 100644 --- a/svx/qa/unit/svdraw.cxx +++ b/svx/qa/unit/svdraw.cxx @@ -160,6 +160,33 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testTextEditEmptyGrabBag) // old text. CPPUNIT_ASSERT(!aGrabBag.hasElements()); } + +CPPUNIT_TEST_FIXTURE(SvdrawTest, testAutoHeightMultiColShape) +{ + // Given a document containing a shape that has: + // 1) automatic height (resize shape to fix text) + // 2) multiple columns (2) + OUString aURL + = m_directories.getURLFromSrc(u"svx/qa/unit/data/auto-height-multi-col-shape.pptx"); + + // When loading that document: + getComponent().set(loadFromDesktop(aURL, "com.sun.star.presentation.PresentationDocument")); + + // Make sure the in-file shape height is kept, even if nominally the the shape height is + // automatic: + uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY); + uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0), + uno::UNO_QUERY); + uno::Reference<drawing::XShape> xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 6882 + // - Actual : 3452 + // i.e. the shape height was smaller than expected, leading to a 2 columns layout instead of + // laying out all the text in the first column. + // 2477601 is from slide1.xml, <a:ext cx="4229467" cy="2477601"/>, 360 is emu -> mm100. + CPPUNIT_ASSERT_DOUBLES_EQUAL(static_cast<sal_Int32>(2477601 / 360), xShape->getSize().Height, + 1); +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx index 53d180435e9b..112e44bd531d 100644 --- a/svx/source/svdraw/svdoashp.cxx +++ b/svx/source/svdraw/svdoashp.cxx @@ -2318,7 +2318,18 @@ bool SdrObjCustomShape::AdjustTextFrameWidthAndHeight(tools::Rectangle& rR, bool nHgt=aSiz2.Height()+1; // a little more tolerance } else + { nHgt = rOutliner.GetTextHeight()+1; // a little more tolerance + + sal_Int16 nColumns = GetMergedItem(SDRATTR_TEXTCOLUMNS_NUMBER).GetValue(); + if (bHgtGrow && nColumns > 1) + { + // Both 'resize shape to fix text' and multiple columns are enabled. The + // first means a dynamic height, the second expects a fixed height. + // Resolve this conflict by going with the original height. + nHgt = rR.getHeight(); + } + } rOutliner.Clear(); } } |