| // 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_H_ |
| #define UI_EVENTS_GESTURE_DETECTION_UI_MOTION_EVENT_H_ |
| |
| #include "ui/events/gesture_detection/motion_event.h" |
| |
| #include <map> |
| |
| #include "base/memory/scoped_ptr.h" |
| #include "base/time/time.h" |
| #include "ui/events/event.h" |
| #include "ui/events/events_export.h" |
| #include "ui/events/gestures/gesture_sequence.h" |
| |
| namespace ui { |
| |
| // Implementation of MotionEvent which takes a stream of ui::TouchEvents. |
| class EVENTS_EXPORT MotionEventAura : public MotionEvent { |
| public: |
| MotionEventAura(); |
| virtual ~MotionEventAura(); |
| |
| void OnTouch(const TouchEvent& touch); |
| |
| // MotionEvent implementation. |
| virtual int GetId() const OVERRIDE; |
| virtual Action GetAction() const OVERRIDE; |
| virtual int GetActionIndex() const OVERRIDE; |
| virtual size_t GetPointerCount() const OVERRIDE; |
| virtual int GetPointerId(size_t pointer_index) const OVERRIDE; |
| virtual float GetX(size_t pointer_index) const OVERRIDE; |
| virtual float GetY(size_t pointer_index) const OVERRIDE; |
| virtual float GetRawX(size_t pointer_index) const OVERRIDE; |
| virtual float GetRawY(size_t pointer_index) const OVERRIDE; |
| virtual float GetTouchMajor(size_t pointer_index) const OVERRIDE; |
| virtual float GetPressure(size_t pointer_index) const OVERRIDE; |
| virtual base::TimeTicks GetEventTime() const OVERRIDE; |
| |
| virtual size_t GetHistorySize() const OVERRIDE; |
| virtual base::TimeTicks GetHistoricalEventTime(size_t historical_index) const |
| OVERRIDE; |
| virtual float GetHistoricalTouchMajor(size_t pointer_index, |
| size_t historical_index) const OVERRIDE; |
| virtual float GetHistoricalX(size_t pointer_index, |
| size_t historical_index) const OVERRIDE; |
| virtual float GetHistoricalY(size_t pointer_index, |
| size_t historical_index) const OVERRIDE; |
| virtual ToolType GetToolType(size_t pointer_index) const OVERRIDE; |
| virtual int GetButtonState() const OVERRIDE; |
| |
| virtual scoped_ptr<MotionEvent> Clone() const OVERRIDE; |
| virtual scoped_ptr<MotionEvent> Cancel() const OVERRIDE; |
| |
| int GetSourceDeviceId(size_t pointer_index) const; |
| |
| // We can't cleanup removed touch points immediately upon receipt of a |
| // TouchCancel or TouchRelease, as the MotionEvent needs to be able to report |
| // information about those touch events. Once the MotionEvent has been |
| // processed, we call CleanupRemovedTouchPoints to do the required |
| // book-keeping. |
| void CleanupRemovedTouchPoints(const TouchEvent& event); |
| |
| private: |
| struct PointData { |
| PointData(); |
| float x; |
| float y; |
| float raw_x; |
| float raw_y; |
| int touch_id; |
| float pressure; |
| int source_device_id; |
| float major_radius; |
| }; |
| |
| MotionEventAura( |
| size_t pointer_count, |
| const base::TimeTicks& last_touch_time, |
| Action cached_action, |
| int cached_action_index, |
| const PointData (&active_touches)[GestureSequence::kMaxGesturePoints]); |
| |
| static PointData GetPointDataFromTouchEvent(const TouchEvent& touch); |
| void AddTouch(const TouchEvent& touch); |
| void UpdateTouch(const TouchEvent& touch); |
| void UpdateCachedAction(const TouchEvent& touch); |
| size_t GetIndexFromId(int id) const; |
| |
| size_t pointer_count_; |
| base::TimeTicks last_touch_time_; |
| Action cached_action_; |
| // The index of the touch responsible for last ACTION_POINTER_DOWN or |
| // ACTION_POINTER_UP. -1 if no such action has occurred. |
| int cached_action_index_; |
| |
| // We want constant time indexing by pointer_index, and fast indexing by id. |
| // TODO(tdresser): figure out which constant to use here. |
| PointData active_touches_[GestureSequence::kMaxGesturePoints]; |
| |
| DISALLOW_COPY_AND_ASSIGN(MotionEventAura); |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_EVENTS_GESTURE_DETECTION_UI_MOTION_EVENT_H_ |