Revert "[Tizen] fix visual artifact of Transition"
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / custom-actor-internal.h
1 #ifndef DALI_INTERNAL_CUSTOM_ACTOR_H
2 #define DALI_INTERNAL_CUSTOM_ACTOR_H
3
4 /*
5  * Copyright (c) 2021 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/internal/event/actors/actor-declarations.h>
23 #include <dali/internal/event/actors/actor-impl.h>
24 #include <dali/public-api/actors/custom-actor.h>
25 #include <dali/public-api/animation/animation.h>
26
27 namespace Dali
28 {
29 namespace Internal
30 {
31 class CustomActor : public Actor
32 {
33 public:
34   /**
35    * Create a new custom actor.
36    * @return A smart-pointer to the newly allocated Actor.
37    */
38   static CustomActorPtr New(CustomActorImpl& extension);
39
40   /**
41    * Retrieve the custom actor implementation.
42    * @return The implementation, or an invalid pointer if no implementation was set.
43    */
44   CustomActorImpl& GetImplementation()
45   {
46     return *mImpl;
47   }
48
49   /**
50    * Retrieve the custom actor implementation.
51    * @return The implementation, or an invalid pointer if no implementation was set.
52    */
53   const CustomActorImpl& GetImplementation() const
54   {
55     return *mImpl;
56   }
57
58   /**
59    * Get the type info associated with this object.
60    *
61    * @return The type info
62    */
63   Dali::TypeInfo GetTypeInfo();
64
65   /**
66    * @copydoc Internal::CustomActorImpl::SetTransparent()
67    */
68   void SetTransparent(bool transparent) override
69   {
70     Actor::SetTransparent(transparent);
71   }
72
73   /**
74    * @copydoc Internal::CustomActorImpl::GetTransparent()
75    */
76   bool GetTransparent() const override
77   {
78     return Actor::GetTransparent();
79   }
80
81 protected:
82   /**
83    * A reference counted object may only be deleted by calling Unreference()
84    */
85   ~CustomActor() override;
86
87 private:
88   /**
89    * @copydoc Internal::Actor::OnSceneConnectionExternal
90    */
91   void OnSceneConnectionExternal(int32_t depth) override
92   {
93     mImpl->OnSceneConnection(depth);
94   }
95
96   /**
97    * @copydoc Internal::Actor::OnSceneDisconnectionExternal
98    */
99   void OnSceneDisconnectionExternal() override
100   {
101     mImpl->OnSceneDisconnection();
102   }
103
104   /**
105    * @copydoc Internal::Actor::OnChildAdd
106    */
107   void OnChildAdd(Actor& child) override
108   {
109     Dali::Actor handle(&child);
110     mImpl->OnChildAdd(handle);
111   }
112
113   /**
114    * @copydoc Internal::Actor::OnChildRemove
115    */
116   void OnChildRemove(Actor& child) override
117   {
118     Dali::Actor handle(&child);
119     mImpl->OnChildRemove(handle);
120   }
121
122   /**
123    * @copydoc Internal::Actor::OnPropertySet
124    */
125   void OnPropertySet(Property::Index index, const Property::Value& propertyValue) override
126   {
127     mImpl->OnPropertySet(index, propertyValue);
128   }
129
130   /**
131    * @copydoc Internal::Actor::OnSizeSet
132    */
133   void OnSizeSet(const Vector3& targetSize) override
134   {
135     mImpl->OnSizeSet(targetSize);
136   }
137
138   /**
139    * @copydoc Internal::Actor::OnSizeAnimation
140    */
141   void OnSizeAnimation(Animation& animation, const Vector3& targetSize) override
142   {
143     Dali::Animation animationHandle(&animation);
144     mImpl->OnSizeAnimation(animationHandle, targetSize);
145   }
146
147   /**
148    * @copydoc Internal::Actor::OnRelayout
149    */
150   void OnRelayout(const Vector2& size, RelayoutContainer& container) override
151   {
152     mImpl->OnRelayout(size, container);
153   }
154
155   /**
156    * @copydoc Internal::Actor::OnSetResizePolicy
157    */
158   void OnSetResizePolicy(ResizePolicy::Type policy, Dimension::Type dimension) override
159   {
160     mImpl->OnSetResizePolicy(policy, dimension);
161   }
162
163   /**
164    * @copydoc Internal::Actor::GetNaturalSize
165    */
166   Vector3 GetNaturalSize() const override
167   {
168     return mImpl->GetNaturalSize();
169   }
170
171   /**
172    * @copydoc Internal::Actor::CalculateChildSize
173    */
174   float CalculateChildSize(const Dali::Actor& child, Dimension::Type dimension) override
175   {
176     return mImpl->CalculateChildSize(child, dimension);
177   }
178
179   /**
180    * @copydoc Internal::Actor::GetHeightForWidth
181    */
182   float GetHeightForWidth(float width) override
183   {
184     return mImpl->GetHeightForWidth(width);
185   }
186
187   /**
188    * @copydoc Internal::Actor::GetWidthForHeight
189    */
190   float GetWidthForHeight(float height) override
191   {
192     return mImpl->GetWidthForHeight(height);
193   }
194
195   /**
196    * @copydoc Internal::Actor::RelayoutDependentOnChildren
197    */
198   bool RelayoutDependentOnChildren(Dimension::Type dimension = Dimension::ALL_DIMENSIONS) override
199   {
200     return mImpl->RelayoutDependentOnChildren(dimension);
201   }
202
203   /**
204    * @copydoc Internal::Actor::OnCalculateRelayoutSize
205    */
206   void OnCalculateRelayoutSize(Dimension::Type dimension) override
207   {
208     return mImpl->OnCalculateRelayoutSize(dimension);
209   }
210
211   /**
212    * @copydoc Internal::Actor::OnLayoutNegotiated
213    */
214   void OnLayoutNegotiated(float size, Dimension::Type dimension) override
215   {
216     return mImpl->OnLayoutNegotiated(size, dimension);
217   }
218
219   /**
220    * Private constructor; see also CustomActor::New()
221    */
222   CustomActor(const SceneGraph::Node& node, CustomActorImpl& extension);
223
224   // no default or copy constructor or assignment
225   CustomActor()                   = delete;
226   CustomActor(const CustomActor&) = delete;
227   CustomActor& operator=(const CustomActor& rhs) = delete;
228
229 protected:
230   CustomActorImplPtr mImpl;
231 };
232
233 } // namespace Internal
234
235 // Helpers for public-api forwarding methods
236
237 inline Internal::CustomActor& GetImpl(Dali::CustomActor& actor)
238 {
239   DALI_ASSERT_ALWAYS(actor && "CustomActor handle is empty");
240
241   BaseObject& handle = actor.GetBaseObject();
242
243   return static_cast<Internal::CustomActor&>(handle);
244 }
245
246 inline const Internal::CustomActor& GetImpl(const Dali::CustomActor& actor)
247 {
248   DALI_ASSERT_ALWAYS(actor && "CustomActor handle is empty");
249
250   const BaseObject& handle = actor.GetBaseObject();
251
252   return static_cast<const Internal::CustomActor&>(handle);
253 }
254
255 } // namespace Dali
256
257 #endif // DALI_INTERNAL_CUSTOM_ACTOR_H