From d63321d949563759ee2ada96fdc2e0f8728941b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reg=C3=A9nyi=20Bal=C3=A1zs?= Date: Wed, 10 Jun 2020 14:27:32 +0200 Subject: [PATCH] tdf#133863 tdf#133864 DOCX shape import: width relative to inside MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit and outside margins. See commit 43d7f4e3640c5e370fd1204739c2b0c7eb5f40e4 (offapi: document the 4 new properties which are no longer read-only). commit b46f4bc9760267ac5e45d43b77b5d2721ee4c386 (tdf#133070 DOCX import: fix shape height relative to bottom page margin) commit 330ed8120e9881656716d70d87b9f49f861f0bfa (tdf#133670 DOCX import: fix shape width relative to right margin) commit 7380905abc0833d9e4c4fe731d76174db8a8724c (tdf#132976 DOCX import: fix shape width relative to left margin) Co-authored-by: Szabolcs Tóth Change-Id: If81b7c80732141be1491ca82770cf6eee99f5656 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97627 Tested-by: László Németh Reviewed-by: László Németh --- ...iveAnchorWidthFromInsideOutsideMargin.docx | Bin 0 -> 18324 bytes sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 23 +++++++++++ sw/source/core/layout/anchoreddrawobject.cxx | 36 +++++++++++++++++- writerfilter/source/dmapper/GraphicImport.cxx | 2 + 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx diff --git a/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx new file mode 100644 index 0000000000000000000000000000000000000000..453320f388f19bb331bb0025c7db19dfce2984d0 GIT binary patch literal 18324 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, nAnchoredWidth); } +DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorWidthFromInsideOutsideMargin, "tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx") +{ + // TODO: Fix export. + if (mbExported) + return; + + // tdf#133863 tdf#133864 The sizes of the width of these shapes depend on the sizes of the inside and outside margins. + // The open book: outside --text-- inside | inside --text-- outside + xmlDocUniquePtr pXmlDoc = parseLayoutDump(); + // Outside + sal_Int32 nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[1]/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(static_cast(2552), nAnchoredWidth); + // Inside + nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[2]/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(static_cast(1440), nAnchoredWidth); + // Inside + nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[3]/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(static_cast(1440), nAnchoredWidth); + // Outside + nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[4]/bounds", "width").toInt32(); + CPPUNIT_ASSERT_EQUAL(static_cast(2552), nAnchoredWidth); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx index 9b4bce8e44ef..1af32ed2fa80 100644 --- a/sw/source/core/layout/anchoreddrawobject.cxx +++ b/sw/source/core/layout/anchoreddrawobject.cxx @@ -620,6 +620,26 @@ SwRect SwAnchoredDrawObject::GetObjRect() const return GetDrawObj()->GetSnapRect(); } +namespace +{ + // Imagine an open book, inside margin is the one that is at the inner side of the pages, at the center of the book, + // outside margin is at the two opposite edges of the book. + // outside --text-- inside | inside --text-- outside + // With mirrored margins, when relating the size of an object from the inside margin for example, on the + // first page we calculate the new size of the object using the size of the right margin, + // on second page the left margin, third page right margin, etc. + long getInsideOutsideRelativeWidth(bool isOutside, const SwPageFrame* const pPageFrame) + { + // Alternating between the only two possible cases: inside and outside. + // Inside = false, Outside = true. + auto nPageNum = pPageFrame->GetPhyPageNum(); + if (nPageNum % 2 == (isOutside ? 0 : 1)) + return pPageFrame->GetRightMargin(); + else + return pPageFrame->GetLeftMargin(); + } +} + // --> #i70122# SwRect SwAnchoredDrawObject::GetObjBoundRect() const { @@ -640,10 +660,22 @@ SwRect SwAnchoredDrawObject::GetObjBoundRect() const // The size of the shape's width is going to be relative to the size of the left margin. // E.g.: (left margin = 8 && relative size = 150%) -> width of some shape = 12. else if (GetDrawObj()->GetRelativeWidthRelation() == text::RelOrientation::PAGE_LEFT) - nWidth = GetPageFrame()->GetLeftMargin(); + { + if (GetPageFrame()->GetPageDesc()->GetUseOn() == UseOnPage::Mirror) + // We want to get the width of whatever is going through here using the size of the + // outside margin. + nWidth = getInsideOutsideRelativeWidth(true, GetPageFrame()); + else + nWidth = GetPageFrame()->GetLeftMargin(); + } // Same as the left margin above. else if (GetDrawObj()->GetRelativeWidthRelation() == text::RelOrientation::PAGE_RIGHT) - nWidth = GetPageFrame()->GetRightMargin(); + if (GetPageFrame()->GetPageDesc()->GetUseOn() == UseOnPage::Mirror) + // We want to get the width of whatever is going through here using the size of the + // inside margin. + nWidth = getInsideOutsideRelativeWidth(false, GetPageFrame()); + else + nWidth = GetPageFrame()->GetRightMargin(); else nWidth = GetPageFrame( )->GetBoundRect( GetPageFrame()->getRootFrame()->GetCurrShell()->GetOut() ).SVRect().GetWidth(); nTargetWidth = nWidth * (*GetDrawObj( )->GetRelativeWidth()); diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 7d4b0165d645..8286503ca114 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -946,6 +946,7 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) } break; case NS_ooxml::LN_ST_SizeRelFromH_leftMargin: + case NS_ooxml::LN_ST_SizeRelFromH_outsideMargin: if (m_xShape.is()) { // Here we handle the relative size of the width of some shape. @@ -956,6 +957,7 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) } break; case NS_ooxml::LN_ST_SizeRelFromH_rightMargin: + case NS_ooxml::LN_ST_SizeRelFromH_insideMargin: if (m_xShape.is()) { // Same as the left margin above.