diff options
author | Thorsten Behrens <tbehrens@novell.com> | 2010-10-26 16:25:58 +0200 |
---|---|---|
committer | Thorsten Behrens <tbehrens@novell.com> | 2010-10-26 16:25:58 +0200 |
commit | 7f5ebf8baeafd72ccc1fe81c99a4effa2c357712 (patch) | |
tree | 7b8f04ede8d87805bead488d755306a326337db9 | |
parent | 8eddddda1d8e0a9401ae16e5c1fe422b2105f42a (diff) |
MS interop: support for cutblack slidetransition added
Adds CUTBLACK slide transition to ppt import and slideshow
-rwxr-xr-x[-rw-r--r--] | sd/source/filter/ppt/pptin.cxx | 6 | ||||
-rw-r--r-- | sd/xml/transitions.xml | 3 | ||||
-rw-r--r-- | slideshow/source/engine/transitions/slidetransitionfactory.cxx | 115 | ||||
-rw-r--r-- | slideshow/source/engine/transitions/transitionfactorytab.cxx | 14 |
4 files changed, 127 insertions, 11 deletions
diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 1934e7142ffb..f1df8f80750b 100644..100755 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -1622,7 +1622,11 @@ void ImplSdPPTImport::ImportPageEffect( SdPage* pPage, const sal_Bool bNewAnimat if ( nDirection == 0 ) pPage->SetFadeEffect( ::com::sun::star::presentation::FadeEffect_NONE ); // Direkt else if ( nDirection == 1 ) - pPage->SetFadeEffect( ::com::sun::star::presentation::FadeEffect_NONE ); // Direkt ueber Schwarz + { + pPage->setTransitionType( animations::TransitionType::BARWIPE ); + pPage->setTransitionSubtype( animations::TransitionSubType::FADEOVERCOLOR ); + pPage->setTransitionFadeColor( 0 ); + } } else pPage->setTransitionType( 0 ); diff --git a/sd/xml/transitions.xml b/sd/xml/transitions.xml index 1b77c3ec4732..556eb6f504e8 100644 --- a/sd/xml/transitions.xml +++ b/sd/xml/transitions.xml @@ -111,6 +111,9 @@ <anim:par pres:preset-id="fade-through-black"> <anim:transitionFilter smil:type="fade" smil:subtype="fadeOverColor" smil:fadeColor="#000000"/> </anim:par> + <anim:par pres:preset-id="cut-through-black"> + <anim:transitionFilter smil:type="barWipe" smil:subtype="fadeOverColor" smil:fadeColor="#000000"/> + </anim:par> <anim:par pres:preset-id="cover-down"> <anim:transitionFilter smil:type="slideWipe" smil:subtype="fromTop"/> </anim:par> diff --git a/slideshow/source/engine/transitions/slidetransitionfactory.cxx b/slideshow/source/engine/transitions/slidetransitionfactory.cxx index 4a8e674c2559..76996a6098c5 100644 --- a/slideshow/source/engine/transitions/slidetransitionfactory.cxx +++ b/slideshow/source/engine/transitions/slidetransitionfactory.cxx @@ -474,6 +474,89 @@ void FadingSlideChange::performOut( } } +class CutSlideChange : public SlideChangeBase +{ +public: + /** Create a new SlideChanger, for the given leaving and + entering slides, which applies a cut effect. + */ + CutSlideChange( + boost::optional<SlideSharedPtr> const & leavingSlide, + const SlideSharedPtr& pEnteringSlide, + const RGBColor& rFadeColor, + const SoundPlayerSharedPtr& pSoundPlayer, + const UnoViewContainer& rViewContainer, + ScreenUpdater& rScreenUpdater, + EventMultiplexer& rEventMultiplexer ) + : SlideChangeBase( leavingSlide, + pEnteringSlide, + pSoundPlayer, + rViewContainer, + rScreenUpdater, + rEventMultiplexer ), + maFadeColor( rFadeColor ), + mbFirstTurn( true ) + {} + + virtual void performIn( + const ::cppcanvas::CustomSpriteSharedPtr& rSprite, + const ViewEntry& rViewEntry, + const ::cppcanvas::CanvasSharedPtr& rDestinationCanvas, + double t ); + + virtual void performOut( + const ::cppcanvas::CustomSpriteSharedPtr& rSprite, + const ViewEntry& rViewEntry, + const ::cppcanvas::CanvasSharedPtr& rDestinationCanvas, + double t ); + +private: + RGBColor maFadeColor; + bool mbFirstTurn; +}; + +void CutSlideChange::performIn( + const ::cppcanvas::CustomSpriteSharedPtr& rSprite, + const ViewEntry& /*rViewEntry*/, + const ::cppcanvas::CanvasSharedPtr& /*rDestinationCanvas*/, + double t ) +{ + ENSURE_OR_THROW( + rSprite, + "CutSlideChange::performIn(): Invalid sprite" ); + + // After 2/3rd of the active time, display new slide + rSprite->setAlpha( t > 2/3.0 ? 1.0 : 0.0 ); +} + +void CutSlideChange::performOut( + const ::cppcanvas::CustomSpriteSharedPtr& rSprite, + const ViewEntry& rViewEntry, + const ::cppcanvas::CanvasSharedPtr& rDestinationCanvas, + double t ) +{ + ENSURE_OR_THROW( + rSprite, + "CutSlideChange::performOut(): Invalid sprite" ); + ENSURE_OR_THROW( + rDestinationCanvas, + "FadingSlideChange::performOut(): Invalid dest canvas" ); + + if( mbFirstTurn ) + { + mbFirstTurn = false; + + // clear page to given fade color. 'Leaving' slide is + // painted atop of that + fillPage( rDestinationCanvas, + getEnteringSlideSizePixel( rViewEntry.mpView ), + maFadeColor ); + } + + // Until 1/3rd of the active time, display old slide. + rSprite->setAlpha( t > 1/3.0 ? 0.0 : 1.0 ); +} + class MovingSlideChange : public SlideChangeBase { /// Direction vector for leaving slide, @@ -1008,6 +1091,7 @@ NumberAnimationSharedPtr TransitionFactory::createSlideTransition( pSoundPlayer ); } + case animations::TransitionType::BARWIPE: case animations::TransitionType::FADE: { // black page: @@ -1039,16 +1123,27 @@ NumberAnimationSharedPtr TransitionFactory::createSlideTransition( "SlideTransitionFactory::createSlideTransition(): Unknown FADE subtype" ); } - return NumberAnimationSharedPtr( - new FadingSlideChange( - leavingSlide, - pEnteringSlide, - comphelper::make_optional( - rTransitionFadeColor), - pSoundPlayer, - rViewContainer, - rScreenUpdater, - rEventMultiplexer )); + if( nTransitionType == animations::TransitionType::FADE ) + return NumberAnimationSharedPtr( + new FadingSlideChange( + leavingSlide, + pEnteringSlide, + comphelper::make_optional( + rTransitionFadeColor), + pSoundPlayer, + rViewContainer, + rScreenUpdater, + rEventMultiplexer )); + else + return NumberAnimationSharedPtr( + new CutSlideChange( + leavingSlide, + pEnteringSlide, + rTransitionFadeColor, + pSoundPlayer, + rViewContainer, + rScreenUpdater, + rEventMultiplexer )); } } } diff --git a/slideshow/source/engine/transitions/transitionfactorytab.cxx b/slideshow/source/engine/transitions/transitionfactorytab.cxx index 50222d9c72e6..a59c6051aa5e 100644 --- a/slideshow/source/engine/transitions/transitionfactorytab.cxx +++ b/slideshow/source/engine/transitions/transitionfactorytab.cxx @@ -2016,6 +2016,20 @@ static const TransitionInfo lcl_transitionInfo[] = true, // 'out' by parameter sweep inversion false // scale isotrophically to target size }, + // this is the cut through black fade (does not fade, but does a + // hard cut) + { + animations::TransitionType::BARWIPE, + animations::TransitionSubType::FADEOVERCOLOR, + TransitionInfo::TRANSITION_SPECIAL, + // TODO(F2): Setup parameters + 0.0, // no rotation + 1.0, // no scaling + 1.0, // no scaling + TransitionInfo::REVERSEMETHOD_IGNORE, + true, // 'out' by parameter sweep inversion + false // scale isotrophically to target size + }, { // mapped to RandomWipe: |