From e3d7fdff5ce3089b24b755063da95a3462b0fc30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Thu, 7 May 2020 17:46:01 +0200 Subject: implement PowerPoint 'flash' slide transition (API CHANGE) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's like 'fade', but using white instead of black. It's a separate type in the pptx file (although I actually cannot find it in the spec OOXML, but PowerPoint 2013 generates it). The API change in XTransitionFactory should be fine, I doubt there's anything external using it. Change-Id: I3479840f265ed8227b3b8301ecff56a63d57f493 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93668 Tested-by: Luboš Luňák Reviewed-by: Luboš Luňák --- slideshow/source/engine/opengl/TransitionImpl.cxx | 25 ++++++++++++---------- slideshow/source/engine/opengl/TransitionImpl.hxx | 3 ++- .../source/engine/opengl/TransitionerImpl.cxx | 3 ++- .../engine/transitions/slidetransitionfactory.cxx | 7 ++++++ 4 files changed, 25 insertions(+), 13 deletions(-) (limited to 'slideshow/source') diff --git a/slideshow/source/engine/opengl/TransitionImpl.cxx b/slideshow/source/engine/opengl/TransitionImpl.cxx index d1926ab854f9..98d6778fd197 100644 --- a/slideshow/source/engine/opengl/TransitionImpl.cxx +++ b/slideshow/source/engine/opengl/TransitionImpl.cxx @@ -1351,37 +1351,40 @@ std::shared_ptr makeFadeSmoothly() namespace { -class FadeThroughBlackTransition : public OGLTransitionImpl +class FadeThroughColorTransition : public OGLTransitionImpl { public: - FadeThroughBlackTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) - : OGLTransitionImpl(rScene, rSettings) + FadeThroughColorTransition(const TransitionScene& rScene, const TransitionSettings& rSettings, bool white) + : OGLTransitionImpl(rScene, rSettings), useWhite( white ) {} private: virtual GLuint makeShader() const override; + bool useWhite; }; -GLuint FadeThroughBlackTransition::makeShader() const +GLuint FadeThroughColorTransition::makeShader() const { - return OpenGLHelper::LoadShaders( "basicVertexShader", "fadeBlackFragmentShader" ); + return OpenGLHelper::LoadShaders( "basicVertexShader", "fadeBlackFragmentShader", + useWhite ? "#define use_white" : "", "" ); } std::shared_ptr -makeFadeThroughBlackTransition( +makeFadeThroughColorTransition( const Primitives_t& rLeavingSlidePrimitives, const Primitives_t& rEnteringSlidePrimitives, - const TransitionSettings& rSettings) + const TransitionSettings& rSettings, + bool white) { - return std::make_shared( + return std::make_shared( TransitionScene(rLeavingSlidePrimitives, rEnteringSlidePrimitives), - rSettings) + rSettings, white) ; } } -std::shared_ptr makeFadeThroughBlack() +std::shared_ptr makeFadeThroughColor( bool white ) { Primitive Slide; @@ -1395,7 +1398,7 @@ std::shared_ptr makeFadeThroughBlack() TransitionSettings aSettings; aSettings.mbUseMipMapLeaving = aSettings.mbUseMipMapEntering = false; - return makeFadeThroughBlackTransition(aLeavingSlide, aEnteringSlide, aSettings); + return makeFadeThroughColorTransition(aLeavingSlide, aEnteringSlide, aSettings, white); } namespace diff --git a/slideshow/source/engine/opengl/TransitionImpl.hxx b/slideshow/source/engine/opengl/TransitionImpl.hxx index 2831685cd3a7..ca1d36366a6c 100644 --- a/slideshow/source/engine/opengl/TransitionImpl.hxx +++ b/slideshow/source/engine/opengl/TransitionImpl.hxx @@ -271,7 +271,8 @@ std::shared_ptr makeNewsflash(); std::shared_ptr makeDiamond(); std::shared_ptr makeFadeSmoothly(); -std::shared_ptr makeFadeThroughBlack(); +// fade through black or white +std::shared_ptr makeFadeThroughColor( bool white = false ); class SceneObject { diff --git a/slideshow/source/engine/opengl/TransitionerImpl.cxx b/slideshow/source/engine/opengl/TransitionerImpl.cxx index 7403cad87425..c60be299752a 100644 --- a/slideshow/source/engine/opengl/TransitionerImpl.cxx +++ b/slideshow/source/engine/opengl/TransitionerImpl.cxx @@ -1214,6 +1214,7 @@ public: virtual uno::Reference< presentation::XTransition > SAL_CALL createTransition( sal_Int16 transitionType, sal_Int16 transitionSubType, + sal_Int32 transitionFadeColor, const uno::Reference< presentation::XSlideShowView >& view, const uno::Reference< rendering::XBitmap >& leavingBitmap, const uno::Reference< rendering::XBitmap >& enteringBitmap ) override @@ -1288,7 +1289,7 @@ public: } else if( transitionType == animations::TransitionType::FADE && transitionSubType == animations::TransitionSubType::CROSSFADE ) { pTransition = makeFadeSmoothly(); } else if( transitionType == animations::TransitionType::FADE && transitionSubType == animations::TransitionSubType::FADEOVERCOLOR ) { - pTransition = makeFadeThroughBlack(); + pTransition = makeFadeThroughColor( transitionFadeColor == 0xffffff ); } else if( transitionType == animations::TransitionType::IRISWIPE && transitionSubType == animations::TransitionSubType::DIAMOND ) { pTransition = makeDiamond(); } else if( transitionType == animations::TransitionType::ZOOM && transitionSubType == animations::TransitionSubType::ROTATEIN ) { diff --git a/slideshow/source/engine/transitions/slidetransitionfactory.cxx b/slideshow/source/engine/transitions/slidetransitionfactory.cxx index ec67e434cb7c..66faf10e09b3 100644 --- a/slideshow/source/engine/transitions/slidetransitionfactory.cxx +++ b/slideshow/source/engine/transitions/slidetransitionfactory.cxx @@ -108,6 +108,7 @@ public: */ PluginSlideChange( sal_Int16 nTransitionType, sal_Int16 nTransitionSubType, + const RGBColor& rTransitionFadeColor, std::optional const& leavingSlide_, const SlideSharedPtr& pEnteringSlide, const UnoViewContainer& rViewContainer, @@ -126,6 +127,7 @@ public: mbSuccess( false ), mnTransitionType( nTransitionType ), mnTransitionSubType( nTransitionSubType ), + mnTransitionFadeColor( rTransitionFadeColor ), mxFactory( xFactory ) { // create one transition per view @@ -150,6 +152,7 @@ public: uno::Reference rTransition = mxFactory->createTransition( mnTransitionType, mnTransitionSubType, + RGBAColor2UnoColor( mnTransitionFadeColor.getIntegerColor()), rView->getUnoView(), getLeavingBitmap(ViewEntry(rView))->getXBitmap(), getEnteringBitmap(ViewEntry(rView))->getXBitmap() ); @@ -247,6 +250,7 @@ private: sal_Int16 mnTransitionType; sal_Int16 mnTransitionSubType; + RGBColor mnTransitionFadeColor; uno::Reference mxFactory; }; @@ -844,6 +848,7 @@ NumberAnimationSharedPtr createSlideWipeTransition( NumberAnimationSharedPtr createPluginTransition( sal_Int16 nTransitionType, sal_Int16 nTransitionSubType, + const RGBColor& rTransitionFadeColor, std::optional const& pLeavingSlide, const SlideSharedPtr& pEnteringSlide, const UnoViewContainer& rViewContainer, @@ -857,6 +862,7 @@ NumberAnimationSharedPtr createPluginTransition( std::make_shared( nTransitionType, nTransitionSubType, + rTransitionFadeColor, pLeavingSlide, pEnteringSlide, rViewContainer, @@ -909,6 +915,7 @@ NumberAnimationSharedPtr TransitionFactory::createSlideTransition( createPluginTransition( nTransitionType, nTransitionSubType, + rTransitionFadeColor, std::make_optional(pLeavingSlide), pEnteringSlide, rViewContainer, -- cgit v1.2.1