diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2018-02-02 10:21:50 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2018-02-12 19:50:21 +0100 |
commit | 6f05db5a19c0bd82b937e2c79f766bb35c60acc1 (patch) | |
tree | 45ab103622bd702856a4e6922da503db6776efd8 | |
parent | dc6b1c2329bb744fb5e8c33749dcff34553645da (diff) |
tdf#115394 import custom slide transition time in PPTX
* custom values are imported correctly
* standard (fast, slow, medium) values are changed
to match values in the MSO
Change-Id: I004242afbbf641fe414abc8df248a2844c104502
Reviewed-on: https://gerrit.libreoffice.org/49139
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/49521
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Tested-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r-- | include/oox/ppt/slidetransition.hxx | 4 | ||||
-rw-r--r-- | offapi/com/sun/star/presentation/DrawPage.idl | 9 | ||||
-rw-r--r-- | oox/source/ppt/slidetransition.cxx | 30 | ||||
-rw-r--r-- | oox/source/ppt/slidetransitioncontext.cxx | 6 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 1 | ||||
-rw-r--r-- | sd/qa/unit/data/pptx/tdf115394.pptx | bin | 0 -> 31282 bytes | |||
-rw-r--r-- | sd/qa/unit/import-tests.cxx | 34 | ||||
-rw-r--r-- | sd/source/ui/inc/unoprnms.hxx | 1 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unopage.cxx | 2 |
9 files changed, 76 insertions, 11 deletions
diff --git a/include/oox/ppt/slidetransition.hxx b/include/oox/ppt/slidetransition.hxx index 41df7b2f7948..e0383aaf154f 100644 --- a/include/oox/ppt/slidetransition.hxx +++ b/include/oox/ppt/slidetransition.hxx @@ -42,7 +42,10 @@ namespace oox { namespace ppt { void setSlideProperties( PropertyMap& props ); void setTransitionFilterProperties( const css::uno::Reference< css::animations::XTransitionFilter > & xFilter ); + /// Set one of standard values for slide transition duration void setOoxTransitionSpeed( sal_Int32 nToken ); + /// Set slide transition time directly + void setOoxTransitionSpeed( double fDuration ); void setMode( bool bMode ) { mbMode = bMode; } void setOoxAdvanceTime( sal_Int32 nAdvanceTime ) @@ -66,6 +69,7 @@ namespace oox { namespace ppt { bool mbTransitionDirectionNormal; ::sal_Int16 mnAnimationSpeed; ::sal_Int32 mnFadeColor; + double mfTransitionDurationInSeconds; bool mbMode; /**< http://api.libreoffice.org/docs/common/ref/com/sun/star/animations/XTransitionFilter.html Mode property */ ::sal_Int32 mnAdvanceTime; }; diff --git a/offapi/com/sun/star/presentation/DrawPage.idl b/offapi/com/sun/star/presentation/DrawPage.idl index 18e499e81420..0e070470ad25 100644 --- a/offapi/com/sun/star/presentation/DrawPage.idl +++ b/offapi/com/sun/star/presentation/DrawPage.idl @@ -79,11 +79,11 @@ published service DrawPage [property] short Layout; - /** defines the speed of the fade-in effect of this page. + /** Defines the speed of the fade-in effect of this page. + @see TransitionSpeed */ [property] com::sun::star::presentation::AnimationSpeed Speed; - /** defines if a header presentation shape from the master page is visible on this page. */ @@ -142,6 +142,11 @@ published service DrawPage */ [optional, property] long DateTimeFormat; + /** Specifies slide transition time in seconds. + @since LibreOffice 6.1 + @see Speed + */ + [property, optional] double TransitionDuration; }; diff --git a/oox/source/ppt/slidetransition.cxx b/oox/source/ppt/slidetransition.cxx index 9ae715fa49c0..dc2dbf923b67 100644 --- a/oox/source/ppt/slidetransition.cxx +++ b/oox/source/ppt/slidetransition.cxx @@ -47,6 +47,7 @@ namespace oox { namespace ppt { , mbTransitionDirectionNormal( true ) , mnAnimationSpeed( AnimationSpeed_FAST ) , mnFadeColor( 0 ) + , mfTransitionDurationInSeconds( -1.0 ) , mbMode( true ) , mnAdvanceTime( -1 ) { @@ -59,6 +60,7 @@ namespace oox { namespace ppt { , mbTransitionDirectionNormal( true ) , mnAnimationSpeed( AnimationSpeed_FAST ) , mnFadeColor( 0 ) + , mfTransitionDurationInSeconds( -1.0 ) , mbMode( true ) , mnAdvanceTime( -1 ) { @@ -79,11 +81,13 @@ namespace oox { namespace ppt { aProps.setProperty( PROP_TransitionSubtype, mnTransitionSubType); aProps.setProperty( PROP_TransitionDirection, mbTransitionDirectionNormal); aProps.setProperty( PROP_Speed, mnAnimationSpeed); + if( mfTransitionDurationInSeconds >= 0.0 ) + aProps.setProperty( PROP_TransitionDuration, mfTransitionDurationInSeconds); aProps.setProperty( PROP_TransitionFadeColor, mnFadeColor); - if( mnAdvanceTime != -1 ) { - aProps.setProperty( PROP_Duration, mnAdvanceTime/1000); - aProps.setProperty( PROP_Change, static_cast<sal_Int32>(1)); - } + if( mnAdvanceTime != -1 ) { + aProps.setProperty( PROP_Duration, mnAdvanceTime/1000); + aProps.setProperty( PROP_Change, static_cast<sal_Int32>(1)); + } } catch( Exception& ) { @@ -113,19 +117,21 @@ namespace oox { namespace ppt { { switch( nToken ) { - /* In case you want to use time values in second, - * the speed values are located in the PPT97 importer - * sd/source/filter/ppt/ppt97animations.cxx:664 - * (void Ppt97Animation::UpdateCacheData() const) + /* the speed values are located in the PPT97 importer + * sd/source/filter/ppt/pptin.cxx:1783 + * (void ImplSdPPTImport::ImportPageEffect) */ case XML_fast: mnAnimationSpeed = AnimationSpeed_FAST; + mfTransitionDurationInSeconds = 0.5; break; case XML_med: mnAnimationSpeed = AnimationSpeed_MEDIUM; + mfTransitionDurationInSeconds = 0.75; break; case XML_slow: mnAnimationSpeed = AnimationSpeed_SLOW; + mfTransitionDurationInSeconds = 1.0; break; default: // should not happen. just ignore @@ -133,6 +139,14 @@ namespace oox { namespace ppt { } } + void SlideTransition::setOoxTransitionSpeed( double fDurationInSeconds ) + { + // for compatibility + mnAnimationSpeed = ( fDurationInSeconds <= 0.5 ) ? AnimationSpeed_FAST + : ( fDurationInSeconds >= 1.0 ) ? AnimationSpeed_SLOW : AnimationSpeed_MEDIUM; + mfTransitionDurationInSeconds = fDurationInSeconds; + } + sal_Int16 SlideTransition::ooxToOdpEightDirections( ::sal_Int32 nOoxType ) { sal_Int16 nOdpDirection; diff --git a/oox/source/ppt/slidetransitioncontext.cxx b/oox/source/ppt/slidetransitioncontext.cxx index 9b29653e98e6..bed6060d4d4a 100644 --- a/oox/source/ppt/slidetransitioncontext.cxx +++ b/oox/source/ppt/slidetransitioncontext.cxx @@ -32,6 +32,7 @@ #include "oox/helper/attributelist.hxx" #include <oox/token/namespaces.hxx> #include <oox/token/tokens.hxx> +#include <oox/token/properties.hxx> using namespace ::com::sun::star; using namespace ::oox::core; @@ -50,6 +51,11 @@ SlideTransitionContext::SlideTransitionContext( FragmentHandler2& rParent, const // ST_TransitionSpeed maTransition.setOoxTransitionSpeed( rAttribs.getToken( XML_spd, XML_fast ) ); + // p14:dur + sal_Int32 nDurationInMs = rAttribs.getInteger( P14_TOKEN( dur ), -1 ); + if( nDurationInMs > -1 ) + maTransition.setOoxTransitionSpeed( nDurationInMs / 1000.0 ); + // TODO rAttribs.getBool( XML_advClick, true ); diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 52909147b9e1..f4ca60265708 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -527,6 +527,7 @@ TopMargin TotalsRow Transformation TransitionDirection +TransitionDuration TransitionFadeColor TransitionSubtype TransitionType diff --git a/sd/qa/unit/data/pptx/tdf115394.pptx b/sd/qa/unit/data/pptx/tdf115394.pptx Binary files differnew file mode 100644 index 000000000000..d01c90270f34 --- /dev/null +++ b/sd/qa/unit/data/pptx/tdf115394.pptx diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index ab58fe2fd7c0..187d678a2958 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -150,6 +150,7 @@ public: void testTdf109223(); void testActiveXCheckbox(); void testTdf108926(); + void testTdf115394(); bool checkPattern(sd::DrawDocShellRef& rDocRef, int nShapeNumber, std::vector<sal_uInt8>& rExpected); void testPatternImport(); @@ -219,6 +220,7 @@ public: CPPUNIT_TEST(testTdf109223); CPPUNIT_TEST(testActiveXCheckbox); CPPUNIT_TEST(testTdf108926); + CPPUNIT_TEST(testTdf115394); CPPUNIT_TEST_SUITE_END(); }; @@ -2259,6 +2261,38 @@ void SdImportTest::testTdf108926() xDocShRef->DoClose(); } +void SdImportTest::testTdf115394() +{ + sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("/sd/qa/unit/data/pptx/tdf115394.pptx"), PPTX); + double fTransitionDuration; + + // Slow in MS formats + SdPage* pPage1 = xDocShRef->GetDoc()->GetSdPage(0, PageKind::Standard); + fTransitionDuration = pPage1->getTransitionDuration(); + CPPUNIT_ASSERT_EQUAL(1.0, fTransitionDuration); + + // Medium in MS formats + SdPage* pPage2 = xDocShRef->GetDoc()->GetSdPage(1, PageKind::Standard); + fTransitionDuration = pPage2->getTransitionDuration(); + CPPUNIT_ASSERT_EQUAL(0.75, fTransitionDuration); + + // Fast in MS formats + SdPage* pPage3 = xDocShRef->GetDoc()->GetSdPage(2, PageKind::Standard); + fTransitionDuration = pPage3->getTransitionDuration(); + CPPUNIT_ASSERT_EQUAL(0.5, fTransitionDuration); + + // Custom values + SdPage* pPage4 = xDocShRef->GetDoc()->GetSdPage(3, PageKind::Standard); + fTransitionDuration = pPage4->getTransitionDuration(); + CPPUNIT_ASSERT_EQUAL(0.25, fTransitionDuration); + + SdPage* pPage5 = xDocShRef->GetDoc()->GetSdPage(4, PageKind::Standard); + fTransitionDuration = pPage5->getTransitionDuration(); + CPPUNIT_ASSERT_EQUAL(4.25, fTransitionDuration); + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sd/source/ui/inc/unoprnms.hxx b/sd/source/ui/inc/unoprnms.hxx index 3dd438f0ec28..1e5e3b910f3e 100644 --- a/sd/source/ui/inc/unoprnms.hxx +++ b/sd/source/ui/inc/unoprnms.hxx @@ -33,6 +33,7 @@ #define UNO_NAME_PAGE_NUMBER "Number" #define UNO_NAME_PAGE_ORIENTATION "Orientation" #define UNO_NAME_PAGE_SPEED "Speed" +#define UNO_NAME_PAGE_TRANSITION_DURATION "TransitionDuration" #define UNO_NAME_PAGE_WIDTH "Width" #define UNO_NAME_PAGE_PREVIEW "Preview" #define UNO_NAME_PAGE_PREVIEWBITMAP "PreviewBitmap" diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 9e5f6feff2dc..b4307a2da338 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -145,7 +145,7 @@ const SvxItemPropertySet* ImplGetDrawPagePropertySet( bool bImpress, PageKind eP { OUString("TransitionSubtype"), WID_TRANSITION_SUBTYPE, ::cppu::UnoType<sal_Int16>::get(), 0, 0}, { OUString("TransitionDirection"), WID_TRANSITION_DIRECTION, ::cppu::UnoType<sal_Bool>::get(), 0, 0}, { OUString("TransitionFadeColor"), WID_TRANSITION_FADE_COLOR, ::cppu::UnoType<sal_Int32>::get(), 0, 0}, - { OUString("TransitionDuration"), WID_TRANSITION_DURATION, ::cppu::UnoType<double>::get(), 0, 0}, + { OUString(UNO_NAME_PAGE_TRANSITION_DURATION), WID_TRANSITION_DURATION, ::cppu::UnoType<double>::get(), 0, 0}, { OUString("LoopSound"), WID_LOOP_SOUND, cppu::UnoType<bool>::get(), 0, 0}, { OUString("NavigationOrder"), WID_NAVORDER, cppu::UnoType<css::container::XIndexAccess>::get(),0, 0}, { OUString(), 0, css::uno::Type(), 0, 0 } |