sw/qa/core/text/data/clearing-break-header.fodt |   31 ++++++++++++++++++++++++
 sw/qa/core/text/text.cxx                        |   16 ++++++++++++
 sw/source/core/text/txtfly.cxx                  |    7 +++++
 3 files changed, 54 insertions(+)

New commits:
commit 5929da2fa6fb6aa1ea32f5c0abb11b66b21f2791
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Tue Apr 5 16:15:15 2022 +0200
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Apr 7 08:14:10 2022 +0200

    tdf#148366 sw clearing breaks: fix handling of anchored objs from 
header/footer
    
    Regression from commit f86d1482bef285f90079b5130e410646db96cf58 (sw
    clearing breaks: add DOCX import, 2022-03-08), the trouble was that we
    considered an anchored object from the header for text wrapping, while
    this anchored object was in the background in Word.
    
    (cherry picked from commit 61888e49d6eee55197ca1c27b4b023f9b2108d48)
    
    Change-Id: I806cc91ce1eb390c02cbff2defa4cb47fde86853
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132620
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/sw/qa/core/text/data/clearing-break-header.fodt 
b/sw/qa/core/text/data/clearing-break-header.fodt
new file mode 100644
index 000000000000..2bdbcd3c7567
--- /dev/null
+++ b/sw/qa/core/text/data/clearing-break-header.fodt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document 
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+  <office:automatic-styles>
+    <style:style style:name="gr1" style:family="graphic">
+      <style:graphic-properties fo:margin-left="0.318cm" 
fo:margin-right="0.318cm" fo:margin-top="0cm" fo:margin-bottom="0cm" 
style:run-through="background" style:wrap="run-through" 
style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" 
style:vertical-rel="page" style:horizontal-pos="from-left" 
style:horizontal-rel="page" draw:wrap-influence-on-position="once-concurrent" 
loext:allow-overlap="true" style:flow-with-text="false"/>
+    </style:style>
+    <style:style style:name="gr2" style:family="graphic">
+      <style:graphic-properties draw:stroke="none" svg:stroke-width="0cm" 
draw:fill="none" draw:textarea-horizontal-align="center" 
draw:textarea-vertical-align="bottom" draw:auto-grow-height="false" 
style:run-through="background"/>
+    </style:style>
+    <style:page-layout style:name="pm1">
+      <style:page-layout-properties fo:page-width="21.001cm" 
fo:page-height="29.7cm" fo:margin-top="1.251cm" fo:margin-bottom="2.54cm" 
fo:margin-left="2.501cm" fo:margin-right="2.501cm">
+      </style:page-layout-properties>
+      <style:header-style>
+        <style:header-footer-properties fo:min-height="1.289cm" 
fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="1.189cm" 
style:dynamic-spacing="true"/>
+      </style:header-style>
+    </style:page-layout>
+  </office:automatic-styles>
+  <office:master-styles>
+    <style:master-page style:name="Standard" style:page-layout-name="pm1">
+      <style:header>
+        <text:p><draw:g text:anchor-type="char" draw:z-index="1" 
draw:style-name="gr1"><draw:rect draw:style-name="gr2" svg:width="8.347cm" 
svg:height="8.908cm" svg:x="11.871cm" 
svg:y="21.243cm"><text:p/></draw:rect></draw:g></text:p>
+        <text:p/>
+      </style:header>
+    </style:master-page>
+  </office:master-styles>
+  <office:body>
+    <office:text>
+      <text:p><text:line-break loext:clear="all"/></text:p>
+    </office:text>
+  </office:body>
+</office:document>
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index 0923758694b8..3d2c91f2b131 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -345,6 +345,22 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, 
testClearingLineBreakLeft)
     assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]", "height", "2837");
 }
 
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakHeader)
+{
+    // Given a document with a shape in the header and a clearing break in the 
body text:
+    createSwDoc(DATA_DIRECTORY, "clearing-break-header.fodt");
+
+    // When laying out that document:
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+    // Then make sure that the shape from the header is ignored while 
calculating the line height:
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 276
+    // - Actual  : 15398
+    // i.e. the shape was in the background, but we failed to ignore it for 
the break portion.
+    assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]", "height", "276");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/text/txtfly.cxx b/sw/source/core/text/txtfly.cxx
index 1b9c3b55308a..88f0687de8c1 100644
--- a/sw/source/core/text/txtfly.cxx
+++ b/sw/source/core/text/txtfly.cxx
@@ -1012,6 +1012,13 @@ SwTwips SwTextFly::GetMaxBottom(const SwBreakPortion& 
rPortion, const SwTextForm
     for (size_t i = 0; i < nCount; ++i)
     {
         const SwAnchoredObject* pAnchoredObj = (*mpAnchoredObjList)[i];
+
+        if (pAnchoredObj->GetAnchorFrame()->FindFooterOrHeader())
+        {
+            // Anchored in the header or footer, ignore it for clearing break 
purposes.
+            continue;
+        }
+
         SwRect aRect(pAnchoredObj->GetObjRectWithSpaces());
         if (rPortion.GetClear() == SwLineBreakClear::LEFT)
         {

Reply via email to