diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2018-02-02 10:21:50 +0100 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2018-02-07 10:28:12 +0100 |
commit | a8a3e6a7fee5ac23bc2155b9391ead9402211147 (patch) | |
tree | c381a276f8e3b4e69e335a203fffeb6083ad4165 | |
parent | e89964ebb3ba3bd7d694695c004c5f976d8d9616 (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>
-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 | 22 | ||||
-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, 72 insertions, 7 deletions
diff --git a/include/oox/ppt/slidetransition.hxx b/include/oox/ppt/slidetransition.hxx index 8986016f30aa..5a31b158334b 100644 --- a/include/oox/ppt/slidetransition.hxx +++ b/include/oox/ppt/slidetransition.hxx @@ -43,7 +43,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 { ::sal_Int16 mnTransitionSubType; bool mbTransitionDirectionNormal; css::presentation::AnimationSpeed mnAnimationSpeed; + 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 e609e6709c2f..7c1555b7dc80 100644 --- a/oox/source/ppt/slidetransition.cxx +++ b/oox/source/ppt/slidetransition.cxx @@ -45,6 +45,7 @@ namespace oox { namespace ppt { , mnTransitionSubType( 0 ) , mbTransitionDirectionNormal( true ) , mnAnimationSpeed( AnimationSpeed_FAST ) + , mfTransitionDurationInSeconds( -1.0 ) , mbMode( true ) , mnAdvanceTime( -1 ) { @@ -56,6 +57,7 @@ namespace oox { namespace ppt { , mnTransitionSubType( 0 ) , mbTransitionDirectionNormal( true ) , mnAnimationSpeed( AnimationSpeed_FAST ) + , mfTransitionDurationInSeconds( -1.0 ) , mbMode( true ) , mnAdvanceTime( -1 ) { @@ -76,6 +78,8 @@ 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, sal_Int32(0)); if( mnAdvanceTime != -1 ) { aProps.setProperty( PROP_Duration, mnAdvanceTime/1000); @@ -110,19 +114,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 @@ -130,6 +136,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 64d6d5942ba3..7639df7c023b 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 const & rParent // 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 fabb7383a891..e90bd9c58912 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -530,6 +530,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 c54989eff192..652b6ace8626 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -174,6 +174,7 @@ public: void testTdf114488(); void testTdf114913(); void testTdf114821(); + void testTdf115394(); bool checkPattern(sd::DrawDocShellRef const & rDocRef, int nShapeNumber, std::vector<sal_uInt8>& rExpected); void testPatternImport(); @@ -251,6 +252,7 @@ public: CPPUNIT_TEST(testTdf114488); CPPUNIT_TEST(testTdf114913); CPPUNIT_TEST(testTdf114821); + CPPUNIT_TEST(testTdf115394); CPPUNIT_TEST_SUITE_END(); }; @@ -2380,6 +2382,38 @@ void SdImportTest::testTdf114821() 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 fd1f877ec78b..2263860bfa02 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -142,7 +142,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 } |