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