Tizen 2.4.0 rev3 SDK Public Release
[framework/graphics/dali.git] / dali / public-api / events / touch-point.h
1 #ifndef __DALI_TOUCH_POINT_H__
2 #define __DALI_TOUCH_POINT_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/math/vector2.h>
24
25 namespace Dali
26 {
27 /**
28  * @addtogroup dali_core_events
29  * @{
30  */
31
32 /**
33  * @brief A TouchPoint represents a point on the screen that is currently being touched
34  * or where touch has stopped.
35  * @since_tizen 2.4
36  */
37 struct DALI_IMPORT_API TouchPoint
38 {
39   // Enumerations
40
41   /**
42    * @brief Touch state
43    * @since_tizen 2.4
44    */
45   enum State
46   {
47     Started,        /**< Touch or hover started */
48     Finished,       /**< Touch or hover finished */
49     Down = Started, /**< Screen touched */
50     Up = Finished,  /**< Touch stopped */
51     Motion,         /**< Finger dragged or hovered */
52     Leave,          /**< Leave the boundary of an actor */
53     Stationary,     /**< No change from last event.  Useful when a multi-point event occurs where
54                          all points are sent but indicates that this particular point has not changed
55                          since the last time */
56     Interrupted,    /**< A system event has occurred which has interrupted the touch or hover event sequence. */
57     Last            /**< Number of states. */
58   };
59
60   // Construction & Destruction
61
62   /**
63    * @brief Constructor
64    *
65    * @since_tizen 2.4
66    * @param[in]  id       The touch device ID.
67    * @param[in]  state    The state.
68    * @param[in]  screenX  The X co-ordinate relative to the screen's origin.
69    * @param[in]  screenY  The Y co-ordinate relative to the screen's origin.
70    */
71   TouchPoint(int id, State state, float screenX, float screenY);
72
73   /**
74    * @brief Constructor
75    *
76    * @since_tizen 2.4
77    * @param[in]  id       The touch device ID.
78    * @param[in]  state    The state.
79    * @param[in]  screenX  The X co-ordinate relative to the screen's origin.
80    * @param[in]  screenY  The Y co-ordinate relative to the screen's origin.
81    * @param[in]  localX   The X co-ordinate relative to the top-left (0.0, 0.0, 0.5) of the actor.
82    * @param[in]  localY   The Y co-ordinate relative to the top-left (0.0, 0.0, 0.5) of the actor.
83    */
84   TouchPoint(int id, State state, float screenX, float screenY, float localX, float localY);
85
86   /**
87    * @brief Destructor
88    * @since_tizen 2.4
89    */
90   ~TouchPoint();
91
92   // Data
93
94   /**
95    * @brief Each touch point has a unique device ID which specifies the touch device for that point.
96    */
97   int deviceId;
98
99   /**
100    * @brief State of the point.
101    *
102    * @see State
103    */
104   State state;
105
106   /**
107    * @brief The actor that was underneath the touch point.
108    */
109   Actor hitActor;
110
111   /**
112    * @brief The co-ordinates relative to the top-left of the hit-actor.
113    *
114    * @note The top-left of an actor is (0.0, 0.0, 0.5).
115    * @note If you require the local coordinates of another actor (e.g the parent of the hit actor),
116    * then you should use Actor::ScreenToLocal().
117    */
118   Vector2 local;
119
120   /**
121    * @brief The co-ordinates relative to the top-left of the screen.
122    */
123   Vector2 screen;
124 };
125
126 typedef std::vector<TouchPoint> TouchPointContainer; ///< Container of touch points. @since_tizen 2.4
127 typedef TouchPointContainer::iterator TouchPointContainerIterator; ///< Iterator for Dali::TouchPointContainer @since_tizen 2.4
128 typedef TouchPointContainer::const_iterator TouchPointContainerConstIterator; ///< Const iterator for Dali::TouchPointContainer @since_tizen 2.4
129
130 /**
131  * @}
132  */
133 } // namespace Dali
134
135 #endif // __DALI_TOUCH_POINT_H__