tdf#141127 Use ODF default values for draw:extrusion-skew

The default value for extrusion skew angle is 45 in ODF and -135 in
binary MS Office. LO had used -135 in case the draw:extrusion-skew
attribute was missing on import. This could be fixed in GetSkew() in
EnhancedCustomShape3d.cxx#92. But that would break import of ppt files.
So I have decided not to search, were the binary import would need to
be tweaked, but I set the default values directly in file open in case
the attribute is missing.

Change-Id: Ieeffa64099fdbdbe0ba9d4dab7ed2f19d397a6e3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112819
Tested-by: Jenkins
Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
diff --git a/svx/qa/unit/customshapes.cxx b/svx/qa/unit/customshapes.cxx
index 4e3f76d..811b448 100644
--- a/svx/qa/unit/customshapes.cxx
+++ b/svx/qa/unit/customshapes.cxx
@@ -940,6 +940,24 @@
        }
    }
}

CPPUNIT_TEST_FIXTURE(CustomshapesTest, testTdf141127WrongSkewDefault)
{
    // Load a document that has a shape in extrusion mode, but no draw:extrusion-skew attribute.
    // Error was, that the shape uses the MS Office binary defaults and so the extruded side faces
    // were not left/bottom, but top/right.
    OUString sURL = m_directories.getURLFromSrc(sDataDirectory) + "tdf141127_defaultSkewAngle.odp";
    mxComponent = loadFromDesktop(sURL, "com.sun.star.comp.presentation.PresentationDocument");
    CPPUNIT_ASSERT_MESSAGE("Could not load document", mxComponent.is());
    uno::Reference<drawing::XShape> xShape(getShape(0));
    SdrObjCustomShape& rSdrCustomShape(
        static_cast<SdrObjCustomShape&>(*GetSdrObjectFromXShape(xShape)));

    // Check left/bottom of bound rect. Without fix it would be left=15994, bottom=6999.
    tools::Rectangle aBoundRect(rSdrCustomShape.GetCurrentBoundRect());
    CPPUNIT_ASSERT_EQUAL(tools::Long(15371), aBoundRect.Left());
    CPPUNIT_ASSERT_EQUAL(tools::Long(7622), aBoundRect.Bottom());
}
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp b/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp
new file mode 100644
index 0000000..5cd0da9
--- /dev/null
+++ b/svx/qa/unit/data/tdf141127_defaultSkewAngle.odp
Binary files differ
diff --git a/xmloff/source/draw/ximpcustomshape.cxx b/xmloff/source/draw/ximpcustomshape.cxx
index ebaf156..15d29618 100644
--- a/xmloff/source/draw/ximpcustomshape.cxx
+++ b/xmloff/source/draw/ximpcustomshape.cxx
@@ -1286,6 +1286,15 @@
        }
    }

    //tdf#141127 Add ODF default values. Otherwise defaults from MS Office binary format are used.
    if (!maExtrusion.empty())
    {
        auto it = std::find_if(maExtrusion.begin(), maExtrusion.end(), 
            [](css::beans::PropertyValue& rProp){return EASGet(rProp.Name) == EAS_Skew;} );
        if (it == maExtrusion.end())
            GetEnhancedParameterPair(maExtrusion, "50 45", EAS_Skew);
    }

    SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maExtrusion, EASGet( EAS_Extrusion ) );
    SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maPath,      EASGet( EAS_Path ) );
    SdXMLCustomShapePropertyMerge( mrCustomShapeGeometry, maTextPath,  EASGet( EAS_TextPath ) );