Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ui / events / gestures / gesture_recognizer.h
1 // Copyright (c) 2012 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_GESTURES_GESTURE_RECOGNIZER_H_
6 #define UI_EVENTS_GESTURES_GESTURE_RECOGNIZER_H_
7
8 #include <vector>
9
10 #include "base/memory/scoped_vector.h"
11 #include "ui/events/event_constants.h"
12 #include "ui/events/events_export.h"
13 #include "ui/events/gestures/gesture_types.h"
14 #include "ui/gfx/geometry/point_f.h"
15
16 namespace ui {
17 // A GestureRecognizer is an abstract base class for conversion of touch events
18 // into gestures.
19 class EVENTS_EXPORT GestureRecognizer {
20  public:
21   static GestureRecognizer* Create();
22   static GestureRecognizer* Get();
23   static void Reset();
24
25   // List of GestureEvent*.
26   typedef ScopedVector<GestureEvent> Gestures;
27
28   virtual ~GestureRecognizer() {}
29
30   // Invoked for each touch event that could contribute to the current gesture.
31   // Returns list of zero or more GestureEvents identified after processing
32   // TouchEvent.
33   // Caller would be responsible for freeing up Gestures.
34   virtual Gestures* ProcessTouchEventForGesture(const TouchEvent& event,
35                                                 ui::EventResult result,
36                                                 GestureConsumer* consumer) = 0;
37
38   // This is called when the consumer is destroyed. So this should cleanup any
39   // internal state maintained for |consumer|. Returns true iff there was
40   // state relating to |consumer| to clean up.
41   virtual bool CleanupStateForConsumer(GestureConsumer* consumer) = 0;
42
43   // Return the window which should handle this TouchEvent, in the case where
44   // the touch is already associated with a target.
45   // Otherwise, returns null.
46   virtual GestureConsumer* GetTouchLockedTarget(const TouchEvent& event) = 0;
47
48   // Return the window which should handle this GestureEvent.
49   virtual GestureConsumer* GetTargetForGestureEvent(
50       const GestureEvent& event) = 0;
51
52   // Returns the target of the nearest active touch with source device of
53   // |source_device_id|, within
54   // GestureConfiguration::max_separation_for_gesture_touches_in_pixels of
55   // |location|, or NULL if no such point exists.
56   virtual GestureConsumer* GetTargetForLocation(
57       const gfx::PointF& location, int source_device_id) = 0;
58
59   // Makes |new_consumer| the target for events previously targeting
60   // |current_consumer|. All other targets are canceled.
61   // The caller is responsible for updating the state of the consumers to
62   // be aware of this transfer of control (there are no ENTERED/EXITED events).
63   // If |new_consumer| is NULL, all events are canceled.
64   // If |old_consumer| is NULL, all events not already targeting |new_consumer|
65   // are canceled.
66   virtual void TransferEventsTo(GestureConsumer* current_consumer,
67                                 GestureConsumer* new_consumer) = 0;
68
69   // If a gesture is underway for |consumer| |point| is set to the last touch
70   // point and true is returned. If no touch events have been processed for
71   // |consumer| false is returned and |point| is untouched.
72   virtual bool GetLastTouchPointForTarget(GestureConsumer* consumer,
73                                           gfx::PointF* point) = 0;
74
75   // Sends a touch cancel event for every active touch. Returns true iff any
76   // touch cancels were sent.
77   virtual bool CancelActiveTouches(GestureConsumer* consumer) = 0;
78
79   // Subscribes |helper| for dispatching async gestures such as long press.
80   // The Gesture Recognizer does NOT take ownership of |helper| and it is the
81   // responsibility of the |helper| to call |RemoveGestureEventHelper()| on
82   // destruction.
83   virtual void AddGestureEventHelper(GestureEventHelper* helper) = 0;
84
85   // Unsubscribes |helper| from async gesture dispatch.
86   // Since the GestureRecognizer does not own the |helper|, it is not deleted
87   // and must be cleaned up appropriately by the caller.
88   virtual void RemoveGestureEventHelper(GestureEventHelper* helper) = 0;
89 };
90
91 }  // namespace ui
92
93 #endif  // UI_EVENTS_GESTURES_GESTURE_RECOGNIZER_H_