-#ifndef __DALI_INTERNAL_ANIMATION_PLAYLIST_H__
-#define __DALI_INTERNAL_ANIMATION_PLAYLIST_H__
+#ifndef DALI_INTERNAL_ANIMATION_PLAYLIST_H
+#define DALI_INTERNAL_ANIMATION_PLAYLIST_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// INTERNAL INCLUDES
#include <dali/public-api/animation/animation.h>
-#include <dali/public-api/common/set-wrapper.h>
+#include <dali/public-api/common/dali-vector.h>
+#include <dali/public-api/common/vector-wrapper.h>
#include <dali/internal/common/message.h>
-#include <dali/internal/event/animation/animation-finished-notifier.h>
+#include <dali/internal/event/common/complete-notification-interface.h>
+#include <dali/internal/update/animation/scene-graph-animation.h>
namespace Dali
{
* AnimationPlaylist provides notifications to applications when animations are finished.
* It reference-counts playing animations, to allow "fire and forget" behaviour.
*/
-class AnimationPlaylist : public AnimationFinishedNotifier
+class AnimationPlaylist : public CompleteNotificationInterface
{
public:
void OnClear( Animation& animation );
/**
- * From AnimationFinishedNotifier; emit "Finished" signal on any animations that have finished.
- * This method should be called in the event-thread; the update-thread must use AnimationFinishedMessage.
- * @post The "Finished" animations will no longer be referenced by AnimationPlaylist.
+ * @brief Notify that an animation has reached a progress marker
+ * @param[in] sceneGraphAnimation scene graph animation that has reached progress
*/
- void NotifyFinishedAnimations();
+ void NotifyProgressReached( const SceneGraph::Animation* sceneGraphAnimation );
+
+ /**
+ * @brief Retrive the number of Animations.
+ *
+ * @return The number of Animations.
+ */
+ uint32_t GetAnimationCount();
+
+ /**
+ * @brief Retrieve an Animation by index.
+ *
+ * @param[in] index The index of the Animation to retrieve
+ * @return The Dali::Animation for the given index or empty handle
+ */
+ Dali::Animation GetAnimationAt( uint32_t index );
private:
// Undefined
AnimationPlaylist& operator=(const AnimationPlaylist& rhs);
+private: // from CompleteNotificationInterface
+
+ /**
+ * @copydoc CompleteNotificationInterface::NotifyCompleted()
+ */
+ virtual void NotifyCompleted();
+
private:
- std::set< Animation* > mAnimations; ///< All existing animations (not referenced)
+ Dali::Vector< Animation* > mAnimations; ///< All existing animations (not owned)
+ std::vector< Dali::Animation > mPlaylist; ///< The currently playing animations (owned through handle)
- std::set< Dali::Animation > mPlaylist; ///< The currently playing animations (reference counted)
};
+/**
+ * Called when an animation reaches a progress marker
+ *
+ * Note animationPlaylist is of type CompleteNotificationInterface because of updateManager only knowing about the interface not actual playlist
+ */
+inline MessageBase* NotifyProgressReachedMessage( CompleteNotificationInterface& animationPlaylist, const SceneGraph::Animation* animation )
+{
+ return new MessageValue1< AnimationPlaylist, const SceneGraph::Animation* >( static_cast<AnimationPlaylist*>(&animationPlaylist), &AnimationPlaylist::NotifyProgressReached, animation );
+}
+
} // namespace Internal
} // namespace Dali
-#endif // __DALI_INTERNAL_NOTIFICATION_MANAGER_H__
+#endif // DALI_INTERNAL_ANIMATION_PLAYLIST_H