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)#ifndef UI_EVENTS_GESTURE_DETECTION_FILTERED_GESTURE_PROVIDER_H_ 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define UI_EVENTS_GESTURE_DETECTION_FILTERED_GESTURE_PROVIDER_H_ 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/basictypes.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/gesture_event_data_packet.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/gesture_provider.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/gesture_detection/touch_disposition_gesture_filter.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Provides filtered gesture detection and dispatch given a sequence of touch 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// events and touch event acks. 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class GESTURE_DETECTION_EXPORT FilteredGestureProvider 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : public ui::TouchDispositionGestureFilterClient, 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public ui::GestureProviderClient { 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |client| will be offered all gestures detected by the |gesture_provider_| 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // and allowed by the |gesture_filter_|. 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FilteredGestureProvider(const GestureProvider::Config& config, 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureProviderClient* client); 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns true if |event| was both valid and successfully handled by the 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // gesture provider. Otherwise, returns false, in which case the caller 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // should drop |event|, not forwarding it to the renderer. 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool OnTouchEvent(const MotionEvent& event); 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // To be called upon ack of an event that was forwarded after a successful 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // call to |OnTouchEvent()|. 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnTouchEventAck(bool event_consumed); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Methods delegated to |gesture_provider_|. 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void SetMultiTouchZoomSupportEnabled(bool enabled); 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetDoubleTapSupportForPlatformEnabled(bool enabled); 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetDoubleTapSupportForPageEnabled(bool enabled); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ui::MotionEvent* GetCurrentDownEvent() const; 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // GestureProviderClient implementation. 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnGestureEvent(const ui::GestureEventData& event) OVERRIDE; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TouchDispositionGestureFilterClient implementation. 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void ForwardGestureEvent(const ui::GestureEventData& event) OVERRIDE; 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GestureProviderClient* const client_; 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::GestureProvider gesture_provider_; 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::TouchDispositionGestureFilter gesture_filter_; 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool handling_event_; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::GestureEventDataPacket pending_gesture_packet_; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FilteredGestureProvider); 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ui 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // UI_EVENTS_GESTURE_DETECTION_FILTERED_GESTURE_PROVIDER_H_ 62