From ae910b993f69205866f94ac8928f13f57e94560b Mon Sep 17 00:00:00 2001 From: Patrick Jaap Date: Tue, 10 Apr 2018 13:24:04 +0200 Subject: tdf#116486 Consider upper margin in paragraph positioning with flys The problem was the following: There is a paragraph with an upper margin defined. Also, there is a flyframe intersecting this upper margin. The desired behavior is to reposition the parapgraph, such that it (including it's upper margin) is located below the flyframe. This patch increases the bounding rectangle of the paragraph by the upper margin. For compatibility, there is a compat-flag query. I re-used a related one. Change-Id: I9dbc75e07e2ba0658fdbbfa9989be24a68660713 Reviewed-on: https://gerrit.libreoffice.org/52685 Tested-by: Jenkins Reviewed-by: Miklos Vajna (cherry picked from commit d07fc485d46f431405a3f6a002f951a08c559677) Reviewed-on: https://gerrit.libreoffice.org/52938 --- sw/qa/extras/ooxmlimport/data/tdf116486.docx | Bin 0 -> 22455 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 6 ++++++ sw/source/core/text/itrform2.cxx | 12 ++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 sw/qa/extras/ooxmlimport/data/tdf116486.docx diff --git a/sw/qa/extras/ooxmlimport/data/tdf116486.docx b/sw/qa/extras/ooxmlimport/data/tdf116486.docx new file mode 100644 index 000000000000..c6a4891b0cf4 Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf116486.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 3af5a063c002..22bf0b01f752 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -1602,6 +1602,12 @@ DECLARE_OOXMLIMPORT_TEST(testTdf114217, "tdf114217.docx") CPPUNIT_ASSERT_EQUAL(static_cast(0), xDrawPage->getCount()); } +DECLARE_OOXMLIMPORT_TEST(testTdf116486, "tdf116486.docx") +{ + OUString aTop = parseDump("/root/page/body/txt/Special", "nHeight"); + CPPUNIT_ASSERT_EQUAL( OUString("4006"), aTop ); +} + // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 6421eedca0be..e762ab1f5842 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -2314,12 +2314,24 @@ void SwTextFormatter::CalcFlyWidth( SwTextFormatInfo &rInf ) SwRect aLine( rInf.X() + nLeftMin, nTop, rInf.RealWidth() - rInf.X() + nLeftMar - nLeftMin , nHeight ); + // tdf#116486: consider also the upper margin from getFramePrintArea because intersections + // with this additional space should lead to repositioning of paragraphs + // For compatibility we grab a related compat flag: + if ( GetTextFrame()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS) ) + { + const long nUpper = m_pFrame->getFramePrintArea().Top(); + // Increase the rectangle + if( nUpper > 0 && nTop >= nUpper ) + aLine.SubTop( nUpper ); + } SwRect aLineVert( aLine ); if ( m_pFrame->IsRightToLeft() ) m_pFrame->SwitchLTRtoRTL( aLineVert ); if ( m_pFrame->IsVertical() ) m_pFrame->SwitchHorizontalToVertical( aLineVert ); + + // GetFrame(...) determines and returns the intersection rectangle SwRect aInter( rTextFly.GetFrame( aLineVert ) ); if ( m_pFrame->IsRightToLeft() ) -- cgit v1.2.3