diff options
author | Patrick Jaap <patrick.jaap@tu-dresden.de> | 2018-04-10 13:24:04 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-04-16 09:14:56 +0200 |
commit | d07fc485d46f431405a3f6a002f951a08c559677 (patch) | |
tree | 8a71a1bd2260a1cc574ad7bec664023388d29ba2 | |
parent | 266e58d246e34cfcea3ccfb8dcb05fde93d04c77 (diff) |
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 <ci@libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/tdf116486.docx | bin | 0 -> 22455 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/text/itrform2.cxx | 12 |
3 files changed, 18 insertions, 0 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/tdf116486.docx b/sw/qa/extras/ooxmlimport/data/tdf116486.docx Binary files differnew file mode 100644 index 000000000000..c6a4891b0cf4 --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/tdf116486.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index ef0d085e699c..439658a63b39 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -1586,6 +1586,12 @@ DECLARE_OOXMLIMPORT_TEST(testTdf114217, "tdf114217.docx") CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(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 7fc2ae4005df..f05a5f872509 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -2278,12 +2278,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() ) |