summaryrefslogtreecommitdiff
path: root/slideshow/source/engine/animationfactory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'slideshow/source/engine/animationfactory.cxx')
-rw-r--r--slideshow/source/engine/animationfactory.cxx1396
1 files changed, 0 insertions, 1396 deletions
diff --git a/slideshow/source/engine/animationfactory.cxx b/slideshow/source/engine/animationfactory.cxx
deleted file mode 100644
index 6e7ab28ec..000000000
--- a/slideshow/source/engine/animationfactory.cxx
+++ /dev/null
@@ -1,1396 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_slideshow.hxx"
-
-// must be first
-#include <canvas/debug.hxx>
-#include <tools/diagnose_ex.h>
-#include <canvas/verbosetrace.hxx>
-
-#include <animationfactory.hxx>
-#include <attributemap.hxx>
-
-#include <com/sun/star/animations/AnimationAdditiveMode.hpp>
-#include <com/sun/star/animations/AnimationTransformType.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include <com/sun/star/drawing/LineStyle.hpp>
-#include <com/sun/star/awt/FontSlant.hpp>
-#include <com/sun/star/awt/FontUnderline.hpp>
-#include <com/sun/star/awt/FontWeight.hpp>
-
-#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/polygon/b2dpolypolygontools.hxx>
-
-#include <functional>
-
-
-using namespace ::com::sun::star;
-
-
-namespace slideshow
-{
- namespace internal
- {
- namespace
- {
- // attention, there is a similar implementation of Animation in
- // transitions/transitionfactory.cxx
-
- template< typename ValueT > class TupleAnimation : public PairAnimation
- {
- public:
- TupleAnimation( const ShapeManagerSharedPtr& rShapeManager,
- int nFlags,
- bool (ShapeAttributeLayer::*pIs1stValid)() const,
- bool (ShapeAttributeLayer::*pIs2ndValid)() const,
- const ValueT& rDefaultValue,
- const ::basegfx::B2DSize& rReferenceSize,
- double (ShapeAttributeLayer::*pGet1stValue)() const,
- double (ShapeAttributeLayer::*pGet2ndValue)() const,
- void (ShapeAttributeLayer::*pSetValue)( const ValueT& ) ) :
- mpShape(),
- mpAttrLayer(),
- mpShapeManager( rShapeManager ),
- mpIs1stValidFunc(pIs1stValid),
- mpIs2ndValidFunc(pIs2ndValid),
- mpGet1stValueFunc(pGet1stValue),
- mpGet2ndValueFunc(pGet2ndValue),
- mpSetValueFunc(pSetValue),
- mnFlags( nFlags ),
- maReferenceSize( rReferenceSize ),
- maDefaultValue( rDefaultValue ),
- mbAnimationStarted( false )
- {
- ENSURE_OR_THROW( rShapeManager,
- "TupleAnimation::TupleAnimation(): Invalid ShapeManager" );
- ENSURE_OR_THROW( pIs1stValid && pIs2ndValid && pGet1stValue && pGet2ndValue && pSetValue,
- "TupleAnimation::TupleAnimation(): One of the method pointers is NULL" );
- }
-
- ~TupleAnimation()
- {
- end_();
- }
-
- // Animation interface
- // -------------------
- virtual void prefetch( const AnimatableShapeSharedPtr&,
- const ShapeAttributeLayerSharedPtr& )
- {}
-
- virtual void start( const AnimatableShapeSharedPtr& rShape,
- const ShapeAttributeLayerSharedPtr& rAttrLayer )
- {
- OSL_ENSURE( !mpShape,
- "TupleAnimation::start(): Shape already set" );
- OSL_ENSURE( !mpAttrLayer,
- "TupleAnimation::start(): Attribute layer already set" );
-
- mpShape = rShape;
- mpAttrLayer = rAttrLayer;
-
- ENSURE_OR_THROW( rShape,
- "TupleAnimation::start(): Invalid shape" );
- ENSURE_OR_THROW( rAttrLayer,
- "TupleAnimation::start(): Invalid attribute layer" );
-
- if( !mbAnimationStarted )
- {
- mbAnimationStarted = true;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->enterAnimationMode( mpShape );
- }
- }
-
- virtual void end() { end_(); }
- void end_()
- {
- if( mbAnimationStarted )
- {
- mbAnimationStarted = false;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->leaveAnimationMode( mpShape );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
- }
- }
-
- // PairAnimation interface
- // -----------------------
-
- virtual bool operator()( const ::basegfx::B2DTuple& rValue )
- {
- ENSURE_OR_RETURN_FALSE( mpAttrLayer && mpShape,
- "TupleAnimation::operator(): Invalid ShapeAttributeLayer" );
-
- ValueT aValue( rValue.getX(),
- rValue.getY() );
-
- // Activitis get values from the expression parser,
- // which returns _relative_ sizes/positions.
- // Convert back relative to reference coordinate system
- aValue *= maReferenceSize;
-
- ((*mpAttrLayer).*mpSetValueFunc)( aValue );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
-
- return true;
- }
-
- virtual ::basegfx::B2DTuple getUnderlyingValue() const
- {
- ENSURE_OR_THROW( mpAttrLayer,
- "TupleAnimation::getUnderlyingValue(): Invalid ShapeAttributeLayer" );
-
- ::basegfx::B2DTuple aRetVal;
-
- // deviated from the (*shared_ptr).*mpFuncPtr
- // notation here, since gcc does not seem to parse
- // that as a member function call anymore.
- aRetVal.setX( (mpAttrLayer.get()->*mpIs1stValidFunc)() ?
- (mpAttrLayer.get()->*mpGet1stValueFunc)() :
- maDefaultValue.getX() );
- aRetVal.setY( (mpAttrLayer.get()->*mpIs2ndValidFunc)() ?
- (mpAttrLayer.get()->*mpGet2ndValueFunc)() :
- maDefaultValue.getY() );
-
- // Activities get values from the expression
- // parser, which returns _relative_
- // sizes/positions. Convert start value to the
- // same coordinate space (i.e. relative to given
- // reference size).
- aRetVal /= maReferenceSize;
-
- return aRetVal;
- }
-
- private:
- AnimatableShapeSharedPtr mpShape;
- ShapeAttributeLayerSharedPtr mpAttrLayer;
- ShapeManagerSharedPtr mpShapeManager;
- bool (ShapeAttributeLayer::*mpIs1stValidFunc)() const;
- bool (ShapeAttributeLayer::*mpIs2ndValidFunc)() const;
- double (ShapeAttributeLayer::*mpGet1stValueFunc)() const;
- double (ShapeAttributeLayer::*mpGet2ndValueFunc)() const;
- void (ShapeAttributeLayer::*mpSetValueFunc)( const ValueT& );
-
- const int mnFlags;
-
- const ::basegfx::B2DSize maReferenceSize;
- const ValueT maDefaultValue;
- bool mbAnimationStarted;
- };
-
-
- class PathAnimation : public NumberAnimation
- {
- public:
- PathAnimation( const ::rtl::OUString& rSVGDPath,
- sal_Int16 nAdditive,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& rSlideSize,
- int nFlags ) :
- maPathPoly(),
- mpShape(),
- mpAttrLayer(),
- mpShapeManager( rShapeManager ),
- maPageSize( rSlideSize ),
- maShapeOrig(),
- mnFlags( nFlags ),
- mbAnimationStarted( false ),
- mnAdditive( nAdditive )
- {
- ENSURE_OR_THROW( rShapeManager,
- "PathAnimation::PathAnimation(): Invalid ShapeManager" );
-
- ::basegfx::B2DPolyPolygon aPolyPoly;
-
- ENSURE_OR_THROW( ::basegfx::tools::importFromSvgD( aPolyPoly, rSVGDPath ),
- "PathAnimation::PathAnimation(): failed to parse SVG:d path" );
- ENSURE_OR_THROW( aPolyPoly.count() == 1,
- "PathAnimation::PathAnimation(): motion path consists of multiple/zero polygon(s)" );
-
- // TODO(F2): Since getPositionRelative() currently
- // cannot handle beziers, have to subdivide.
- // AW: Should be no longer necessary; getPositionRelative is now bezier-safe
- maPathPoly = ::basegfx::tools::adaptiveSubdivideByAngle(aPolyPoly.getB2DPolygon(0) );
- }
-
- ~PathAnimation()
- {
- end_();
- }
-
- // Animation interface
- // -------------------
- virtual void prefetch( const AnimatableShapeSharedPtr&,
- const ShapeAttributeLayerSharedPtr& )
- {}
-
- virtual void start( const AnimatableShapeSharedPtr& rShape,
- const ShapeAttributeLayerSharedPtr& rAttrLayer )
- {
- OSL_ENSURE( !mpShape,
- "PathAnimation::start(): Shape already set" );
- OSL_ENSURE( !mpAttrLayer,
- "PathAnimation::start(): Attribute layer already set" );
-
- mpShape = rShape;
- mpAttrLayer = rAttrLayer;
-
- ENSURE_OR_THROW( rShape,
- "PathAnimation::start(): Invalid shape" );
- ENSURE_OR_THROW( rAttrLayer,
- "PathAnimation::start(): Invalid attribute layer" );
-
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- if( mnAdditive == animations::AnimationAdditiveMode::SUM )
- maShapeOrig = mpShape->getBounds().getCenter();
- else
- maShapeOrig = mpShape->getDomBounds().getCenter();
-
- if( !mbAnimationStarted )
- {
- mbAnimationStarted = true;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->enterAnimationMode( mpShape );
- }
- }
-
- virtual void end() { end_(); }
- void end_()
- {
- if( mbAnimationStarted )
- {
- mbAnimationStarted = false;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->leaveAnimationMode( mpShape );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
- }
- }
-
- // NumberAnimation interface
- // -----------------------
-
- virtual bool operator()( double nValue )
- {
- ENSURE_OR_RETURN_FALSE( mpAttrLayer && mpShape,
- "PathAnimation::operator(): Invalid ShapeAttributeLayer" );
-
- ::basegfx::B2DPoint rOutPos = ::basegfx::tools::getPositionRelative( maPathPoly,
- nValue );
-
- // TODO(F1): Determine whether the path is
- // absolute, or shape-relative.
-
- // interpret path as page-relative. Scale up with page size
- rOutPos *= maPageSize;
-
- // TODO(F1): Determine whether the path origin is
- // absolute, or shape-relative.
-
- // interpret path as shape-originated. Offset to shape position
-
- rOutPos += maShapeOrig;
-
- mpAttrLayer->setPosition( rOutPos );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
-
- return true;
- }
-
- virtual double getUnderlyingValue() const
- {
- ENSURE_OR_THROW( mpAttrLayer,
- "PathAnimation::getUnderlyingValue(): Invalid ShapeAttributeLayer" );
-
- return 0.0; // though this should be used in concert with
- // ActivitiesFactory::createSimpleActivity, better
- // explicitely name our start value.
- // Permissible range for operator() above is [0,1]
- }
-
- private:
- ::basegfx::B2DPolygon maPathPoly;
- AnimatableShapeSharedPtr mpShape;
- ShapeAttributeLayerSharedPtr mpAttrLayer;
- ShapeManagerSharedPtr mpShapeManager;
- const ::basegfx::B2DSize maPageSize;
- ::basegfx::B2DPoint maShapeOrig;
- const int mnFlags;
- bool mbAnimationStarted;
- sal_Int16 mnAdditive;
- };
-
-
- /** GenericAnimation template
-
- This template makes heavy use of SFINAE, only one of
- the operator()() methods will compile for each of the
- base classes.
-
- Note that we omit the virtual keyword on the
- operator()() overrides and getUnderlyingValue() methods on
- purpose; those that actually do override baseclass
- virtual methods inherit the property, and the others
- won't increase our vtable. What's more, having all
- those methods in the vtable actually creates POIs for
- them, which breaks the whole SFINAE concept (IOW, this
- template won't compile any longer).
-
- @tpl AnimationBase
- Type of animation to generate (determines the
- interface GenericAnimation will implement). Must be
- one of NumberAnimation, ColorAnimation,
- StringAnimation, PairAnimation or BoolAnimation.
-
- @tpl ModifierFunctor
- Type of a functor object, which can optionally be used to
- modify the getter/setter values.
- */
- template< typename AnimationBase, typename ModifierFunctor > class GenericAnimation : public AnimationBase
- {
- public:
- typedef typename AnimationBase::ValueType ValueT;
-
- /** Create generic animation
-
- @param pIsValid
- Function pointer to one of the is*Valid
- methods. Used to either take the given getter
- method, or the given default value for the start value.
-
- @param rDefaultValue
- Default value, to take as the start value if
- is*Valid returns false.
-
- @param pGetValue
- Getter method, to fetch start value if valid.
-
- @param pSetValue
- Setter method. This one puts the current animation
- value to the ShapeAttributeLayer.
-
- @param rGetterModifier
- Modifies up values retrieved from the pGetValue method.
- Must provide operator()( const ValueT& ) method.
-
- @param rSetterModifier
- Modifies up values before passing them to the pSetValue method.
- Must provide operator()( const ValueT& ) method.
- */
- GenericAnimation( const ShapeManagerSharedPtr& rShapeManager,
- int nFlags,
- bool (ShapeAttributeLayer::*pIsValid)() const,
- const ValueT& rDefaultValue,
- ValueT (ShapeAttributeLayer::*pGetValue)() const,
- void (ShapeAttributeLayer::*pSetValue)( const ValueT& ),
- const ModifierFunctor& rGetterModifier,
- const ModifierFunctor& rSetterModifier ) :
- mpShape(),
- mpAttrLayer(),
- mpShapeManager( rShapeManager ),
- mpIsValidFunc(pIsValid),
- mpGetValueFunc(pGetValue),
- mpSetValueFunc(pSetValue),
- maGetterModifier( rGetterModifier ),
- maSetterModifier( rSetterModifier ),
- mnFlags( nFlags ),
- maDefaultValue(rDefaultValue),
- mbAnimationStarted( false )
- {
- ENSURE_OR_THROW( rShapeManager,
- "GenericAnimation::GenericAnimation(): Invalid ShapeManager" );
- ENSURE_OR_THROW( pIsValid && pGetValue && pSetValue,
- "GenericAnimation::GenericAnimation(): One of the method pointers is NULL" );
- }
-
- ~GenericAnimation()
- {
- end_();
- }
-
- // Animation interface
- // -------------------
- virtual void prefetch( const AnimatableShapeSharedPtr&,
- const ShapeAttributeLayerSharedPtr& )
- {}
-
- virtual void start( const AnimatableShapeSharedPtr& rShape,
- const ShapeAttributeLayerSharedPtr& rAttrLayer )
- {
- OSL_ENSURE( !mpShape,
- "GenericAnimation::start(): Shape already set" );
- OSL_ENSURE( !mpAttrLayer,
- "GenericAnimation::start(): Attribute layer already set" );
-
- mpShape = rShape;
- mpAttrLayer = rAttrLayer;
-
- ENSURE_OR_THROW( rShape,
- "GenericAnimation::start(): Invalid shape" );
- ENSURE_OR_THROW( rAttrLayer,
- "GenericAnimation::start(): Invalid attribute layer" );
-
- // only start animation once per repeated start() call,
- // and only if sprites should be used for display
- if( !mbAnimationStarted )
- {
- mbAnimationStarted = true;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->enterAnimationMode( mpShape );
- }
- }
-
- virtual void end() { end_(); }
- void end_()
- {
- // TODO(Q2): Factor out common code (most
- // prominently start() and end()) into base class
-
- // only stop animation once per repeated end() call,
- // and only if sprites are used for display
- if( mbAnimationStarted )
- {
- mbAnimationStarted = false;
-
- if( !(mnFlags & AnimationFactory::FLAG_NO_SPRITE) )
- mpShapeManager->leaveAnimationMode( mpShape );
-
- // Attention, this notifyShapeUpdate() is
- // somewhat delicate here. Calling it
- // unconditional (i.e. not guarded by
- // mbAnimationStarted) will lead to shapes
- // snapping back to their original state just
- // before the slide ends. Not calling it at
- // all might swallow final animation
- // states. The current implementation relies
- // on the fact that end() is either called by
- // the Activity (then, the last animation
- // state has been set, and corresponds to the
- // shape's hold state), or by the animation
- // node (then, it's a forced end, and we
- // _have_ to snap back).
- //
- // To reiterate: normally, we're called from
- // the Activity first, thus the
- // notifyShapeUpdate() below will update to
- // the last activity value.
-
- // force shape update, activity might have changed
- // state in the last round.
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
- }
- }
-
- // Derived Animation interface
- // ---------------------------
-
- /** For by-reference interfaces (B2DTuple, OUString)
- */
- bool operator()( const ValueT& x )
- {
- ENSURE_OR_RETURN_FALSE( mpAttrLayer && mpShape,
- "GenericAnimation::operator(): Invalid ShapeAttributeLayer" );
-
- ((*mpAttrLayer).*mpSetValueFunc)( maSetterModifier( x ) );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
-
- return true;
- }
-
- /** For by-value interfaces (bool, double)
- */
- bool operator()( ValueT x )
- {
- ENSURE_OR_RETURN_FALSE( mpAttrLayer && mpShape,
- "GenericAnimation::operator(): Invalid ShapeAttributeLayer" );
-
- ((*mpAttrLayer).*mpSetValueFunc)( maSetterModifier( x ) );
-
- if( mpShape->isContentChanged() )
- mpShapeManager->notifyShapeUpdate( mpShape );
-
- return true;
- }
-
- ValueT getUnderlyingValue() const
- {
- ENSURE_OR_THROW( mpAttrLayer,
- "GenericAnimation::getUnderlyingValue(): Invalid ShapeAttributeLayer" );
-
- // deviated from the (*shared_ptr).*mpFuncPtr
- // notation here, since gcc does not seem to parse
- // that as a member function call anymore.
- if( (mpAttrLayer.get()->*mpIsValidFunc)() )
- return maGetterModifier( ((*mpAttrLayer).*mpGetValueFunc)() );
- else
- return maDefaultValue;
- }
-
- private:
- AnimatableShapeSharedPtr mpShape;
- ShapeAttributeLayerSharedPtr mpAttrLayer;
- ShapeManagerSharedPtr mpShapeManager;
- bool (ShapeAttributeLayer::*mpIsValidFunc)() const;
- ValueT (ShapeAttributeLayer::*mpGetValueFunc)() const;
- void (ShapeAttributeLayer::*mpSetValueFunc)( const ValueT& );
-
- ModifierFunctor maGetterModifier;
- ModifierFunctor maSetterModifier;
-
- const int mnFlags;
-
- const ValueT maDefaultValue;
- bool mbAnimationStarted;
- };
-
- //Current c++0x draft (apparently) has std::identity, but not operator()
- template<typename T> struct SGI_identity : public std::unary_function<T,T>
- {
- T& operator()(T& x) const { return x; }
- const T& operator()(const T& x) const { return x; }
- };
-
- /** Function template wrapper around GenericAnimation template
-
- @tpl AnimationBase
- Type of animation to generate (determines the
- interface GenericAnimation will implement).
- */
- template< typename AnimationBase > ::boost::shared_ptr< AnimationBase >
- makeGenericAnimation( const ShapeManagerSharedPtr& rShapeManager,
- int nFlags,
- bool (ShapeAttributeLayer::*pIsValid)() const,
- const typename AnimationBase::ValueType& rDefaultValue,
- typename AnimationBase::ValueType (ShapeAttributeLayer::*pGetValue)() const,
- void (ShapeAttributeLayer::*pSetValue)( const typename AnimationBase::ValueType& ) )
- {
- return ::boost::shared_ptr< AnimationBase >(
- new GenericAnimation< AnimationBase,
- SGI_identity< typename AnimationBase::ValueType > >(
- rShapeManager,
- nFlags,
- pIsValid,
- rDefaultValue,
- pGetValue,
- pSetValue,
- // no modification necessary, use identity functor here
- SGI_identity< typename AnimationBase::ValueType >(),
- SGI_identity< typename AnimationBase::ValueType >() ) );
- }
-
- class Scaler
- {
- public:
- Scaler( double nScale ) :
- mnScale( nScale )
- {
- }
-
- double operator()( double nVal ) const
- {
- return mnScale * nVal;
- }
-
- private:
- double mnScale;
- };
-
- /** Overload for NumberAnimations which need scaling (width,height,x,y currently)
- */
- NumberAnimationSharedPtr makeGenericAnimation( const ShapeManagerSharedPtr& rShapeManager,
- int nFlags,
- bool (ShapeAttributeLayer::*pIsValid)() const,
- double nDefaultValue,
- double (ShapeAttributeLayer::*pGetValue)() const,
- void (ShapeAttributeLayer::*pSetValue)( const double& ),
- double nScaleValue )
- {
- return NumberAnimationSharedPtr(
- new GenericAnimation< NumberAnimation, Scaler >( rShapeManager,
- nFlags,
- pIsValid,
- nDefaultValue / nScaleValue,
- pGetValue,
- pSetValue,
- Scaler( 1.0/nScaleValue ),
- Scaler( nScaleValue ) ) );
- }
-
-
- uno::Any getShapeDefault( const AnimatableShapeSharedPtr& rShape,
- const ::rtl::OUString& rPropertyName )
- {
- uno::Reference< drawing::XShape > xShape( rShape->getXShape() );
-
- if( !xShape.is() )
- return uno::Any(); // no regular shape, no defaults available
-
-
- // extract relevant value from XShape's PropertySet
- uno::Reference< beans::XPropertySet > xPropSet( xShape,
- uno::UNO_QUERY );
-
- ENSURE_OR_THROW( xPropSet.is(),
- "getShapeDefault(): Cannot query property set from shape" );
-
- return xPropSet->getPropertyValue( rPropertyName );
- }
-
- template< typename ValueType > ValueType getDefault( const AnimatableShapeSharedPtr& rShape,
- const ::rtl::OUString& rPropertyName )
- {
- const uno::Any& rAny( getShapeDefault( rShape,
- rPropertyName ) );
-
- if( !rAny.hasValue() )
- {
- OSL_FAIL( "getDefault(): cannot get requested shape property" );
- OSL_TRACE( "getDefault(): cannot get '%s' shape property",
- ::rtl::OUStringToOString( rPropertyName,
- RTL_TEXTENCODING_ASCII_US ).getStr() );
- return ValueType();
- }
- else
- {
- ValueType aValue = ValueType();
-
- if( !(rAny >>= aValue) )
- {
- OSL_FAIL( "getDefault(): cannot extract requested shape property" );
- OSL_TRACE( "getDefault(): cannot extract '%s' shape property",
- ::rtl::OUStringToOString( rPropertyName,
- RTL_TEXTENCODING_ASCII_US ).getStr() );
- return ValueType();
- }
-
- return aValue;
- }
- }
-
- template<> RGBColor getDefault< RGBColor >( const AnimatableShapeSharedPtr& rShape,
- const ::rtl::OUString& rPropertyName )
- {
- const uno::Any& rAny( getShapeDefault( rShape,
- rPropertyName ) );
-
- if( !rAny.hasValue() )
- {
- OSL_FAIL( "getDefault(): cannot get requested shape color property" );
- OSL_TRACE( "getDefault(): cannot get '%s' shape color property",
- ::rtl::OUStringToOString( rPropertyName,
- RTL_TEXTENCODING_ASCII_US ).getStr() );
- return RGBColor();
- }
- else
- {
- sal_Int32 nValue = 0;
-
- if( !(rAny >>= nValue) )
- {
- OSL_FAIL( "getDefault(): cannot extract requested shape color property" );
- OSL_TRACE( "getDefault(): cannot extract '%s' shape color property",
- ::rtl::OUStringToOString( rPropertyName,
- RTL_TEXTENCODING_ASCII_US ).getStr() );
- return RGBColor();
- }
-
- // convert from 0xAARRGGBB API color to 0xRRGGBB00
- // canvas color
- return RGBColor( (nValue << 8U) & 0xFFFFFF00U );
- }
- }
- }
-
- AnimationFactory::AttributeClass AnimationFactory::classifyAttributeName( const ::rtl::OUString& rAttrName )
- {
- // ATTENTION: When changing this map, also the create*PropertyAnimation() methods must
- // be checked and possibly adapted in their switch statements
-
- // TODO(Q2): Since this map must be coherent with the various switch statements
- // in the create*PropertyAnimation methods, try to unify into a single method or table
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- return CLASS_UNKNOWN_PROPERTY;
-
- case ATTRIBUTE_CHAR_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_DIMCOLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_COLOR:
- return CLASS_COLOR_PROPERTY;
-
- case ATTRIBUTE_CHAR_FONT_NAME:
- return CLASS_STRING_PROPERTY;
-
- case ATTRIBUTE_VISIBILITY:
- return CLASS_BOOL_PROPERTY;
-
- case ATTRIBUTE_CHAR_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_WEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_ROTATION:
- // FALLTHROUGH intended
- case ATTRIBUTE_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_OPACITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_ROTATE:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_WIDTH:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_Y:
- return CLASS_NUMBER_PROPERTY;
-
- case ATTRIBUTE_CHAR_UNDERLINE:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_POSTURE:
- return CLASS_ENUM_PROPERTY;
- }
- }
-
- NumberAnimationSharedPtr AnimationFactory::createNumberPropertyAnimation( const ::rtl::OUString& rAttrName,
- const AnimatableShapeSharedPtr& rShape,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& rSlideSize,
- int nFlags )
- {
- // ATTENTION: When changing this map, also the classifyAttributeName() method must
- // be checked and possibly adapted in their switch statement
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createNumberPropertyAnimation(): Unknown attribute" );
- break;
-
- case ATTRIBUTE_CHAR_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_FONT_NAME:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_POSTURE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_UNDERLINE:
- // FALLTHROUGH intended
- case ATTRIBUTE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_DIMCOLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_VISIBILITY:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createNumberPropertyAnimation(): Attribute type mismatch" );
- break;
-
- case ATTRIBUTE_CHAR_HEIGHT:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isCharScaleValid,
- 1.0, // CharHeight is a relative attribute, thus
- // default is 1.0
- &ShapeAttributeLayer::getCharScale,
- &ShapeAttributeLayer::setCharScale );
-
- case ATTRIBUTE_CHAR_WEIGHT:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isCharWeightValid,
- getDefault<double>( rShape, rAttrName ),
- &ShapeAttributeLayer::getCharWeight,
- &ShapeAttributeLayer::setCharWeight );
-
- case ATTRIBUTE_CHAR_ROTATION:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isCharRotationAngleValid,
- getDefault<double>( rShape, rAttrName ),
- &ShapeAttributeLayer::getCharRotationAngle,
- &ShapeAttributeLayer::setCharRotationAngle );
-
- case ATTRIBUTE_HEIGHT:
- return makeGenericAnimation( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isHeightValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rShape->getBounds().getHeight(),
- &ShapeAttributeLayer::getHeight,
- &ShapeAttributeLayer::setHeight,
- // convert expression parser value from relative page size
- rSlideSize.getY() );
-
- case ATTRIBUTE_OPACITY:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isAlphaValid,
- // TODO(F1): Provide shape default here (FillTransparency?)
- 1.0,
- &ShapeAttributeLayer::getAlpha,
- &ShapeAttributeLayer::setAlpha );
-
- case ATTRIBUTE_ROTATE:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isRotationAngleValid,
- // NOTE: Since we paint the shape as-is from metafile,
- // rotation angle is always 0.0, even for rotated shapes
- 0.0,
- &ShapeAttributeLayer::getRotationAngle,
- &ShapeAttributeLayer::setRotationAngle );
-
- case ATTRIBUTE_SKEW_X:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isShearXAngleValid,
- // TODO(F1): Is there any shape property for skew?
- 0.0,
- &ShapeAttributeLayer::getShearXAngle,
- &ShapeAttributeLayer::setShearXAngle );
-
- case ATTRIBUTE_SKEW_Y:
- return makeGenericAnimation<NumberAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isShearYAngleValid,
- // TODO(F1): Is there any shape property for skew?
- 0.0,
- &ShapeAttributeLayer::getShearYAngle,
- &ShapeAttributeLayer::setShearYAngle );
-
- case ATTRIBUTE_WIDTH:
- return makeGenericAnimation( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isWidthValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rShape->getBounds().getWidth(),
- &ShapeAttributeLayer::getWidth,
- &ShapeAttributeLayer::setWidth,
- // convert expression parser value from relative page size
- rSlideSize.getX() );
-
- case ATTRIBUTE_POS_X:
- return makeGenericAnimation( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isPosXValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rShape->getBounds().getCenterX(),
- &ShapeAttributeLayer::getPosX,
- &ShapeAttributeLayer::setPosX,
- // convert expression parser value from relative page size
- rSlideSize.getX() );
-
- case ATTRIBUTE_POS_Y:
- return makeGenericAnimation( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isPosYValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rShape->getBounds().getCenterY(),
- &ShapeAttributeLayer::getPosY,
- &ShapeAttributeLayer::setPosY,
- // convert expression parser value from relative page size
- rSlideSize.getY() );
- }
-
- return NumberAnimationSharedPtr();
- }
-
- EnumAnimationSharedPtr AnimationFactory::createEnumPropertyAnimation( const ::rtl::OUString& rAttrName,
- const AnimatableShapeSharedPtr& rShape,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& /*rSlideSize*/,
- int nFlags )
- {
- // ATTENTION: When changing this map, also the classifyAttributeName() method must
- // be checked and possibly adapted in their switch statement
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createEnumPropertyAnimation(): Unknown attribute" );
- break;
-
- case ATTRIBUTE_CHAR_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_FONT_NAME:
- // FALLTHROUGH intended
- case ATTRIBUTE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_DIMCOLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_VISIBILITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_WEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_ROTATION:
- // FALLTHROUGH intended
- case ATTRIBUTE_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_OPACITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_ROTATE:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_WIDTH:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_Y:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createEnumPropertyAnimation(): Attribute type mismatch" );
- break;
-
-
- case ATTRIBUTE_FILL_STYLE:
- return makeGenericAnimation<EnumAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isFillStyleValid,
- sal::static_int_cast<sal_Int16>(
- getDefault<drawing::FillStyle>( rShape, rAttrName )),
- &ShapeAttributeLayer::getFillStyle,
- &ShapeAttributeLayer::setFillStyle );
-
- case ATTRIBUTE_LINE_STYLE:
- return makeGenericAnimation<EnumAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isLineStyleValid,
- sal::static_int_cast<sal_Int16>(
- getDefault<drawing::LineStyle>( rShape, rAttrName )),
- &ShapeAttributeLayer::getLineStyle,
- &ShapeAttributeLayer::setLineStyle );
-
- case ATTRIBUTE_CHAR_POSTURE:
- return makeGenericAnimation<EnumAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isCharPostureValid,
- sal::static_int_cast<sal_Int16>(
- getDefault<awt::FontSlant>( rShape, rAttrName )),
- &ShapeAttributeLayer::getCharPosture,
- &ShapeAttributeLayer::setCharPosture );
-
- case ATTRIBUTE_CHAR_UNDERLINE:
- return makeGenericAnimation<EnumAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isUnderlineModeValid,
- getDefault<sal_Int16>( rShape, rAttrName ),
- &ShapeAttributeLayer::getUnderlineMode,
- &ShapeAttributeLayer::setUnderlineMode );
- }
-
- return EnumAnimationSharedPtr();
- }
-
- ColorAnimationSharedPtr AnimationFactory::createColorPropertyAnimation( const ::rtl::OUString& rAttrName,
- const AnimatableShapeSharedPtr& rShape,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& /*rSlideSize*/,
- int nFlags )
- {
- // ATTENTION: When changing this map, also the classifyAttributeName() method must
- // be checked and possibly adapted in their switch statement
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createColorPropertyAnimation(): Unknown attribute" );
- break;
-
- case ATTRIBUTE_CHAR_FONT_NAME:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_POSTURE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_ROTATION:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_UNDERLINE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_WEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_OPACITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_ROTATE:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_VISIBILITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_WIDTH:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_Y:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createColorPropertyAnimation(): Attribute type mismatch" );
- break;
-
- case ATTRIBUTE_CHAR_COLOR:
- return makeGenericAnimation<ColorAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isCharColorValid,
- getDefault<RGBColor>( rShape, rAttrName ),
- &ShapeAttributeLayer::getCharColor,
- &ShapeAttributeLayer::setCharColor );
-
- case ATTRIBUTE_COLOR:
- // TODO(F2): This is just mapped to fill color to make it work
- return makeGenericAnimation<ColorAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isFillColorValid,
- getDefault<RGBColor>( rShape, rAttrName ),
- &ShapeAttributeLayer::getFillColor,
- &ShapeAttributeLayer::setFillColor );
-
- case ATTRIBUTE_DIMCOLOR:
- return makeGenericAnimation<ColorAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isDimColorValid,
- getDefault<RGBColor>( rShape, rAttrName ),
- &ShapeAttributeLayer::getDimColor,
- &ShapeAttributeLayer::setDimColor );
-
- case ATTRIBUTE_FILL_COLOR:
- return makeGenericAnimation<ColorAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isFillColorValid,
- getDefault<RGBColor>( rShape, rAttrName ),
- &ShapeAttributeLayer::getFillColor,
- &ShapeAttributeLayer::setFillColor );
-
- case ATTRIBUTE_LINE_COLOR:
- return makeGenericAnimation<ColorAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isLineColorValid,
- getDefault<RGBColor>( rShape, rAttrName ),
- &ShapeAttributeLayer::getLineColor,
- &ShapeAttributeLayer::setLineColor );
- }
-
- return ColorAnimationSharedPtr();
- }
-
- PairAnimationSharedPtr AnimationFactory::createPairPropertyAnimation( const AnimatableShapeSharedPtr& rShape,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& rSlideSize,
- sal_Int16 nTransformType,
- int nFlags )
- {
- const ::basegfx::B2DRectangle& rBounds( rShape->getBounds() );
-
- switch( nTransformType )
- {
- case animations::AnimationTransformType::SCALE:
- return PairAnimationSharedPtr(
- new TupleAnimation< ::basegfx::B2DSize >(
- rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isWidthValid,
- &ShapeAttributeLayer::isHeightValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rBounds.getRange(),
- rBounds.getRange(),
- &ShapeAttributeLayer::getWidth,
- &ShapeAttributeLayer::getHeight,
- &ShapeAttributeLayer::setSize ) );
-
- case animations::AnimationTransformType::TRANSLATE:
- return PairAnimationSharedPtr(
- new TupleAnimation< ::basegfx::B2DPoint >(
- rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isPosXValid,
- &ShapeAttributeLayer::isPosYValid,
- // TODO(F1): Check whether _shape_ bounds are correct here.
- // Theoretically, our AttrLayer is way down the stack, and
- // we only have to consider _that_ value, not the one from
- // the top of the stack as returned by Shape::getBounds()
- rBounds.getCenter(),
- rSlideSize,
- &ShapeAttributeLayer::getPosX,
- &ShapeAttributeLayer::getPosY,
- &ShapeAttributeLayer::setPosition ) );
-
- default:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createPairPropertyAnimation(): Attribute type mismatch" );
- break;
- }
-
- return PairAnimationSharedPtr();
- }
-
- StringAnimationSharedPtr AnimationFactory::createStringPropertyAnimation( const ::rtl::OUString& rAttrName,
- const AnimatableShapeSharedPtr& rShape,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& /*rSlideSize*/,
- int nFlags )
- {
- // ATTENTION: When changing this map, also the classifyAttributeName() method must
- // be checked and possibly adapted in their switch statement
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createStringPropertyAnimation(): Unknown attribute" );
- break;
-
- case ATTRIBUTE_CHAR_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_ROTATION:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_UNDERLINE:
- // FALLTHROUGH intended
- case ATTRIBUTE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_DIMCOLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_OPACITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_ROTATE:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_VISIBILITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_WIDTH:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_POSTURE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_WEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_STYLE:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createStringPropertyAnimation(): Attribute type mismatch" );
- break;
-
- case ATTRIBUTE_CHAR_FONT_NAME:
- return makeGenericAnimation<StringAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isFontFamilyValid,
- getDefault< ::rtl::OUString >( rShape, rAttrName ),
- &ShapeAttributeLayer::getFontFamily,
- &ShapeAttributeLayer::setFontFamily );
- }
-
- return StringAnimationSharedPtr();
- }
-
- BoolAnimationSharedPtr AnimationFactory::createBoolPropertyAnimation( const ::rtl::OUString& rAttrName,
- const AnimatableShapeSharedPtr& /*rShape*/,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& /*rSlideSize*/,
- int nFlags )
- {
- // ATTENTION: When changing this map, also the classifyAttributeName() method must
- // be checked and possibly adapted in their switch statement
- switch( mapAttributeName( rAttrName ) )
- {
- default:
- // FALLTHROUGH intended
- case ATTRIBUTE_INVALID:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createBoolPropertyAnimation(): Unknown attribute" );
- break;
-
- case ATTRIBUTE_CHAR_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_FONT_NAME:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_POSTURE:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_ROTATION:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_WEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_DIMCOLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_FILL_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_HEIGHT:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_COLOR:
- // FALLTHROUGH intended
- case ATTRIBUTE_LINE_STYLE:
- // FALLTHROUGH intended
- case ATTRIBUTE_OPACITY:
- // FALLTHROUGH intended
- case ATTRIBUTE_ROTATE:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_SKEW_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_WIDTH:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_X:
- // FALLTHROUGH intended
- case ATTRIBUTE_POS_Y:
- // FALLTHROUGH intended
- case ATTRIBUTE_CHAR_UNDERLINE:
- ENSURE_OR_THROW( false,
- "AnimationFactory::createBoolPropertyAnimation(): Attribute type mismatch" );
- break;
-
- case ATTRIBUTE_VISIBILITY:
- return makeGenericAnimation<BoolAnimation>( rShapeManager,
- nFlags,
- &ShapeAttributeLayer::isVisibilityValid,
- // TODO(F1): Is there a corresponding shape property?
- true,
- &ShapeAttributeLayer::getVisibility,
- &ShapeAttributeLayer::setVisibility );
- }
-
- return BoolAnimationSharedPtr();
- }
-
- NumberAnimationSharedPtr AnimationFactory::createPathMotionAnimation( const ::rtl::OUString& rSVGDPath,
- sal_Int16 nAdditive,
- const AnimatableShapeSharedPtr& /*rShape*/,
- const ShapeManagerSharedPtr& rShapeManager,
- const ::basegfx::B2DVector& rSlideSize,
- int nFlags )
- {
- return NumberAnimationSharedPtr(
- new PathAnimation( rSVGDPath, nAdditive,
- rShapeManager,
- rSlideSize,
- nFlags ) );
- }
-
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */