// 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_GESTURE_PROVIDER_H_ #define UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_ #include "base/basictypes.h" #include "base/memory/scoped_vector.h" #include "ui/events/event.h" #include "ui/events/events_export.h" #include "ui/events/gesture_detection/filtered_gesture_provider.h" #include "ui/events/gesture_detection/gesture_event_data_packet.h" #include "ui/events/gesture_detection/touch_disposition_gesture_filter.h" #include "ui/events/gestures/motion_event_aura.h" namespace ui { class EVENTS_EXPORT GestureProviderAuraClient { public: virtual ~GestureProviderAuraClient() {} virtual void OnGestureEvent(GestureEvent* event) = 0; }; // Provides gesture detection and dispatch given a sequence of touch events // and touch event acks. class EVENTS_EXPORT GestureProviderAura : public GestureProviderClient { public: GestureProviderAura(GestureProviderAuraClient* client); virtual ~GestureProviderAura(); bool OnTouchEvent(const TouchEvent& event); void OnTouchEventAck(bool event_consumed); const MotionEventAura& pointer_state() { return pointer_state_; } ScopedVector<GestureEvent>* GetAndResetPendingGestures(); // GestureProviderClient implementation virtual void OnGestureEvent(const GestureEventData& gesture) OVERRIDE; private: bool IsConsideredDoubleTap(const GestureEventData& previous_tap, const GestureEventData& current_tap) const; scoped_ptr<GestureEventData> previous_tap_; GestureProviderAuraClient* client_; MotionEventAura pointer_state_; FilteredGestureProvider filtered_gesture_provider_; ui::LatencyInfo last_touch_event_latency_info_; bool handling_event_; ScopedVector<GestureEvent> pending_gestures_; DISALLOW_COPY_AND_ASSIGN(GestureProviderAura); }; } // namespace ui #endif // UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_