From 7cacc3326e1409fc245bc7d8d9804966de28e549 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Thu, 5 Nov 2015 21:40:09 +0100 Subject: pptx: export/import newsflash and comb slide transitions + test Change-Id: I8ec2e1bc6d6f46f741252085f68edc6c284124b6 --- sd/qa/unit/data/AllTransitions.odp | Bin 0 -> 13577 bytes sd/qa/unit/export-tests.cxx | 45 ++++++++++++++++++++++++++++++++ sd/source/filter/eppt/pptx-epptbase.cxx | 41 ++++++++++++++++++++--------- 3 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 sd/qa/unit/data/AllTransitions.odp (limited to 'sd') diff --git a/sd/qa/unit/data/AllTransitions.odp b/sd/qa/unit/data/AllTransitions.odp new file mode 100644 index 000000000000..fa2eced2cc3f Binary files /dev/null and b/sd/qa/unit/data/AllTransitions.odp differ diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx index 2fcec9351420..c74ac8f3dd4d 100644 --- a/sd/qa/unit/export-tests.cxx +++ b/sd/qa/unit/export-tests.cxx @@ -46,6 +46,8 @@ #include #include #include +#include +#include #include #include #include @@ -67,6 +69,7 @@ #include #include + #include #include @@ -127,6 +130,7 @@ public: void testBulletMarginAndIndentation(); void testParaMarginAndindentation(); void testTransparentBackground(); + void testExportTransitionsPPTX(); void testFdo90607(); void testTdf91378(); @@ -168,6 +172,7 @@ public: CPPUNIT_TEST(testBulletMarginAndIndentation); CPPUNIT_TEST(testParaMarginAndindentation); CPPUNIT_TEST(testTransparentBackground); + CPPUNIT_TEST(testExportTransitionsPPTX); CPPUNIT_TEST(testTdf91378); #if !defined WNT @@ -1342,6 +1347,46 @@ void SdExportTest::testTdf80224() xDocShRef->DoClose(); } +bool checkTransitionOnPage(uno::Reference xDoc, sal_Int32 nSlideNumber, + sal_Int16 nExpectedTransitionType, sal_Int16 nExpectedTransitionSubType) +{ + sal_Int32 nSlideIndex = nSlideNumber - 1; + + CPPUNIT_ASSERT_MESSAGE("Slide/Page index out of range", nSlideIndex < xDoc->getDrawPages()->getCount()); + + uno::Reference xPage(xDoc->getDrawPages()->getByIndex(nSlideIndex), uno::UNO_QUERY_THROW); + uno::Reference xPropSet(xPage, uno::UNO_QUERY); + uno::Any aAny; + + aAny = xPropSet->getPropertyValue(OUString("TransitionType")); + sal_Int16 nTransitionType = 0; + if ((aAny >>= nTransitionType) == false) + return false; + + aAny = xPropSet->getPropertyValue(OUString("TransitionSubtype")); + sal_Int16 nTransitionSubtype = 0; + if ((aAny >>= nTransitionSubtype) == false) + return false; + + if (nExpectedTransitionType != nTransitionType) + return false; + if (nExpectedTransitionSubType != nTransitionSubtype) + return false; + + return true; +} + +void SdExportTest::testExportTransitionsPPTX() +{ + sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/AllTransitions.odp"), ODP); + xDocShRef = saveAndReload(xDocShRef, PPTX); + uno::Reference xDoc(xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW); + + checkTransitionOnPage(xDoc, 71, css::animations::TransitionType::ZOOM, css::animations::TransitionSubType::ROTATEIN); + checkTransitionOnPage(xDoc, 41, css::animations::TransitionType::PUSHWIPE, css::animations::TransitionSubType::COMBHORIZONTAL); + checkTransitionOnPage(xDoc, 42, css::animations::TransitionType::PUSHWIPE, css::animations::TransitionSubType::COMBVERTICAL); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sd/source/filter/eppt/pptx-epptbase.cxx b/sd/source/filter/eppt/pptx-epptbase.cxx index fbcf25c404de..75931b2e068b 100644 --- a/sd/source/filter/eppt/pptx-epptbase.cxx +++ b/sd/source/filter/eppt/pptx-epptbase.cxx @@ -771,22 +771,25 @@ sal_Int8 PPTWriterBase::GetTransition( sal_Int16 nTransitionType, sal_Int16 nTra nPPTTransitionType = PPT_TRANSITION_TYPE_FADE; } break; - case PPT_TRANSITION_TYPE_COMB : - { - nPPTTransitionType = PPT_TRANSITION_TYPE_COMB; - if ( nTransitionSubtype == TransitionSubType::COMBVERTICAL ) - nDirection++; - } - break; case TransitionType::PUSHWIPE : { - nPPTTransitionType = PPT_TRANSITION_TYPE_PUSH; - switch( nTransitionSubtype ) + if (nTransitionSubtype == TransitionSubType::COMBVERTICAL || + nTransitionSubtype == TransitionSubType::COMBHORIZONTAL) + { + nPPTTransitionType = PPT_TRANSITION_TYPE_COMB; + } + else + { + nPPTTransitionType = PPT_TRANSITION_TYPE_PUSH; + } + switch (nTransitionSubtype) { - case TransitionSubType::FROMRIGHT: nDirection = 0; break; - case TransitionSubType::FROMBOTTOM: nDirection = 1; break; - case TransitionSubType::FROMLEFT: nDirection = 2; break; - case TransitionSubType::FROMTOP: nDirection = 3; break; + case TransitionSubType::FROMRIGHT: nDirection = 0; break; + case TransitionSubType::FROMBOTTOM: nDirection = 1; break; + case TransitionSubType::FROMLEFT: nDirection = 2; break; + case TransitionSubType::FROMTOP: nDirection = 3; break; + case TransitionSubType::COMBHORIZONTAL: nDirection = 0; break; + case TransitionSubType::COMBVERTICAL: nDirection = 1; break; } } break; @@ -831,6 +834,18 @@ sal_Int8 PPTWriterBase::GetTransition( sal_Int16 nTransitionType, sal_Int16 nTra } } break; + case TransitionType::ZOOM: + { + switch(nTransitionSubtype) + { + case TransitionSubType::ROTATEIN: + nPPTTransitionType = PPT_TRANSITION_TYPE_NEWSFLASH; + break; + default: + break; + } + } + break; } return nPPTTransitionType; -- cgit