filtered_gesture_provider.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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#include "ui/events/gesture_detection/filtered_gesture_provider.h" 6 7#include "base/auto_reset.h" 8#include "base/logging.h" 9#include "ui/events/gesture_detection/motion_event.h" 10 11namespace ui { 12 13FilteredGestureProvider::FilteredGestureProvider( 14 const GestureProvider::Config& config, 15 GestureProviderClient* client) 16 : client_(client), 17 gesture_provider_(config, this), 18 gesture_filter_(this), 19 handling_event_(false) {} 20 21bool FilteredGestureProvider::OnTouchEvent(const MotionEvent& event) { 22 DCHECK(!handling_event_); 23 base::AutoReset<bool> handling_event(&handling_event_, true); 24 25 pending_gesture_packet_ = GestureEventDataPacket::FromTouch(event); 26 27 if (!gesture_provider_.OnTouchEvent(event)) 28 return false; 29 30 TouchDispositionGestureFilter::PacketResult result = 31 gesture_filter_.OnGesturePacket(pending_gesture_packet_); 32 if (result != TouchDispositionGestureFilter::SUCCESS) { 33 NOTREACHED() << "Invalid touch gesture sequence detected."; 34 return false; 35 } 36 37 return true; 38} 39 40void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) { 41 gesture_filter_.OnTouchEventAck(event_consumed); 42} 43 44void FilteredGestureProvider::ResetGestureDetectors() { 45 gesture_provider_.ResetGestureDetectors(); 46} 47 48void FilteredGestureProvider::SetMultiTouchSupportEnabled(bool enabled) { 49 gesture_provider_.SetMultiTouchSupportEnabled(enabled); 50} 51 52void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled( 53 bool enabled) { 54 gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); 55} 56 57void FilteredGestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) { 58 gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled); 59} 60 61const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const { 62 return gesture_provider_.current_down_event(); 63} 64 65void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) { 66 if (handling_event_) { 67 pending_gesture_packet_.Push(event); 68 return; 69 } 70 71 gesture_filter_.OnGesturePacket( 72 GestureEventDataPacket::FromTouchTimeout(event)); 73} 74 75void FilteredGestureProvider::ForwardGestureEvent( 76 const GestureEventData& event) { 77 client_->OnGestureEvent(event); 78} 79 80} // namespace ui 81