Use modern construct 'using' instead of typedef.
[platform/core/uifw/dali-core.git] / dali / internal / event / events / hover-event-impl.h
1 #ifndef DALI_INTERNAL_HOVER_EVENT_H
2 #define DALI_INTERNAL_HOVER_EVENT_H
3
4 /*
5  * Copyright (c) 2020 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/common/vector-wrapper.h>
23 #include <dali/public-api/events/hover-event.h>
24 #include <dali/devel-api/events/touch-point.h>
25 #include <dali/public-api/object/base-object.h>
26 #include <dali/integration-api/events/point.h>
27
28 namespace Dali
29 {
30
31 namespace Internal
32 {
33
34 class HoverEvent;
35 using HoverEventPtr = IntrusivePtr<HoverEvent>;
36
37 /**
38  * @copydoc Dali::HoverEvent
39  */
40 class HoverEvent : public BaseObject
41 {
42 public:
43
44   // Construction & Destruction
45
46   /**
47    * @brief Default constructor
48    */
49   HoverEvent();
50
51   /**
52    * @brief Constructor
53    * @param[in]  time  The time the event occurred
54    */
55   HoverEvent( unsigned long time );
56
57   /**
58    * @brief Clones the HoverEvent object.
59    *
60    * Required because base class copy constructor is not implemented.
61    * @param[in] rhs The HoverEvent to clone from.
62    * @return A new HoverEvent object which is has the same hover event data.
63    */
64   static HoverEventPtr Clone( const HoverEvent& rhs );
65
66   // Getters
67
68   /**
69    * @copydoc Dali::HoverEvent::GetTime()
70    */
71   unsigned long GetTime() const;
72
73   /**
74    * @copydoc Dali::HoverEvent::GetPointCount()
75    */
76   std::size_t GetPointCount() const;
77
78   /**
79    * @copydoc Dali::HoverEvent::GetDeviceId()
80    */
81   int32_t GetDeviceId( std::size_t point ) const;
82
83   /**
84    * @copydoc Dali::HoverEvent::GetGetState()
85    */
86   PointState::Type GetState( std::size_t point  ) const;
87
88   /**
89    * @copydoc Dali::HoverEvent::GetHitActor()
90    */
91   Dali::Actor GetHitActor( std::size_t point ) const;
92
93   /**
94    * @copydoc Dali::HoverEvent::GetLocalPosition()
95    */
96   const Vector2& GetLocalPosition( std::size_t point ) const;
97
98   /**
99    * @copydoc Dali::HoverEvent::GetScreenPosition()
100    */
101   const Vector2& GetScreenPosition( std::size_t point ) const;
102
103   /**
104    * @brief Returns a const reference to a point at the index requested.
105    *
106    * The first point in the set is always the primary point (i.e. the first point touched in a multi-touch event).
107    *
108    * @param[in] point The index of the required Point.
109    * @return A const reference to the Point at the position requested
110    * @note point should be less than the value returned by GetPointCount(). Will assert if out of range.
111    */
112   const Integration::Point& GetPoint( std::size_t point ) const;
113
114   /**
115    * @brief Returns a reference to a point at the index requested.
116    *
117    * The first point in the set is always the primary point (i.e. the first point touched in a multi-touch event).
118    *
119    * @param[in] point The index of the required Point.
120    * @return A reference to the Point at the position requested
121    * @note point should be less than the value returned by GetPointCount(). Will assert if out of range.
122    */
123   Integration::Point& GetPoint( std::size_t point );
124
125   // Setters
126
127   /**
128    * @brief Adds a point to this hover event.
129    * @param[in]  point  The point to add to the hover event.
130    */
131   void AddPoint( const Integration::Point& point );
132
133 private:
134
135   /**
136    * @brief Destructor
137    *
138    * A reference counted object may only be deleted by calling Unreference()
139    */
140   virtual ~HoverEvent() = default;
141
142   // Not copyable or movable
143
144   HoverEvent( const HoverEvent& rhs ) = delete;             ///< Deleted copy constructor
145   HoverEvent( HoverEvent&& rhs ) = delete;                  ///< Deleted move constructor
146   HoverEvent& operator=( const HoverEvent& rhs ) = delete;  ///< Deleted copy assignment operator
147   HoverEvent& operator=( HoverEvent&& rhs ) = delete;       ///< Deleted move assignment operator
148
149 private:
150
151   std::vector< Integration::Point > mPoints; ///< Container of the points for this hover event
152   unsigned long mTime;                       ///< The time (in ms) that the hover event occurred
153 };
154
155 } // namespace Internal
156
157 // Helpers for public-api forwarding methods
158
159 inline Internal::HoverEvent& GetImplementation( Dali::HoverEvent& hoverEvent )
160 {
161   DALI_ASSERT_ALWAYS( hoverEvent && "Hover Event handle is empty" );
162
163   BaseObject& object = hoverEvent.GetBaseObject();
164
165   return static_cast< Internal::HoverEvent& >( object );
166 }
167
168 inline const Internal::HoverEvent& GetImplementation( const Dali::HoverEvent& hoverEvent )
169 {
170   DALI_ASSERT_ALWAYS( hoverEvent && "Hover Event handle is empty" );
171
172   const BaseObject& object = hoverEvent.GetBaseObject();
173
174   return static_cast< const Internal::HoverEvent& >( object );
175 }
176
177 } // namespace Dali
178
179 #endif // DALI_INTERNAL_HOVER_EVENT_H