1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/filtered_gesture_provider.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/auto_reset.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/motion_event.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FilteredGestureProvider::FilteredGestureProvider( 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GestureProvider::Config& config, 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureProviderClient* client) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : client_(client), 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_provider_(config, this), 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_filter_(this), 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) handling_event_(false) {} 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool FilteredGestureProvider::OnTouchEvent(const MotionEvent& event) { 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!handling_event_); 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::AutoReset<bool> handling_event(&handling_event_, true); 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) pending_gesture_packet_ = GestureEventDataPacket::FromTouch(event); 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!gesture_provider_.OnTouchEvent(event)) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return false; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TouchDispositionGestureFilter::PacketResult result = 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_filter_.OnGesturePacket(pending_gesture_packet_); 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (result != TouchDispositionGestureFilter::SUCCESS) { 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NOTREACHED() << "Invalid touch gesture sequence detected."; 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return false; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) { 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_filter_.OnTouchEventAck(event_consumed); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid FilteredGestureProvider::SetMultiTouchZoomSupportEnabled( 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool enabled) { 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled( 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool enabled) { 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FilteredGestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) { 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const { 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gesture_provider_.current_down_event(); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) { 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (handling_event_) { 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) pending_gesture_packet_.Push(event); 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gesture_filter_.OnGesturePacket( 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureEventDataPacket::FromTouchTimeout(event)); 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FilteredGestureProvider::ForwardGestureEvent( 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const GestureEventData& event) { 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) client_->OnGestureEvent(event); 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ui 78