diff options
author | Bakos Attila <bakos.attilakaroly@nisz.hu> | 2019-12-14 12:36:13 +0100 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2019-12-20 17:59:14 +0100 |
commit | b83d394a16a9a93b314f20ea8fb2ccbb99d9d07f (patch) | |
tree | 4b10e3cec0c69a3f2c252ae066005e375c6d8980 /writerfilter | |
parent | 543fd1b9f8e05988d4c45602f4247566c352ee81 (diff) |
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 <nemeth@numbertext.org>
Reviewed-on: https://gerrit.libreoffice.org/85572
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper.cxx | 15 | ||||
-rw-r--r-- | writerfilter/source/dmapper/GraphicImport.cxx | 9 |
2 files changed, 24 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 16d42193ac6a..5417b6a05e0b 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3035,6 +3035,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 33275d9f0d55..da2b9ce04ef4 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -860,6 +860,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)); |