1 #ifndef DALI_INTERNAL_HOVER_EVENT_H
2 #define DALI_INTERNAL_HOVER_EVENT_H
5 * Copyright (c) 2021 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/devel-api/events/touch-point.h>
23 #include <dali/integration-api/events/point.h>
24 #include <dali/public-api/common/vector-wrapper.h>
25 #include <dali/public-api/events/hover-event.h>
26 #include <dali/public-api/object/base-object.h>
33 using HoverEventPtr = IntrusivePtr<HoverEvent>;
36 * @copydoc Dali::HoverEvent
38 class HoverEvent : public BaseObject
41 // Construction & Destruction
44 * @brief Default constructor
50 * @param[in] time The time the event occurred
52 HoverEvent(unsigned long time);
55 * @brief Clones the HoverEvent object.
57 * Required because base class copy constructor is not implemented.
58 * @param[in] rhs The HoverEvent to clone from.
59 * @return A new HoverEvent object which is has the same hover event data.
61 static HoverEventPtr Clone(const HoverEvent& rhs);
66 * @copydoc Dali::HoverEvent::GetTime()
68 unsigned long GetTime() const;
71 * @copydoc Dali::HoverEvent::GetPointCount()
73 std::size_t GetPointCount() const;
76 * @copydoc Dali::HoverEvent::GetDeviceId()
78 int32_t GetDeviceId(std::size_t point) const;
81 * @copydoc Dali::HoverEvent::GetGetState()
83 PointState::Type GetState(std::size_t point) const;
86 * @copydoc Dali::HoverEvent::GetHitActor()
88 Dali::Actor GetHitActor(std::size_t point) const;
91 * @copydoc Dali::HoverEvent::GetLocalPosition()
93 const Vector2& GetLocalPosition(std::size_t point) const;
96 * @copydoc Dali::HoverEvent::GetScreenPosition()
98 const Vector2& GetScreenPosition(std::size_t point) const;
101 * @brief Returns a const reference to a point at the index requested.
103 * The first point in the set is always the primary point (i.e. the first point touched in a multi-touch event).
105 * @param[in] point The index of the required Point.
106 * @return A const reference to the Point at the position requested
107 * @note point should be less than the value returned by GetPointCount(). Will assert if out of range.
109 const Integration::Point& GetPoint(std::size_t point) const;
112 * @brief Returns a reference to a point at the index requested.
114 * The first point in the set is always the primary point (i.e. the first point touched in a multi-touch event).
116 * @param[in] point The index of the required Point.
117 * @return A reference to the Point at the position requested
118 * @note point should be less than the value returned by GetPointCount(). Will assert if out of range.
120 Integration::Point& GetPoint(std::size_t point);
125 * @brief Adds a point to this hover event.
126 * @param[in] point The point to add to the hover event.
128 void AddPoint(const Integration::Point& point);
134 * A reference counted object may only be deleted by calling Unreference()
136 ~HoverEvent() override = default;
138 // Not copyable or movable
140 HoverEvent(const HoverEvent& rhs) = delete; ///< Deleted copy constructor
141 HoverEvent(HoverEvent&& rhs) = delete; ///< Deleted move constructor
142 HoverEvent& operator=(const HoverEvent& rhs) = delete; ///< Deleted copy assignment operator
143 HoverEvent& operator=(HoverEvent&& rhs) = delete; ///< Deleted move assignment operator
146 std::vector<Integration::Point> mPoints; ///< Container of the points for this hover event
147 unsigned long mTime; ///< The time (in ms) that the hover event occurred
150 } // namespace Internal
152 // Helpers for public-api forwarding methods
154 inline Internal::HoverEvent& GetImplementation(Dali::HoverEvent& hoverEvent)
156 DALI_ASSERT_ALWAYS(hoverEvent && "Hover Event handle is empty");
158 BaseObject& object = hoverEvent.GetBaseObject();
160 return static_cast<Internal::HoverEvent&>(object);
163 inline const Internal::HoverEvent& GetImplementation(const Dali::HoverEvent& hoverEvent)
165 DALI_ASSERT_ALWAYS(hoverEvent && "Hover Event handle is empty");
167 const BaseObject& object = hoverEvent.GetBaseObject();
169 return static_cast<const Internal::HoverEvent&>(object);
174 #endif // DALI_INTERNAL_HOVER_EVENT_H