tdf#131118 VML import: fix size of non-autosize shapes containing text

Regression from commit b92293b3943423324064a8513c2e114d18817179
(tdf#103983 VML import: handle <v:textbox
style="mso-fit-shape-to-text:t">, 2020-01-20), the problem was that in
case we disable autosize too late, then the size will be already set
during adding text to the shape.

Do it before adding text, this way adding text won't change the shape
size, so it'll be correct at the end of the import.

Change-Id: I9410fc695c3edfa5089d845864bf237e71c533c4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90592
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
diff --git a/oox/qa/unit/data/shape-non-autosize-with-text.docx b/oox/qa/unit/data/shape-non-autosize-with-text.docx
new file mode 100644
index 0000000..b9ae501
--- /dev/null
+++ b/oox/qa/unit/data/shape-non-autosize-with-text.docx
Binary files differ
diff --git a/oox/qa/unit/vml.cxx b/oox/qa/unit/vml.cxx
index b278764..089d610 100644
--- a/oox/qa/unit/vml.cxx
+++ b/oox/qa/unit/vml.cxx
@@ -91,6 +91,24 @@ CPPUNIT_TEST_FIXTURE(OoxVmlTest, testSpt202ShapeType)
    CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.TextShape"), xShape->getShapeType());
}

CPPUNIT_TEST_FIXTURE(OoxVmlTest, testShapeNonAutosizeWithText)
{
    // Load a document which has a group shape, containing a single child.
    // 17.78 cm is the full group shape width, 19431/64008 is the child shape's relative width inside
    // that, so 5.3975 cm should be the shape width.
    load("shape-non-autosize-with-text.docx");
    uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
    uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
                                                 uno::UNO_QUERY);
    uno::Reference<container::XIndexAccess> xGroup(xDrawPage->getByIndex(0), uno::UNO_QUERY);
    uno::Reference<drawing::XShape> xShape(xGroup->getByIndex(0), uno::UNO_QUERY);
    // Without the accompanying fix in place, this test would have failed with:
    // - Actual  : 1115
    // - Expected: 5398
    // because the width was determined using its text size, not using the explicit size.
    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5398), xShape->getSize().Width);
}

CPPUNIT_PLUGIN_IMPLEMENT();

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index 3444c1c..0e9770a 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -783,6 +783,9 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes 
            eTextVerticalAdjust = drawing::TextVerticalAdjust_BOTTOM;
        PropertySet(xShape).setAnyProperty(PROP_TextVerticalAdjust, makeAny(eTextVerticalAdjust));

        PropertySet(xShape).setAnyProperty(PROP_TextAutoGrowHeight,
                                           makeAny(maTypeModel.mbAutoHeight));

        if (getTextBox())
        {
            getTextBox()->convert(xShape);
@@ -796,9 +799,6 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes 
                xShape->setSize(aSize);
            }
        }

        PropertySet(xShape).setAnyProperty(PROP_TextAutoGrowHeight,
                                           makeAny(maTypeModel.mbAutoHeight));
    }

    // Import Legacy Fragments (if any)