summaryrefslogtreecommitdiffstats
path: root/sw/qa/core/text/text.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-09-13 19:27:48 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2021-09-14 11:41:03 +0200
commit168065841250c190808261cf65afa00f9ecd52e7 (patch)
tree495c04642a7fb1c54b405c154d52e092ee6cf267 /sw/qa/core/text/text.cxx
parenttdf#142415 mouse events not propogated to table control event handlers (diff)
downloadcore-168065841250c190808261cf65afa00f9ecd52e7.tar.gz
core-168065841250c190808261cf65afa00f9ecd52e7.zip
tdf#144305 sw: fix rendering of ruby portions with non-default ruby alignment
Regression from 301278b656e76b6f42af5cf8a6f5c6c02acfffeb (sw: allow the height of a line to be larger than 65536 twips, 2021-05-20), the problem was that changing from sal_uInt16 to sal_uInt32 broke SwRubyPortion::Adjust_(), which relied on integer promotion rules to have a negative diff. Old storage size was smaller than int, so got promoted to signed int, so the result could be a small negative number. New storage size is an unsigned int, so no promotion happens, so the new result was a large positive number. Fix this by casting to signed int explicitly. Change-Id: I8778c1bd0d62e27c99d4ceb1bb7bc6107a179803 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122048 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com> (cherry picked from commit 0c3e47cc2f0570a7cd8ff4889763991a86b29f26) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122066 Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'sw/qa/core/text/text.cxx')
-rw-r--r--sw/qa/core/text/text.cxx46
1 files changed, 46 insertions, 0 deletions
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index be6406f6b654..6832ad2cb436 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -21,6 +21,12 @@
#include <docsh.hxx>
#include <unotxdoc.hxx>
#include <wrtsh.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <txtfrm.hxx>
+
+#include <porlay.hxx>
+#include <pormulti.hxx>
constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/core/text/data/";
@@ -170,6 +176,46 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testLineWidth)
CPPUNIT_ASSERT_GREATER(static_cast<sal_Int32>(65536), nNewLeft - nOldLeft);
}
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRuby)
+{
+ // Given a document with multiple ruby portions:
+ SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "ruby.fodt");
+
+ // When laying out that document:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+
+ // Then make sure that no unwanted margin portions are created, making the actual text
+ // invisible:
+ SwFrame* pPageFrame = pLayout->GetLower();
+ SwFrame* pBodyFrame = pPageFrame->GetLower();
+ SwFrame* pFrame = pBodyFrame->GetLower();
+ CPPUNIT_ASSERT(pFrame->IsTextFrame());
+ auto pTextFrame = static_cast<SwTextFrame*>(pFrame);
+ SwParaPortion* pPara = pTextFrame->GetPara();
+ bool bFirst = true;
+ for (SwLinePortion* pPor = pPara->GetFirstPortion(); pPor; pPor = pPor->GetNextPortion())
+ {
+ // Look for multi-portions in the only paragraph of the document.
+ if (pPor->GetWhichPor() != PortionType::Multi)
+ {
+ continue;
+ }
+
+ if (bFirst)
+ {
+ bFirst = false;
+ continue;
+ }
+
+ // The second multi-portion has two lines, check the start of the second line.
+ auto pMulti = static_cast<SwMultiPortion*>(pPor);
+ // Without the accompanying fix in place, this test would have failed, as the portion was a
+ // margin portion, not a text portion. The margin was so large that the actual text portion was
+ // hidden. No margin is needed here at all.
+ CPPUNIT_ASSERT(pMulti->GetRoot().GetNext()->GetFirstPortion()->IsTextPortion());
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */