sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx |binary sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 20 ++++++++++++++++++ writerfilter/source/dmapper/DomainMapper.cxx | 15 +++++++++++++ writerfilter/source/dmapper/GraphicImport.cxx | 9 ++++++++ 5 files changed, 44 insertions(+)
New commits: commit 10f29d8bf05d44ca8bc11d34d1294ec17f8ac0f1 Author: Bakos Attila <bakos.attilakar...@nisz.hu> AuthorDate: Sat Dec 14 12:36:13 2019 +0100 Commit: László Németh <nem...@numbertext.org> CommitDate: Fri Dec 20 08:04:15 2019 +0100 tdf#87569 tdf#109411 DOCX import: fix shape anchor in tables Import "relative from page" horizontal setting of VML and DrawingML shapes as "relative from column" in tables, just as MSO handles it. Change-Id: If71f2e52bbba324a98651e701feaeb99acfefc48 Reviewed-on: https://gerrit.libreoffice.org/85141 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx b/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx new file mode 100644 index 000000000000..7f00a46e2cc6 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87569_drawingml.docx differ diff --git a/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx b/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx new file mode 100644 index 000000000000..0223ad71d4e2 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf87569_vml.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 51c2ee7acc2c..fb93572bf725 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -17,6 +17,7 @@ #include <tools/lineend.hxx> #include <com/sun/star/text/TableColumnSeparator.hpp> #include <com/sun/star/text/XDocumentIndex.hpp> +#include <com/sun/star/text/RelOrientation.hpp> class Test : public SwModelTestBase { @@ -33,6 +34,25 @@ protected: } }; +DECLARE_OOXMLEXPORT_TEST(testTdf87569v, "tdf87569_vml.docx") +{ + //the original tdf87569 sample has vml shapes... + uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); + sal_Int16 nValue; + xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_vml: The Shape is not in the table!", + text::RelOrientation::FRAME, nValue); +} + +DECLARE_OOXMLEXPORT_TEST(testTdf87569d, "tdf87569_drawingml.docx") +{ + //if the original tdf87569 sample is upgraded it will have drawingml shapes... + uno::Reference<beans::XPropertySet> xShapeProperties(getShape(1), uno::UNO_QUERY); + sal_Int16 nValue; + xShapeProperties->getPropertyValue("HoriOrientRelation") >>= nValue; + CPPUNIT_ASSERT_EQUAL_MESSAGE("tdf87569_drawingml: The Shape is not in the table!", + text::RelOrientation::FRAME, nValue); +} DECLARE_OOXMLEXPORT_TEST(testTdf120315, "tdf120315.docx") { diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 9bbbedf64f9c..ccbe8d8d197b 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3023,6 +3023,21 @@ void DomainMapper::lcl_startShape(uno::Reference<drawing::XShape> const& xShape) m_pImpl->PushPendingShape(xShape); m_pImpl->SetIsFirstParagraphInShape(true); + + //tdf#87569: Fix table layout with correcting anchoring + //If anchored object is in table, Word calculates its position from cell border + //instead of page (what is set in the sample document) + if (m_pImpl->m_nTableDepth > 0) //if we had a table + { + uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY); + sal_Int16 nCurrentHorOriRel; //A temp variable for storaging the current setting + xShapePropSet->getPropertyValue("HoriOrientRelation") >>= nCurrentHorOriRel; + //and the correction: + if (nCurrentHorOriRel == text::RelOrientation::PAGE_FRAME) + xShapePropSet->setPropertyValue("HoriOrientRelation", + uno::makeAny(text::RelOrientation::FRAME)); + } + } void DomainMapper::lcl_endShape( ) diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index 74fa991eeb10..63a0e7491fb4 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -867,6 +867,15 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) if (nRotation) xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation)); } + + //tdf#109411 If anchored object is in table, Word calculates its position from cell border + //instead of page (what is set in the sample document) + if (m_pImpl->rDomainMapper.IsInTable() && + m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME && IsGraphic()) + { + m_pImpl->nHoriRelation = text::RelOrientation::FRAME; + } + m_pImpl->applyRelativePosition(xShapeProps, /*bRelativeOnly=*/true); xShapeProps->setPropertyValue("SurroundContour", uno::makeAny(m_pImpl->bContour)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits