7d10295bf4991d3a2bc52ec09a5b770a19471208
[platform/core/uifw/dali-core.git] / dali / internal / event / animation / animation-impl.h
1 #ifndef __DALI_INTERNAL_ANIMATION_H__
2 #define __DALI_INTERNAL_ANIMATION_H__
3
4 /*
5  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/common/vector-wrapper.h>
23 #include <dali/public-api/object/ref-object.h>
24 #include <dali/public-api/animation/animation.h>
25 #include <dali/public-api/object/base-object.h>
26 #include <dali/internal/event/animation/animator-connector-base.h>
27 #include <dali/internal/event/animation/key-frames-impl.h>
28 #include <dali/internal/event/animation/path-impl.h>
29
30 namespace Dali
31 {
32
33 namespace Internal
34 {
35
36 namespace SceneGraph
37 {
38 class Animation;
39 class UpdateManager;
40 }
41
42 class Actor;
43 class Animation;
44 class AnimationPlaylist;
45 class ProxyObject;
46 class ShaderEffect;
47
48 typedef IntrusivePtr<Animation> AnimationPtr;
49 typedef std::vector<AnimationPtr> AnimationContainer;
50
51 typedef AnimationContainer::iterator AnimationIter;
52 typedef AnimationContainer::const_iterator AnimationConstIter;
53
54 /**
55  * Animation is a proxy for a SceneGraph::Animation object.
56  * The UpdateManager owns the Animation object, but the lifetime of the animation is
57  * indirectly controlled by the Animation.
58  */
59 class Animation : public BaseObject
60 {
61 public:
62
63   typedef Dali::Animation::EndAction EndAction;
64
65   typedef void (*FinishedCallback)(Object* object);
66
67   /**
68    * Create a new Animation object.
69    * @param[in] durationSeconds The duration of the animation.
70    * @return A smart-pointer to the newly allocated Animation.
71    */
72   static AnimationPtr New(float durationSeconds);
73
74   /**
75    * @copydoc Dali::Animation::SetDuration()
76    */
77   void SetDuration(float seconds);
78
79   /**
80    * @copydoc Dali::Animation::GetDuration()
81    */
82   float GetDuration() const;
83
84   /**
85    * @copydoc Dali::Animation::SetLooping()
86    */
87   void SetLooping(bool looping);
88
89   /**
90    * @copydoc Dali::Animation::IsLooping()
91    */
92   bool IsLooping() const;
93
94   /**
95    * @copydoc Dali::Animation::SetEndAction()
96    */
97   void SetEndAction(EndAction action);
98
99   /**
100    * @copydoc Dali::Animation::GetEndAction()
101    */
102   EndAction GetEndAction() const;
103
104   /**
105    * @copydoc Dali::Animation::SetDisconnectAction()
106    */
107   void SetDisconnectAction(EndAction action);
108
109   /**
110    * @copydoc Dali::Animation::GetDisconnectAction()
111    */
112   EndAction GetDisconnectAction() const;
113
114   /**
115    * @copydoc Dali::Animation::SetDefaultAlphaFunction()
116    */
117   void SetDefaultAlphaFunction(AlphaFunction alpha)
118   {
119     mDefaultAlpha = alpha;
120   }
121
122   /**
123    * @copydoc Dali::Animation::GetDefaultAlphaFunction()
124    */
125   AlphaFunction GetDefaultAlphaFunction() const
126   {
127     return mDefaultAlpha;
128   }
129
130   /**
131    * @copydoc Dali::Animation::Play()
132    */
133   void Play();
134
135   /**
136    * @copydoc Dali::Animation::PlayFrom()
137    */
138   void PlayFrom( float progress );
139
140   /**
141    * @copydoc Dali::Animation::Pause()
142    */
143   void Pause();
144
145   /**
146    * @copydoc Dali::Animation::Stop()
147    */
148   void Stop();
149
150   /**
151    * @copydoc Dali::Animation::Clear()
152    */
153   void Clear();
154
155   /**
156    * Query whether a Finished signal should be emitted for this animation.
157    * This should only be called by NotificationManager, before signals are emitted.
158    * @post HasFinished() will return false on subsequent calls, until the animation is replayed to completion.
159    */
160   bool HasFinished();
161
162   /**
163    * @copydoc Dali::Animation::FinishedSignal()
164    */
165   Dali::Animation::AnimationSignalV2& FinishedSignal();
166
167   /**
168    * Emit the Finished signal
169    */
170   void EmitSignalFinish();
171
172   /**
173    * Connects a callback function with the object's signals.
174    * @param[in] object The object providing the signal.
175    * @param[in] tracker Used to disconnect the signal.
176    * @param[in] signalName The signal to connect to.
177    * @param[in] functor A newly allocated FunctorDelegate.
178    * @return True if the signal was connected.
179    * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor.
180    */
181   static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor );
182
183   /**
184    * Performs actions as requested using the action name.
185    * @param[in] object The object on which to perform the action.
186    * @param[in] actionName The action to perform.
187    * @param[in] attributes The attributes with which to perfrom this action.
188    * @return true if action was done
189    */
190   static bool DoAction(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes);
191
192   /**
193    * This callback is intended for internal use only, to avoid the overhead of using a signal.
194    * @param[in] callback The callback function to connect.
195    * @param[in] object The internal object requesting the callback, or NULL.
196    */
197   void SetFinishedCallback( FinishedCallback callback, Object* object );
198
199   /**
200    * @copydoc Dali::Animation::AnimateBy(Property target, Property::Value relativeValue)
201    */
202   void AnimateBy(Property& target, Property::Value& relativeValue);
203
204   /**
205    * @copydoc Dali::Animation::AnimateBy(Property target, Property::Value relativeValue, AlphaFunction alpha)
206    */
207   void AnimateBy(Property& target, Property::Value& relativeValue, AlphaFunction alpha);
208
209   /**
210    * @copydoc Dali::Animation::AnimateBy(Property target, Property::Value relativeValue, TimePeriod period)
211    */
212   void AnimateBy(Property& target, Property::Value& relativeValue, TimePeriod period);
213
214   /**
215    * @copydoc Dali::Animation::AnimateBy(Property target, Property::Value relativeValue, AlphaFunction alpha, TimePeriod period)
216    */
217   void AnimateBy(Property& target, Property::Value& relativeValue, AlphaFunction alpha, TimePeriod period);
218
219   /**
220    * @copydoc Dali::Animation::AnimateTo(Property target, Property::Value destinationValue)
221    */
222   void AnimateTo(Property& target, Property::Value& destinationValue);
223
224   /**
225    * @copydoc Dali::Animation::AnimateTo(Property target, Property::Value destinationValue, AlphaFunction alpha)
226    */
227   void AnimateTo(Property& target, Property::Value& destinationValue, AlphaFunction alpha);
228
229   /**
230    * @copydoc Dali::Animation::AnimateTo(Property target, Property::Value destinationValue, TimePeriod period)
231    */
232   void AnimateTo(Property& target, Property::Value& destinationValue, TimePeriod period);
233
234   /**
235    * @copydoc Dali::Animation::AnimateTo(Property target, Property::Value destinationValue, AlphaFunction alpha, TimePeriod period)
236    */
237   void AnimateTo(Property& target, Property::Value& destinationValue, AlphaFunction alpha, TimePeriod period);
238
239   /**
240    * Animate a property to a destination value.
241    * @param [in] targetObject The target object to animate.
242    * @param [in] targetPropertyIndex The index of the target property.
243    * @param [in] componentIndex Index to a sub component of a property, for use with Vector2, Vector3 and Vector4
244    * @param [in] destinationValue The destination value.
245    * @param [in] alpha The alpha function to apply.
246    * @param [in] period The effect will occur during this time period.
247    */
248   void AnimateTo(ProxyObject& targetObject, Property::Index targetPropertyIndex, int componentIndex, Property::Value& destinationValue, AlphaFunction alpha, TimePeriod period);
249
250   /**
251    * @copydoc Dali::Animation::AnimateBetween(Property target, KeyFrames& keyFrames)
252    */
253   void AnimateBetween(Property target, const KeyFrames& keyFrames);
254
255   /**
256    * @copydoc Dali::Animation::AnimateBetween(Property target, KeyFrames& keyFrames, TimePeriod period)
257    */
258   void AnimateBetween(Property target, const KeyFrames& keyFrames, TimePeriod period);
259
260   /**
261    * @copydoc Dali::Animation::AnimateBetween(Property target, KeyFrames& keyFrames, AlphaFunction alpha)
262    */
263   void AnimateBetween(Property target, const KeyFrames& keyFrames, AlphaFunction alpha);
264
265   /**
266    * @copydoc Dali::Animation::AnimateBetween(Property target, KeyFrames& keyFrames, AlphaFunction alpha, TimePeriod period)
267    */
268   void AnimateBetween(Property target, const KeyFrames& keyFrames, AlphaFunction alpha, TimePeriod period);
269
270   // Actor-specific convenience functions
271
272   /**
273    * @copydoc Dali::Animation::Animate( Actor actor, Path path, const Vector3& forward )
274    */
275   void Animate( Actor& actor, const Path& path, const Vector3& forward );
276
277   /**
278    * @copydoc Dali::Animation::Animate( Actor actor, Path path, const Vector3& forward, AlphaFunction alpha )
279    */
280   void Animate( Actor& actor, const Path& path, const Vector3& forward, AlphaFunction alpha );
281
282   /**
283    * @copydoc Dali::Animation::Animate( Actor actor, Path path, const Vector3& forward, TimePeriod period )
284    */
285   void Animate( Actor& actor, const Path& path, const Vector3& forward, TimePeriod period );
286
287   /**
288    * @copydoc Dali::Animation::Animate( Actor actor, Path path, const Vector3& forward, AlphaFunction alpha, TimePeriod period)
289    */
290   void Animate( Actor& actor, const Path& path, const Vector3& forward, AlphaFunction alpha, TimePeriod period);
291
292   /**
293    * @copydoc Dali::Animation::MoveBy(Actor actor, float x, float y, float z)
294    */
295   void MoveBy(Actor& actor, float x, float y, float z);
296
297   /**
298    * @copydoc Dali::Animation::MoveBy(Actor actor, Vector3 displacement, AlphaFunction alpha)
299    */
300   void MoveBy(Actor& actor, const Vector3& translation, AlphaFunction alpha);
301
302   /**
303    * @copydoc Dali::Animation::MoveBy(Actor actor, Vector3 displacement, AlphaFunction alpha, float delaySeconds, float durationSeconds)
304    */
305   void MoveBy(Actor& actor, const Vector3& translation, AlphaFunction alpha, float delaySeconds, float durationSeconds);
306
307   /**
308    * @copydoc Dali::Animation::MoveTo(Actor actor, float x, float y, float z)
309    */
310   void MoveTo(Actor& actor, float x, float y, float z);
311
312   /**
313    * @copydoc Dali::Animation::MoveTo(Actor actor, Vector3 position, AlphaFunction alpha)
314    */
315   void MoveTo(Actor& actor, const Vector3& translation, AlphaFunction alpha);
316
317   /**
318    * @copydoc Dali::Animation::MoveTo(Actor actor, Vector3 position, AlphaFunction alpha, float delaySeconds, float durationSeconds)
319    */
320   void MoveTo(Actor& actor, const Vector3& translation, AlphaFunction alpha,  float delaySeconds, float durationSeconds);
321
322   /**
323    * @copydoc Dali::Animation::RotateBy(Actor actor, Radian angle, Vector3 axis)
324    */
325   void RotateBy(Actor& actor, Radian angle, const Vector3& axis);
326
327   /**
328    * @copydoc Dali::Animation::RotateBy(Actor actor, Radian angle, Vector3 axis, AlphaFunction alpha)()
329    */
330   void RotateBy(Actor& actor, Radian angle, const Vector3& axis, AlphaFunction alpha);
331
332   /**
333    * @copydoc Dali::Animation::RotateBy(Actor actor, Radian angle, Vector3 axis, AlphaFunction alpha, float delaySeconds, float durationSeconds)
334    */
335   void RotateBy(Actor& actor, Radian angle, const Vector3& axis, AlphaFunction alpha, float delaySeconds, float durationSeconds);
336
337   /**
338    * @copydoc Dali::Animation::RotateTo(Actor actor, Radian angle, Vector3 axis)
339    */
340   void RotateTo(Actor& actor, Radian angle, const Vector3& axis);
341
342   /**
343    * @copydoc Dali::Animation::RotateTo(Actor actor, Quaternion orientation)
344    */
345   void RotateTo(Actor& actor, const Quaternion& orientation);
346
347   /**
348    * @copydoc Dali::Animation::RotateTo(Actor actor, Radian angle, Vector3 axis, AlphaFunction alpha)
349    */
350   void RotateTo(Actor& actor, Radian angle, const Vector3& axis, AlphaFunction alpha);
351
352   /**
353    * @copydoc Dali::Animation::RotateTo(Actor actor, Quaternion orientation, AlphaFunction alpha)
354    */
355   void RotateTo(Actor& actor, const Quaternion& orientation, AlphaFunction alpha);
356
357   /**
358    * @copydoc Dali::Animation::RotateTo(Actor actor, Quaternion orientation, AlphaFunction alpha, float delaySeconds, float durationSeconds)
359    */
360   void RotateTo(Actor& actor, const Quaternion& orientation, AlphaFunction alpha, float delaySeconds, float durationSeconds);
361
362   /**
363    * @copydoc Dali::Animation::RotateTo(Actor actor, Radian angle, Vector3 axis, AlphaFunction alpha, float delaySeconds, float durationSeconds)()
364    */
365   void RotateTo(Actor& actor, Radian angle, const Vector3& axis, AlphaFunction alpha, float delaySeconds, float durationSeconds);
366
367   /**
368    * @copydoc Dali::Animation::ScaleBy(Actor actor, float x, float y, float z)()
369    */
370   void ScaleBy(Actor& actor, float x, float y, float z);
371
372   /**
373    * @copydoc Dali::Animation::ScaleBy(Actor actor, Vector3 scale, AlphaFunction alpha)
374    */
375   void ScaleBy(Actor& actor, const Vector3& scale, AlphaFunction alpha);
376
377   /**
378    * @copydoc Dali::Animation::ScaleBy(Actor actor, Vector3 scale, AlphaFunction alpha, float delaySeconds, float durationSeconds)
379    */
380   void ScaleBy(Actor& actor, const Vector3& scale, AlphaFunction alpha, float delaySeconds, float durationSeconds);
381
382   /**
383    * @copydoc Dali::Animation::ScaleTo(Actor actor, float x, float y, float z)
384    */
385   void ScaleTo(Actor& actor, float x, float y, float z);
386
387   /**
388    * @copydoc Dali::Animation::ScaleTo(Actor actor, Vector3 scale, AlphaFunction alpha)
389    */
390   void ScaleTo(Actor& actor, const Vector3& scale, AlphaFunction alpha);
391
392   /**
393    * @copydoc Dali::Animation::ScaleTo(Actor actor, Vector3 scale, AlphaFunction alpha, float delaySeconds, float durationSeconds)
394    */
395   void ScaleTo(Actor& actor, const Vector3& scale, AlphaFunction alpha, float delaySeconds, float durationSeconds);
396
397   /**
398    * @copydoc Dali::Animation::Show()
399    */
400   void Show(Actor& actor, float delaySeconds);
401
402   /**
403    * @copydoc Dali::Animation::Hide()
404    */
405   void Hide(Actor& actor, float delaySeconds);
406
407   /**
408    * @copydoc Dali::Animation::OpacityBy(Actor actor, float opacity)
409    */
410   void OpacityBy(Actor& actor, float opacity);
411
412   /**
413    * @copydoc Dali::Animation::OpacityBy(Actor actor, float opacity, AlphaFunction alpha)
414    */
415   void OpacityBy(Actor& actor, float opacity, AlphaFunction alpha);
416
417   /**
418    * @copydoc Dali::Animation::OpacityBy(Actor actor, float opacity, AlphaFunction alpha, float delaySeconds, float durationSeconds)()
419    */
420   void OpacityBy(Actor& actor, float opacity, AlphaFunction alpha, float delaySeconds, float durationSeconds);
421
422   /**
423    * @copydoc Dali::Animation::OpacityTo(Actor actor, float opacity)
424    */
425   void OpacityTo(Actor& actor, float opacity);
426
427   /**
428    * @copydoc Dali::Animation::OpacityTo(Actor actor, float opacity, AlphaFunction alpha)
429    */
430   void OpacityTo(Actor& actor, float opacity, AlphaFunction alpha);
431
432   /**
433    * @copydoc Dali::Animation::OpacityTo(Actor actor, float opacity, AlphaFunction alpha, float delaySeconds, float durationSeconds)
434    */
435   void OpacityTo(Actor& actor, float opacity, AlphaFunction alpha, float delaySeconds, float durationSeconds);
436
437   /**
438    * @copydoc Dali::Animation::ColorBy(Actor actor, Vector4 color)
439    */
440   void ColorBy(Actor& actor, const Vector4& color);
441
442   /**
443    * @copydoc Dali::Animation::ColorBy(Actor actor, Vector4 color, AlphaFunction alpha)
444    */
445   void ColorBy(Actor& actor, const Vector4& color, AlphaFunction alpha);
446
447   /**
448    * @copydoc Dali::Animation::ColorBy(Actor actor, Vector4 color, AlphaFunction alpha, float delaySeconds, float durationSeconds)
449    */
450   void ColorBy(Actor& actor, const Vector4& color, AlphaFunction alpha, float delaySeconds, float durationSeconds);
451
452   /**
453    * @copydoc Dali::Animation::ColorTo(Actor actor, Vector4 color)
454    */
455   void ColorTo(Actor& actor, const Vector4& color);
456
457   /**
458    * @copydoc Dali::Animation::ColorTo(Actor actor, Vector4 color, AlphaFunction alpha)
459    */
460   void ColorTo(Actor& actor, const Vector4& color, AlphaFunction alpha);
461
462   /**
463    * @copydoc Dali::Animation::ColorTo(Actor actor, Vector4 color, AlphaFunction alpha, float delaySeconds, float durationSeconds)
464    */
465   void ColorTo(Actor& actor, const Vector4& color, AlphaFunction alpha, float delaySeconds, float durationSeconds);
466
467   /**
468    * @copydoc Dali::Animation::Resize(Actor actor, float width, float height)
469    */
470   void Resize(Actor& actor, float width, float height);
471
472   /**
473    * @copydoc Dali::Animation::Resize(Actor actor, float width, float height, AlphaFunction alpha)
474    */
475   void Resize(Actor& actor, float width, float height, AlphaFunction alpha);
476
477   /**
478    * @copydoc Dali::Animation::Resize(Actor actor, float width, float height, AlphaFunction alpha, float delaySeconds, float durationSeconds)
479    */
480   void Resize(Actor& actor, float width, float height, AlphaFunction alpha, float delaySeconds, float durationSeconds);
481
482   /**
483    * @copydoc Dali::Animation::Resize(Actor actor, Vector3 size)
484    */
485   void Resize(Actor& actor, const Vector3& size);
486
487   /**
488    * @copydoc Dali::Animation::Resize(Actor actor, Vector3 size, AlphaFunction alpha)
489    */
490   void Resize(Actor& actor, const Vector3& size, AlphaFunction alpha);
491
492   /**
493    * @copydoc Dali::Animation::Resize(Actor actor, Vector3 size, AlphaFunction alpha, float delaySeconds, float durationSeconds)
494    */
495   void Resize(Actor& actor, const Vector3& size, AlphaFunction alpha, float delaySeconds, float durationSeconds);
496
497   /*
498    * @copydoc Dali::Animation::SetCurrentProgress()
499    */
500   void SetCurrentProgress(float progress);
501
502   /*
503    * @copydoc Dali::Animation::GetCurrentProgress()
504    */
505   float GetCurrentProgress();
506
507   /*
508    * @copydoc Dali::Animation::SetSpeedFactor()
509    */
510   void SetSpeedFactor( float factor );
511
512   /*
513    * @copydoc Dali::Animation::GetSpeedFactor()
514    */
515   float GetSpeedFactor() const;
516
517   /*
518    * @copydoc Dali::Animation::SetPlayRange()
519    */
520   void SetPlayRange( const Vector2& range );
521
522   /*
523    * @copydoc Dali::Animation::GetPlayRange
524    */
525   Vector2 GetPlayRange() const;
526
527 public: // For connecting animators to animations
528
529   /**
530    * Add an animator connector.
531    * @param[in] connector The animator connector.
532    */
533   void AddAnimatorConnector( AnimatorConnectorBase* connector );
534
535   /**
536    * Retrieve the SceneGraph::Animation object.
537    * @return The animation.
538    */
539   const SceneGraph::Animation* GetSceneObject()
540   {
541     return mAnimation;
542   }
543
544   /**
545    * Retrieve the UpdateManager associated with this animation.
546    * @return The UpdateManager.
547    */
548   SceneGraph::UpdateManager& GetUpdateManager()
549   {
550     return mUpdateManager;
551   }
552
553 protected:
554
555   /**
556    * Construct a new Animation.
557    * @param[in] updateManager The UpdateManager associated with this animation.
558    * @param[in] playlist The list of currently playing animations.
559    * @param[in] durationSeconds The duration of the animation in seconds.
560    * @param[in] endAction The action to perform when the animation ends.
561    * @param[in] disconnectAction The action to perform when the property owner of an animator is disconnected.
562    * @param[in] defaultAlpha The default alpha function to apply to animators.
563    */
564   Animation( SceneGraph::UpdateManager& updateManager,
565              AnimationPlaylist& playlist,
566              float durationSeconds,
567              EndAction endAction,
568              EndAction disconnectAction,
569              AlphaFunction defaultAlpha);
570
571   /**
572    * Second-phase constructor.
573    */
574   void Initialize();
575
576   /**
577    * Helper to create a scene-graph animation
578    */
579   void CreateSceneObject();
580
581   /**
582    * Helper to create a scene-graph animation
583    */
584   void DestroySceneObject();
585
586   /**
587    * A reference counted object may only be deleted by calling Unreference()
588    */
589   virtual ~Animation();
590
591 private:
592
593   /**
594    * Extends the duration when an animator is added with TimePeriod that exceeds current duration.
595    * @param[in] timePeriod The time period for an animator.
596    */
597   void ExtendDuration( const TimePeriod& timePeriod );
598
599   // Undefined
600   Animation(const Animation&);
601
602   // Undefined
603   Animation& operator=(const Animation& rhs);
604
605 private:
606
607   SceneGraph::UpdateManager& mUpdateManager;
608   AnimationPlaylist& mPlaylist;
609
610   const SceneGraph::Animation* mAnimation;
611
612   int mNotificationCount; ///< Keep track of how many Finished signals have been emitted.
613
614   Dali::Animation::AnimationSignalV2 mFinishedSignal;
615
616   FinishedCallback mFinishedCallback;
617   Object* mFinishedCallbackObject;
618
619   AnimatorConnectorContainer mConnectors; ///< Owned by the Animation
620
621   // Cached for public getters
622   float mDurationSeconds;
623   float mSpeedFactor;
624   bool mIsLooping;
625   Vector2 mPlayRange;
626   EndAction mEndAction;
627   EndAction mDisconnectAction;
628   AlphaFunction mDefaultAlpha;
629
630 };
631
632 } // namespace Internal
633
634 // Helpers for public-api forwarding methods
635
636 inline Internal::Animation& GetImplementation(Dali::Animation& animation)
637 {
638   DALI_ASSERT_ALWAYS( animation && "Animation handle is empty" );
639
640   BaseObject& handle = animation.GetBaseObject();
641
642   return static_cast<Internal::Animation&>(handle);
643 }
644
645 inline const Internal::Animation& GetImplementation(const Dali::Animation& animation)
646 {
647   DALI_ASSERT_ALWAYS( animation && "Animation handle is empty" );
648
649   const BaseObject& handle = animation.GetBaseObject();
650
651   return static_cast<const Internal::Animation&>(handle);
652 }
653
654 } // namespace Dali
655
656 #endif // __DALI_INTERNAL_ANIMATION_H__