diff options
author | Regina Henschel <rb.henschel@t-online.de> | 2021-03-08 17:28:27 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2021-03-11 11:03:21 +0100 |
commit | d1026ad7ad1562235b328bb5be2e00ceabd09475 (patch) | |
tree | 965d2591d2621239b36fba03fadf84347374654a | |
parent | bump product version to 7.1.3.0.0+ (diff) | |
download | core-d1026ad7ad1562235b328bb5be2e00ceabd09475.tar.gz core-d1026ad7ad1562235b328bb5be2e00ceabd09475.zip |
tdf#140865 roundtrip pptx wordart 3D, add sp3d
Change-Id: I446ae4e8c9dd5f2fbf3efe289681339f967c515a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112185
Tested-by: Jenkins
Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
(cherry picked from commit dbbb8cafcb801638bde3b21796eaebfc807acbdc)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112229
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | oox/source/drawingml/scene3dcontext.cxx | 24 | ||||
-rw-r--r-- | oox/source/drawingml/textbodypropertiescontext.cxx | 16 | ||||
-rw-r--r-- | sd/qa/unit/data/pptx/tdf140865Wordart3D.pptx | bin | 0 -> 17158 bytes | |||
-rw-r--r-- | sd/qa/unit/export-tests-ooxml1.cxx | 24 |
4 files changed, 64 insertions, 0 deletions
diff --git a/oox/source/drawingml/scene3dcontext.cxx b/oox/source/drawingml/scene3dcontext.cxx index 91b73f0bbd95..813f9442c901 100644 --- a/oox/source/drawingml/scene3dcontext.cxx +++ b/oox/source/drawingml/scene3dcontext.cxx @@ -92,6 +92,30 @@ ContextHandlerRef SceneText3DPropertiesContext::onCreateContext( sal_Int32 aElem case A_TOKEN( backdrop ): case A_TOKEN( extLst ): return nullptr; // TODO: later (backdrop is not supported by core anyway) + + case A_TOKEN( bevelT ): + case A_TOKEN( bevelB ): + { + BevelProperties aProps; + if( rAttribs.hasAttribute( XML_w ) ) + aProps.mnWidth = rAttribs.getInteger( XML_w, 0 ); + if( rAttribs.hasAttribute( XML_h ) ) + aProps.mnHeight = rAttribs.getInteger( XML_h, 0 ); + if( rAttribs.hasAttribute( XML_prst ) ) + aProps.mnPreset = rAttribs.getToken( XML_prst, XML_none ); + + if( aElementToken == A_TOKEN( bevelT ) ) + mr3DProperties.maTopBevelProperties.set( aProps ); + else + mr3DProperties.maBottomBevelProperties.set( aProps ); + break; + } + + case A_TOKEN( extrusionClr ): + return new ColorContext( *this, mr3DProperties.maExtrusionColor ); + + case A_TOKEN( contourClr ): + return new ColorContext( *this, mr3DProperties.maContourColor ); } return nullptr; } diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx b/oox/source/drawingml/textbodypropertiescontext.cxx index 5bc244b73fc2..4d94191dcfc7 100644 --- a/oox/source/drawingml/textbodypropertiescontext.cxx +++ b/oox/source/drawingml/textbodypropertiescontext.cxx @@ -177,6 +177,22 @@ ContextHandlerRef TextBodyPropertiesContext::onCreateContext( sal_Int32 aElement // EG_Text3D case A_TOKEN( sp3d ): // CT_Shape3D + { + if (mpShapePtr && mpShapePtr->getServiceName() == "com.sun.star.drawing.CustomShape") + { + if (rAttribs.hasAttribute(XML_extrusionH)) + mpShapePtr->getTextBody()->get3DProperties().mnExtrusionH = rAttribs.getInteger(XML_extrusionH, 0); + if (rAttribs.hasAttribute(XML_contourW)) + mpShapePtr->getTextBody()->get3DProperties().mnContourW = rAttribs.getInteger(XML_contourW, 0); + if (rAttribs.hasAttribute(XML_z)) + mpShapePtr->getTextBody()->get3DProperties().mnShapeZ = rAttribs.getInteger(XML_z, 0); + if (rAttribs.hasAttribute(XML_prstMaterial)) + mpShapePtr->getTextBody()->get3DProperties().mnMaterial = rAttribs.getToken(XML_prstMaterial, XML_none); + return new SceneText3DPropertiesContext(*this, mpShapePtr->getTextBody()->get3DProperties()); + } + break; + } + case A_TOKEN( flatTx ): // CT_FlatText break; diff --git a/sd/qa/unit/data/pptx/tdf140865Wordart3D.pptx b/sd/qa/unit/data/pptx/tdf140865Wordart3D.pptx Binary files differnew file mode 100644 index 000000000000..e55bc43800b4 --- /dev/null +++ b/sd/qa/unit/data/pptx/tdf140865Wordart3D.pptx diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx index a76c8ec137e6..d0837001ceca 100644 --- a/sd/qa/unit/export-tests-ooxml1.cxx +++ b/sd/qa/unit/export-tests-ooxml1.cxx @@ -102,6 +102,7 @@ public: void testTdf136911(); void testArcTo(); void testNarrationMimeType(); + void testTdf140865Wordart3D(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest1); @@ -153,6 +154,7 @@ public: CPPUNIT_TEST(testTdf136911); CPPUNIT_TEST(testArcTo); CPPUNIT_TEST(testNarrationMimeType); + CPPUNIT_TEST(testTdf140865Wordart3D); CPPUNIT_TEST_SUITE_END(); @@ -1325,6 +1327,28 @@ void SdOOXMLExportTest1::testNarrationMimeType() xDocShRef->DoClose(); } +void SdOOXMLExportTest1::testTdf140865Wordart3D() +{ + sd::DrawDocShellRef xDocShRef + = loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/tdf140865Wordart3D.pptx"), PPTX); + utl::TempFile aTempFile; + xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &aTempFile); + xmlDocUniquePtr pXmlDoc = parseExport(aTempFile, "ppt/slides/slide1.xml"); + + // without the fix in place a:sp3d was lost on round trip, and so extrusion was lost. + constexpr OStringLiteral sPathStart("//p:sld/p:cSld/p:spTree/p:sp/p:txBody/a:bodyPr"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d", "extrusionH", "342900"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d", "contourW", "12700"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:bevelT", "w", "114300"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:bevelT", "h", "38100"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:bevelT", "prst", "softRound"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:bevelB", "h", "152400"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:extrusionClr/a:srgbClr", "val", "990000"); + assertXPath(pXmlDoc, sPathStart + "/a:sp3d/a:contourClr/a:srgbClr", "val", "009876"); + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest1); CPPUNIT_PLUGIN_IMPLEMENT(); |