summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/GraphicImport.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2018-11-19 21:41:07 +0100
committerMiklos Vajna <vmiklos@collabora.com>2018-11-20 09:07:44 +0100
commitd220e476df38e86e094066a690985c624316d37f (patch)
treec858c371739c54f892a8cd93d7cd1a40733bc93d /writerfilter/source/dmapper/GraphicImport.cxx
parent0c627e494052f8717856712358763eb670b5a5fb (diff)
tdf#120551 DOCX import: fix position of group shape with absolute position
Regression from commit af313fc149f80adb0f1680ca20e19745ccb7fede (tdf#105143 DOCX import: enable DoNotCaptureDrawObjsOnPage layout compat option, 2017-01-06), the group shape which covers most of the single page in the document had a negative left position, while it should have a small positive one (checking the drawingML markup). This was a pre-existing problem, but now it's visible since we no longer force objects to be on the page in Word compat mode. Seeing the ODT import never positions group shapes (it's just a container for child shapes), probably the DOCX import shouldn't do that either. Start moving into this direction, first only for absolute-positioned toplevel group shapes only, which already fixes the bug. Change-Id: I152ba06a81a2bd09195a4c724da4b8878b0457bb Reviewed-on: https://gerrit.libreoffice.org/63606 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'writerfilter/source/dmapper/GraphicImport.cxx')
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx27
1 files changed, 25 insertions, 2 deletions
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 1e070a3e2a2c..9f188d88b499 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -66,11 +66,27 @@
#include "WrapPolygonHandler.hxx"
#include "util.hxx"
+using namespace css;
+
+namespace
+{
+bool isTopGroupObj(const uno::Reference<drawing::XShape>& xShape)
+{
+ SdrObject* pObject = GetSdrObjectFromXShape(xShape);
+ if (!pObject)
+ return false;
+
+ if (pObject->getParentSdrObjectFromSdrObject())
+ return false;
+
+ return pObject->IsGroupObject();
+}
+}
+
namespace writerfilter {
namespace dmapper
{
-using namespace css;
class XInputStreamHelper : public cppu::WeakImplHelper<io::XInputStream>
{
@@ -800,8 +816,15 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue)
xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(sal_Int32(0)));
// Position of the groupshape should be set after children have been added.
+ // Long-term we should get rid of positioning group
+ // shapes, though. Do it for top-level ones with
+ // absolute page position as a start.
// fdo#80555: also set position for graphic shapes here
- m_xShape->setPosition(awt::Point(m_pImpl->nLeftPosition, m_pImpl->nTopPosition));
+ if (!isTopGroupObj(m_xShape)
+ || m_pImpl->nHoriRelation != text::RelOrientation::PAGE_FRAME
+ || m_pImpl->nVertRelation != text::RelOrientation::PAGE_FRAME)
+ m_xShape->setPosition(
+ awt::Point(m_pImpl->nLeftPosition, m_pImpl->nTopPosition));
if (nRotation)
xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation));