sw/qa/extras/layout/data/tdf163149.docx |binary sw/qa/extras/layout/layout3.cxx | 46 ++++++++++++++++++++++++++++++++ sw/source/core/text/itradj.cxx | 5 ++- 3 files changed, 50 insertions(+), 1 deletion(-)
New commits: commit 92317442b61001e479feb1a5c376d36584ecd5d1 Author: László Németh <nem...@numbertext.org> AuthorDate: Tue Oct 15 22:50:15 2024 +0200 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Thu Oct 17 07:14:53 2024 +0200 tdf#163149 sw smart justify: fix line shrinking at image wrapping Limited line width at image wrap could result negative nSpaceAdd value, i.e. paragraph line with extra letter spacing instead of line shrinking. Regression from commit 17eaebee279772b6062ae3448012133897fc71bb "tdf#119908 sw smart justify: fix justification by shrinking". Change-Id: I76cc3004d246ff7af441ca9a92eaa8fc7b09f01b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174985 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 1fb6de02709a5f420f21ebd683915da50ce0d198) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174953 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/sw/qa/extras/layout/data/tdf163149.docx b/sw/qa/extras/layout/data/tdf163149.docx new file mode 100644 index 000000000000..efe0c65451a7 Binary files /dev/null and b/sw/qa/extras/layout/data/tdf163149.docx differ diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx index 379dadc5aadf..7336cf61cbd1 100644 --- a/sw/qa/extras/layout/layout3.cxx +++ b/sw/qa/extras/layout/layout3.cxx @@ -497,6 +497,52 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf161810) } } +CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf163149) +{ + createSwDoc("tdf163149.docx"); + // Ensure that all text portions are calculated before testing. + SwDoc* pDoc = getSwDoc(); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // Find the text array action for the second non-empty (shrunk) line + bool bFirst = true; + for (size_t nAction = 0; nAction < xMetaFile->GetActionSize(); nAction++) + { + auto pAction = xMetaFile->GetAction(nAction); + if (pAction->GetType() == MetaActionType::TEXTARRAY) + { + auto pTextArrayAction = static_cast<MetaTextArrayAction*>(pAction); + auto pDXArray = pTextArrayAction->GetDXArray(); + + // skip empty paragraphs + if (pDXArray.size() <= 1) + continue; + + // skip first non-empty line + if (bFirst) + { + bFirst = false; + continue; + } + + // There should be 46 chars on the second line + CPPUNIT_ASSERT_EQUAL(size_t(46), pDXArray.size()); + + // Assert we are using the expected position for the last char + // This was 4673, now 4163, according to the fixed space shrinking + CPPUNIT_ASSERT_LESS(sal_Int32(4200), pDXArray[45]); + break; + } + } +} + CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf132599_always) { uno::Reference<linguistic2::XHyphenator> xHyphenator = LinguMgr::GetHyphenator(); diff --git a/sw/source/core/text/itradj.cxx b/sw/source/core/text/itradj.cxx index f7b72448b619..a0cd73365588 100644 --- a/sw/source/core/text/itradj.cxx +++ b/sw/source/core/text/itradj.cxx @@ -424,7 +424,10 @@ void SwTextAdjuster::CalcNewBlock( SwLineLayout *pCurrent, tools::Long nSpaceSub = ( nBreakWidth > pCurrent->Width() ) ? (nBreakWidth - pCurrent->Width()) * SPACING_PRECISION_FACTOR / sal_Int32(nGluePortion) + LONG_MAX/2 - : 0; + : ( nSpaceAdd < 0 ) + // shrink, if portions exceed the line width available before an image + ? -nSpaceAdd + LONG_MAX/2 + : 0; // i60594 if( rSI.CountKashida() && !bSkipKashida )