sw/qa/extras/ooxmlimport/data/tdf116486.docx |binary
 sw/qa/extras/ooxmlimport/ooxmlimport.cxx     |    6 ++++++
 sw/source/core/text/itrform2.cxx             |   12 ++++++++++++
 3 files changed, 18 insertions(+)

New commits:
commit d07fc485d46f431405a3f6a002f951a08c559677
Author: Patrick Jaap <patrick.j...@tu-dresden.de>
Date:   Tue Apr 10 13:24:04 2018 +0200

    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 <c...@libreoffice.org>
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>

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 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() )
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to