From 198685ded79d64b21023ee85e9a15fa1b32705a0 Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Mon, 2 Mar 2020 20:23:04 +0100 Subject: tdf#84399 VML import: map to TextShape This partially reverts commit 81f9fe3a14f0fc99afbfa7ce3a26a9c7855d0919 (fdo#74401 VML groupshape import: only handle v:rect as TextShape, 2014-03-19), which wanted to map triangles to custom shapes. It was overlooked that we can have not only explicit rectangles and custom shapes, but also elements which have their shape type explicitly set to TextBox. The later is now again handled similar to rectangles. This keeps the triangle case working, but fixes the case. We need to make this decision while parsing the XML, so some rework is needed to have earlier access to its container (group shape or draw page) and also to its shape type. Change-Id: I33a4b3cd03b0df5d93cffa19e7ea834113df2bdc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/89852 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- include/oox/vml/vmlshape.hxx | 4 ++++ include/oox/vml/vmlshapecontainer.hxx | 1 + 2 files changed, 5 insertions(+) (limited to 'include/oox/vml') diff --git a/include/oox/vml/vmlshape.hxx b/include/oox/vml/vmlshape.hxx index 5ec471299f3f..a4584cad2b7f 100644 --- a/include/oox/vml/vmlshape.hxx +++ b/include/oox/vml/vmlshape.hxx @@ -264,6 +264,9 @@ public: void convertFormatting( const css::uno::Reference< css::drawing::XShape >& rxShape ) const; + void setContainer(ShapeContainer* pContainer); + ShapeContainer* getContainer() const; + protected: explicit ShapeBase( Drawing& rDrawing ); @@ -284,6 +287,7 @@ protected: protected: ShapeModel maShapeModel; ///< The model structure containing shape data. + ShapeContainer* mpContainer = nullptr; }; diff --git a/include/oox/vml/vmlshapecontainer.hxx b/include/oox/vml/vmlshapecontainer.hxx index 6be9020051c2..1b72c8a38f3b 100644 --- a/include/oox/vml/vmlshapecontainer.hxx +++ b/include/oox/vml/vmlshapecontainer.hxx @@ -126,6 +126,7 @@ template< typename ShapeT > std::shared_ptr ShapeContainer::createShape() { auto xShape = std::make_shared( mrDrawing ); + xShape->setContainer(this); maShapes.push_back( xShape ); return xShape; } -- cgit