1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/time/time.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/gesture_detection_export.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Abstract class for a generic motion-related event, patterned after that 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// subset of Android's MotionEvent API used in gesture detection. 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class GESTURE_DETECTION_EXPORT MotionEvent { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) enum Action { 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_DOWN, 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_UP, 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_MOVE, 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_CANCEL, 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_POINTER_DOWN, 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ACTION_POINTER_UP, 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enum ToolType { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TOOL_TYPE_UNKNOWN, 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TOOL_TYPE_FINGER, 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TOOL_TYPE_STYLUS, 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TOOL_TYPE_MOUSE, 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TOOL_TYPE_ERASER 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enum ButtonType { 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BUTTON_PRIMARY = 1 << 0, 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BUTTON_SECONDARY = 1 << 1, 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BUTTON_TERTIARY = 1 << 2, 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BUTTON_BACK = 1 << 3, 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BUTTON_FORWARD = 1 << 4, 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The implementer promises that |GetPointerId()| will never exceed 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MAX_POINTER_ID. 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum { MAX_POINTER_ID = 31, MAX_TOUCH_POINT_COUNT = 12 }; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~MotionEvent() {} 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual int GetId() const = 0; 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual Action GetAction() const = 0; 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Only valid if |GetAction()| returns ACTION_POINTER_UP or 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // ACTION_POINTER_DOWN. 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int GetActionIndex() const = 0; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual size_t GetPointerCount() const = 0; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual int GetPointerId(size_t pointer_index) const = 0; 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetX(size_t pointer_index) const = 0; 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetY(size_t pointer_index) const = 0; 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual float GetRawX(size_t pointer_index) const = 0; 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual float GetRawY(size_t pointer_index) const = 0; 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetTouchMajor(size_t pointer_index) const = 0; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual float GetTouchMinor(size_t pointer_index) const = 0; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual float GetOrientation(size_t pointer_index) const = 0; 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetPressure(size_t pointer_index) const = 0; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ToolType GetToolType(size_t pointer_index) const = 0; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int GetButtonState() const = 0; 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual int GetFlags() const = 0; 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual base::TimeTicks GetEventTime() const = 0; 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Optional historical data, default implementation provides an empty history. 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual size_t GetHistorySize() const; 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual base::TimeTicks GetHistoricalEventTime(size_t historical_index) const; 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetHistoricalTouchMajor(size_t pointer_index, 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) size_t historical_index) const; 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetHistoricalX(size_t pointer_index, 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) size_t historical_index) const; 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual float GetHistoricalY(size_t pointer_index, 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) size_t historical_index) const; 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual scoped_ptr<MotionEvent> Clone() const = 0; 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual scoped_ptr<MotionEvent> Cancel() const = 0; 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float GetX() const { return GetX(0); } 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float GetY() const { return GetY(0); } 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) float GetRawX() const { return GetRawX(0); } 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) float GetRawY() const { return GetRawY(0); } 866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) float GetRawOffsetX() const { return GetRawX() - GetX(); } 876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) float GetRawOffsetY() const { return GetRawY() - GetY(); } 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float GetTouchMajor() const { return GetTouchMajor(0); } 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float GetTouchMinor() const { return GetTouchMinor(0); } 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the orientation of the major axis clockwise from vertical, in 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // radians. The return value lies in [-PI/2, PI/2]. 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float GetOrientation() const { return GetOrientation(0); } 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float GetPressure() const { return GetPressure(0); } 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ToolType GetToolType() const { return GetToolType(0); } 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // O(N) search of pointers (use sparingly!). Returns -1 if |id| nonexistent. 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int FindPointerIndexOfId(int id) const; 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GESTURE_DETECTION_EXPORT bool operator==(const MotionEvent& lhs, 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const MotionEvent& rhs); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)GESTURE_DETECTION_EXPORT bool operator!=(const MotionEvent& lhs, 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const MotionEvent& rhs); 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ui 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_ 111