[Tizen] Adds transition effect
[platform/core/uifw/dali-core.git] / dali / devel-api / actors / actor-devel.h
1 #ifndef DALI_ACTOR_DEVEL_H
2 #define DALI_ACTOR_DEVEL_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/public-api/actors/actor.h>
23 #include <dali/public-api/math/rect.h>
24
25 namespace Dali
26 {
27 namespace DevelActor
28 {
29 namespace Property
30 {
31 enum Type
32 {
33   PARENT_ORIGIN              = Dali::Actor::Property::PARENT_ORIGIN,
34   PARENT_ORIGIN_X            = Dali::Actor::Property::PARENT_ORIGIN_X,
35   PARENT_ORIGIN_Y            = Dali::Actor::Property::PARENT_ORIGIN_Y,
36   PARENT_ORIGIN_Z            = Dali::Actor::Property::PARENT_ORIGIN_Z,
37   ANCHOR_POINT               = Dali::Actor::Property::ANCHOR_POINT,
38   ANCHOR_POINT_X             = Dali::Actor::Property::ANCHOR_POINT_X,
39   ANCHOR_POINT_Y             = Dali::Actor::Property::ANCHOR_POINT_Y,
40   ANCHOR_POINT_Z             = Dali::Actor::Property::ANCHOR_POINT_Z,
41   SIZE                       = Dali::Actor::Property::SIZE,
42   SIZE_WIDTH                 = Dali::Actor::Property::SIZE_WIDTH,
43   SIZE_HEIGHT                = Dali::Actor::Property::SIZE_HEIGHT,
44   SIZE_DEPTH                 = Dali::Actor::Property::SIZE_DEPTH,
45   POSITION                   = Dali::Actor::Property::POSITION,
46   POSITION_X                 = Dali::Actor::Property::POSITION_X,
47   POSITION_Y                 = Dali::Actor::Property::POSITION_Y,
48   POSITION_Z                 = Dali::Actor::Property::POSITION_Z,
49   WORLD_POSITION             = Dali::Actor::Property::WORLD_POSITION,
50   WORLD_POSITION_X           = Dali::Actor::Property::WORLD_POSITION_X,
51   WORLD_POSITION_Y           = Dali::Actor::Property::WORLD_POSITION_Y,
52   WORLD_POSITION_Z           = Dali::Actor::Property::WORLD_POSITION_Z,
53   ORIENTATION                = Dali::Actor::Property::ORIENTATION,
54   WORLD_ORIENTATION          = Dali::Actor::Property::WORLD_ORIENTATION,
55   SCALE                      = Dali::Actor::Property::SCALE,
56   SCALE_X                    = Dali::Actor::Property::SCALE_X,
57   SCALE_Y                    = Dali::Actor::Property::SCALE_Y,
58   SCALE_Z                    = Dali::Actor::Property::SCALE_Z,
59   WORLD_SCALE                = Dali::Actor::Property::WORLD_SCALE,
60   VISIBLE                    = Dali::Actor::Property::VISIBLE,
61   COLOR                      = Dali::Actor::Property::COLOR,
62   COLOR_RED                  = Dali::Actor::Property::COLOR_RED,
63   COLOR_GREEN                = Dali::Actor::Property::COLOR_GREEN,
64   COLOR_BLUE                 = Dali::Actor::Property::COLOR_BLUE,
65   COLOR_ALPHA                = Dali::Actor::Property::COLOR_ALPHA,
66   WORLD_COLOR                = Dali::Actor::Property::WORLD_COLOR,
67   WORLD_MATRIX               = Dali::Actor::Property::WORLD_MATRIX,
68   NAME                       = Dali::Actor::Property::NAME,
69   SENSITIVE                  = Dali::Actor::Property::SENSITIVE,
70   LEAVE_REQUIRED             = Dali::Actor::Property::LEAVE_REQUIRED,
71   INHERIT_ORIENTATION        = Dali::Actor::Property::INHERIT_ORIENTATION,
72   INHERIT_SCALE              = Dali::Actor::Property::INHERIT_SCALE,
73   COLOR_MODE                 = Dali::Actor::Property::COLOR_MODE,
74   DRAW_MODE                  = Dali::Actor::Property::DRAW_MODE,
75   SIZE_MODE_FACTOR           = Dali::Actor::Property::SIZE_MODE_FACTOR,
76   WIDTH_RESIZE_POLICY        = Dali::Actor::Property::WIDTH_RESIZE_POLICY,
77   HEIGHT_RESIZE_POLICY       = Dali::Actor::Property::HEIGHT_RESIZE_POLICY,
78   SIZE_SCALE_POLICY          = Dali::Actor::Property::SIZE_SCALE_POLICY,
79   WIDTH_FOR_HEIGHT           = Dali::Actor::Property::WIDTH_FOR_HEIGHT,
80   HEIGHT_FOR_WIDTH           = Dali::Actor::Property::HEIGHT_FOR_WIDTH,
81   PADDING                    = Dali::Actor::Property::PADDING,
82   MINIMUM_SIZE               = Dali::Actor::Property::MINIMUM_SIZE,
83   MAXIMUM_SIZE               = Dali::Actor::Property::MAXIMUM_SIZE,
84   INHERIT_POSITION           = Dali::Actor::Property::INHERIT_POSITION,
85   CLIPPING_MODE              = Dali::Actor::Property::CLIPPING_MODE,
86   LAYOUT_DIRECTION           = Dali::Actor::Property::LAYOUT_DIRECTION,
87   INHERIT_LAYOUT_DIRECTION   = Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION,
88   OPACITY                    = Dali::Actor::Property::OPACITY,
89   SCREEN_POSITION            = Dali::Actor::Property::SCREEN_POSITION,
90   POSITION_USES_ANCHOR_POINT = Dali::Actor::Property::POSITION_USES_ANCHOR_POINT,
91   CULLED                     = Dali::Actor::Property::CULLED,
92   ID                         = Dali::Actor::Property::ID,
93   HIERARCHY_DEPTH            = Dali::Actor::Property::HIERARCHY_DEPTH,
94   IS_ROOT                    = Dali::Actor::Property::IS_ROOT,
95   IS_LAYER                   = Dali::Actor::Property::IS_LAYER,
96   CONNECTED_TO_SCENE         = Dali::Actor::Property::CONNECTED_TO_SCENE,
97   KEYBOARD_FOCUSABLE         = Dali::Actor::Property::KEYBOARD_FOCUSABLE,
98
99   /**
100    * @brief Sets the sibling order of the actor so depth position can be defined within the same parent.
101    * @details Name "siblingOrder", type Property::INTEGER.
102    * @note The initial value is 0.
103    * @note Raise, Lower, RaiseToTop, LowerToBottom, RaiseAbove and LowerBelow will override the
104    * sibling order. The values set by this Property will likely change.
105    */
106   SIBLING_ORDER,
107
108   /**
109    * @brief Sets the update size hint of the actor.
110    * @details Name "updateSizeHint", type Property::VECTOR2.
111    * @note Overrides the size used for the actor damaged area calculation. Affected by the actor model view matrix.
112    */
113   UPDATE_SIZE_HINT,
114
115   /**
116     * @brief If this actor receives a touch-start event, then all following touch events are sent to this actor until a touch-end.
117     * @details Name "captureAllTouchAfterStart", type Property::BOOLEAN
118     * @note Default is false, i.e. actor under touch event will receive the touch even if touch started on this actor
119     */
120   CAPTURE_ALL_TOUCH_AFTER_START,
121
122   /**
123     * @brief If you set the TOUCH_AREA_OFFSET on an actor, when you touch the actor, the touch area is expand from the size of actor.
124     * @details Name "touchAreaOffset", type Property::Rect<int> (left, right, bottom, top)
125     * @note for example
126     *  Actor actor = Actor::New();
127     *  actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
128     *  actor.SetProperty(DevelActor::Property::TOUCH_AREA_OFFSET, Rect<int>(-10, 20, 30, -40));
129     *  actor.TouchedSignal().Connect(OnTouchCallback);
130     *
131     * +---------------------+
132     * |         ^           |
133     * |         |           |
134     * |         | -40       |
135     * |         |           |
136     * |         |           |
137     * |    +----+----+      |
138     * |    |         |      |
139     * | -10|         | 20   |
140     * |<---+         +----->|
141     * |    |         |      |
142     * |    |         |      |
143     * |    +----+----+      |
144     * |         |           |
145     * |         | 30        |
146     * |         |           |
147     * |         v           |
148     * +---------------------+
149
150     *  The actual touched size is actor.width + touchAreaOffset.right - touchAreaOffset.left and actor.height + touchAreaOffset.bottom - touchAreaOffset.top
151     */
152   TOUCH_AREA_OFFSET,
153
154   /**
155    * @brief Determines which blend equation will be used to render renderers of this actor.
156    * @pre To use Advanced Blend Equation(DevelBlendEquation::MULTIPLY ~ DevelBlendEquation::LUMINOSITY), the color to be rendered should be pre-multipled alpha.
157    * @details Name "blendEquation", type Property::INTEGER.
158    * @note Color of each renderer will be blended with rendering framebuffer.
159    * @note To check the blend equation is supported in the system, use Dali::Capabilities::IsBlendEquationSupported
160    */
161   BLEND_EQUATION
162 };
163
164 } // namespace Property
165
166 namespace VisibilityChange
167 {
168 enum Type
169 {
170   SELF,  ///< The visibility of the actor itself has changed.
171   PARENT ///< The visibility of a parent has changed.
172 };
173
174 } // namespace VisibilityChange
175
176 using VisibilityChangedSignalType = Signal<void(Actor, bool, VisibilityChange::Type)>; ///< Signal type of VisibilityChangedSignalType
177
178 /**
179  * @brief This signal is emitted when the visible property of this or a parent actor is changed.
180  *
181  * A callback of the following type may be connected:
182  * @code
183  *   void YourCallbackName( Actor actor, bool visible, VisibilityChange::Type& type );
184  * @endcode
185  * actor: The actor, or child of actor, whose visibility has changed
186  * visible: Whether the actor is now visible or not
187  * type: Whether the actor's visible property has changed or a parent's.
188  * @return The signal to connect to
189  * @pre The Actor has been initialized.
190  * @note This signal is NOT emitted if the actor becomes transparent (or the reverse), it's only linked with Actor::Property::VISIBLE.
191  */
192 DALI_CORE_API VisibilityChangedSignalType& VisibilityChangedSignal(Actor actor);
193
194 /**
195  * Calculates screen position and size.
196  *
197  * @return pair of two values, position of top-left corner on screen and size respectively.
198  */
199 DALI_CORE_API Rect<> CalculateScreenExtents(Actor actor);
200
201 using ChildChangedSignalType = Signal<void(Actor)>; ///< Called when the actor has a child added or removed
202
203 /**
204  * @brief This signal is emitted when a child is added to this actor.
205  *
206  * A callback of the following type may be connected:
207  * @code
208  *   void MyCallbackName( Actor child );
209  * @endcode
210  * child: The child that has been added.
211  *
212  * @note Use this signal with caution. Changing the parent of the actor
213  * within this callback is possible, but DALi will prevent further signals
214  * being sent.
215  *
216  * @return The signal to connect to
217  * @pre The Actor has been initialized
218  */
219 DALI_CORE_API ChildChangedSignalType& ChildAddedSignal(Actor actor);
220
221 /**
222  * @brief This signal is emitted when a child is removed from this actor.
223  *
224  * A callback of the following type may be connected:
225  * @code
226  *   void MyCallbackName( Actor child );
227  * @endcode
228  * child: The child that has been removed.
229  *
230  * @note Use this signal with caution. Changing the parent of the actor
231  * within this callback is possible, but DALi will prevent further signals
232  * being sent.
233  *
234  * @note If the child actor is moved from one actor to another, then
235  * this signal will be emitted followed immediately by an
236  * ChildAddedSignal() on the new parent.
237  *
238  * @return The signal to connect to
239  * @pre The Actor has been initialized
240  */
241 DALI_CORE_API ChildChangedSignalType& ChildRemovedSignal(Actor actor);
242
243 using ChildOrderChangedSignalType = Signal<void(Actor)>; ///< Used when the actor's children have changed order
244
245 /**
246  * @brief This signal is emitted when an actor's children change their sibling order
247  *
248  * A callback of the following type may be connected:
249  * @code
250  *   void MyCallbackName( Actor parent );
251  * @endcode
252  * parent The parent actor of the moved children
253  *
254  * @return The signal to connect to
255  * @pre The Actor has been initialized
256  */
257 DALI_CORE_API ChildOrderChangedSignalType& ChildOrderChangedSignal(Actor actor);
258
259 /**
260  * @brief This signal is emitted when intercepting the actor's touch event.
261  *
262  * A callback of the following type may be connected:
263  * @code
264  *   void MyCallbackName( Actor actor );
265  * @endcode
266  * actor The actor to intercept
267  *
268  * @note TouchEvent callbacks are called from the last child in the order of the parent's actor.
269  * The InterceptTouchEvent callback is to intercept the touch event in the parent.
270  * So, if the parent interepts the touch event, the child cannot receive the touch event.
271  *
272  * @note example
273  *   Actor parent = Actor::New();
274  *   Actor child = Actor::New();
275  *   parent.Add(child);
276  *   child.TouchedSignal().Connect(&application, childFunctor);
277  *   parent.TouchedSignal().Connect(&application, parentFunctor);
278  * The touch event callbacks are called in the order childFunctor -> parentFunctor.
279  *
280  * If you connect interceptTouchSignal to parentActor.
281  *   Dali::DevelActor::InterceptTouchedSignal(parent).Connect(&application, interceptFunctor);
282  *
283  * When interceptFunctor returns false, the touch event callbacks are called in the same order childFunctor -> parentFunctor.
284  * If interceptFunctor returns true, it means that the TouchEvent was intercepted.
285  * So the child actor will not be able to receive touch events.
286  * Only the parentFunctor is called.
287  *
288  * @return The signal to connect to
289  * @pre The Actor has been initialized
290  */
291 DALI_CORE_API Actor::TouchEventSignalType& InterceptTouchedSignal(Actor actor);
292
293 /**
294  * Switch parent in the same tree.
295  * Both of current parent Actor and new parent Actor must be added on Scene.
296  * If not, use Add() instead.
297  * This method don't emit any notification such as off scene, on scene, added or removed.
298  */
299 DALI_CORE_API void SwitchParent(Actor actor, Actor newParent);
300
301 } // namespace DevelActor
302
303 } // namespace Dali
304
305 #endif // DALI_ACTOR_DEVEL_H