Home | History | Annotate | Download | only in gestures
      1 // Copyright (c) 2012 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 #ifndef UI_BASE_GESTURES_GESTURE_RECOGNIZER_IMPL_H_
      6 #define UI_BASE_GESTURES_GESTURE_RECOGNIZER_IMPL_H_
      7 
      8 #include <map>
      9 #include <vector>
     10 
     11 #include "base/memory/linked_ptr.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "ui/base/events/event_constants.h"
     14 #include "ui/base/gestures/gesture_recognizer.h"
     15 #include "ui/base/ui_export.h"
     16 #include "ui/gfx/point.h"
     17 
     18 namespace ui {
     19 class GestureConsumer;
     20 class GestureEvent;
     21 class GestureEventHelper;
     22 class GestureSequence;
     23 class TouchEvent;
     24 
     25 class UI_EXPORT GestureRecognizerImpl : public GestureRecognizer {
     26  public:
     27   typedef std::map<int, GestureConsumer*> TouchIdToConsumerMap;
     28 
     29   explicit GestureRecognizerImpl(GestureEventHelper* helper);
     30   virtual ~GestureRecognizerImpl();
     31 
     32   // Overridden from GestureRecognizer
     33   virtual GestureConsumer* GetTouchLockedTarget(TouchEvent* event) OVERRIDE;
     34   virtual GestureConsumer* GetTargetForGestureEvent(
     35       GestureEvent* event) OVERRIDE;
     36   virtual GestureConsumer* GetTargetForLocation(
     37       const gfx::Point& location) OVERRIDE;
     38   virtual void TransferEventsTo(GestureConsumer* current_consumer,
     39                                 GestureConsumer* new_consumer) OVERRIDE;
     40   virtual bool GetLastTouchPointForTarget(GestureConsumer* consumer,
     41                                           gfx::Point* point) OVERRIDE;
     42 
     43  protected:
     44   virtual GestureSequence* CreateSequence(GestureEventHelper* helper);
     45   virtual GestureSequence* GetGestureSequenceForConsumer(GestureConsumer* c);
     46 
     47  private:
     48   // Sets up the target consumer for gestures based on the touch-event.
     49   void SetupTargets(const TouchEvent& event, GestureConsumer* consumer);
     50 
     51   // Overridden from GestureRecognizer
     52   virtual Gestures* ProcessTouchEventForGesture(
     53       const TouchEvent& event,
     54       ui::EventResult result,
     55       GestureConsumer* target) OVERRIDE;
     56   virtual void CleanupStateForConsumer(GestureConsumer* consumer) OVERRIDE;
     57 
     58   std::map<GestureConsumer*, GestureSequence*> consumer_sequence_;
     59 
     60   // Both |touch_id_target_| and |touch_id_target_for_gestures_| map a touch-id
     61   // to its target window.  touch-ids are removed from |touch_id_target_| on
     62   // ET_TOUCH_RELEASE and ET_TOUCH_CANCEL. |touch_id_target_for_gestures_| are
     63   // removed in ConsumerDestroyed().
     64   TouchIdToConsumerMap touch_id_target_;
     65   TouchIdToConsumerMap touch_id_target_for_gestures_;
     66 
     67   // Touches cancelled by touch capture are routed to the
     68   // gesture_consumer_ignorer_.
     69   scoped_ptr<GestureConsumer> gesture_consumer_ignorer_;
     70   GestureEventHelper* helper_;
     71 
     72   DISALLOW_COPY_AND_ASSIGN(GestureRecognizerImpl);
     73 };
     74 
     75 }  // namespace ui
     76 
     77 #endif  // UI_BASE_GESTURES_GESTURE_RECOGNIZER_IMPL_H_
     78