2005-03-10 12:52:35 +00:00
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* $RCSfile: slidechangebase.hxx,v $
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2006-12-13 14:45:39 +00:00
|
|
|
* $Revision: 1.6 $
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2006-12-13 14:45:39 +00:00
|
|
|
* last change: $Author: kz $ $Date: 2006-12-13 15:45:39 $
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
|
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
|
* =============================================
|
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* Lesser General Public License for more details.
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
2005-09-07 19:58:22 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
|
* MA 02111-1307 USA
|
2005-03-10 12:52:35 +00:00
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
#if ! defined(INCLUDED_PRESENTATION_INTERNAL_TRANSITIONS_SLIDECHANGEBASE_HXX)
|
|
|
|
|
#define INCLUDED_PRESENTATION_INTERNAL_TRANSITIONS_SLIDECHANGEBASE_HXX
|
|
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
#include <osl/mutex.hxx>
|
|
|
|
|
|
2005-03-10 12:52:35 +00:00
|
|
|
#include "unoview.hxx"
|
2006-12-13 14:45:39 +00:00
|
|
|
#include "vieweventhandler.hxx"
|
|
|
|
|
#include "numberanimation.hxx"
|
2005-03-10 12:52:35 +00:00
|
|
|
#include "slide.hxx"
|
|
|
|
|
#include "soundplayer.hxx"
|
|
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
#include <boost/enable_shared_from_this.hpp>
|
|
|
|
|
#include <boost/utility.hpp>
|
|
|
|
|
#include <boost/optional.hpp>
|
|
|
|
|
|
|
|
|
|
namespace slideshow {
|
|
|
|
|
namespace internal {
|
2005-10-11 07:46:17 +00:00
|
|
|
|
2005-03-10 12:52:35 +00:00
|
|
|
/** Base class for all slide change effects.
|
|
|
|
|
|
|
|
|
|
This class provides the basic sprite and view handling
|
|
|
|
|
functionality. Derived classes should normally only need to
|
|
|
|
|
implement the perform() method.
|
|
|
|
|
*/
|
2006-12-13 14:45:39 +00:00
|
|
|
class SlideChangeBase : public ViewEventHandler,
|
|
|
|
|
public NumberAnimation,
|
|
|
|
|
public boost::enable_shared_from_this<SlideChangeBase>,
|
2005-03-10 12:52:35 +00:00
|
|
|
private ::boost::noncopyable
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// NumberAnimation
|
|
|
|
|
virtual bool operator()( double x );
|
|
|
|
|
virtual double getUnderlyingValue() const;
|
|
|
|
|
|
|
|
|
|
// Animation
|
|
|
|
|
virtual void start( const AnimatableShapeSharedPtr&,
|
|
|
|
|
const ShapeAttributeLayerSharedPtr& );
|
|
|
|
|
virtual void end();
|
|
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
// ViewEventHandler
|
|
|
|
|
virtual void viewAdded( const UnoViewSharedPtr& rView );
|
|
|
|
|
virtual void viewRemoved( const UnoViewSharedPtr& rView );
|
|
|
|
|
virtual void viewChanged( const UnoViewSharedPtr& rView );
|
2005-03-10 12:52:35 +00:00
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
/** Create a new SlideChanger, for the given leaving and
|
|
|
|
|
entering slides.
|
|
|
|
|
*/
|
|
|
|
|
SlideChangeBase(
|
|
|
|
|
::boost::optional<SlideSharedPtr> const & leavingSlide,
|
2006-12-13 14:45:39 +00:00
|
|
|
const SlideSharedPtr& pEnteringSlide,
|
|
|
|
|
const SoundPlayerSharedPtr& pSoundPlayer,
|
|
|
|
|
const UnoViewContainer& rViewContainer,
|
|
|
|
|
EventMultiplexer& rEventMultiplexer,
|
|
|
|
|
bool bCreateLeavingSprites = true,
|
|
|
|
|
bool bCreateEnteringSprites = true );
|
|
|
|
|
|
|
|
|
|
/// Info on a per-view basis
|
|
|
|
|
struct ViewEntry
|
|
|
|
|
{
|
|
|
|
|
ViewEntry() {}
|
|
|
|
|
|
|
|
|
|
explicit ViewEntry( const UnoViewSharedPtr& rView ) :
|
|
|
|
|
mpView( rView )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// The view this entry is for
|
|
|
|
|
UnoViewSharedPtr mpView;
|
|
|
|
|
/// outgoing slide sprite
|
|
|
|
|
cppcanvas::CustomSpriteSharedPtr mpOutSprite;
|
|
|
|
|
/// incoming slide sprite
|
|
|
|
|
cppcanvas::CustomSpriteSharedPtr mpInSprite;
|
|
|
|
|
/// outgoing slide bitmap
|
|
|
|
|
mutable SlideBitmapSharedPtr mpLeavingBitmap;
|
|
|
|
|
/// incoming slide bitmap
|
|
|
|
|
mutable SlideBitmapSharedPtr mpEnteringBitmap;
|
|
|
|
|
|
|
|
|
|
// for algo access
|
|
|
|
|
const UnoViewSharedPtr& getView() const { return mpView; }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef ::std::vector<ViewEntry> ViewsVecT;
|
|
|
|
|
|
|
|
|
|
ViewsVecT::const_iterator beginViews() { return maViewData.begin(); }
|
|
|
|
|
ViewsVecT::const_iterator endViews() { return maViewData.end(); }
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
SlideBitmapSharedPtr getLeavingBitmap( const ViewEntry& rViewEntry ) const;
|
|
|
|
|
SlideBitmapSharedPtr getEnteringBitmap( const ViewEntry& rViewEntry ) const;
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
SlideBitmapSharedPtr createBitmap( const UnoViewSharedPtr& pView,
|
|
|
|
|
const boost::optional<SlideSharedPtr>& rSlide_ ) const;
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
::basegfx::B2ISize getEnteringSizePixel( const UnoViewSharedPtr& pView ) const;
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2005-10-11 07:46:17 +00:00
|
|
|
void renderBitmap( SlideBitmapSharedPtr const & pSlideBitmap,
|
|
|
|
|
::cppcanvas::CanvasSharedPtr const & pCanvas );
|
2005-03-10 12:52:35 +00:00
|
|
|
|
|
|
|
|
/** Called on derived classes to implement actual slide change.
|
|
|
|
|
|
|
|
|
|
This method is called with the sprite of the slide coming 'in'
|
|
|
|
|
|
|
|
|
|
@param rSprite
|
|
|
|
|
Current sprite to operate on. This is the sprite of the
|
|
|
|
|
'entering' slide
|
|
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
@param t
|
2005-03-10 12:52:35 +00:00
|
|
|
Current parameter value
|
|
|
|
|
*/
|
|
|
|
|
virtual void performIn(
|
|
|
|
|
const ::cppcanvas::CustomSpriteSharedPtr& rSprite,
|
2006-12-13 14:45:39 +00:00
|
|
|
const ViewEntry& rViewEntry,
|
2005-03-10 12:52:35 +00:00
|
|
|
const ::cppcanvas::CanvasSharedPtr& rDestinationCanvas,
|
|
|
|
|
double t );
|
|
|
|
|
|
|
|
|
|
/** Called on derived classes to implement actual slide change.
|
|
|
|
|
|
|
|
|
|
This method is called with the sprite of the slide moving 'out'
|
|
|
|
|
|
|
|
|
|
@param rSprite
|
|
|
|
|
Current sprite to operate on. This is the sprite of the
|
|
|
|
|
'leaving' slide
|
|
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
@param t
|
2005-03-10 12:52:35 +00:00
|
|
|
Current parameter value
|
|
|
|
|
*/
|
|
|
|
|
virtual void performOut(
|
|
|
|
|
const ::cppcanvas::CustomSpriteSharedPtr& rSprite,
|
2006-12-13 14:45:39 +00:00
|
|
|
const ViewEntry& rViewEntry,
|
2005-03-10 12:52:35 +00:00
|
|
|
const ::cppcanvas::CanvasSharedPtr& rDestinationCanvas,
|
|
|
|
|
double t );
|
|
|
|
|
|
|
|
|
|
private:
|
2005-10-11 07:46:17 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
::cppcanvas::CustomSpriteSharedPtr createSprite(
|
|
|
|
|
UnoViewSharedPtr const & pView,
|
|
|
|
|
::basegfx::B2DSize const & rSpriteSize,
|
|
|
|
|
double nPrio ) const;
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
void addSprites( ViewEntry& rEntry );
|
2005-03-10 12:52:35 +00:00
|
|
|
|
2006-12-13 14:45:39 +00:00
|
|
|
ViewsVecT::iterator lookupView( UnoViewSharedPtr const & pView );
|
|
|
|
|
ViewsVecT::const_iterator lookupView( UnoViewSharedPtr const & pView ) const;
|
|
|
|
|
|
|
|
|
|
SoundPlayerSharedPtr mpSoundPlayer;
|
|
|
|
|
|
|
|
|
|
const UnoViewContainer& mrViewContainer;
|
|
|
|
|
EventMultiplexer& mrEventMultiplexer;
|
|
|
|
|
|
|
|
|
|
::boost::optional<SlideSharedPtr> mLeavingSlide;
|
|
|
|
|
SlideSharedPtr mpEnteringSlide;
|
|
|
|
|
|
|
|
|
|
ViewsVecT maViewData;
|
|
|
|
|
const bool mbCreateLeavingSprites;
|
|
|
|
|
const bool mbCreateEnteringSprites;
|
|
|
|
|
bool mbSpritesVisible;
|
2005-03-10 12:52:35 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace internal
|
|
|
|
|
} // namespace presentation
|
|
|
|
|
|
|
|
|
|
#endif
|