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 #include "ui/events/gesture_detection/filtered_gesture_provider.h"
7 #include "base/auto_reset.h"
8 #include "base/logging.h"
9 #include "ui/events/gesture_detection/motion_event.h"
13 FilteredGestureProvider::FilteredGestureProvider(
14 const GestureProvider::Config& config,
15 GestureProviderClient* client)
17 gesture_provider_(config, this),
18 gesture_filter_(this),
19 handling_event_(false) {}
21 bool FilteredGestureProvider::OnTouchEvent(const MotionEvent& event) {
22 DCHECK(!handling_event_);
23 base::AutoReset<bool> handling_event(&handling_event_, true);
25 pending_gesture_packet_ = GestureEventDataPacket::FromTouch(event);
27 if (!gesture_provider_.OnTouchEvent(event))
30 TouchDispositionGestureFilter::PacketResult result =
31 gesture_filter_.OnGesturePacket(pending_gesture_packet_);
32 if (result != TouchDispositionGestureFilter::SUCCESS) {
33 NOTREACHED() << "Invalid touch gesture sequence detected.";
40 void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) {
41 gesture_filter_.OnTouchEventAck(event_consumed);
44 void FilteredGestureProvider::SetMultiTouchZoomSupportEnabled(
46 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
49 void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled(
51 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
54 void FilteredGestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) {
55 gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled);
58 const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const {
59 return gesture_provider_.current_down_event();
62 void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) {
63 if (handling_event_) {
64 pending_gesture_packet_.Push(event);
68 gesture_filter_.OnGesturePacket(
69 GestureEventDataPacket::FromTouchTimeout(event));
72 void FilteredGestureProvider::ForwardGestureEvent(
73 const GestureEventData& event) {
74 client_->OnGestureEvent(event);