Home | History | Annotate | Download | only in gesture_detection
      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 
     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 
     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 
     40 void FilteredGestureProvider::OnTouchEventAck(bool event_consumed) {
     41   gesture_filter_.OnTouchEventAck(event_consumed);
     42 }
     43 
     44 void FilteredGestureProvider::SetMultiTouchZoomSupportEnabled(
     45     bool enabled) {
     46   gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled);
     47 }
     48 
     49 void FilteredGestureProvider::SetDoubleTapSupportForPlatformEnabled(
     50     bool enabled) {
     51   gesture_provider_.SetDoubleTapSupportForPlatformEnabled(enabled);
     52 }
     53 
     54 void FilteredGestureProvider::SetDoubleTapSupportForPageEnabled(bool enabled) {
     55   gesture_provider_.SetDoubleTapSupportForPageEnabled(enabled);
     56 }
     57 
     58 const ui::MotionEvent* FilteredGestureProvider::GetCurrentDownEvent() const {
     59   return gesture_provider_.current_down_event();
     60 }
     61 
     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 
     72 void FilteredGestureProvider::ForwardGestureEvent(
     73     const GestureEventData& event) {
     74   client_->OnGestureEvent(event);
     75 }
     76 
     77 }  // namespace ui
     78