X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-task.h;h=42d13f8bc53cf0c24608fedb6459c2cda817725f;hp=c14cc10a6160c3b92547f94483e4cfb769d1a1b1;hb=1f5f10ff81ed70d033cbc236216dda5ea5a1b8e4;hpb=478ff1a5aa5c64e5da48f284ae32f5703bd26502 diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h index c14cc10..42d13f8 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_VECTOR_ANIMATION_TASK_H /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -21,11 +21,13 @@ #include #include #include +#include #include #include #include // INTERNAL INCLUDES +#include #include namespace Dali @@ -42,25 +44,35 @@ typedef IntrusivePtr VectorAnimationTaskPtr; /** * The task of the vector animation. */ -class VectorAnimationTask : public RefObject +class VectorAnimationTask : public RefObject, public ConnectionTracker { public: - using UploadCompletedSignalType = Dali::VectorAnimationRenderer::UploadCompletedSignalType; + enum class ResourceStatus + { + LOADED, /// Resource is loaded + READY, /// Resource is ready + FAILED /// Resource is fail to load + }; - using TimePoint = std::chrono::time_point; + using ResourceReadySignalType = Signal; + + using TimePoint = std::chrono::time_point; + using DynamicPropertyType = std::vector; /** * Flags for re-sending data to the vector animation thread */ enum ResendFlags { - RESEND_PLAY_RANGE = 1 << 0, - RESEND_LOOP_COUNT = 1 << 1, - RESEND_STOP_BEHAVIOR = 1 << 2, - RESEND_LOOPING_MODE = 1 << 3, - RESEND_CURRENT_FRAME = 1 << 4, - RESEND_SIZE = 1 << 5, - RESEND_PLAY_STATE = 1 << 6 + RESEND_PLAY_RANGE = 1 << 0, + RESEND_LOOP_COUNT = 1 << 1, + RESEND_STOP_BEHAVIOR = 1 << 2, + RESEND_LOOPING_MODE = 1 << 3, + RESEND_CURRENT_FRAME = 1 << 4, + RESEND_SIZE = 1 << 5, + RESEND_PLAY_STATE = 1 << 6, + RESEND_NEED_RESOURCE_READY = 1 << 7, + RESEND_DYNAMIC_PROPERTY = 1 << 8 }; /** @@ -71,6 +83,7 @@ public: AnimationData() : resendFlag(0), playRange(), + dynamicProperties(), playState(), stopBehavior(DevelImageVisual::StopBehavior::CURRENT_FRAME), loopingMode(DevelImageVisual::LoopingMode::RESTART), @@ -92,11 +105,13 @@ public: width = rhs.width; height = rhs.height; loopCount = rhs.loopCount; + dynamicProperties.insert(dynamicProperties.end(), rhs.dynamicProperties.begin(), rhs.dynamicProperties.end()); return *this; } uint32_t resendFlag; Property::Array playRange; + DynamicPropertyType dynamicProperties; DevelImageVisual::PlayState::Type playState; DevelImageVisual::StopBehavior::Type stopBehavior; DevelImageVisual::LoopingMode::Type loopingMode; @@ -124,19 +139,24 @@ public: void Finalize(); /** - * @brief Loads the animation file. + * @brief Sets the renderer used to display the result image. * - * @param[in] url The url of the vector animation file - * @return True if loading success, false otherwise. + * @param[in] renderer The renderer used to display the result image */ - bool Load(const std::string& url); + void SetRenderer(Renderer renderer); /** - * @brief Sets the renderer used to display the result image. + * @brief Requests to load the animation file. * - * @param[in] renderer The renderer used to display the result image + * @param[in] url The url of the vector animation file */ - void SetRenderer(Renderer renderer); + void RequestLoad(const std::string& url); + + /** + * @brief Queries whether loading is requested. + * @return True if loading is requested. + */ + bool IsLoadRequested() const; /** * @brief Sets data to specify animation playback. @@ -182,16 +202,17 @@ public: void GetLayerInfo(Property::Map& map) const; /** - * @brief Connect to this signal to be notified when the texture upload is completed. + * @brief Connect to this signal to be notified when the resource is ready. * @return The signal to connect to. */ - UploadCompletedSignalType& UploadCompletedSignal(); + ResourceReadySignalType& ResourceReadySignal(); /** * @brief Rasterizes the current frame. - * @return true if the animation is running, false otherwise. + * @param[out] keepAnimation true if the animation is running, false otherwise. + * @return true if the rasterization succeeded, false otherwise. */ - bool Rasterize(); + bool Rasterize(bool& keepAnimation); /** * @brief Calculates the time for the next frame rasterization. @@ -207,6 +228,13 @@ public: private: /** + * @brief Loads the animation file. + * + * @return True if loading succeeded, false otherwise. + */ + bool Load(); + + /** * @brief Play the vector animation. */ void PlayAnimation(); @@ -271,6 +299,16 @@ private: */ void ApplyAnimationData(); + /** + * @brief Called when the texture upload is completed. + */ + void OnUploadCompleted(); + + /** + * @brief Event callback from rasterize thread. This is called when the file loading is completed. + */ + void OnLoadCompleted(); + // Undefined VectorAnimationTask(const VectorAnimationTask& task) = delete; @@ -291,7 +329,9 @@ private: AnimationData mAnimationData[2]; VectorAnimationThread& mVectorAnimationThread; ConditionalWait mConditionalWait; + ResourceReadySignalType mResourceReadySignal; std::unique_ptr mAnimationFinishedTrigger; + std::unique_ptr mLoadCompletedTrigger; PlayState mPlayState; DevelImageVisual::StopBehavior::Type mStopBehavior; DevelImageVisual::LoopingMode::Type mLoopingMode; @@ -313,6 +353,8 @@ private: bool mNeedAnimationFinishedTrigger; bool mAnimationDataUpdated; bool mDestroyTask; + bool mLoadRequest; + bool mLoadFailed; }; } // namespace Internal