• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 namespace ui {
12 
FilteredGestureProvider(const GestureProvider::Config & config,GestureProviderClient * client)13 FilteredGestureProvider::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 
OnTouchEvent(const MotionEvent & event)21 bool 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 
OnTouchEventAck(bool event_consumed)40 void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) {
41   gesture_filter_.OnTouchEventAck(event_consumed);
42 }
43 
SetMultiTouchZoomSupportEnabled(bool enabled)44 void FilteredGestureProvider::SetMultiTouchZoomSupportEnabled(
45     bool enabled) {
46   gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
47 }
48 
SetDoubleTapSupportForPlatformEnabled(bool enabled)49 void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled(
50     bool enabled) {
51   gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
52 }
53 
SetDoubleTapSupportForPageEnabled(bool enabled)54 void FilteredGestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) {
55   gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled);
56 }
57 
GetCurrentDownEvent() const58 const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const {
59   return gesture_provider_.current_down_event();
60 }
61 
OnGestureEvent(const GestureEventData & event)62 void FilteredGestureProvider::OnGestureEvent(const GestureEventData& event) {
63   if (handling_event_) {
64     pending_gesture_packet_.Push(event);
65     return;
66   }
67 
68   gesture_filter_.OnGesturePacket(
69       GestureEventDataPacket::FromTouchTimeout(event));
70 }
71 
ForwardGestureEvent(const GestureEventData & event)72 void FilteredGestureProvider::ForwardGestureEvent(
73     const GestureEventData& event) {
74   client_->OnGestureEvent(event);
75 }
76 
77 }  // namespace ui
78