1 #ifndef __DALI_INTEGRATION_POINT_H__
2 #define __DALI_INTEGRATION_POINT_H__
5 * Copyright (c) 2018 Samsung Electronics Co., Ltd.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <dali/public-api/events/point-state.h>
23 #include <dali/public-api/math/degree.h>
24 #include <dali/public-api/math/vector2.h>
25 #include <dali/public-api/events/touch-point.h>
26 #include <dali/public-api/events/device.h>
27 #include <dali/devel-api/events/mouse-button.h>
36 * @brief A Point represents a point on the screen that is currently being touched or where touch has stopped.
38 struct DALI_CORE_API Point
41 * @brief Default Constructor
46 * @brief Constructor which creates a Point instance from a TouchPoint.
47 * @param[in] touchPoint The touch-point to copy from.
49 explicit Point( const TouchPoint& touchPoint );
57 * @brief Set the Unique Device ID.
59 * Each touch point has a unique device ID which specifies the touch device for that point.
61 * @param[in] deviceId The Unique Device ID.
63 void SetDeviceId( int32_t deviceId );
66 * @brief Set the state of the point.
67 * @param[in] state The state of the point.
69 void SetState( PointState::Type state );
72 * @brief Set the screen position of the point from the top-left of the screen.
73 * @param[in] screenPosition The screen position of the point from the top-left of the screen.
75 void SetScreenPosition( const Vector2& screenPosition );
78 * @brief Set the radius of the press point.
80 * This is the average of both the horizontal and vertical radii of the press point.
81 * @param[in] radius The average of both the horizontal and vertical radii.
83 void SetRadius( float radius );
86 * @brief Set the radius of the press point as an ellipse.
87 * @param[in] radius The average of both the horizontal and vertical radii.
88 * @param[in] ellipseRadius The horizontal and vertical radii of the press point (different if an ellipse).
90 void SetRadius( float radius, Vector2 ellipseRadius );
93 * @brief Sets the touch pressure.
95 * The pressure range starts at 0.0f.
96 * Normal pressure is defined as 1.0f.
97 * A value between 0.0f and 1.0f means light pressure has been applied.
98 * A value greater than 1.0f means more pressure than normal has been applied.
100 * @param[in] pressure The touch pressure.
102 void SetPressure( float pressure );
105 * @brief Sets the angle of the press point relative to the Y-Axis.
106 * @param[in] angle The angle of the press point relative to the Y-Axis.
108 void SetAngle( Degree angle );
111 * @brief Sets the class of the device for the event
112 * @param[in] deviceClass The class of the device.
114 void SetDeviceClass( Device::Class::Type deviceClass );
117 * @brief Sets the subclass of the device for the event
118 * @param[in] deviceSubclass The subclass of the device.
120 void SetDeviceSubclass( Device::Subclass::Type deviceSubclass );
123 * @brief Retrieve the Unique Device ID of the point.
124 * @return The Unique Device ID of the point.
126 int GetDeviceId() const;
129 * @brief Retrieve the state of the point.
130 * @return The state of the point.
132 PointState::Type GetState() const;
135 * @brief Retrieve the screen position from the top-left of the screen.
136 * @return The screen position from the top-left of the screen.
138 const Vector2& GetScreenPosition() const;
141 * @brief Retrieve the radius of the press point.
142 * @return The radius of the press point.
143 * @see SetRadius(float)
144 * @see SetRadius(float,Vector2)
146 float GetRadius() const;
149 * @brief Retrieve BOTH the horizontal and the vertical radii of the press point.
150 * @return The radius of the press point.
151 * @see SetRadius(float)
152 * @see SetRadius(float,Vector2)
154 const Vector2& GetEllipseRadius() const;
157 * @brief Retrieves the touch pressure.
159 * @return The touch pressure.
162 float GetPressure() const;
165 * @brief Retrieve the angle of the press point relative to the Y-Axis.
166 * @return The angle of the press point.
168 Degree GetAngle() const;
171 * @brief Retrieve the class of the device for the event.
172 * @return The class of the device
174 Device::Class::Type GetDeviceClass() const;
177 * @brief Retrieve the subclass of the device for the event.
178 * @return The subclass of the device
180 Device::Subclass::Type GetDeviceSubclass() const;
183 * @brief Get Mouse Button value. (ex: right/left button)
184 * @return The mouse button value.
186 MouseButton::Type GetMouseButton() const;
189 * @brief Set Mouse Button value. (ex: right/left button)
191 void SetMouseButton(MouseButton::Type button);
194 public: // Not intended for Integration API developers
197 * @brief Sets the hit actor under this point.
198 * @param[in] hitActor The hit actor.
200 DALI_INTERNAL void SetHitActor( Actor hitActor );
203 * @brief Set the co-ordinates relative to the top-left of the hit-actor.
204 * @param[in] localPosition The local position.
205 * @note The top-left of an actor is (0.0, 0.0, 0.5).
207 DALI_INTERNAL void SetLocalPosition( const Vector2& localPosition );
210 * @brief Retrieve the Hit Actor.
211 * @return The hit actor.
213 DALI_INTERNAL Actor GetHitActor() const;
216 * @brief Retrieve the local position relative to the top-left of the hit-actor.
217 * @return The local position.
218 * @note The top-left of an actor is (0.0, 0.0, 0.5).
220 DALI_INTERNAL const Vector2& GetLocalPosition() const;
223 * @brief Retrieve the touch point equivalent of this point for old API.
224 * @return The touch point equivalent.
226 DALI_INTERNAL const TouchPoint& GetTouchPoint() const;
230 TouchPoint mTouchPoint; ///< Stores screen position, device Id, local & screen positions and the hit-actor. @see TouchPoint
231 Vector2 mEllipseRadius; ///< Radius of both the horizontal and vertical radius (useful if an ellipse).
232 Degree mAngle; ///< The angle of the press point, relative to the Y-Axis.
233 Device::Class::Type mDeviceClass;
234 Device::Subclass::Type mDeviceSubclass;
235 float mPressure; ///< The touch pressure.
236 float mRadius; ///< Radius of the press point, an average of the ellipse radius.
237 MouseButton::Type mMouseButton; /// < mouse button value.
240 } // namespace Integration
244 #endif // __DALI_TOUCH_POINT_H__