Home | History | Annotate | Download | only in gesture_detection
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_
      6 #define UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/time/time.h"
     10 #include "ui/events/gesture_detection/gesture_detection_export.h"
     11 
     12 namespace ui {
     13 
     14 // Abstract class for a generic motion-related event, patterned after that
     15 // subset of Android's MotionEvent API used in gesture detection.
     16 class GESTURE_DETECTION_EXPORT MotionEvent {
     17  public:
     18   enum Action {
     19     ACTION_DOWN,
     20     ACTION_UP,
     21     ACTION_MOVE,
     22     ACTION_CANCEL,
     23     ACTION_POINTER_DOWN,
     24     ACTION_POINTER_UP,
     25   };
     26 
     27   enum ToolType {
     28     TOOL_TYPE_UNKNOWN,
     29     TOOL_TYPE_FINGER,
     30     TOOL_TYPE_STYLUS,
     31     TOOL_TYPE_MOUSE,
     32   };
     33 
     34   enum ButtonType {
     35     BUTTON_PRIMARY = 1 << 0,
     36     BUTTON_SECONDARY = 1 << 1,
     37     BUTTON_TERTIARY = 1 << 2,
     38     BUTTON_BACK = 1 << 3,
     39     BUTTON_FORWARD = 1 << 4,
     40   };
     41 
     42   // The implementer promises that |GetPointerId()| will never exceed this.
     43   enum { MAX_POINTER_ID = 31 };
     44 
     45   virtual ~MotionEvent() {}
     46 
     47   virtual int GetId() const = 0;
     48   virtual Action GetAction() const = 0;
     49   // Only valid if |GetAction()| returns ACTION_POINTER_UP or
     50   // ACTION_POINTER_DOWN.
     51   virtual int GetActionIndex() const = 0;
     52   virtual size_t GetPointerCount() const = 0;
     53   virtual int GetPointerId(size_t pointer_index) const = 0;
     54   virtual float GetX(size_t pointer_index) const = 0;
     55   virtual float GetY(size_t pointer_index) const = 0;
     56   virtual float GetRawX(size_t pointer_index) const = 0;
     57   virtual float GetRawY(size_t pointer_index) const = 0;
     58   virtual float GetTouchMajor(size_t pointer_index) const = 0;
     59   virtual float GetPressure(size_t pointer_index) const = 0;
     60   virtual base::TimeTicks GetEventTime() const = 0;
     61 
     62   virtual size_t GetHistorySize() const = 0;
     63   virtual base::TimeTicks GetHistoricalEventTime(
     64       size_t historical_index) const = 0;
     65   virtual float GetHistoricalTouchMajor(size_t pointer_index,
     66                                         size_t historical_index) const = 0;
     67   virtual float GetHistoricalX(size_t pointer_index,
     68                                size_t historical_index) const = 0;
     69   virtual float GetHistoricalY(size_t pointer_index,
     70                                size_t historical_index) const = 0;
     71   virtual ToolType GetToolType(size_t pointer_index) const = 0;
     72   virtual int GetButtonState() const = 0;
     73 
     74   virtual scoped_ptr<MotionEvent> Clone() const = 0;
     75   virtual scoped_ptr<MotionEvent> Cancel() const = 0;
     76 
     77   // Utility accessor methods for convenience.
     78   float GetX() const { return GetX(0); }
     79   float GetY() const { return GetY(0); }
     80   float GetRawX() const { return GetRawX(0); }
     81   float GetRawY() const { return GetRawY(0); }
     82   float GetRawOffsetX() const { return GetRawX() - GetX(); }
     83   float GetRawOffsetY() const { return GetRawY() - GetY(); }
     84   float GetTouchMajor() const { return GetTouchMajor(0); }
     85   float GetPressure() const { return GetPressure(0); }
     86 };
     87 
     88 }  // namespace ui
     89 
     90 #endif  // UI_EVENTS_GESTURE_DETECTION_MOTION_EVENT_H_
     91