7bd5b201cb3ee42ec92d849a5eb2df8bcc8e1c6f
[platform/core/uifw/dali-toolkit.git] / plugins / dali-script-v8 / docs / content / actor.js
1 /**
2  *
3  ## Actor API
4
5   Actor is the primary object with which Dali applications interact. UI controls can be built by combining multiple actors.
6
7   There are different types of Actors supported by Dali. They all have the same
8   base functionality of the actor class.
9
10 ```
11 var actor = new dali.Actor();
12 var imageActor = new dali.ImageActor();
13 var textActor = new dali.TextActor("hello world");
14 var meshActor = new dali.MeshActor();
15 var camera = new dali.CameraActor();
16 var layer = new dali.Layer();
17 ```
18
19 ### Hello world example </h3>
20 ```
21 var myActor = new dali.TextActor("hello-world");
22
23 myActor.name = "my first actor";
24 myActor.color = [ 1, 0, 0, 1];    // Red,Green,Blue, Alpha ( 1 == max, 0 = none )
25 myActor.scale = [ 2, 2, 1];      // double the width and height
26
27 // by default an actor is anchored to the top-left of it's parent actor
28 // change it to the middle
29
30 myActor.parentOrigin = [0.5,0.5,0.5];
31
32 // add to the stage
33 dali.stage.add( myActor );
34 ```
35
36
37 ### Positioning Actors
38
39 An actor inherits its parent's position.  The relative position between the actor & parent is determined by 3 properties:
40
41 1) ParentOrigin.  This Vector3 property defines a point within the parent actor's area.
42
43 <img src="../assets/img/shared/parent-origin.png">
44
45 The default is "top-left", which can be visualized in 2D as (0, 0), but is actually Vector3(0, 0, 0.5) in the 3D DALi world.  The actor's position is relative to this point.
46 ```
47 // to change parent origin to the centre
48 myActor.parentOrigin = [0.5, 0.5, 0.5];
49 ```
50
51 2) AnchorPoint.  This Vector3 property defines a point within the child actor's area.
52
53 <img src="../assets/img/shared/anchor-point.png">
54
55 The default is "center", which can be visualized in 2D as (0.5, 0.5), but is actually Vector3(0.5, 0.5, 0.5) in the 3D DALi world.  The actor's position is also relative to this point.
56 ```
57 // setting anchor point to the centre
58 myActor.anchorPoint = [0.5, 0.5, 0.5];
59 ```
60
61 3) Position.  This is the position vector between the parent-origin and anchor-point.
62
63 <img src="../assets/img/shared/actor-position.png">
64
65 Therefore by default, an actors position is the distance between its center and the top-left corner of its parent.
66
67 An actor added directly to the stage with position (X = stageWidth*0.5, Y = stageHeight*0.5), would appear in the center of the screen.  Likewise an actor with position (X = actorWidth*0.5, Y = actorWidth*0.5), would appear at the top-left of the screen.
68
69 Note that since DALi is a 3D toolkit, this behaviour is the result of a default perspective camera setup.
70
71 ### Actor callback events
72
73 The actor provides the following call back events
74
75 | Name              | Description                            | Parameters passed to call back |
76 |-------------------|----------------------------------------|--------------------------|
77 |touched            | touch event                            | (actor, touchEvent )     |
78 |hovered            | mouse or pointer hovering over actor   | (actor, hoverEvent)      |
79 |mouse-wheel-event  | mouse wheel events                     | (actor, wheelEvent)      |
80 |on-stage           | actor has been moved on stage          | (actor)                  |
81 |off-stage          | actor has been moved off stage         | (actor)                  |
82
83
84 #### Touch event
85
86 Used to detect multiple touch events on the actor. The state of each touch point can be:
87 + "down"        = touch down
88 + "up"          = Touch up
89 + "motion"      = Finger dragged or hovered
90 + "leave"       =  Leave the boundary of an actor
91 + "stationary"  = No change from last event.  Useful when a multi-point event occurs where
92 all points are sent but indicates that this particular point has not changed since the last time
93 + "interrupted"  = A system event has occurred which has interrupted the touch or hover event sequence
94
95
96
97 ```
98 touchEvent = {
99   
100   pointCount: int,  // number of points touched ( multi-touch )
101   time: int,        // The time in milliseconds that the touch event occurred.
102   points = [ touchPoints ],    // array of TouchPoints, to support
103   
104   TouchPoint = {
105   
106     "deviceId" : int,      // Each touch point has a unique device ID
107     "state" : string,      // touch state ="down,up,motion,leave,stationary, interrupted }
108     "sourceActor" : actor, // the actor that is emitting the callback (the actor that is hit maybe a child of it)
109     "hitActor" : actor,    // actor that was hit
110     "local" :  {x,y},      // co-ordinates of top left of hit actor (local.x, local.y)
111     "screen" : {x,y}       // co-ordinates of top left of hit actor (screen.x, screen.y)
112     }
113 }
114
115 function OnPressed( actor, touchEvent )
116 {
117   var firstPoint = touchEvent.points[0];
118   log("first touch point = " + firstPoint.screen.x + "," +firstPoint.screen.x + "actor= "+firstPoint.hitActor );
119   
120   var anim = new dali.Animation( 4 );
121   var rotation = new dali.Rotation( 90, 0, 0 ); // pitch, yaw, roll
122   anim.animateBy( actor, "rotation", rotation );
123   anim.play();
124   return true;
125 }
126   
127 // connect to touch events
128 myActor.connect( "touched", onPressed );
129
130 ```
131
132 #### Hover event
133
134 ```
135 hoverEvent = {
136   
137   pointCount  // number of points hovered over
138   time        // The time in milliseconds that the hover event occurred.
139   points[]    // array of TouchPoints
140   
141   TouchPoint = {
142       // See touchEvent TouchPoint object
143   }
144 }
145 ```
146       // connect to touch events
147       myActor.connect( "hovered", onHover);
148
149 #### Mouse wheel event
150
151 ```
152 mouseWheelEvent = {
153   
154   direction,       // "vertical" or "horizontal" direction the wheel is being rolled
155   shiftPressed,    // boolean, shift key is held
156   ctrlPressed,     // boolean, ctrl key is held
157   altPressed,      // boolean, alt key is held
158   keyModifiers,    // bitmask of keys pressed
159   point {x,y},     // The co-ordinates of the mouse cursor relative to the top-left of the screen when the wheel is being rolled.
160   rolled,          // offset of mouse wheel rolling, positive = rolling down, negative = rolling up
161   timestamp        // The time in milliseconds that the mouse event occurred
162 }
163   
164 // connect to touch events
165 myActor.connect( "mouse-wheel-event", onMouseWheel );
166 ```
167 #### Key events
168
169 Key events are performed using the dali.stage object and dali.keyboardFocusManager.
170  - {{#crossLink "stage"}}Stage{{/crossLink}}
171
172
173 #### Multi-touch events
174
175 See
176  - {{#crossLink "MultiTouch"}}Multi Touch Events.{{/crossLink}}
177
178
179 ### Actor Properties
180
181  Name                   |    Type    | Writable     | Animatable
182 ------------------------|------------|--------------|-----------
183  anchorPoint            |VECTOR3     | &#10004;     | &#10008;
184  anchorPointX           |FLOAT       | &#10004;     | &#10008;
185  anchorPointY           |FLOAT       | &#10004;     | &#10008;
186  anchorPointZ           |FLOAT       | &#10004;     | &#10008;
187  size                   |VECTOR3     | &#10004;     | &#10004;
188  sizeWidth              |FLOAT       | &#10004;     | &#10004;
189  sizeHeight             |FLOAT       | &#10004;     | &#10004;
190  sizeDepth              |FLOAT       | &#10004;     | &#10004;
191  position               |VECTOR3     | &#10004;     | &#10004;
192  positionX              |FLOAT       | &#10004;     | &#10004;
193  positionY              |FLOAT       | &#10004;     | &#10004;
194  positionZ              |FLOAT       | &#10004;     | &#10004;
195  worldPosition          |VECTOR3     | &#10008;     | &#10008;
196  worldPositionX         |FLOAT       | &#10008;     | &#10008;
197  worldPositionY         |FLOAT       | &#10008;     | &#10008;
198  worldPositionZ         |FLOAT       | &#10008;     | &#10008;
199  orientation            |ROTATION    | &#10004;     | &#10004;
200  worldOrientation       |ROTATION    | &#10008;     | &#10008;
201  scale                  |VECTOR3     | &#10004;     | &#10004;
202  scaleX                 |FLOAT       | &#10004;     | &#10004;
203  scaleY                 |FLOAT       | &#10004;     | &#10004;
204  scaleZ                 |FLOAT       | &#10004;     | &#10004;
205  worldScale             |VECTOR3     | &#10008;     | &#10008;
206  visible                |BOOLEAN     | &#10004;     | &#10004;
207  color                  |VECTOR4     | &#10004;     | &#10004;
208  colorRed               |FLOAT       | &#10004;     | &#10004;
209  colorGreen             |FLOAT       | &#10004;     | &#10004;
210  colorBlue              |FLOAT       | &#10004;     | &#10004;
211  colorAlpha             |FLOAT       | &#10004;     | &#10004;
212  worldColor             |VECTOR4     | &#10008;     | &#10008;
213  worldMatrix            |MATRIX      | &#10008;     | &#10008;
214  name                   |STRING      | &#10004;     | &#10008;
215  sensitive              |BOOLEAN     | &#10004;     | &#10008;
216  leaveRequired          |BOOLEAN     | &#10004;     | &#10008;
217  inheritOrientation     |BOOLEAN     | &#10004;     | &#10008;
218  inheritScale           |BOOLEAN     | &#10004;     | &#10008;
219  colorMode              |NUMBER      | &#10004;     | &#10008;
220  positionInheritance    |NUMBER      | &#10004;     | &#10008;
221  drawMode               |NUMBER      | &#10004;     | &#10008;
222  sizeMode               |NUMBER      | &#10004;     | &#10008;
223  sizeModeFactor         |VECTOR3     | &#10004;     | &#10008;
224
225
226
227
228  * @class Actor
229  */
230
231
232 /**
233  * Actors parent origin
234  *
235  * @property parentOrigin
236  * @type dali Vector3
237  * @default TOP_LEFT (0.0, 0.0, 0.5).
238  */
239 parentOrigin
240
241 /**
242  * Actors parent origin X
243  *
244  * @property parentOriginX
245  * @readOnly
246  * @type Number
247  */
248 parent - origin - x
249
250 /**
251  * Actors parent origin-y
252  * @property parentOriginY
253  * @readOnly
254  * @type Number
255  */
256 parent - origin - y
257
258 /**
259  * Actors parent origin-z
260  * @property parentOriginZ
261  * @readOnly
262  * @type Number
263  */
264 parent - origin - z
265
266 /**
267  * Actors anchor point
268  * @property anchorPoint
269  * @type dali Vector3
270  * @default CENTER (0.5, 0.5, 0.5)
271  */
272 ANCHOR_POINT;
273
274 /**
275  * Actors anchor point x
276  * @property anchorPointX
277  * @type Number
278  */
279 ANCHOR_POINT_X
280
281 /**
282  * Actors anchor point y
283  * @property anchorPointY
284  * @type Number
285  */
286 ANCHOR_POINT_Y
287
288 /**
289  * Actors anchor point z
290  * @property anchorPointZ
291  * @type Number
292  */
293 ANCHOR_POINT_Z
294
295 /**
296  * Actors size
297  * @property size
298  * @type dali Vector3
299  */
300 SIZE
301
302
303 /**
304  * Actors width
305  * @property sizeWidth
306  * @type Number
307  */
308 SIZE_WIDTH
309
310 /**
311  * Actors height
312  * @property sizeHeight
313  * @type Number
314  */
315 SIZE_HEIGHT
316
317 /**
318  * Actors depth
319  * @property sizeDepth
320  * @type Number
321  */
322 SIZE_DEPTH
323
324
325 /**
326  * Actors position
327  * @property position
328  * @type dali Vector3
329  */
330 POSITION
331
332 /**
333  * Actors x position
334  * @property positionX
335  * @type Number
336  */
337 POSITION_X
338
339 /**
340  * Actors y position
341  * @property positionY
342  * @type Number
343  */
344 POSITION_Y
345
346 /**
347  * Actors z position
348  * @property positionZ
349  * @type Number
350  */
351 POSITION_Z
352
353
354 /**
355  * Actors world position
356  * @property position
357  * @type dali Vector3  ( read-only, not animatable )
358  */
359 WORLD_POSITION
360
361 /**
362  * Actors world x position
363  * @property worldPositionX
364  * @type Number ( read-only )
365  */
366 WORLD_POSITION_X
367
368 /**
369  * Actors world y position
370  * @property worldPositionY
371  * @type Number ( read-only )
372  */
373 WORLD_POSITION_Y
374
375 /**
376  * Actors world z position
377  * @property worldPositionZ
378  * @type Number ( read-only )
379  */
380 WORLD_POSITION_Z
381
382
383 /**
384  * Actors orientation
385  * @property orientation
386  * @type dali orientation object
387  */
388 ORIENTATION
389
390
391 /**
392  * Actors world-orientation
393  * @property worldOrientation
394  * @type dali Orientation object ( read only)
395  */
396 WORLD_ORIENTATION
397
398 /**
399  * Actors scale
400  * @property scale
401  * @type dali Vector3
402  */
403 SCALE
404
405 /**
406  * Actors x scale
407  * @property scaleX
408  * @type Number
409  */
410 SCALE_X
411
412 /**
413  * Actors y scale
414  * @property scaleY
415  * @type Number
416  */
417 SCALE_Y
418
419 /**
420  * Actors z scale
421  * @property scaleZ
422  * @type Number
423  */
424 SCALE_Z
425
426 /**
427  * Actors world scale
428  * @property worldScale
429  * @type dali Vector3 ( read only )
430  */
431 WORLD_SCALE
432
433 /**
434  * Actors visible flag
435  * If an actor is not visible, then the actor and its children will not be rendered.
436  * This is regardless of the individual visibility values of the children i.e. an actor will only be
437  * rendered if all of its parents have visibility set to true.
438  *
439  * @property visible
440  * @type Boolean
441  */
442 VISIBLE
443
444 /**
445  * Actors color.
446  * The final color of the actor depends on its color mode.
447  * 4 components, red, green, blue and alpha. Each range from 0..1
448  * @property color
449  * @type dali Vector 4
450  */
451 COLOR
452
453 /**
454  * Actors red color
455  * @property colorRed
456  * @type Number  ( 0..1)
457  */
458 COLOR_RED
459
460 /**
461  * Actors green color
462  * @property colorGreen
463  * @type Number  ( 0..1)
464  */
465 COLOR_GREEN
466
467 /**
468  * Actors blue color
469  * @property colorBlue
470  * @type Number  ( 0..1)
471  */
472 COLOR_BLUE
473
474 /**
475  * Actors world color.
476  * 4 components, red, green, blue and alpha. Each range from 0..1
477  * @property worldColor
478  * @type dali Vector 4 ( read only)
479  */
480 WORLD_COLOR
481
482 /**
483  * Actors name
484  * @property name
485  * @type String
486  */
487
488 /**
489  * Actors sensitive flag
490  * brief Sets whether an actor should emit touch event signals; @see SignalTouched().
491  *
492  * An actor is sensitive by default, which means that as soon as an application connects to the SignalTouched(),
493  * the touch event signal will be emitted.
494  *
495  * If the application wishes to temporarily disable the touch event signal emission, then they can do so by calling
496  *
497  *    actor.sensitve = false;
498  *
499  * Then, to re-enable the touch event signal emission, the application should call:
500  *
501  *    actor.sensitive = true;
502  *
503  * @property sensitive
504  * @type Boolean
505  * @default true ( is sensistive )
506  */
507 SENSITIVE
508
509 /**
510  * Controls whether the actor should receive a notification when touch motion events leave
511  * the boundary of the actor.
512  *
513  * Note: Need to connect to the SignalTouch to actually receive this event.
514  *  Should be set to true if a Leave event is required
515  * @type Boolean
516  * @property leaveRequired
517  * @default false, this is set to false as most actors do not require this.
518  */
519 LEAVE_REQUIRED
520
521 /**
522  * Set whether a child actor inherits it's parent's orientation.
523  * @type Boolean
524  * @property inheritOrientation
525  * @default true
526  */
527 INHERIT_ORIENTATION,
528
529
530 /**
531  * Set whether a child actor inherits it's parent's scale.
532  * @type Boolean
533  * @property inheritScale
534  * @default true
535  */
536 INHERIT_SCALE,
537
538
539 /**
540  * Set how the actor and its children should be drawn.
541  *
542  * Not all actors are renderable, but DrawMode can be inherited from any actor.
543  * By default a renderable actor will be drawn as a 3D object. It will be depth-tested against
544  * other objects in the world i.e. it may be obscured if other objects are in front.
545  *
546  * If OVERLAY is used, the actor and its children will be drawn as a 2D overlay.
547  * Overlay actors are drawn in a separate pass, after all non-overlay actors within the Layer.
548  * For overlay actors, the drawing order is determined by the hierachy (depth-first search order),
549  * and depth-testing will not be used.
550  *
551  * If STENCIL is used, the actor and its children will be used to stencil-test other actors
552  * within the Layer. Stencil actors are therefore drawn into the stencil buffer before any other
553  * actors within the Layer.
554  *
555  * @example
556  *
557  *      var actor.drawMode = dali.DRAW_MODE_NORMAL;  // binary 00. The default draw-mode
558  *      var actor.drawMode = dali.DRAW_MODE_OVERLAY; // binary 01. Draw the actor and its children as an overlay
559  *      var actor.drawMode = dali.DRAW_MODE_STENCIL ;// binary 11. Draw the actor and its children into the stencil buffer
560  *
561  *
562  * @type Number
563  * @property drawMode
564  * @default 0 (Normal )
565  */
566 DRAW_MODE,
567
568
569 /**
570  * Sets the actor's color mode.
571  *
572  * This specifies whether the Actor uses its own color, or inherits
573  * its parent color. The default is USE_OWN_MULTIPLY_PARENT_ALPHA.
574  *
575  * @example
576  *    actor.colorMode = dali.COLOR_MODE_USE_OWN_COLOR; // Actor will use its own color
577  *    actor.colorMode = dali.COLOR_MODE_USE_PARENT_COLOR;  // Actor will use its parent color
578  *    actor.colorMode = dali. COLOR_MODE_USE_OWN_MULTIPLY_PARENT_COLOR; // Actor will blend its color with its parents color.
579  *    actor.colorMode = dali.COLOR_MODE_USE_OWN_MULTIPLY_PARENT_ALPHA ;  // Actor will blend its alpha with its parents alpha. This means when parent fades in or out child does as well. This is the default.
580  *
581  *
582  * @type Number
583  * @property colorMode
584  * @default 2 (USE_OWN_MULTIPLY_PARENT_ALPHA )
585  */
586 COLOR_MODE
587
588 /**
589  * Set the actors position inheritance mode.
590  *
591  * @example
592  *    actor.positionInheritance = dali.POSITION_INHERITANCE_INHERIT_PARENT_POSITION;  // Actor will inherit its parent position. This is the default
593  *    actor.positionInheritance = dali.POSITION_INHERITANCE_USE_PARENT_POSITION;      // Actor will copy its parent position. This is useful if many actors are stacked together in the same place. This option ignores parent origin and anchor point.
594  *    actor.positionInheritance = dali.POSITION_INHERITANCE_USE_PARENT_POSITION_PLUS_LOCAL_POSITION; // Actor will copy its parent position and add local position. This is useful if many actors are stacked together in the same place with an offset.  This option ignores parent origin and anchor point.
595  *    actor.positionInheritance = dali.POSITION_INHERITANCE_DONT_INHERIT_POSITION;           // Actor will not inherit position. Local position is treated as world position. This is useful if a constraint is used to override local position or if an actor is positioned globally. This option ignores parent origin, anchor point and local position.
596  *
597  * Switching this off means that using SetPosition() sets the actor's world position.
598  * @type Number
599  * @property positionInheritance
600  * @default 0 (INHERIT_PARENT_POSITION )
601  */
602 POSTITION_INHERITANCE
603
604
605 /**
606  *  Defines how a child actor's size is affected by its parent's size.
607  *
608  * The default is to ignore the parent's size and use the size property of this actor.
609  *
610  * If USE_OWN_SIZE is used, this option is bypassed and the actor's size
611  *     property is used.
612  *
613  * If SIZE_EQUAL_TO_PARENT is used, this actor's size will be equal to that
614  *     of its parent. The actor's size property is ignored.
615  *
616  * If SIZE_RELATIVE_TO_PARENT is used, this actor's size will be based on
617  *     its parent's size by multiplying the parent size by
618  *     SizeModeFactor.
619  *
620  * If SIZE_FIXED_OFFSET_FROM_PARENT is used, this actor's size will be based on
621  *     its parent's size plus SizeModeFactor.
622  *
623  *
624  * @example
625  *    actor.sizeMode = dali.USE_OWN_SIZE;
626  *    actor.sizeMode = dali.SIZE_EQUAL_TO_PARENT;
627  *    actor.sizeMode = dali.SIZE_RELATIVE_TO_PARENT;
628  *    actor.sizeMode = dali.SIZE_FIXED_OFFSET_FROM_PARENT
629  *
630  * @type Number
631  * @property sizeMode
632  * @default 0 (dali.SIZE_MODE_USE_OWN_SIZE; )
633  */
634  SIZE_MODE
635
636 /**
637  *
638  * @brief Sets the relative to parent size factor of the actor.
639  *
640  * This factor is only used when SizeMode is set to either:
641  * SIZE_RELATIVE_TO_PARENT or SIZE_FIXED_OFFSET_FROM_PARENT.
642  * This actor's size is set to the actor's parent size multipled by or added to this factor,
643  * depending on SideMode (See SetSizeMode).
644  * @type Vector3
645  * @property sizeModeFactor
646  */
647 SIZE_MODE_FACTOR