[Libreoffice-commits] core.git: sw/qa sw/source
Regényi Balázs (via logerrit)
logerrit at kemper.freedesktop.org
Fri Jul 17 15:06:16 UTC 2020
sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 18 +--
sw/qa/extras/ooxmlexport/ooxmlexport15.cxx | 18 +--
sw/qa/extras/ooxmlexport/ooxmlexport3.cxx | 32 ++----
sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 11 --
sw/source/filter/ww8/docxsdrexport.cxx | 51 ++++++++--
6 files changed, 70 insertions(+), 60 deletions(-)
New commits:
commit fa84e889b8cabdd7c174b640883c692b8d514ae7
Author: Regényi Balázs <regenyi.balazs+gerrit at gmail.com>
AuthorDate: Wed Jul 15 16:02:16 2020 +0200
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Fri Jul 17 17:05:31 2020 +0200
tdf#134299 DOCX shape export: fix relative size of shapes
relative to left/right/inside/outside/top/bottom page margins.
This fixes bugs: tdf#134300, tdf#134828, tdf#134830, tdf#134834
and tdf#134835.
Follow-up of commits:
d9bee5677edc857d7d119197a85c22b9410ed876
(tdf#133670 DOCX import: fix shape width relative to right margin)
abc818e5f2fb2884f1041e9626115e69cde766d5
(tdf#132976 DOCX import: fix shape width relative to left margin)
1a391f6ed056c95b9d7b5f18988ab8650723ffc5
(tdf#123324 DOCX import: fix shape height relative to top page margin)
d94ebb64e18839b430760dba525a885b10ae8093
(tdf#133863 tdf#133864 DOCX shape import: width relative to inside)
9693e9aac005b1406e0cdb1655efe45554a90f86
(tdf#133070 DOCX import: fix shape height relative to bottom page margin)
Co-authored-by: Szabolcs Tóth
Change-Id: I42cd7693c80cc62f71560e9ab0f226b51aff6bb7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98850
Tested-by: László Németh <nemeth at numbertext.org>
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx b/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx
index 453320f388f1..216434db3c06 100644
Binary files a/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx and b/sw/qa/extras/ooxmlexport/data/tdf133861_RelativeAnchorWidthFromInsideOutsideMargin.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index becf005b10e6..3e919588d498 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -1195,25 +1195,19 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf108505, "tdf108505.docx")
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorHeightFromTopMarginHasHeader,
"tdf123324_testRelativeAnchorHeightFromTopMarginHasHeader.docx")
{
- // TODO: fix export too
- if (mbExported)
- return;
// tdf#123324 The height was set relative to page print area top,
// but this was handled relative to page height.
// Note: page print area top = margin + header height.
// In this case the header exists.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredHeight
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2551), nAnchoredHeight);
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height", "2551");
}
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorHeightFromTopMarginNoHeader,
"tdf123324_testRelativeAnchorHeightFromTopMarginNoHeader.docx")
{
- // TODO: fix export too
- if (mbExported)
- return;
// tdf#123324 The height was set relative from top margin, but this was handled relative from page height.
// Note: the MSO Word margin = LO margin + LO header height.
// In this case the header does not exist, so MSO Word margin and LO Writer margin are the same.
@@ -1223,9 +1217,9 @@ DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorHeightFromTopMarginNoHeader,
// Note: page print area top = margin + header height.
// In this case the header does not exist, so OpenDocument and OOXML margins are the same.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredHeight
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2551), nAnchoredHeight);
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height", "2551");
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
index c987501901f5..f5f4b1657007 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport15.cxx
@@ -161,17 +161,14 @@ DECLARE_OOXMLEXPORT_TEST(testTdf134063, "tdf134063.docx")
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorHeightFromBottomMarginHasFooter,
"tdf133070_testRelativeAnchorHeightFromBottomMarginHasFooter.docx")
{
- // TODO: fix export too
- if (mbExported)
- return;
// tdf#133070 The height was set relative to page print area bottom,
// but this was handled relative to page height.
// Note: page print area bottom = margin + footer height.
// In this case the footer exists.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredHeight
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1147), nAnchoredHeight);
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height", "1147");
}
DECLARE_OOXMLIMPORT_TEST(TestTdf132483, "tdf132483.docx")
@@ -190,17 +187,14 @@ DECLARE_OOXMLIMPORT_TEST(TestTdf132483, "tdf132483.docx")
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorHeightFromBottomMarginNoFooter,
"tdf133070_testRelativeAnchorHeightFromBottomMarginNoFooter.docx")
{
- // TODO: fix export too
- if (mbExported)
- return;
// tdf#133070 The height was set relative to page print area bottom,
// but this was handled relative to page height.
// Note: page print area bottom = margin + footer height.
// In this case the footer does not exist, so OpenDocument and OOXML margins are the same.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredHeight
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1147), nAnchoredHeight);
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "height", "1147");
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
index 99c908351898..cedff600d3e4 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
@@ -1160,39 +1160,29 @@ DECLARE_OOXMLEXPORT_TEST(testShapeLineWidth, "tdf92526_ShapeLineWidth.odt")
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorWidthFromLeftMargin, "tdf132976_testRelativeAnchorWidthFromLeftMargin.docx")
{
- // TODO: Fix export.
- if (mbExported)
- return;
-
// tdf#132976 The size of the width of this shape should come from the size of the left margin.
// It was set to the size of the width of the entire page before.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredWidth
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "width").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1133), nAnchoredWidth);
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "width", "1133");
}
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<sal_Int32>(2552), nAnchoredWidth);
- // Inside
- nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[2]/bounds", "width").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1440), nAnchoredWidth);
+ if (!pXmlDoc)
+ return;
// Inside
- nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[3]/bounds", "width").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1440), nAnchoredWidth);
+ assertXPath(pXmlDoc, "(//SwAnchoredDrawObject)[1]/bounds", "width", "1440");
+ // Outside
+ assertXPath(pXmlDoc, "(//SwAnchoredDrawObject)[2]/bounds", "width", "2552");
// Outside
- nAnchoredWidth = getXPath(pXmlDoc, "(//SwAnchoredDrawObject)[4]/bounds", "width").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2552), nAnchoredWidth);
+ assertXPath(pXmlDoc, "(//SwAnchoredDrawObject)[3]/bounds", "width", "2552");
+ // Inside
+ assertXPath(pXmlDoc, "(//SwAnchoredDrawObject)[4]/bounds", "width", "1440");
}
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
index 2687707bb5e8..7fe92c72eede 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
@@ -1258,15 +1258,12 @@ DECLARE_OOXMLEXPORT_TEST(testUnderlineColorGroupedShapes, "tdf132491_UnderlineCo
DECLARE_OOXMLEXPORT_TEST(testRelativeAnchorWidthFromRightMargin, "tdf133670_testRelativeAnchorWidthFromRightMargin.docx")
{
- // TODO: Fix export.
- if (mbExported)
- return;
-
// tdf#133670 The width was set relative from right margin, but this was handled relative from page width.
xmlDocUniquePtr pXmlDoc = parseLayoutDump();
- const sal_Int32 nAnchoredWidth
- = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "width").toInt32();
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2408), nAnchoredWidth);
+ if (!pXmlDoc)
+ return;
+ auto nWidth = getXPath(pXmlDoc, "//SwAnchoredDrawObject/bounds", "width").toInt32();
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(2408, nWidth, 1);
}
DECLARE_OOXMLEXPORT_TEST(testAutoFitForLegacyShapes, "tdf112312_AutoFitForLegacyShapes.odt")
diff --git a/sw/source/filter/ww8/docxsdrexport.cxx b/sw/source/filter/ww8/docxsdrexport.cxx
index 458493391b27..bc540c232337 100644
--- a/sw/source/filter/ww8/docxsdrexport.cxx
+++ b/sw/source/filter/ww8/docxsdrexport.cxx
@@ -32,6 +32,7 @@
#include <comphelper/sequenceashashmap.hxx>
#include <sal/log.hxx>
#include <frmfmt.hxx>
+#include <fmtpdsc.hxx>
#include <IDocumentDrawModelAccess.hxx>
#include <comphelper/propertysequence.hxx>
@@ -920,10 +921,30 @@ void DocxSdrExport::writeDMLDrawing(const SdrObject* pSdrObject, const SwFrameFo
if (pSdrObject->GetRelativeWidth())
{
// At the moment drawinglayer objects are always relative from page.
- pFS->startElementNS(XML_wp14, XML_sizeRelH, XML_relativeFrom,
- (pSdrObject->GetRelativeWidthRelation() == text::RelOrientation::FRAME
- ? "margin"
- : "page"));
+ OUString sValue;
+ switch (pSdrObject->GetRelativeWidthRelation())
+ {
+ case text::RelOrientation::FRAME:
+ sValue = "margin";
+ break;
+ case text::RelOrientation::PAGE_LEFT:
+ if (pFrameFormat->GetDoc()->GetPageDesc(0).GetUseOn() == UseOnPage::Mirror)
+ sValue = "outsideMargin";
+ else
+ sValue = "leftMargin";
+ break;
+ case text::RelOrientation::PAGE_RIGHT:
+ if (pFrameFormat->GetDoc()->GetPageDesc(0).GetUseOn() == UseOnPage::Mirror)
+ sValue = "insideMargin";
+ else
+ sValue = "rightMargin";
+ break;
+ case text::RelOrientation::PAGE_FRAME:
+ default:
+ sValue = "page";
+ break;
+ }
+ pFS->startElementNS(XML_wp14, XML_sizeRelH, XML_relativeFrom, sValue);
pFS->startElementNS(XML_wp14, XML_pctWidth);
pFS->writeEscaped(
OUString::number(*pSdrObject->GetRelativeWidth() * 100 * oox::drawingml::PER_PERCENT));
@@ -932,10 +953,24 @@ void DocxSdrExport::writeDMLDrawing(const SdrObject* pSdrObject, const SwFrameFo
}
if (pSdrObject->GetRelativeHeight())
{
- pFS->startElementNS(XML_wp14, XML_sizeRelV, XML_relativeFrom,
- (pSdrObject->GetRelativeHeightRelation() == text::RelOrientation::FRAME
- ? "margin"
- : "page"));
+ OUString sValue;
+ switch (pSdrObject->GetRelativeHeightRelation())
+ {
+ case text::RelOrientation::FRAME:
+ sValue = "margin";
+ break;
+ case text::RelOrientation::PAGE_PRINT_AREA:
+ sValue = "topMargin";
+ break;
+ case text::RelOrientation::PAGE_PRINT_AREA_BOTTOM:
+ sValue = "bottomMargin";
+ break;
+ case text::RelOrientation::PAGE_FRAME:
+ default:
+ sValue = "page";
+ break;
+ }
+ pFS->startElementNS(XML_wp14, XML_sizeRelV, XML_relativeFrom, sValue);
pFS->startElementNS(XML_wp14, XML_pctHeight);
pFS->writeEscaped(
OUString::number(*pSdrObject->GetRelativeHeight() * 100 * oox::drawingml::PER_PERCENT));
More information about the Libreoffice-commits
mailing list