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.
5 #ifndef UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_
6 #define UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_vector.h"
10 #include "ui/events/event.h"
11 #include "ui/events/events_export.h"
12 #include "ui/events/gesture_detection/filtered_gesture_provider.h"
13 #include "ui/events/gesture_detection/gesture_event_data_packet.h"
14 #include "ui/events/gesture_detection/touch_disposition_gesture_filter.h"
15 #include "ui/events/gestures/motion_event_aura.h"
19 class EVENTS_EXPORT GestureProviderAuraClient
{
21 virtual ~GestureProviderAuraClient() {}
22 virtual void OnGestureEvent(GestureEvent
* event
) = 0;
25 // Provides gesture detection and dispatch given a sequence of touch events
26 // and touch event acks.
27 class EVENTS_EXPORT GestureProviderAura
: public GestureProviderClient
{
29 GestureProviderAura(GestureProviderAuraClient
* client
);
30 ~GestureProviderAura() override
;
32 bool OnTouchEvent(TouchEvent
* event
);
33 void OnAsyncTouchEventAck(bool event_consumed
);
34 void OnSyncTouchEventAck(const uint64 unique_event_id
, bool event_consumed
);
35 const MotionEventAura
& pointer_state() { return pointer_state_
; }
36 ScopedVector
<GestureEvent
>* GetAndResetPendingGestures();
38 // GestureProviderClient implementation
39 void OnGestureEvent(const GestureEventData
& gesture
) override
;
42 bool IsConsideredDoubleTap(const GestureEventData
& previous_tap
,
43 const GestureEventData
& current_tap
) const;
45 scoped_ptr
<GestureEventData
> previous_tap_
;
47 GestureProviderAuraClient
* client_
;
48 MotionEventAura pointer_state_
;
49 FilteredGestureProvider filtered_gesture_provider_
;
51 ui::LatencyInfo last_touch_event_latency_info_
;
53 ScopedVector
<GestureEvent
> pending_gestures_
;
54 uint64 last_unique_touch_event_id_
;
56 DISALLOW_COPY_AND_ASSIGN(GestureProviderAura
);
61 #endif // UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_