Remove custom comparision on UTC
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / animated-vector-image / animated-vector-image-visual.h
1 #ifndef DALI_TOOLKIT_INTERNAL_ANIMATED_VECTOR_IMAGE_VISUAL_H
2 #define DALI_TOOLKIT_INTERNAL_ANIMATED_VECTOR_IMAGE_VISUAL_H
3
4 /*
5  * Copyright (c) 2022 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 // EXTERNAL INCLUDES
22 #include <dali/devel-api/actors/actor-devel.h>
23 #include <dali/public-api/adaptor-framework/window.h>
24 #include <dali/public-api/common/intrusive-ptr.h>
25 #include <dali/public-api/object/property-notification.h>
26 #include <dali/public-api/object/weak-handle.h>
27
28 // INTERNAL INCLUDES
29 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
30 #include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.h>
31 #include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.h>
32 #include <dali-toolkit/internal/visuals/visual-base-impl.h>
33 #include <dali-toolkit/internal/visuals/visual-url.h>
34
35 namespace Dali
36 {
37 namespace Toolkit
38 {
39 namespace Internal
40 {
41 class ImageVisualShaderFactory;
42 class AnimatedVectorImageVisual;
43 using AnimatedVectorImageVisualPtr = IntrusivePtr<AnimatedVectorImageVisual>;
44
45 /**
46  * The visual which renders an animated vector image using VectorAnimationRenderer.
47  * VectorAnimationRenderer renders the animation image and this visuall controls the images.
48  *
49  * The following property is essential
50  *
51  * | %Property Name           | Type             |
52  * |--------------------------|------------------|
53  * | url                      | STRING           |
54  *
55  */
56 class AnimatedVectorImageVisual : public Visual::Base, public ConnectionTracker, public VectorAnimationManager::LifecycleObserver
57 {
58 public:
59   /**
60    * @brief Create the AnimatedVectorImageVisual using the image URL.
61    *
62    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
63    * @param[in] shaderFactory The ImageVisualShaderFactory object
64    * @param[in] imageUrl The URL to an animated vector image to use
65    * @param[in] properties A Property::Map containing settings for this visual
66    * @return A smart-pointer to the newly allocated visual.
67    */
68   static AnimatedVectorImageVisualPtr New(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl, const Property::Map& properties);
69
70   /**
71    * @brief Create the AnimatedVectorImageVisual using the image URL.
72    *
73    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
74    * @param[in] shaderFactory The ImageVisualShaderFactory object
75    * @param[in] imageUrl The URL to an animated vector image to use
76    * @return A smart-pointer to the newly allocated visual.
77    */
78   static AnimatedVectorImageVisualPtr New(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl);
79
80 public: // from Visual
81   /**
82    * @copydoc Visual::Base::GetNaturalSize
83    */
84   void GetNaturalSize(Vector2& naturalSize) override;
85
86   /**
87    * @copydoc Visual::Base::CreatePropertyMap
88    */
89   void DoCreatePropertyMap(Property::Map& map) const override;
90
91   /**
92    * @copydoc Visual::Base::CreateInstancePropertyMap
93    */
94   void DoCreateInstancePropertyMap(Property::Map& map) const override;
95
96   /**
97    * @copydoc Visual::Base::EnablePreMultipliedAlpha
98    */
99   void EnablePreMultipliedAlpha(bool preMultiplied) override;
100
101 protected: // From VectorAnimationManager::LifecycleObserver:
102   /**
103    * @copydoc VectorAnimationManager::LifecycleObserver::VectorAnimationManagerDestroyed()
104    */
105   void VectorAnimationManagerDestroyed() override;
106
107 protected:
108   /**
109    * @brief Constructor.
110    *
111    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
112    * @param[in] shaderFactory The ImageVisualShaderFactory object
113    * @param[in] imageUrl The URL to an animated vector image to use
114    */
115   AnimatedVectorImageVisual(VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl);
116
117   /**
118    * @brief A reference counted object may only be deleted by calling Unreference().
119    */
120   ~AnimatedVectorImageVisual() override;
121
122   /**
123    * @copydoc Visual::Base::OnInitialize
124    */
125   void OnInitialize() override;
126
127   /**
128    * @copydoc Visual::Base::DoSetProperties
129    */
130   void DoSetProperties(const Property::Map& propertyMap) override;
131
132   /**
133    * @copydoc Visual::Base::DoSetOnScene
134    */
135   void DoSetOnScene(Actor& actor) override;
136
137   /**
138    * @copydoc Visual::Base::DoSetOffScene
139    */
140   void DoSetOffScene(Actor& actor) override;
141
142   /**
143    * @copydoc Visual::Base::OnSetTransform
144    */
145   void OnSetTransform() override;
146
147   /**
148    * @copydoc Visual::Base::UpdateShader
149    */
150   void UpdateShader() override;
151
152   /**
153    * @copydoc Visual::Base::GenerateShader
154    */
155   Shader GenerateShader() const override;
156
157   /**
158    * @copydoc Visual::Base::OnDoAction
159    */
160   void OnDoAction(const Property::Index actionId, const Property::Value& attributes) override;
161
162 private:
163   /**
164    * Helper method to set individual values by index key.
165    * @param[in] index The index key of the value
166    * @param[in] value The value
167    */
168   void DoSetProperty(Property::Index index, const Property::Value& value);
169
170   /**
171    * @brief Called when the resource is ready.
172    * @param[in] success True if the texture load was successful. If false, then the resource failed to load.
173    */
174   void OnResourceReady(bool success);
175
176   /**
177    * @brief Event callback from rasterize thread. This is called after the animation is finished.
178    */
179   void OnAnimationFinished();
180
181   /**
182    * @brief Send animation data to the rasterize thread.
183    */
184   void SendAnimationData();
185
186   /**
187    * @brief Set the vector image size.
188    */
189   void SetVectorImageSize();
190
191   /**
192    * @brief Stop the animation.
193    */
194   void StopAnimation();
195
196   /**
197    * @brief Trigger rasterization of the vector content.
198    */
199   void TriggerVectorRasterization();
200
201   /**
202    * @brief Callback when the world scale factor changes.
203    */
204   void OnScaleNotification(PropertyNotification& source);
205
206   /**
207    * @brief Callback when the size changes.
208    */
209   void OnSizeNotification(PropertyNotification& source);
210
211   /**
212    * @brief Callback when the visibility of the actor is changed.
213    */
214   void OnControlVisibilityChanged(Actor actor, bool visible, DevelActor::VisibilityChange::Type type);
215
216   /**
217    * @brief Callback when the visibility of the window is changed.
218    */
219   void OnWindowVisibilityChanged(Window window, bool visible);
220
221   /**
222    * @brief Callback when the event is processed.
223    */
224   void OnProcessEvents();
225
226   // Undefined
227   AnimatedVectorImageVisual(const AnimatedVectorImageVisual& visual) = delete;
228
229   // Undefined
230   AnimatedVectorImageVisual& operator=(const AnimatedVectorImageVisual& visual) = delete;
231
232 private:
233   VisualUrl                          mUrl;
234   VectorAnimationTask::AnimationData mAnimationData;
235   VectorAnimationTaskPtr             mVectorAnimationTask;
236   ImageVisualShaderFactory&          mImageVisualShaderFactory;
237   PropertyNotification               mScaleNotification;
238   PropertyNotification               mSizeNotification;
239   Vector2                            mVisualSize;
240   Vector2                            mVisualScale;
241   WeakHandle<Actor>                  mPlacementActor;
242   DevelImageVisual::PlayState::Type  mPlayState;
243   CallbackBase*                      mEventCallback; // Not owned
244   bool                               mLoadFailed;
245   bool                               mRendererAdded;
246   bool                               mCoreShutdown;
247   bool                               mRedrawInScalingDown;
248 };
249
250 } // namespace Internal
251
252 } // namespace Toolkit
253
254 } // namespace Dali
255
256 #endif // DALI_TOOLKIT_INTERNAL_ANIMATED_VECTOR_IMAGE_VISUAL_H