sd/qa/unit/data/pptx/tdf124457.pptx |binary sd/qa/unit/export-tests-ooxml1.cxx | 22 ++++++++++++++++++++++ sd/source/filter/eppt/pptx-animations.cxx | 22 +++++++++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-)
New commits: commit c89a7e2d900da5a6bded573f6dcff04c7be98339 Author: Tibor Nagy <nagy.tib...@nisz.hu> AuthorDate: Wed May 5 12:38:51 2021 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Mon May 10 11:40:18 2021 +0200 tdf#124457 PPTX animation: export repeatCount Aanimation timing property "repeatCount" wasn't exported. Note: PPTX uses a 1000 multiplication in repeatCount to support fractional movement of animated objects, e.g. 1500 means one and a half steps. Change-Id: Iac0dd10007c3e48f06c131d61671e1f78cad45a5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115138 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sd/qa/unit/data/pptx/tdf124457.pptx b/sd/qa/unit/data/pptx/tdf124457.pptx new file mode 100644 index 000000000000..5ea5173a10d5 Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf124457.pptx differ diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx index ad8bb624c614..c2d07f5ca092 100644 --- a/sd/qa/unit/export-tests-ooxml1.cxx +++ b/sd/qa/unit/export-tests-ooxml1.cxx @@ -113,6 +113,7 @@ public: void testArcTo(); void testNarrationMimeType(); void testTdf140865Wordart3D(); + void testTdf124457(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest1); @@ -168,6 +169,7 @@ public: CPPUNIT_TEST(testArcTo); CPPUNIT_TEST(testNarrationMimeType); CPPUNIT_TEST(testTdf140865Wordart3D); + CPPUNIT_TEST(testTdf124457); CPPUNIT_TEST_SUITE_END(); @@ -1472,6 +1474,26 @@ void SdOOXMLExportTest1::testTdf140865Wordart3D() xDocShRef->DoClose(); } +void SdOOXMLExportTest1::testTdf124457() +{ + sd::DrawDocShellRef xDocShRef = loadURL( m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf124457.pptx"), PPTX ); + utl::TempFile tempFile; + xDocShRef = saveAndReload(xDocShRef.get(), PPTX, &tempFile); + xDocShRef->DoClose(); + + xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml"); + + assertXPath(pXmlDoc, + "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/" + "p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par[1]/p:cTn", + "repeatCount", "3000"); + + assertXPath(pXmlDoc, + "/p:sld/p:timing/p:tnLst/p:par/p:cTn/p:childTnLst/p:seq/p:cTn/" + "p:childTnLst/p:par/p:cTn/p:childTnLst/p:par/p:cTn/p:childTnLst/p:par[2]/p:cTn", + "repeatCount", "indefinite"); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest1); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sd/source/filter/eppt/pptx-animations.cxx b/sd/source/filter/eppt/pptx-animations.cxx index 63423c8489c0..43ef7ce4d55d 100644 --- a/sd/source/filter/eppt/pptx-animations.cxx +++ b/sd/source/filter/eppt/pptx-animations.cxx @@ -994,11 +994,13 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart() { const Reference<XAnimationNode>& rXNode = getCurrentNode(); std::optional<OString> sDuration; + std::optional<OString> sRepeatCount; const char* pRestart = nullptr; const char* pNodeType = nullptr; const char* pPresetClass = nullptr; const char* pFill = nullptr; double fDuration = 0; + double fRepeatCount = 0; Any aAny; assert(mpContext); @@ -1070,12 +1072,30 @@ void PPTXAnimationExport::WriteAnimationNodeCommonPropsStart() bool bAutoReverse = rXNode->getAutoReverse(); + aAny = rXNode->getRepeatCount(); + if (aAny.hasValue()) + { + Timing eTiming; + + if (aAny >>= eTiming) + { + if (eTiming == Timing_INDEFINITE) + sRepeatCount = "indefinite"; + } + else + aAny >>= fRepeatCount; + } + + if (fRepeatCount != 0) + sRepeatCount = OString::number(static_cast<sal_Int32>(fRepeatCount * 1000.0)); + mpFS->startElementNS( XML_p, XML_cTn, XML_id, OString::number(GetNextAnimationNodeId(rXNode)), XML_dur, sDuration, XML_autoRev, sax_fastparser::UseIf("1", bAutoReverse), XML_restart, pRestart, XML_nodeType, pNodeType, XML_fill, pFill, XML_presetClass, pPresetClass, XML_presetID, sax_fastparser::UseIf(OString::number(nPresetId), bPresetId), XML_presetSubtype, - sax_fastparser::UseIf(OString::number(nPresetSubType), bPresetSubType)); + sax_fastparser::UseIf(OString::number(nPresetSubType), bPresetSubType), XML_repeatCount, + sRepeatCount); WriteAnimationCondList(mpContext->getCondition(true), XML_stCondLst); WriteAnimationCondList(mpContext->getCondition(false), XML_endCondLst); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits