summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--svx/qa/unit/data/auto-height-multi-col-shape.pptxbin0 -> 16350 bytes
-rw-r--r--svx/qa/unit/svdraw.cxx27
-rw-r--r--svx/source/svdraw/svdoashp.cxx11
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
new file mode 100644
index 000000000000..12f232b0f236
--- /dev/null
+++ b/svx/qa/unit/data/auto-height-multi-col-shape.pptx
Binary files differ
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();
}
}