[Tizen] Add deprecated logs to Scene and Actor
[platform/core/uifw/dali-core-legacy.git] / dali / public-api / actors / actor.h
1 #ifndef DALI_ACTOR_H
2 #define DALI_ACTOR_H
3
4 /*
5  * Copyright (c) 2018 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 <string>
23 #include <cstdint> // uint32_t
24
25 // INTERNAL INCLUDES
26 #include <dali/public-api/actors/actor-enumerations.h>
27 #include <dali/public-api/actors/draw-mode.h>
28 #include <dali/public-api/math/radian.h>
29 #include <dali/public-api/object/handle.h>
30 #include <dali/public-api/object/property-index-ranges.h>
31 #include <dali/public-api/signals/dali-signal.h>
32
33 #undef SIZE_WIDTH // Defined in later versions of cstdint but is used in this header
34
35 namespace Dali
36 {
37 /**
38  * @addtogroup dali_core_actors
39  * @{
40  */
41
42 namespace Internal DALI_INTERNAL
43 {
44 class Actor;
45 }
46
47 class Actor;
48 class Renderer;
49 struct Degree;
50 class Quaternion;
51 class Layer;
52 struct KeyEvent;
53 class TouchData;
54 struct TouchEvent;
55 struct HoverEvent;
56 struct WheelEvent;
57 struct Vector2;
58 struct Vector3;
59 struct Vector4;
60
61 typedef Rect<float> Padding;      ///< Padding definition @SINCE_1_0.0
62
63 /**
64  * @DEPRECATED_1_5.19
65  *
66  * @brief Actor is the primary object with which Dali applications interact.
67  *
68  * UI controls can be built by combining multiple actors.
69  *
70  * <h3>Multi-Touch Events:</h3>
71  *
72  * Touch or hover events are received via signals; see Actor::TouchedSignal() and Actor::HoveredSignal() for more details.
73  *
74  * <i>Hit Testing Rules Summary:</i>
75  *
76  * - An actor is only hittable if the actor's touch or hover signal has a connection.
77  * - An actor is only hittable when it is between the camera's near and far planes.
78  * - If an actor is made insensitive, then the actor and its children are not hittable; see IsSensitive().
79  * - If an actor's visibility flag is unset, then none of its children are hittable either; see IsVisible().
80  * - To be hittable, an actor must have a non-zero size.
81  * - If an actor's world color is fully transparent, then it is not hittable; see GetCurrentWorldColor().
82  *
83  * <i>Hit Test Algorithm:</i>
84  *
85  * - Stage
86  *   - Gets the first down and the last up touch events to the screen, regardless of actor touch event consumption.
87  *   - Stage's root layer can be used to catch unconsumed touch events.
88  *
89  * - RenderTasks
90  *   - Hit testing is dependent on the camera used, which is specific to each RenderTask.
91  *
92  * - Layers
93  *   - For each RenderTask, hit testing starts from the top-most layer and we go through all the
94  *     layers until we have a hit or there are none left.
95  *   - Before we perform a hit test within a layer, we check if all the layer's parents are visible
96  *     and sensitive.
97  *   - If they are not, we skip hit testing the actors in that layer altogether.
98  *   - If a layer is set to consume all touch, then we do not check any layers behind this layer.
99  *
100  * - Actors
101  *   - The final part of hit testing is performed by walking through the actor tree within a layer.
102  *   - The following pseudocode shows the algorithm used:
103  *     @code
104  *     HIT-TEST-WITHIN-LAYER( ACTOR )
105  *     {
106  *       // Only hit-test the actor and its children if it is sensitive and visible
107  *       IF ( ACTOR-IS-SENSITIVE &&
108  *            ACTOR-IS-VISIBLE &&
109  *            ACTOR-IS-ON-STAGE )
110  *       {
111  *         // Depth-first traversal within current layer, visiting parent first
112  *
113  *         // Check whether current actor should be hit-tested.
114  *         IF ( ( TOUCH-SIGNAL-NOT-EMPTY || HOVER-SIGNAL-NOT-EMPTY ) &&
115  *              ACTOR-HAS-NON-ZERO-SIZE &&
116  *              ACTOR-WORLD-COLOR-IS-NOT-TRANSPARENT )
117  *         {
118  *           // Hit-test current actor
119  *           IF ( ACTOR-HIT )
120  *           {
121  *             IF ( ACTOR-IS-OVERLAY || ( DISTANCE-TO-ACTOR < DISTANCE-TO-LAST-HIT-ACTOR ) )
122  *             {
123  *               // The current actor is the closest actor that was underneath the touch.
124  *               LAST-HIT-ACTOR = CURRENT-ACTOR
125  *             }
126  *           }
127  *         }
128  *
129  *         // Keep checking children, in case we hit something closer.
130  *         FOR-EACH CHILD (in order)
131  *         {
132  *           IF ( CHILD-IS-NOT-A-LAYER )
133  *           {
134  *             // Continue traversal for this child's sub-tree
135  *             HIT-TEST-WITHIN-LAYER ( CHILD )
136  *           }
137  *           // else we skip hit-testing the child's sub-tree altogether.
138  *         }
139  *       }
140  *     }
141  *     @endcode
142  *   - Overlays always take priority (i.e. they're considered closer) regardless of distance.
143  *     The overlay children take priority over their parents, and overlay siblings take priority
144  *     over their previous siblings (i.e. reverse of rendering order):
145  *     @code
146  *           1
147  *          / \
148  *         /   \
149  *        2     5
150  *       / \     \
151  *      /   \     \
152  *     3     4     6
153  *
154  *     Hit Priority of above Actor tree (all overlays): 1 - Lowest. 6 - Highest.
155  *     @endcode
156  *     For more information, see SetDrawMode().
157  *
158  * <i>Touch or hover Event Delivery:</i>
159  *
160  * - Delivery
161  *   - The hit actor's touch or hover signal is emitted first; if it is not consumed by any of the listeners,
162  *     the parent's touch or hover signal is emitted, and so on.
163  *   - The following pseudocode shows the delivery mechanism:
164  *     @code
165  *     EMIT-TOUCH-SIGNAL( ACTOR )
166  *     {
167  *       IF ( TOUCH-SIGNAL-NOT-EMPTY )
168  *       {
169  *         // Only do the emission if touch signal of actor has connections.
170  *         CONSUMED = TOUCHED-SIGNAL( TOUCH-EVENT )
171  *       }
172  *
173  *       IF ( NOT-CONSUMED )
174  *       {
175  *         // If event is not consumed then deliver it to the parent unless we reach the root actor
176  *         IF ( ACTOR-PARENT )
177  *         {
178  *           EMIT-TOUCH-SIGNAL( ACTOR-PARENT )
179  *         }
180  *       }
181  *     }
182  *
183  *     EMIT-HOVER-SIGNAL( ACTOR )
184  *     {
185  *       IF ( HOVER-SIGNAL-NOT-EMPTY )
186  *       {
187  *         // Only do the emission if hover signal of actor has connections.
188  *         CONSUMED = HOVERED-SIGNAL( HOVER-EVENT )
189  *       }
190  *
191  *       IF ( NOT-CONSUMED )
192  *       {
193  *         // If event is not consumed then deliver it to the parent unless we reach the root actor.
194  *         IF ( ACTOR-PARENT )
195  *         {
196  *           EMIT-HOVER-SIGNAL( ACTOR-PARENT )
197  *         }
198  *       }
199  *     }
200  *     @endcode
201  *   - If there are several touch points, then the delivery is only to the first touch point's hit
202  *     actor (and its parents). There will be NO touch or hover signal delivery for the hit actors of the
203  *     other touch points.
204  *   - The local coordinates are from the top-left (0.0f, 0.0f, 0.5f) of the hit actor.
205  *
206  * - Leave State
207  *   - A "Leave" state is set when the first point exits the bounds of the previous first point's
208  *     hit actor (primary hit actor).
209  *   - When this happens, the last primary hit actor's touch or hover signal is emitted with a "Leave" state
210  *     (only if it requires leave signals); see SetLeaveRequired().
211  *
212  * - Interrupted State
213  *   - If a system event occurs which interrupts the touch or hover processing, then the last primary hit
214  *     actor's touch or hover signals are emitted with an "Interrupted" state.
215  *   - If the last primary hit actor, or one of its parents, is no longer touchable or hoverable, then its
216  *     touch or hover signals are also emitted with an "Interrupted" state.
217  *   - If the consumed actor on touch-down is not the same as the consumed actor on touch-up, then
218  *     touch signals are also emitted from the touch-down actor with an "Interrupted" state.
219  *   - If the consumed actor on hover-start is not the same as the consumed actor on hover-finished, then
220  *     hover signals are also emitted from the hover-started actor with an "Interrupted" state.
221  *
222  * <h3>Key Events:</h3>
223  *
224  * Key events are received by an actor once set to grab key events, only one actor can be set as focused.
225  *
226  * @nosubgrouping
227  *
228  * Signals
229  * | %Signal Name      | Method                       |
230  * |-------------------|------------------------------|
231  * | touched           | @ref TouchedSignal()         |
232  * | hovered           | @ref HoveredSignal()         |
233  * | wheelEvent        | @ref WheelEventSignal()      |
234  * | onStage           | @ref OnStageSignal()         |
235  * | offStage          | @ref OffStageSignal()        |
236  * | onRelayout        | @ref OnRelayoutSignal()      |
237  *
238  * Actions
239  * | %Action Name      | %Actor method called         |
240  * |-------------------|------------------------------|
241  * | show              | %SetVisible( true )          |
242  * | hide              | %SetVisible( false )         |
243  * @SINCE_1_0.0
244  */
245
246 class DALI_CORE_API Actor : public Handle
247 {
248 public:
249
250   /**
251    * @brief Enumeration for the instance of properties belonging to the Actor class.
252    * @SINCE_1_0.0
253    */
254   struct Property
255   {
256     /**
257      * @brief Enumeration for instance of properties belonging to the Actor class.
258      * @SINCE_1_0.0
259      */
260     enum
261     {
262       /**
263        * @brief The origin of an actor, within its parent's area.
264        * @details Name "parentOrigin", type Property::VECTOR3, constraint-input
265        * @SINCE_1_0.0
266        * @see Actor::SetParentOrigin()
267        */
268       PARENT_ORIGIN = DEFAULT_ACTOR_PROPERTY_START_INDEX,
269
270       /**
271        * @brief The x origin of an actor, within its parent's area.
272        * @details Name "parentOriginX", type Property::FLOAT, constraint-input
273        * @SINCE_1_0.0
274        * @see Actor::SetParentOrigin()
275        */
276       PARENT_ORIGIN_X,
277
278       /**
279        * @brief The y origin of an actor, within its parent's area.
280        * @details Name "parentOriginY", type Property::FLOAT, constraint-input
281        * @SINCE_1_0.0
282        * @see Actor::SetParentOrigin()
283        */
284       PARENT_ORIGIN_Y,
285
286       /**
287        * @brief The z origin of an actor, within its parent's area.
288        * @details Name "parentOriginZ", type Property::FLOAT, constraint-input
289        * @SINCE_1_0.0
290        * @see Actor::SetParentOrigin()
291        */
292       PARENT_ORIGIN_Z,
293
294       /**
295        * @brief The anchor-point of an actor.
296        * @details Name "anchorPoint", type Property::VECTOR3, constraint-input
297        * @SINCE_1_0.0
298        * @see Actor::SetAnchorPoint()
299        */
300       ANCHOR_POINT,
301
302       /**
303        * @brief The x anchor-point of an actor.
304        * @details Name "anchorPointX", type Property::FLOAT, constraint-input
305        * @SINCE_1_0.0
306        * @see Actor::SetAnchorPoint()
307        */
308       ANCHOR_POINT_X,
309
310       /**
311        * @brief The y anchor-point of an actor.
312        * @details Name "anchorPointY", type Property::FLOAT, constraint-input
313        * @SINCE_1_0.0
314        * @see Actor::SetAnchorPoint()
315        */
316       ANCHOR_POINT_Y,
317
318       /**
319        * @brief The z anchor-point of an actor.
320        * @details Name "anchorPointZ", type Property::FLOAT, constraint-input
321        * @SINCE_1_0.0
322        * @see Actor::SetAnchorPoint()
323        */
324       ANCHOR_POINT_Z,
325
326       /**
327        * @brief The size of an actor.
328        * @details Name "size", type Property::VECTOR3, animatable / constraint-input
329        * @SINCE_1_0.0
330        * @see Actor::SetSize()
331        */
332       SIZE,
333
334       /**
335        * @brief The width of an actor.
336        * @details Name "sizeWidth", type Property::FLOAT, animatable / constraint-input
337        * @SINCE_1_0.0
338        * @see Actor::SetSize()
339        */
340       SIZE_WIDTH,
341
342       /**
343        * @brief The height of an actor.
344        * @details Name "sizeHeight", type Property::FLOAT, animatable / constraint-input
345        * @SINCE_1_0.0
346        * @see Actor::SetSize()
347        */
348       SIZE_HEIGHT,
349
350       /**
351        * @brief The depth of an actor.
352        * @details Name "sizeDepth", type Property::FLOAT, animatable / constraint-input
353        * @SINCE_1_0.0
354        * @see Actor::SetSize()
355        */
356       SIZE_DEPTH,
357
358       /**
359        * @brief The position of an actor.
360        * @details Name "position", type Property::VECTOR3, animatable / constraint-input
361        * @SINCE_1_0.0
362        * @see Actor::SetPosition()
363        */
364       POSITION,
365
366       /**
367        * @brief The x position of an actor.
368        * @details Name "positionX", type Property::FLOAT, animatable / constraint-input
369        * @SINCE_1_0.0
370        * @see Actor::SetX()
371        */
372       POSITION_X,
373
374       /**
375        * @brief The y position of an actor.
376        * @details Name "positionY", type Property::FLOAT, animatable / constraint-input
377        * @SINCE_1_0.0
378        * @see Actor::SetY()
379        */
380       POSITION_Y,
381
382       /**
383        * @brief The z position of an actor.
384        * @details Name "positionZ", type Property::FLOAT, animatable / constraint-input
385        * @SINCE_1_0.0
386        * @see Actor::SetZ()
387        */
388       POSITION_Z,
389
390       /**
391        * @brief The world position of an actor.
392        * @details Name "worldPosition", type Property::VECTOR3, read-only / constraint-input
393        * @SINCE_1_0.0
394        * @see Actor::GetCurrentWorldPosition()
395        */
396       WORLD_POSITION,
397
398       /**
399        * @brief The x world position of an actor.
400        * @details Name "worldPositionX", type Property::FLOAT, read-only / constraint-input
401        * @SINCE_1_0.0
402        * @see Actor::GetCurrentWorldPosition()
403        */
404       WORLD_POSITION_X,
405
406       /**
407        * @brief The y world position of an actor.
408        * @details Name "worldPositionY", type Property::FLOAT, read-only / constraint-input
409        * @SINCE_1_0.0
410        * @see Actor::GetCurrentWorldPosition()
411        */
412       WORLD_POSITION_Y,
413
414       /**
415        * @brief The z world position of an actor.
416        * @details Name "worldPositionZ", type Property::FLOAT, read-only / constraint-input
417        * @SINCE_1_0.0
418        * @see Actor::GetCurrentWorldPosition()
419        */
420       WORLD_POSITION_Z,
421
422       /**
423        * @brief The orientation of an actor.
424        * @details Name "orientation", type Property::ROTATION, animatable / constraint-input
425        * @SINCE_1_0.0
426        * @see Actor::SetOrientation()
427        */
428       ORIENTATION,
429
430       /**
431        * @brief The world orientation of an actor.
432        * @details Name "worldOrientation", type Property::ROTATION, read-only / constraint-input
433        * @SINCE_1_0.0
434        * @see Actor::GetCurrentWorldOrientation()
435        */
436       WORLD_ORIENTATION,
437
438       /**
439        * @brief The scale factor applied to an actor.
440        * @details Name "scale", type Property::VECTOR3, animatable / constraint-input
441        * @SINCE_1_0.0
442        * @see Actor::SetScale()
443        */
444       SCALE,
445
446       /**
447        * @brief The x scale factor applied to an actor.
448        * @details Name "scaleX", type Property::FLOAT, animatable / constraint-input
449        * @SINCE_1_0.0
450        * @see Actor::SetScale()
451        */
452       SCALE_X,
453
454       /**
455        * @brief The y scale factor applied to an actor.
456        * @details Name "scaleY", type Property::FLOAT, animatable / constraint-input
457        * @SINCE_1_0.0
458        * @see Actor::SetScale()
459        */
460       SCALE_Y,
461
462       /**
463        * @brief The x scale factor applied to an actor.
464        * @details Name "scaleZ", type Property::FLOAT, animatable / constraint-input
465        * @SINCE_1_0.0
466        * @see Actor::SetScale()
467        */
468       SCALE_Z,
469
470       /**
471        * @brief The world scale factor applied to an actor.
472        * @details Name "worldScale", type Property::VECTOR3, read-only / constraint-input
473        * @SINCE_1_0.0
474        * @see Actor::GetCurrentWorldScale()
475        */
476       WORLD_SCALE,
477
478       /**
479        * @brief The visibility flag of an actor.
480        * @details Name "visible", type Property::BOOL, animatable / constraint-input
481        * @SINCE_1_0.0
482        * @see Actor::SetVisible()
483        */
484       VISIBLE,
485
486       /**
487        * @brief The color of an actor.
488        * @details Name "color", type Property::VECTOR4 or Property::VECTOR3, animatable / constraint-input
489        * @note The alpha value will be 1.0f if a Vector3 type value is set.
490        * @SINCE_1_0.0
491        * @see Actor::SetColor()
492        */
493       COLOR,
494
495       /**
496        * @brief The red component of an actor's color.
497        * @details Name "colorRed", type Property::FLOAT, animatable / constraint-input
498        * @SINCE_1_0.0
499        * @see Actor::SetColor()
500        */
501       COLOR_RED,
502
503       /**
504        * @brief The green component of an actor's color.
505        * @details Name "colorGreen", type Property::FLOAT, animatable / constraint-input
506        * @SINCE_1_0.0
507        * @see Actor::SetColor()
508        */
509       COLOR_GREEN,
510
511       /**
512        * @brief The blue component of an actor's color.
513        * @details Name "colorBlue", type Property::FLOAT, animatable / constraint-input
514        * @SINCE_1_0.0
515        * @see Actor::SetColor()
516        */
517       COLOR_BLUE,
518
519       /**
520        * @brief The alpha component of an actor's color.
521        * @details Name "colorAlpha", type Property::FLOAT, animatable / constraint-input
522        * @SINCE_1_0.0
523        * @see Actor::SetColor()
524        */
525       COLOR_ALPHA,
526
527       /**
528        * @brief The world color of an actor.
529        * @details Name "worldColor", type Property::VECTOR4, read-only / constraint-input
530        * @SINCE_1_0.0
531        * @see Actor::GetCurrentWorldColor()
532        */
533       WORLD_COLOR,
534
535       /**
536        * @brief The world matrix of an actor.
537        * @details Name "worldMatrix", type Property::MATRIX, read-only / constraint-input
538        * @SINCE_1_0.0
539        * @see Actor::GetCurrentWorldMatrix()
540        */
541       WORLD_MATRIX,
542
543       /**
544        * @brief The name of an actor.
545        * @details Name "name", type Property::STRING
546        * @SINCE_1_0.0
547        * @see Actor::GetName()
548        */
549       NAME,
550
551       /**
552        * @brief The flag whether an actor should emit touch or hover signals.
553        * @details Name "sensitive", type Property::BOOLEAN
554        * @SINCE_1_0.0
555        * @see Actor::SetSensitive()
556        */
557       SENSITIVE,
558
559       /**
560        * @brief The flag whether an actor should receive a notification when touch or hover motion events leave.
561        * @details Name "leaveRequired", type Property::BOOLEAN
562        * @SINCE_1_0.0
563        * @see Actor::SetLeaveRequired()
564        */
565       LEAVE_REQUIRED,
566
567       /**
568        * @brief The flag whether a child actor inherits it's parent's orientation.
569        * @details Name "inheritOrientation", type Property::BOOLEAN
570        * @SINCE_1_0.0
571        * @see Actor::SetInheritOrientation()
572        */
573       INHERIT_ORIENTATION,
574
575       /**
576        * @brief The flag whether a child actor inherits it's parent's scale.
577        * @details Name "inheritScale", type Property::BOOLEAN
578        * @SINCE_1_0.0
579        * @see Actor::SetInheritScale()
580        */
581       INHERIT_SCALE,
582
583       /**
584        * @brief The color mode of an actor.
585        * @details Name "colorMode", type ColorMode (Property::INTEGER) or Property::STRING.
586        * @SINCE_1_0.0
587        * @see Actor::SetColorMode()
588        */
589       COLOR_MODE,
590
591       /**
592        * @brief This property is removed because it's deprecated.
593        */
594       RESERVED_PROPERTY_01,
595
596       /**
597        * @brief The draw mode of an actor.
598        * @details Name "drawMode", type DrawMode::Type (Property::INTEGER) or Property::STRING.
599        * @SINCE_1_0.0
600        * @see Actor::SetDrawMode()
601        */
602       DRAW_MODE,
603
604       /**
605        * @brief The size mode factor of an actor.
606        * @details Name "sizeModeFactor", type Property::VECTOR3.
607        * @SINCE_1_0.0
608        * @see Actor::SetSizeModeFactor()
609        */
610       SIZE_MODE_FACTOR,
611
612       /**
613        * @brief The resize policy for the width of an actor.
614        * @details Name "widthResizePolicy", type ResizePolicy::Type (Property::INTEGER) or Property::STRING.
615        * @SINCE_1_0.0
616        * @see Actor::SetResizePolicy()
617        */
618       WIDTH_RESIZE_POLICY,
619
620       /**
621        * @brief The resize policy for the height of an actor.
622        * @details Name "heightResizePolicy", type ResizePolicy::Type (Property::INTEGER) or Property::STRING.
623        * @SINCE_1_0.0
624        * @see Actor::SetResizePolicy()
625        */
626       HEIGHT_RESIZE_POLICY,
627
628       /**
629        * @brief The size scale policy of an actor.
630        * @details Name "sizeScalePolicy", type ResizePolicy::Type (Property::INTEGER) or Property::STRING.
631        * @SINCE_1_0.0
632        * @see Actor::SetSizeScalePolicy()
633        */
634       SIZE_SCALE_POLICY,
635
636       /**
637        * @brief The flag to determine the width dependent on the height.
638        * @details Name "widthForHeight", type Property::BOOLEAN.
639        * @SINCE_1_0.0
640        * @see Actor::SetResizePolicy()
641        */
642       WIDTH_FOR_HEIGHT,
643
644       /**
645        * @brief The flag to determine the height dependent on the width.
646        * @details Name "heightForWidth", type Property::BOOLEAN.
647        * @SINCE_1_0.0
648        * @see Actor::SetResizePolicy()
649        */
650       HEIGHT_FOR_WIDTH,
651
652       /**
653        * @brief The padding of an actor for use in layout.
654        * @details Name "padding", type Property::VECTOR4.
655        * @SINCE_1_0.0
656        * @see Actor::SetPadding()
657        */
658       PADDING,
659
660       /**
661        * @brief The minimum size an actor can be assigned in size negotiation.
662        * @details Name "minimumSize", type Property::VECTOR2.
663        * @SINCE_1_0.0
664        * @see Actor::SetMinimumSize()
665        */
666       MINIMUM_SIZE,
667
668       /**
669        * @brief The maximum size an actor can be assigned in size negotiation.
670        * @details Name "maximumSize", type Property::VECTOR2.
671        * @SINCE_1_0.0
672        * @see Actor::SetMaximumSize()
673        */
674       MAXIMUM_SIZE,
675
676       /**
677        * @brief The flag whether a child actor inherits it's parent's position.
678        * @details Name "inheritPosition", type Property::BOOLEAN.
679        * @SINCE_1_1.24
680        * @see Actor::SetInheritPosition()
681        */
682       INHERIT_POSITION,
683
684       /**
685        * @brief The clipping mode of an actor.
686        * @details Name "clippingMode", type ClippingMode::Type (Property::INTEGER) or Property::STRING.
687        * @SINCE_1_2_5
688        * @see ClippingMode::Type for supported values.
689        */
690       CLIPPING_MODE,
691
692       /**
693        * @brief The direction of the layout.
694        * @details Name "layoutDirection", type LayoutDirection::Type (Property::INTEGER) or Property::STRING.
695        * @SINCE_1_2.60
696        * @see LayoutDirection::Type for supported values.
697        */
698       LAYOUT_DIRECTION,
699
700       /**
701        * @brief Determines whether child actors inherit the layout direction from a parent.
702        * @details Name "layoutDirectionInheritance", type Property::BOOLEAN.
703        * @SINCE_1_2.60
704        */
705       INHERIT_LAYOUT_DIRECTION,
706     };
707   };
708
709   // Typedefs
710
711   typedef Signal< bool (Actor, const TouchEvent&) > TouchSignalType;        ///< @DEPRECATED_1_1.37 @brief Touch signal type @SINCE_1_0.0
712   typedef Signal< bool (Actor, const TouchData&) >  TouchDataSignalType;    ///< Touch signal type @SINCE_1_1.37
713   typedef Signal< bool (Actor, const HoverEvent&) > HoverSignalType;        ///< Hover signal type @SINCE_1_0.0
714   typedef Signal< bool (Actor, const WheelEvent&) > WheelEventSignalType;   ///< Wheel signal type @SINCE_1_0.0
715   typedef Signal< void (Actor) > OnStageSignalType;                         ///< Stage connection signal type @SINCE_1_0.0
716   typedef Signal< void (Actor) > OffStageSignalType;                        ///< Stage disconnection signal type @SINCE_1_0.0
717   typedef Signal< void (Actor) > OnRelayoutSignalType;                      ///< Called when the actor is relaid out @SINCE_1_0.0
718   typedef Signal< void ( Actor, LayoutDirection::Type ) > LayoutDirectionChangedSignalType; ///< Layout direction changes signal type. @SINCE_1_2.60
719
720   // Creation
721
722   /**
723    * @DEPRECATED_1_5.19
724    *
725    * @brief Creates an uninitialized Actor; this can be initialized with Actor::New().
726    *
727    * Calling member functions with an uninitialized Actor handle is not allowed.
728    * @SINCE_1_0.0
729    */
730   Actor();
731
732   /**
733    * @DEPRECATED_1_5.19
734    *
735    * @brief Creates an initialized Actor.
736    *
737    * @SINCE_1_0.0
738    * @return A handle to a newly allocated Dali resource
739    */
740   static Actor New();
741
742   /**
743    * @brief Downcasts a handle to Actor handle.
744    *
745    * If handle points to an Actor object, the downcast produces valid handle.
746    * If not, the returned handle is left uninitialized.
747    *
748    * @SINCE_1_0.0
749    * @param[in] handle to An object
750    * @return handle to a Actor object or an uninitialized handle
751    */
752   static Actor DownCast( BaseHandle handle );
753
754   /**
755    * @brief Dali::Actor is intended as a base class.
756    *
757    * This is non-virtual since derived Handle types must not contain data or virtual methods.
758    * @SINCE_1_0.0
759    */
760   ~Actor();
761
762   /**
763    * @brief Copy constructor.
764    *
765    * @SINCE_1_0.0
766    * @param[in] copy The actor to copy
767    */
768   Actor(const Actor& copy);
769
770   /**
771    * @brief Assignment operator
772    *
773    * @SINCE_1_0.0
774    * @param[in] rhs The actor to copy
775    * @return A reference to this
776    */
777   Actor& operator=(const Actor& rhs);
778
779   /**
780    * @brief Retrieves the Actor's name.
781    *
782    * @SINCE_1_0.0
783    * @return The Actor's name
784    * @pre The Actor has been initialized.
785    */
786   const std::string& GetName() const;
787
788   /**
789    * @brief Sets the Actor's name.
790    *
791    * @SINCE_1_0.0
792    * @param[in] name The new name
793    * @pre The Actor has been initialized.
794    */
795   void SetName(const std::string& name);
796
797   /**
798    * @brief Retrieves the unique ID of the actor.
799    *
800    * @SINCE_1_0.0
801    * @return The ID
802    * @pre The Actor has been initialized.
803    */
804   uint32_t GetId() const;
805
806   // Containment
807
808   /**
809    * @brief Queries whether an actor is the root actor, which is owned by the Stage.
810    *
811    * @SINCE_1_0.0
812    * @return True if the actor is the root actor
813    * @pre The Actor has been initialized.
814    */
815   bool IsRoot() const;
816
817   /**
818    * @brief Queries whether the actor is connected to the Stage.
819    *
820    * When an actor is connected, it will be directly or indirectly parented to the root Actor.
821    * @SINCE_1_0.0
822    * @return True if the actor is connected to the Stage
823    * @pre The Actor has been initialized.
824    * @note The root Actor is provided automatically by Dali::Stage, and is always considered to be connected.
825    */
826   bool OnStage() const;
827
828   /**
829    * @brief Queries whether the actor is of class Dali::Layer.
830    *
831    * @SINCE_1_0.0
832    * @return True if the actor is a layer
833    * @pre The Actor has been initialized.
834    */
835   bool IsLayer() const;
836
837   /**
838    * @brief Gets the layer in which the actor is present.
839    *
840    * @SINCE_1_0.0
841    * @return The layer, which will be uninitialized if the actor is off-stage
842    * @pre The Actor has been initialized.
843    */
844   Layer GetLayer();
845
846   /**
847    * @brief Adds a child Actor to this Actor.
848    *
849    * @SINCE_1_0.0
850    * @param[in] child The child
851    * @pre This Actor (the parent) has been initialized.
852    * @pre The child actor has been initialized.
853    * @pre The child actor is not the same as the parent actor.
854    * @pre The actor is not the Root actor.
855    * @post The child will be referenced by its parent. This means that the child will be kept alive,
856    * even if the handle passed into this method is reset or destroyed.
857    * @note If the child already has a parent, it will be removed from old parent
858    * and reparented to this actor. This may change child's position, color,
859    * scale etc as it now inherits them from this actor.
860    */
861   void Add(Actor child);
862
863   /**
864    * @brief Removes a child Actor from this Actor.
865    *
866    * If the actor was not a child of this actor, this is a no-op.
867    * @SINCE_1_0.0
868    * @param[in] child The child
869    * @pre This Actor (the parent) has been initialized.
870    * @pre The child actor is not the same as the parent actor.
871    */
872   void Remove(Actor child);
873
874   /**
875    * @brief Removes an actor from its parent.
876    *
877    * If the actor has no parent, this method does nothing.
878    * @SINCE_1_0.0
879    * @pre The (child) actor has been initialized.
880    */
881   void Unparent();
882
883   /**
884    * @brief Retrieves the number of children held by the actor.
885    *
886    * @SINCE_1_0.0
887    * @return The number of children
888    * @pre The Actor has been initialized.
889    */
890   uint32_t GetChildCount() const;
891
892   /**
893    * @brief Retrieve and child actor by index.
894    *
895    * @SINCE_1_0.0
896    * @param[in] index The index of the child to retrieve
897    * @return The actor for the given index or empty handle if children not initialized
898    * @pre The Actor has been initialized.
899    */
900   Actor GetChildAt( uint32_t index ) const;
901
902   /**
903    * @brief Search through this actor's hierarchy for an actor with the given name.
904    *
905    * The actor itself is also considered in the search.
906    * @SINCE_1_0.0
907    * @param[in] actorName The name of the actor to find
908    * @return A handle to the actor if found, or an empty handle if not
909    * @pre The Actor has been initialized.
910    */
911   Actor FindChildByName(const std::string& actorName);
912
913   /**
914    * @brief Search through this actor's hierarchy for an actor with the given unique ID.
915    *
916    * The actor itself is also considered in the search.
917    * @SINCE_1_0.0
918    * @param[in] id The ID of the actor to find
919    * @return A handle to the actor if found, or an empty handle if not
920    * @pre The Actor has been initialized.
921    */
922   Actor FindChildById( const uint32_t id );
923
924   /**
925    * @brief Retrieves the actor's parent.
926    *
927    * @SINCE_1_0.0
928    * @return A handle to the actor's parent. If the actor has no parent, this handle will be invalid
929    * @pre The actor has been initialized.
930    */
931   Actor GetParent() const;
932
933   // Positioning
934
935   /**
936    * @brief Sets the origin of an actor, within its parent's area.
937    *
938    * This is expressed in unit coordinates, such that (0.0, 0.0, 0.5) is the top-left corner of the parent,
939    * and (1.0, 1.0, 0.5) is the bottom-right corner.
940    * The default parent-origin is Dali::ParentOrigin::TOP_LEFT (0.0, 0.0, 0.5).
941    * An actor's position is the distance between this origin, and the actor's anchor-point.
942    * @image html parent-origin.png
943    * @SINCE_1_0.0
944    * @param[in] origin The new parent-origin
945    * @pre The Actor has been initialized.
946    * @see Dali::ParentOrigin for predefined parent origin values
947    */
948   void SetParentOrigin(const Vector3& origin);
949
950   /**
951    * @brief Retrieves the parent-origin of an actor.
952    *
953    * @SINCE_1_0.0
954    * @return The current parent-origin
955    * @pre The Actor has been initialized.
956    */
957   Vector3 GetCurrentParentOrigin() const;
958
959   /**
960    * @brief Sets the anchor-point of an actor.
961    *
962    * This is expressed in unit coordinates, such that (0.0, 0.0, 0.5)
963    * is the top-left corner of the actor, and (1.0, 1.0, 0.5) is the
964    * bottom-right corner. The default anchor point is
965    * Dali::AnchorPoint::CENTER (0.5, 0.5, 0.5).
966    * An actor position is the distance between its parent-origin and this anchor-point.
967    * An actor's orientation is the rotation from its default orientation, the rotation is centered around its anchor-point.
968    * @image html anchor-point.png
969    * @SINCE_1_0.0
970    * @param[in] anchorPoint The new anchor-point
971    * @pre The Actor has been initialized.
972    * @see Dali::AnchorPoint for predefined anchor point values
973    */
974   void SetAnchorPoint(const Vector3& anchorPoint);
975
976   /**
977    * @brief Retrieves the anchor-point of an actor.
978    *
979    * @SINCE_1_0.0
980    * @return The current anchor-point
981    * @pre The Actor has been initialized.
982    */
983   Vector3 GetCurrentAnchorPoint() const;
984
985   /**
986    * @brief Sets the size of an actor.
987    *
988    * Geometry can be scaled to fit within this area.
989    * This does not interfere with the actors scale factor.
990    * The actors default depth is the minimum of width & height.
991    * @SINCE_1_0.0
992    * @param [in] width The new width
993    * @param [in] height The new height
994    * @pre The actor has been initialized.
995    */
996   void SetSize(float width, float height);
997
998   /**
999    * @brief Sets the size of an actor.
1000    *
1001    * Geometry can be scaled to fit within this area.
1002    * This does not interfere with the actors scale factor.
1003    * @SINCE_1_0.0
1004    * @param[in] width The size of the actor along the x-axis
1005    * @param[in] height The size of the actor along the y-axis
1006    * @param[in] depth The size of the actor along the z-axis
1007    * @pre The actor has been initialized.
1008    */
1009   void SetSize(float width, float height, float depth);
1010
1011   /**
1012    * @brief Sets the size of an actor.
1013    *
1014    * Geometry can be scaled to fit within this area.
1015    * This does not interfere with the actors scale factor.
1016    * The actors default depth is the minimum of width & height.
1017    * @SINCE_1_0.0
1018    * @param[in] size The new size
1019    * @pre The actor has been initialized.
1020    */
1021   void SetSize(const Vector2& size);
1022
1023   /**
1024    * @brief Sets the size of an actor.
1025    *
1026    * Geometry can be scaled to fit within this area.
1027    * This does not interfere with the actors scale factor.
1028    * @SINCE_1_0.0
1029    * @param [in] size The new size
1030    * @pre The actor has been initialized.
1031    */
1032   void SetSize(const Vector3& size);
1033
1034   /**
1035    * @brief Retrieves the actor's size.
1036    *
1037    * @SINCE_1_0.0
1038    * @return The actor's target size
1039    * @pre The actor has been initialized.
1040    * @note This return is the value that was set using SetSize or the target size of an animation.
1041    *       It may not match the current value in some cases, i.e. when the animation is progressing or the maximum or minimum size is set.
1042    */
1043   Vector3 GetTargetSize() const;
1044
1045   /**
1046    * @brief Retrieves the actor's size.
1047    *
1048    * @SINCE_1_0.0
1049    * @return The actor's current size
1050    * @pre The actor has been initialized.
1051    * @note This property can be animated; the return value may not match the value written with SetSize().
1052    */
1053   Vector3 GetCurrentSize() const;
1054
1055   /**
1056    * @brief Returns the natural size of the actor.
1057    *
1058    * Deriving classes stipulate the natural size and by default an actor has a ZERO natural size.
1059    *
1060    * @SINCE_1_0.0
1061    * @return The actor's natural size
1062    */
1063   Vector3 GetNaturalSize() const;
1064
1065   /**
1066    * @brief Sets the position of the Actor.
1067    *
1068    * By default, sets the position vector between the parent origin and anchor point (default).
1069    *
1070    * If Position inheritance if disabled, sets the world position. @see SetInheritPosition
1071    *
1072    * @image html actor-position.png
1073    * The Actor's z position will be set to 0.0f.
1074    * @SINCE_1_0.0
1075    * @param[in] x The new x position
1076    * @param[in] y The new y position
1077    * @pre The Actor has been initialized.
1078    */
1079   void SetPosition(float x, float y);
1080
1081   /**
1082    * @brief Sets the position of the Actor.
1083    *
1084    * By default, sets the position vector between the parent origin and anchor point (default).
1085    *
1086    * If Position inheritance if disabled, sets the world position. @see SetInheritPosition
1087    *
1088    * @image html actor-position.png
1089    * @SINCE_1_0.0
1090    * @param[in] x The new x position
1091    * @param[in] y The new y position
1092    * @param[in] z The new z position
1093    * @pre The Actor has been initialized.
1094    */
1095   void SetPosition(float x, float y, float z);
1096
1097   /**
1098    * @brief Sets the position of the Actor.
1099    *
1100    * By default, sets the position vector between the parent origin and anchor point (default).
1101    *
1102    * If Position inheritance if disabled, sets the world position. @see SetInheritPosition
1103    *
1104    * @image html actor-position.png
1105    * @SINCE_1_0.0
1106    * @param[in] position The new position
1107    * @pre The Actor has been initialized.
1108    */
1109   void SetPosition(const Vector3& position);
1110
1111   /**
1112    * @brief Sets the position of an actor along the X-axis.
1113    *
1114    * @SINCE_1_0.0
1115    * @param[in] x The new x position
1116    * @pre The Actor has been initialized.
1117    */
1118   void SetX(float x);
1119
1120   /**
1121    * @brief Sets the position of an actor along the Y-axis.
1122    *
1123    * @SINCE_1_0.0
1124    * @param[in] y The new y position
1125    * @pre The Actor has been initialized.
1126    */
1127   void SetY(float y);
1128
1129   /**
1130    * @brief Sets the position of an actor along the Z-axis.
1131    *
1132    * @SINCE_1_0.0
1133    * @param[in] z The new z position
1134    * @pre The Actor has been initialized.
1135    */
1136   void SetZ(float z);
1137
1138   /**
1139    * @brief Translates an actor relative to its existing position.
1140    *
1141    * @SINCE_1_0.0
1142    * @param[in] distance The actor will move by this distance
1143    * @pre The actor has been initialized.
1144    */
1145   void TranslateBy(const Vector3& distance);
1146
1147   /**
1148    * @brief Retrieves the position of the Actor.
1149    *
1150    * @SINCE_1_0.0
1151    * @return The Actor's current position
1152    * @pre The Actor has been initialized.
1153    * @note This property can be animated; the return value may not match the value written with SetPosition().
1154    */
1155   Vector3 GetCurrentPosition() const;
1156
1157   /**
1158    * @brief Retrieves the world-position of the Actor.
1159    *
1160    * @SINCE_1_0.0
1161    * @return The Actor's current position in world coordinates
1162    * @pre The Actor has been initialized.
1163    * @note The actor may not have a world-position unless it has been added to the stage.
1164    */
1165   Vector3 GetCurrentWorldPosition() const;
1166
1167   /**
1168    * @brief Sets whether a child actor inherits it's parent's position.
1169    *
1170    * Default is to inherit.
1171    * Switching this off means that using SetPosition() sets the actor's world position, i.e. translates from
1172    * the world origin (0,0,0) to the anchor point of the actor.
1173    * @SINCE_1_1.24
1174    * @param[in] inherit - @c true if the actor should inherit position, @c false otherwise
1175    * @pre The Actor has been initialized.
1176    */
1177   inline void SetInheritPosition( bool inherit )
1178   {
1179     SetProperty(Property::INHERIT_POSITION, inherit );
1180   }
1181
1182   /**
1183    * @brief Returns whether the actor inherits its parent's position.
1184    *
1185    * @SINCE_1_1.24
1186    * @return @c true if the actor inherits its parent position, @c false if it uses world position
1187    * @pre The Actor has been initialized.
1188    */
1189   inline bool IsPositionInherited() const
1190   {
1191     return GetProperty(Property::INHERIT_POSITION ).Get<bool>();
1192   }
1193
1194   /**
1195    * @brief Sets the orientation of the Actor.
1196    *
1197    * An actor's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.
1198    * @SINCE_1_0.0
1199    * @param[in] angle The new orientation angle in degrees
1200    * @param[in] axis The new axis of orientation
1201    * @pre The Actor has been initialized.
1202    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentOrientation().
1203    */
1204   void SetOrientation( const Degree& angle, const Vector3& axis )
1205   {
1206     SetOrientation( Radian( angle ), axis );
1207   }
1208
1209   /**
1210    * @brief Sets the orientation of the Actor.
1211    *
1212    * An actor's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.
1213    * @SINCE_1_0.0
1214    * @param[in] angle The new orientation angle in radians
1215    * @param[in] axis The new axis of orientation
1216    * @pre The Actor has been initialized.
1217    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentOrientation().
1218    */
1219   void SetOrientation(const Radian& angle, const Vector3& axis);
1220
1221   /**
1222    * @brief Sets the orientation of the Actor.
1223    *
1224    * An actor's orientation is the rotation from its default orientation, and the rotation is centered around its anchor-point.
1225    * @SINCE_1_0.0
1226    * @param[in] orientation The new orientation
1227    * @pre The Actor has been initialized.
1228    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentOrientation().
1229    */
1230   void SetOrientation(const Quaternion& orientation);
1231
1232   /**
1233    * @brief Applies a relative rotation to an actor.
1234    *
1235    * @SINCE_1_0.0
1236    * @param[in] angle The angle to the rotation to combine with the existing orientation
1237    * @param[in] axis The axis of the rotation to combine with the existing orientation
1238    * @pre The actor has been initialized.
1239    */
1240   void RotateBy( const Degree& angle, const Vector3& axis )
1241   {
1242     RotateBy( Radian( angle ), axis );
1243   }
1244
1245   /**
1246    * @brief Applies a relative rotation to an actor.
1247    *
1248    * @SINCE_1_0.0
1249    * @param[in] angle The angle to the rotation to combine with the existing orientation
1250    * @param[in] axis The axis of the rotation to combine with the existing orientation
1251    * @pre The actor has been initialized.
1252    */
1253   void RotateBy(const Radian& angle, const Vector3& axis);
1254
1255   /**
1256    * @brief Applies a relative rotation to an actor.
1257    *
1258    * @SINCE_1_0.0
1259    * @param[in] relativeRotation The rotation to combine with the existing orientation
1260    * @pre The actor has been initialized.
1261    */
1262   void RotateBy(const Quaternion& relativeRotation);
1263
1264   /**
1265    * @brief Retrieves the Actor's orientation.
1266    *
1267    * @SINCE_1_0.0
1268    * @return The current orientation
1269    * @pre The Actor has been initialized.
1270    * @note This property can be animated; the return value may not match the value written with SetOrientation().
1271    */
1272   Quaternion GetCurrentOrientation() const;
1273
1274   /**
1275    * @brief Sets whether a child actor inherits it's parent's orientation.
1276    *
1277    * Default is to inherit.
1278    * Switching this off means that using SetOrientation() sets the actor's world orientation.
1279    * @SINCE_1_0.0
1280    * @param[in] inherit - @c true if the actor should inherit orientation, @c false otherwise
1281    * @pre The Actor has been initialized.
1282    */
1283   void SetInheritOrientation(bool inherit);
1284
1285   /**
1286    * @brief Returns whether the actor inherits its parent's orientation.
1287    *
1288    * @SINCE_1_0.0
1289    * @return @c true if the actor inherits its parent orientation, @c false if it uses world orientation
1290    * @pre The Actor has been initialized.
1291    */
1292   bool IsOrientationInherited() const;
1293
1294   /**
1295    * @brief Retrieves the world-orientation of the Actor.
1296    *
1297    * @SINCE_1_0.0
1298    * @return The Actor's current orientation in the world
1299    * @pre The Actor has been initialized.
1300    * @note The actor will not have a world-orientation, unless it has previously been added to the stage.
1301    */
1302   Quaternion GetCurrentWorldOrientation() const;
1303
1304   /**
1305    * @brief Sets the scale factor applied to an actor.
1306    *
1307    * @SINCE_1_0.0
1308    * @param[in] scale The scale factor applied on all axes
1309    * @pre The Actor has been initialized.
1310    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentScale().
1311    */
1312   void SetScale(float scale);
1313
1314   /**
1315    * @brief Sets the scale factor applied to an actor.
1316    *
1317    * @SINCE_1_0.0
1318    * @param[in] scaleX The scale factor applied along the x-axis
1319    * @param[in] scaleY The scale factor applied along the y-axis
1320    * @param[in] scaleZ The scale factor applied along the z-axis
1321    * @pre The Actor has been initialized.
1322    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentScale().
1323    */
1324   void SetScale(float scaleX, float scaleY, float scaleZ);
1325
1326   /**
1327    * @brief Sets the scale factor applied to an actor.
1328    *
1329    * @SINCE_1_0.0
1330    * @param[in] scale A vector representing the scale factor for each axis
1331    * @pre The Actor has been initialized.
1332    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentScale().
1333    */
1334   void SetScale(const Vector3& scale);
1335
1336   /**
1337    * @brief Applies a relative scale to an actor.
1338    *
1339    * @SINCE_1_0.0
1340    * @param[in] relativeScale The scale to combine with the actor's existing scale
1341    * @pre The actor has been initialized.
1342    */
1343   void ScaleBy(const Vector3& relativeScale);
1344
1345   /**
1346    * @brief Retrieves the scale factor applied to an actor.
1347    *
1348    * @SINCE_1_0.0
1349    * @return A vector representing the scale factor for each axis
1350    * @pre The Actor has been initialized.
1351    * @note This property can be animated; the return value may not match the value written with SetScale().
1352    */
1353   Vector3 GetCurrentScale() const;
1354
1355   /**
1356    * @brief Retrieves the world-scale of the Actor.
1357    *
1358    * @SINCE_1_0.0
1359    * @return The Actor's current scale in the world
1360    * @pre The Actor has been initialized.
1361    * @note The actor will not have a world-scale, unless it has previously been added to the stage.
1362    */
1363   Vector3 GetCurrentWorldScale() const;
1364
1365   /**
1366    * @brief Sets whether a child actor inherits it's parent's scale.
1367    *
1368    * Default is to inherit.
1369    * Switching this off means that using SetScale() sets the actor's world scale.
1370    * @SINCE_1_0.0
1371    * @param[in] inherit - @c true if the actor should inherit scale, @c false otherwise
1372    * @pre The Actor has been initialized.
1373    */
1374   void SetInheritScale( bool inherit );
1375
1376   /**
1377    * @brief Returns whether the actor inherits its parent's scale.
1378    *
1379    * @SINCE_1_0.0
1380    * @return @c true if the actor inherits its parent scale, @c false if it uses world scale
1381    * @pre The Actor has been initialized.
1382    */
1383   bool IsScaleInherited() const;
1384
1385   /**
1386    * @brief Retrieves the world-matrix of the actor.
1387    *
1388    * @SINCE_1_0.0
1389    * @return The Actor's current world matrix
1390    * @pre The Actor has been initialized.
1391    * @note The actor will not have a world-matrix, unless it has previously been added to the stage.
1392    */
1393   Matrix GetCurrentWorldMatrix() const;
1394
1395   // Visibility & Color
1396
1397   /**
1398    * @brief Sets the visibility flag of an actor.
1399    *
1400    * @SINCE_1_0.0
1401    * @param[in] visible The new visibility flag
1402    * @pre The actor has been initialized.
1403    * @note This is an asynchronous method; the value written may not match a value subsequently read with IsVisible().
1404    * @note If an actor's visibility flag is set to false, then the actor and its children will not be rendered.
1405    *       This is regardless of the individual visibility values of the children i.e. an actor will only be
1406    *       rendered if all of its parents have visibility set to true.
1407    */
1408   void SetVisible(bool visible);
1409
1410   /**
1411    * @brief Retrieves the visibility flag of an actor.
1412    *
1413    * @SINCE_1_0.0
1414    * @return The visibility flag
1415    * @pre The actor has been initialized.
1416    * @note This property can be animated; the return value may not match the value written with SetVisible().
1417    * @note If an actor is not visible, then the actor and its children will not be rendered.
1418    *       This is regardless of the individual visibility values of the children i.e. an actor will only be
1419    *       rendered if all of its parents have visibility set to true.
1420    */
1421   bool IsVisible() const;
1422
1423   /**
1424    * @brief Sets the opacity of an actor.
1425    *
1426    * @SINCE_1_0.0
1427    * @param[in] opacity The new opacity
1428    * @pre The actor has been initialized.
1429    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentOpacity().
1430    */
1431   void SetOpacity(float opacity);
1432
1433   /**
1434    * @brief Retrieves the actor's opacity.
1435    *
1436    * @SINCE_1_0.0
1437    * @return The actor's opacity
1438    * @pre The actor has been initialized.
1439    * @note This property can be animated; the return value may not match the value written with SetOpacity().
1440    */
1441   float GetCurrentOpacity() const;
1442
1443   /**
1444    * @brief Sets the actor's color; this is an RGBA value.
1445    *
1446    * The final color of the actor depends on its color mode.
1447    * @SINCE_1_0.0
1448    * @param[in] color The new color
1449    * @pre The Actor has been initialized.
1450    * @note This is an asynchronous method; the value written may not match a value subsequently read with GetCurrentColor().
1451    */
1452   void SetColor(const Vector4& color);
1453
1454   /**
1455    * @brief Retrieves the actor's color.
1456    *
1457    * Actor's own color is not clamped.
1458    * @SINCE_1_0.0
1459    * @return The color
1460    * @pre The Actor has been initialized.
1461    * @note This property can be animated; the return value may not match the value written with SetColor().
1462    */
1463   Vector4 GetCurrentColor() const;
1464
1465   /**
1466    * @brief Sets the actor's color mode.
1467    *
1468    * This specifies whether the Actor uses its own color, or inherits
1469    * its parent color. The default is USE_OWN_MULTIPLY_PARENT_ALPHA.
1470    * @SINCE_1_0.0
1471    * @param[in] colorMode ColorMode to use
1472    * @pre The Actor has been initialized.
1473    */
1474   void SetColorMode( ColorMode colorMode );
1475
1476   /**
1477    * @brief Returns the actor's color mode.
1478    *
1479    * @SINCE_1_0.0
1480    * @return Currently used colorMode
1481    * @pre The Actor has been initialized.
1482    */
1483   ColorMode GetColorMode() const;
1484
1485   /**
1486    * @brief Retrieves the world-color of the Actor, where each component is clamped within the 0->1 range.
1487    *
1488    * @SINCE_1_0.0
1489    * @return The Actor's current color in the world
1490    * @pre The Actor has been initialized.
1491    * @note The actor will not have a world-color, unless it has previously been added to the stage.
1492    */
1493   Vector4 GetCurrentWorldColor() const;
1494
1495   /**
1496    * @brief Sets how the actor and its children should be drawn.
1497    *
1498    * Not all actors are renderable, but DrawMode can be inherited from any actor.
1499    * If an object is in a 3D layer, it will be depth-tested against
1500    * other objects in the world i.e. it may be obscured if other objects are in front.
1501    *
1502    * If DrawMode::OVERLAY_2D is used, the actor and its children will be drawn as a 2D overlay.
1503    * Overlay actors are drawn in a separate pass, after all non-overlay actors within the Layer.
1504    * For overlay actors, the drawing order is with respect to tree levels of Actors,
1505    * and depth-testing will not be used.
1506
1507    * @SINCE_1_0.0
1508    * @param[in] drawMode The new draw-mode to use
1509    * @note Layers do not inherit the DrawMode from their parents.
1510    */
1511   void SetDrawMode( DrawMode::Type drawMode );
1512
1513   /**
1514    * @brief Queries how the actor and its children will be drawn.
1515    *
1516    * @SINCE_1_0.0
1517    * @return Return the draw mode type
1518    */
1519   DrawMode::Type GetDrawMode() const;
1520
1521   // Input Handling
1522
1523   /**
1524    * @brief Sets whether an actor should emit touch or hover signals.
1525    *
1526    * An actor is sensitive by default, which means that as soon as an application connects to the SignalTouch(),
1527    * the touch event signal will be emitted, and as soon as an application connects to the SignalHover(), the
1528    * hover event signal will be emitted.
1529    *
1530    * If the application wishes to temporarily disable the touch or hover event signal emission, then they can do so by calling:
1531    * @code
1532    * actor.SetSensitive(false);
1533    * @endcode
1534    *
1535    * Then, to re-enable the touch or hover event signal emission, the application should call:
1536    * @code
1537    * actor.SetSensitive(true);
1538    * @endcode
1539    *
1540    * @SINCE_1_0.0
1541    * @param[in] sensitive true to enable emission of the touch or hover event signals, false otherwise
1542    * @pre The Actor has been initialized.
1543    * @note If an actor's sensitivity is set to false, then it's children will not be hittable either.
1544    *       This is regardless of the individual sensitivity values of the children i.e. an actor will only be
1545    *       hittable if all of its parents have sensitivity set to true.
1546    * @see @see TouchedSignal() and HoveredSignal().
1547    */
1548   void SetSensitive(bool sensitive);
1549
1550   /**
1551    * @brief Queries whether an actor emits touch or hover event signals.
1552    *
1553    * @SINCE_1_0.0
1554    * @return @c true, if emission of touch or hover event signals is enabled, @c false otherwise
1555    * @pre The Actor has been initialized.
1556    * @note If an actor is not sensitive, then it's children will not be hittable either.
1557    *       This is regardless of the individual sensitivity values of the children i.e. an actor will only be
1558    *       hittable if all of its parents have sensitivity set to true.
1559    */
1560   bool IsSensitive() const;
1561
1562   /**
1563    * @brief Converts screen coordinates into the actor's coordinate system using the default camera.
1564    *
1565    * @SINCE_1_0.0
1566    * @param[out] localX On return, the X-coordinate relative to the actor
1567    * @param[out] localY On return, the Y-coordinate relative to the actor
1568    * @param[in] screenX The screen X-coordinate
1569    * @param[in] screenY The screen Y-coordinate
1570    * @return True if the conversion succeeded
1571    * @pre The Actor has been initialized.
1572    * @note The actor coordinates are relative to the top-left (0.0, 0.0, 0.5)
1573    */
1574   bool ScreenToLocal(float& localX, float& localY, float screenX, float screenY) const;
1575
1576   /**
1577    * @brief Sets whether the actor should receive a notification when touch or hover motion events leave
1578    * the boundary of the actor.
1579    *
1580    * @SINCE_1_0.0
1581    * @param[in] required Should be set to true if a Leave event is required
1582    * @pre The Actor has been initialized.
1583    * @note By default, this is set to false as most actors do not require this.
1584    * @note Need to connect to the TouchedSignal() or HoveredSignal() to actually receive this event.
1585    *
1586    */
1587   void SetLeaveRequired(bool required);
1588
1589   /**
1590    * @brief This returns whether the actor requires touch or hover events whenever touch or hover motion events leave
1591    * the boundary of the actor.
1592    *
1593    * @SINCE_1_0.0
1594    * @return @c true if a Leave event is required, @c false otherwise
1595    * @pre The Actor has been initialized.
1596    */
1597   bool GetLeaveRequired() const;
1598
1599   /**
1600    * @brief Sets whether the actor should be focusable by keyboard navigation.
1601    *
1602    * The default is false.
1603    * @SINCE_1_0.0
1604    * @param[in] focusable - true if the actor should be focusable by keyboard navigation,
1605    * false otherwise
1606    * @pre The Actor has been initialized.
1607    */
1608   void SetKeyboardFocusable( bool focusable );
1609
1610   /**
1611    * @brief Returns whether the actor is focusable by keyboard navigation.
1612    *
1613    * @SINCE_1_0.0
1614    * @return @c true if the actor is focusable by keyboard navigation, @c false if not
1615    * @pre The Actor has been initialized.
1616    */
1617   bool IsKeyboardFocusable() const;
1618
1619   /**
1620    * @brief Raise actor above the next sibling actor.
1621    *
1622    * @SINCE_1_2.60
1623    * @pre The Actor has been initialized.
1624    * @pre The Actor has been parented.
1625    */
1626   void Raise();
1627
1628   /**
1629    * @brief Lower the actor below the previous sibling actor.
1630    *
1631    * @SINCE_1_2.60
1632    * @pre The Actor has been initialized.
1633    * @pre The Actor has been parented.
1634    */
1635   void Lower();
1636
1637   /**
1638    * @brief Raise actor above all other sibling actors.
1639    *
1640    * @SINCE_1_2.60
1641    * @pre The Actor has been initialized.
1642    * @pre The Actor has been parented.
1643    */
1644   void RaiseToTop();
1645
1646   /**
1647    * @brief Lower actor to the bottom of all other sibling actors.
1648    *
1649    * @SINCE_1_2.60
1650    * @pre The Actor has been initialized.
1651    * @pre The Actor has been parented.
1652    */
1653   void LowerToBottom();
1654
1655   /**
1656    * @brief Raises the actor above the target actor.
1657    *
1658    * @SINCE_1_2.60
1659    * @param[in] target The target actor
1660    * @pre The Actor has been initialized.
1661    * @pre The Actor has been parented.
1662    * @pre The target actor is a sibling.
1663    */
1664   void RaiseAbove( Actor target );
1665
1666   /**
1667    * @brief Lower the actor to below the target actor.
1668    *
1669    * @SINCE_1_2.60
1670    * @param[in] target The target actor
1671    * @pre The Actor has been initialized.
1672    * @pre The Actor has been parented.
1673    * @pre The target actor is a sibling.
1674    */
1675   void LowerBelow( Actor target );
1676
1677   // SIZE NEGOTIATION
1678
1679   /**
1680    * @brief Sets the resize policy to be used for the given dimension(s).
1681    *
1682    * @SINCE_1_0.0
1683    * @param[in] policy The resize policy to use
1684    * @param[in] dimension The dimension(s) to set policy for. Can be a bitfield of multiple dimensions
1685    */
1686   void SetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension );
1687
1688   /**
1689    * @brief Returns the resize policy used for a single dimension.
1690    *
1691    * @SINCE_1_0.0
1692    * @param[in] dimension The dimension to get policy for
1693    * @return Return the dimension resize policy. If more than one dimension is requested, just return the first one found
1694    */
1695   ResizePolicy::Type GetResizePolicy( Dimension::Type dimension ) const;
1696
1697   /**
1698    * @brief Sets the policy to use when setting size with size negotiation. Defaults to SizeScalePolicy::USE_SIZE_SET.
1699    *
1700    * @SINCE_1_0.0
1701    * @param[in] policy The policy to use for when the size is set
1702    */
1703   void SetSizeScalePolicy( SizeScalePolicy::Type policy );
1704
1705   /**
1706    * @brief Returns the size scale policy in use.
1707    *
1708    * @SINCE_1_0.0
1709    * @return Return the size scale policy
1710    */
1711   SizeScalePolicy::Type GetSizeScalePolicy() const;
1712
1713   /**
1714    * @brief Sets the relative to parent size factor of the actor.
1715    *
1716    * This factor is only used when ResizePolicy is set to either:
1717    * ResizePolicy::SIZE_RELATIVE_TO_PARENT or ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT.
1718    * This actor's size is set to the actor's size multiplied by or added to this factor,
1719    * depending on ResizePolicy ( See SetResizePolicy() ).
1720    *
1721    * @SINCE_1_0.0
1722    * @param[in] factor A Vector3 representing the relative factor to be applied to each axis
1723    * @pre The Actor has been initialized.
1724    */
1725   void SetSizeModeFactor( const Vector3& factor );
1726
1727   /**
1728    * @brief Retrieves the relative to parent size factor of the actor.
1729    *
1730    * @SINCE_1_0.0
1731    * @return The Actor's current relative size factor
1732    * @pre The Actor has been initialized.
1733    */
1734   Vector3 GetSizeModeFactor() const;
1735
1736   /**
1737    * @brief Calculates the height of the actor given a width.
1738    *
1739    * The natural size is used for default calculation.
1740    * size 0 is treated as aspect ratio 1:1.
1741    *
1742    * @SINCE_1_0.0
1743    * @param[in] width Width to use
1744    * @return Return the height based on the width
1745    */
1746   float GetHeightForWidth( float width );
1747
1748   /**
1749    * @brief Calculates the width of the actor given a height.
1750    *
1751    * The natural size is used for default calculation.
1752    * size 0 is treated as aspect ratio 1:1.
1753    *
1754    * @SINCE_1_0.0
1755    * @param[in] height Height to use
1756    * @return Return the width based on the height
1757    */
1758   float GetWidthForHeight( float height );
1759
1760   /**
1761    * @brief Returns the value of negotiated dimension for the given dimension.
1762    *
1763    * @SINCE_1_0.0
1764    * @param[in] dimension The dimension to retrieve
1765    * @return Return the value of the negotiated dimension. If more than one dimension is requested, just return the first one found
1766    */
1767   float GetRelayoutSize( Dimension::Type dimension ) const;
1768
1769   /**
1770    * @brief Sets the padding for use in layout.
1771    *
1772    * @SINCE_1_0.0
1773    * @param[in] padding Padding for the actor
1774    */
1775   void SetPadding( const Padding& padding );
1776
1777   /**
1778    * @brief Returns the value of the padding.
1779    *
1780    * @SINCE_1_0.0
1781    * @param[in] paddingOut The returned padding data
1782    */
1783   void GetPadding( Padding& paddingOut ) const;
1784
1785   /**
1786    * @brief Sets the minimum size an actor can be assigned in size negotiation.
1787    *
1788    * @SINCE_1_0.0
1789    * @param[in] size The minimum size
1790    */
1791   void SetMinimumSize( const Vector2& size );
1792
1793   /**
1794    * @brief Returns the minimum relayout size.
1795    *
1796    * @SINCE_1_0.0
1797    * @return Return the minimum size
1798    */
1799   Vector2 GetMinimumSize();
1800
1801   /**
1802    * @brief Sets the maximum size an actor can be assigned in size negotiation.
1803    *
1804    * @SINCE_1_0.0
1805    * @param[in] size The maximum size
1806    */
1807   void SetMaximumSize( const Vector2& size );
1808
1809   /**
1810    * @brief Returns the maximum relayout size.
1811    *
1812    * @SINCE_1_0.0
1813    * @return Return the maximum size
1814    */
1815   Vector2 GetMaximumSize();
1816
1817   /**
1818    * @brief Gets depth in the hierarchy for the actor.
1819    *
1820    * @SINCE_1_0.0
1821    * @return The current depth in the hierarchy of the actor, or @c -1 if actor is not in the hierarchy
1822    */
1823   int32_t GetHierarchyDepth();
1824
1825 public: // Renderer
1826
1827   /**
1828    * @brief Adds a renderer to this actor.
1829    *
1830    * @SINCE_1_0.0
1831    * @param[in] renderer Renderer to add to the actor
1832    * @return The index of the Renderer that was added
1833    * @pre The renderer must be initialized.
1834    *
1835    */
1836   uint32_t AddRenderer( Renderer& renderer );
1837
1838   /**
1839    * @brief Gets the number of renderers on this actor.
1840    *
1841    * @SINCE_1_0.0
1842    * @return The number of renderers on this actor
1843    */
1844   uint32_t GetRendererCount() const;
1845
1846   /**
1847    * @brief Gets a Renderer by index.
1848    *
1849    * @SINCE_1_0.0
1850    * @param[in] index The index of the renderer to fetch
1851    * @return The renderer at the specified index
1852    * @pre The index must be between 0 and GetRendererCount()-1
1853    *
1854    */
1855   Renderer GetRendererAt( uint32_t index );
1856
1857   /**
1858    * @brief Removes a renderer from the actor.
1859    *
1860    * @SINCE_1_0.0
1861    * @param[in] renderer Handle to the renderer that is to be removed
1862    */
1863   void RemoveRenderer( Renderer& renderer );
1864
1865   /**
1866    * @brief Removes a renderer from the actor by index.
1867    *
1868    * @SINCE_1_0.0
1869    * @param[in] index Index of the renderer that is to be removed
1870    * @pre The index must be between 0 and GetRendererCount()-1
1871    *
1872    */
1873   void RemoveRenderer( uint32_t index );
1874
1875 public: // Signals
1876
1877   /**
1878    * @DEPRECATED_1_1.37 Use TouchSignal() instead.
1879    * @brief This signal is emitted when touch input is received.
1880    *
1881    * A callback of the following type may be connected:
1882    * @code
1883    *   bool YourCallbackName(Actor actor, const TouchEvent& event);
1884    * @endcode
1885    * The return value of True, indicates that the touch event should be consumed.
1886    * Otherwise the signal will be emitted on the next sensitive parent of the actor.
1887    * @SINCE_1_0.0
1888    * @return The signal to connect to
1889    * @pre The Actor has been initialized.
1890    */
1891   TouchSignalType& TouchedSignal() DALI_DEPRECATED_API;
1892
1893   /**
1894    * @brief This signal is emitted when touch input is received.
1895    *
1896    * A callback of the following type may be connected:
1897    * @code
1898    *   bool YourCallbackName( Actor actor, TouchData& touch );
1899    * @endcode
1900    * The return value of True, indicates that the touch event has been consumed.
1901    * Otherwise the signal will be emitted on the next sensitive parent of the actor.
1902    * @SINCE_1_1.37
1903    * @return The signal to connect to
1904    * @pre The Actor has been initialized.
1905    */
1906   TouchDataSignalType& TouchSignal();
1907
1908   /**
1909    * @brief This signal is emitted when hover input is received.
1910    *
1911    * A callback of the following type may be connected:
1912    * @code
1913    *   bool YourCallbackName(Actor actor, const HoverEvent& event);
1914    * @endcode
1915    * The return value of True, indicates that the hover event should be consumed.
1916    * Otherwise the signal will be emitted on the next sensitive parent of the actor.
1917    * @SINCE_1_0.0
1918    * @return The signal to connect to
1919    * @pre The Actor has been initialized.
1920    */
1921   HoverSignalType& HoveredSignal();
1922
1923   /**
1924    * @brief This signal is emitted when wheel event is received.
1925    *
1926    * A callback of the following type may be connected:
1927    * @code
1928    *   bool YourCallbackName(Actor actor, const WheelEvent& event);
1929    * @endcode
1930    * The return value of True, indicates that the wheel event should be consumed.
1931    * Otherwise the signal will be emitted on the next sensitive parent of the actor.
1932    * @SINCE_1_0.0
1933    * @return The signal to connect to
1934    * @pre The Actor has been initialized.
1935    */
1936   WheelEventSignalType& WheelEventSignal();
1937
1938   /**
1939    * @brief This signal is emitted after the actor has been connected to the stage.
1940    *
1941    * When an actor is connected, it will be directly or indirectly parented to the root Actor.
1942    * @SINCE_1_0.0
1943    * @return The signal to connect to
1944    * @note The root Actor is provided automatically by Dali::Stage, and is always considered to be connected.
1945    *
1946    * @note When the parent of a set of actors is connected to the stage, then all of the children
1947    * will received this callback.
1948    * For the following actor tree, the callback order will be A, B, D, E, C, and finally F.
1949    *
1950    * @code
1951    *
1952    *       A (parent)
1953    *      / \
1954    *     B   C
1955    *    / \   \
1956    *   D   E   F
1957    *
1958    * @endcode
1959    */
1960   OnStageSignalType& OnStageSignal();
1961
1962   /**
1963    * @brief This signal is emitted after the actor has been disconnected from the stage.
1964    *
1965    * If an actor is disconnected it either has no parent, or is parented to a disconnected actor.
1966    *
1967    * @SINCE_1_0.0
1968    * @return The signal to connect to
1969    * @note When the parent of a set of actors is disconnected to the stage, then all of the children
1970    * will received this callback, starting with the leaf actors.
1971    * For the following actor tree, the callback order will be D, E, B, F, C, and finally A.
1972    *
1973    * @code
1974    *
1975    *       A (parent)
1976    *      / \
1977    *     B   C
1978    *    / \   \
1979    *   D   E   F
1980    *
1981    * @endcode
1982    *
1983    */
1984   OffStageSignalType& OffStageSignal();
1985
1986   /**
1987    * @brief This signal is emitted after the size has been set on the actor during relayout
1988    *
1989    * @SINCE_1_0.0
1990    * @return The signal
1991    */
1992   OnRelayoutSignalType& OnRelayoutSignal();
1993
1994   /**
1995    * @brief This signal is emitted when the layout direction property of this or a parent actor is changed.
1996    *
1997    * A callback of the following type may be connected:
1998    * @code
1999    *   void YourCallbackName( Actor actor, LayoutDirection::Type type );
2000    * @endcode
2001    * actor: The actor, or child of actor, whose layout direction has changed
2002    * type: Whether the actor's layout direction property has changed or a parent's.
2003    *
2004    * @SINCE_1_2.60
2005    * @return The signal to connect to
2006    * @pre The Actor has been initialized.
2007    */
2008   LayoutDirectionChangedSignalType& LayoutDirectionChangedSignal();
2009
2010 public: // Not intended for application developers
2011
2012   /// @cond internal
2013   /**
2014    * @brief This constructor is used by Actor::New() methods.
2015    *
2016    * @SINCE_1_0.0
2017    * @param [in] actor A pointer to a newly allocated Dali resource
2018    */
2019   explicit DALI_INTERNAL Actor(Internal::Actor* actor);
2020   /// @endcond
2021 };
2022
2023 /**
2024  * @brief Helper for discarding an actor handle.
2025  *
2026  * If the handle is empty, this method does nothing.  Otherwise
2027  * Actor::Unparent() will be called, followed by Actor::Reset().
2028  * @SINCE_1_0.0
2029  * @param[in,out] actor A handle to an actor, or an empty handle
2030  */
2031 inline void UnparentAndReset( Actor& actor )
2032 {
2033   if( actor )
2034   {
2035     actor.Unparent();
2036     actor.Reset();
2037   }
2038 }
2039
2040 /**
2041  * @}
2042  */
2043 } // namespace Dali
2044
2045 #endif // DALI_ACTOR_H