sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx |binary
 sw/qa/core/objectpositioning/objectpositioning.cxx               |   20 
++++++++++
 writerfilter/source/dmapper/GraphicHelpers.cxx                   |    8 ++--
 3 files changed, 24 insertions(+), 4 deletions(-)

New commits:
commit d362c0625fa92e0f4d4472f197bd1d68fba522f1
Author:     Tibor Nagy <[email protected]>
AuthorDate: Wed Sep 2 15:59:23 2020 +0200
Commit:     László Németh <[email protected]>
CommitDate: Fri Sep 4 09:13:28 2020 +0200

    tdf#136354 DOCX import: fix vertical mirrored alignment on bottom margin
    
    The relative mirrored vertical alignment (INSIDE and OUTSIDE) of
    bottom page margin wasn't handled.
    
    Note: this fix doesn't check mirroring (if it's possible to mirror
    vertically either, for example, by mixing portrait and landscape
    mode in a document), only support INSIDE as OUTSIDE as alternative
    names of TOP and BOTTOM in case of alignment to bottom margins.
    
    Follow-up of commit d54264e34c1ccc0eaf4178ab165a843028500223
    (tdf#133071 DOCX import: fix vertical alignment to bottom page margin)
    
    Co-authored-by: Attila Szűcs (NISZ)
    
    Change-Id: I6d844f57505bcda1faa7dd6112d1cda666c3ac07
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101934
    Tested-by: László Németh <[email protected]>
    Reviewed-by: László Németh <[email protected]>

diff --git a/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx 
b/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx
new file mode 100644
index 000000000000..15d2dca0775e
Binary files /dev/null and 
b/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx differ
diff --git a/sw/qa/core/objectpositioning/objectpositioning.cxx 
b/sw/qa/core/objectpositioning/objectpositioning.cxx
index 21151f3b92de..b6d06022fd7c 100644
--- a/sw/qa/core/objectpositioning/objectpositioning.cxx
+++ b/sw/qa/core/objectpositioning/objectpositioning.cxx
@@ -211,6 +211,26 @@ CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, 
testVertAlignBottomMarginWithF
     // Verify that the distance between the bottom of body and top of third 
shape is around 0cm. (align=top)
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nThirdShapeTop - 
nBodyBottom);
 }
+
+CPPUNIT_TEST_FIXTURE(SwCoreObjectpositioningTest, 
testInsideOutsideVertAlignBottomMargin)
+{
+    // Load a document, with two shapes.
+    // The shapes align the outside and inside of page print area bottom.
+    load(DATA_DIRECTORY, "inside-outside-vert-align.docx");
+
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    sal_Int32 nBodyBottom = getXPath(pXmlDoc, "//body/infos/bounds", 
"bottom").toInt32(); //15704
+    sal_Int32 nPageBottom = getXPath(pXmlDoc, "//page/infos/bounds", 
"bottom").toInt32(); //17121
+    sal_Int32 nFirstShapeOutside
+        = getXPath(pXmlDoc, "//SwAnchoredDrawObject[1]/bounds", 
"bottom").toInt32(); //17098
+    sal_Int32 nSecondShapeInside
+        = getXPath(pXmlDoc, "//SwAnchoredDrawObject[2]/bounds", 
"top").toInt32(); //15694
+
+    // Verify that the distance between the bottom of page and bottom of first 
shape is around 0cm. (align=outside)
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(23), nPageBottom - 
nFirstShapeOutside);
+    // Verify that the distance between the bottom of body and top of second 
shape is around 0cm. (align=inside)
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(10), nBodyBottom - 
nSecondShapeInside);
+}
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx 
b/writerfilter/source/dmapper/GraphicHelpers.cxx
index a2275d95be4a..7051f3c45b47 100644
--- a/writerfilter/source/dmapper/GraphicHelpers.cxx
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -176,10 +176,10 @@ void PositionHandler::lcl_sprm(Sprm& rSprm)
                 m_nOrient = text::VertOrientation::BOTTOM;
             else if (rAlign == "center")
                 m_nOrient = text::VertOrientation::CENTER;
-            else if (rAlign == "inside")
-                m_nOrient = text::VertOrientation::NONE;
-            else if (rAlign == "outside")
-                m_nOrient = text::VertOrientation::NONE;
+            else if (rAlign == "inside" && m_nRelation == 
text::RelOrientation::PAGE_PRINT_AREA_BOTTOM)
+                m_nOrient = text::VertOrientation::TOP;
+            else if (rAlign == "outside" && m_nRelation == 
text::RelOrientation::PAGE_PRINT_AREA_BOTTOM)
+                m_nOrient = text::VertOrientation::BOTTOM;
             rAlign.clear();
             break;
         }
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to