| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_EVENTS_GESTURE_DETECTION_UI_MOTION_EVENT_GENERIC_H_ |
| #define UI_EVENTS_GESTURE_DETECTION_UI_MOTION_EVENT_GENERIC_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/containers/stack_container.h" |
| #include "base/memory/scoped_vector.h" |
| #include "ui/events/gesture_detection/gesture_detection_export.h" |
| #include "ui/events/gesture_detection/motion_event.h" |
| |
| namespace ui { |
| |
| struct GESTURE_DETECTION_EXPORT PointerProperties { |
| PointerProperties(); |
| PointerProperties(float x, float y, float touch_major); |
| PointerProperties(const MotionEvent& event, size_t pointer_index); |
| |
| // Sets |touch_major|, |touch_minor|, and |orientation| from the given radius |
| // and rotation angle (in degrees). |
| void SetAxesAndOrientation(float radius_x, |
| float radius_y, |
| float rotation_angle_degree); |
| |
| int id; |
| MotionEvent::ToolType tool_type; |
| float x; |
| float y; |
| float raw_x; |
| float raw_y; |
| float pressure; |
| float touch_major; |
| float touch_minor; |
| float orientation; |
| // source_device_id is only used on Aura. |
| int source_device_id; |
| }; |
| |
| // A generic MotionEvent implementation. |
| class GESTURE_DETECTION_EXPORT MotionEventGeneric : public MotionEvent { |
| public: |
| MotionEventGeneric(Action action, |
| base::TimeTicks event_time, |
| const PointerProperties& pointer); |
| MotionEventGeneric(const MotionEventGeneric& other); |
| |
| ~MotionEventGeneric() override; |
| |
| // MotionEvent implementation. |
| uint32 GetUniqueEventId() const override; |
| Action GetAction() const override; |
| int GetActionIndex() const override; |
| size_t GetPointerCount() const override; |
| int GetPointerId(size_t pointer_index) const override; |
| float GetX(size_t pointer_index) const override; |
| float GetY(size_t pointer_index) const override; |
| float GetRawX(size_t pointer_index) const override; |
| float GetRawY(size_t pointer_index) const override; |
| float GetTouchMajor(size_t pointer_index) const override; |
| float GetTouchMinor(size_t pointer_index) const override; |
| float GetOrientation(size_t pointer_index) const override; |
| float GetPressure(size_t pointer_index) const override; |
| ToolType GetToolType(size_t pointer_index) const override; |
| int GetButtonState() const override; |
| int GetFlags() const override; |
| base::TimeTicks GetEventTime() const override; |
| size_t GetHistorySize() const override; |
| base::TimeTicks GetHistoricalEventTime( |
| size_t historical_index) const override; |
| float GetHistoricalTouchMajor(size_t pointer_index, |
| size_t historical_index) const override; |
| float GetHistoricalX(size_t pointer_index, |
| size_t historical_index) const override; |
| float GetHistoricalY(size_t pointer_index, |
| size_t historical_index) const override; |
| |
| // Adds |pointer| to the set of pointers returning the index it was added at. |
| size_t PushPointer(const PointerProperties& pointer); |
| |
| // Removes the PointerProperties at |index|. |
| void RemovePointerAt(size_t index); |
| |
| PointerProperties& pointer(size_t index) { return pointers_[index]; } |
| const PointerProperties& pointer(size_t index) const { |
| return pointers_[index]; |
| } |
| |
| // Add an event to the history. |this| and |event| must have the same pointer |
| // count and must both have an action of ACTION_MOVE. |
| void PushHistoricalEvent(scoped_ptr<MotionEvent> event); |
| |
| void set_action(Action action) { action_ = action; } |
| void set_event_time(base::TimeTicks event_time) { event_time_ = event_time; } |
| void set_unique_event_id(uint32 unique_event_id) { |
| unique_event_id_ = unique_event_id; |
| } |
| void set_action_index(int action_index) { action_index_ = action_index; } |
| void set_button_state(int button_state) { button_state_ = button_state; } |
| void set_flags(int flags) { flags_ = flags; } |
| |
| static scoped_ptr<MotionEventGeneric> CloneEvent(const MotionEvent& event); |
| static scoped_ptr<MotionEventGeneric> CancelEvent(const MotionEvent& event); |
| |
| protected: |
| MotionEventGeneric(); |
| MotionEventGeneric(const MotionEvent& event, bool with_history); |
| MotionEventGeneric& operator=(const MotionEventGeneric& other); |
| |
| void PopPointer(); |
| |
| private: |
| enum { kTypicalMaxPointerCount = 5 }; |
| |
| Action action_; |
| base::TimeTicks event_time_; |
| uint32 unique_event_id_; |
| int action_index_; |
| int button_state_; |
| int flags_; |
| base::StackVector<PointerProperties, kTypicalMaxPointerCount> pointers_; |
| ScopedVector<MotionEvent> historical_events_; |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_EVENTS_GESTURE_DETECTION_UI_MOTION_EVENT_GENERIC_H_ |