#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.
/**
* 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 ResourceReadySignalType = Signal<void(ResourceStatus)>;
- using TimePoint = std::chrono::time_point<std::chrono::system_clock>;
+ using TimePoint = std::chrono::time_point<std::chrono::steady_clock>;
/**
* 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
};
/**
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 Request 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 Sets data to specify animation playback.
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.
private:
/**
+ * @brief Loads the animation file.
+ *
+ * @return True if loading succeeded, false otherwise.
+ */
+ bool Load();
+
+ /**
* @brief Play the vector animation.
*/
void PlayAnimation();
*/
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;
AnimationData mAnimationData[2];
VectorAnimationThread& mVectorAnimationThread;
ConditionalWait mConditionalWait;
+ ResourceReadySignalType mResourceReadySignal;
std::unique_ptr<EventThreadCallback> mAnimationFinishedTrigger;
+ std::unique_ptr<EventThreadCallback> mLoadCompletedTrigger;
PlayState mPlayState;
DevelImageVisual::StopBehavior::Type mStopBehavior;
DevelImageVisual::LoopingMode::Type mLoopingMode;
bool mNeedAnimationFinishedTrigger;
bool mAnimationDataUpdated;
bool mDestroyTask;
+ bool mLoadRequest;
+ bool mLoadFailed;
};
} // namespace Internal