15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_BASE_GESTURES_GESTURE_TYPES_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_BASE_GESTURES_GESTURE_TYPES_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/events/event_constants.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GestureEvent;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TouchEvent;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct UI_EXPORT GestureEventDetails {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureEventDetails(EventType type, float delta_x, float delta_y);
20f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  GestureEventDetails(EventType type,
21f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch                      float delta_x, float delta_y,
22f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch                      float delta_x_ordinal, float delta_y_ordinal);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EventType type() const { return type_; }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int touch_points() const { return touch_points_; }
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_touch_points(int touch_points) { touch_points_ = touch_points; }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const gfx::Rect& bounding_box() const { return bounding_box_; }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_bounding_box(const gfx::Rect& box) { bounding_box_ = box; }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
32f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  void SetScrollVelocity(float velocity_x, float velocity_y,
33f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch                         float velocity_x_ordinal, float velocity_y_ordinal);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float scroll_x() const {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_SCROLL_UPDATE, type_);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.scroll_update.x;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float scroll_y() const {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_SCROLL_UPDATE, type_);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.scroll_update.y;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float velocity_x() const {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          type_ == ui::ET_SCROLL_FLING_START);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type_ == ui::ET_SCROLL_FLING_START ? data.fling_velocity.x :
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                data.scroll_update.velocity_x;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float velocity_y() const {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          type_ == ui::ET_SCROLL_FLING_START);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return type_ == ui::ET_SCROLL_FLING_START ? data.fling_velocity.y :
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                data.scroll_update.velocity_y;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
59f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  // *_ordinal values are unmodified by rail based clamping.
60f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  float scroll_x_ordinal() const {
61f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    CHECK_EQ(ui::ET_GESTURE_SCROLL_UPDATE, type_);
62f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    return data.scroll_update.x_ordinal;
63f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  }
64f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch
65f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  float scroll_y_ordinal() const {
66f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    CHECK_EQ(ui::ET_GESTURE_SCROLL_UPDATE, type_);
67f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    return data.scroll_update.y_ordinal;
68f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  }
69f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch
70f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  float velocity_x_ordinal() const {
71f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    CHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
72f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch          type_ == ui::ET_SCROLL_FLING_START);
73f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    return type_ == ui::ET_SCROLL_FLING_START ?
74f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch        data.fling_velocity.x_ordinal :
75f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch        data.scroll_update.velocity_x_ordinal;
76f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  }
77f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch
78f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  float velocity_y_ordinal() const {
79f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    CHECK(type_ == ui::ET_GESTURE_SCROLL_UPDATE ||
80f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch          type_ == ui::ET_SCROLL_FLING_START);
81f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch    return type_ == ui::ET_SCROLL_FLING_START ?
82f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch        data.fling_velocity.y_ordinal :
83f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch        data.scroll_update.velocity_y_ordinal;
84f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch  }
85f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int touch_id() const {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_LONG_PRESS, type_);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.touch_id;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float first_finger_width() const {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_TWO_FINGER_TAP, type_);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.first_finger_enclosing_rectangle.width;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float first_finger_height() const {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_TWO_FINGER_TAP, type_);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.first_finger_enclosing_rectangle.height;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  float scale() const {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_PINCH_UPDATE, type_);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.scale;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool swipe_left() const {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_MULTIFINGER_SWIPE, type_);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.swipe.left;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool swipe_right() const {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_MULTIFINGER_SWIPE, type_);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.swipe.right;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool swipe_up() const {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_MULTIFINGER_SWIPE, type_);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.swipe.up;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool swipe_down() const {
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_MULTIFINGER_SWIPE, type_);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.swipe.down;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int tap_count() const {
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CHECK_EQ(ui::ET_GESTURE_TAP, type_);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return data.tap_count;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::EventType type_;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  union {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    struct {  // SCROLL delta.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float x;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float y;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float velocity_x;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float velocity_y;
139f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float x_ordinal;
140f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float y_ordinal;
141f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float velocity_x_ordinal;
142f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float velocity_y_ordinal;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } scroll_update;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    float scale;  // PINCH scale.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    struct {  // FLING velocity.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float x;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float y;
150f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float x_ordinal;
151f968bfd8e7e7331d11d96f3ef27f3d9212e92c39Ben Murdoch      float y_ordinal;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } fling_velocity;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int touch_id;  // LONG_PRESS touch-id.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Dimensions of the first finger's enclosing rectangle for TWO_FINGER_TAP.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    struct {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float width;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      float height;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } first_finger_enclosing_rectangle;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    struct {  // SWIPE direction.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool left;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool right;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool up;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool down;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } swipe;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int tap_count;  // TAP repeat count.
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } data;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int touch_points_;  // Number of active touch points in the gesture.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Bounding box is an axis-aligned rectangle that contains all the
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // enclosing rectangles of the touch-points in the gesture.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounding_box_;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An abstract type for consumers of gesture-events created by the
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gesture-recognizer.
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UI_EXPORT GestureConsumer {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GestureConsumer()
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : ignores_events_(false) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit GestureConsumer(bool ignores_events)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : ignores_events_(ignores_events) {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~GestureConsumer() {}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO: this is a hack! GestureRecognizer should never expose the internal
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // marker object that implements this.
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ignores_events() { return ignores_events_; }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const bool ignores_events_;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GestureEventHelper creates implementation-specific gesture events and
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// can dispatch them.
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UI_EXPORT GestureEventHelper {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~GestureEventHelper() {
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool DispatchLongPressGestureEvent(GestureEvent* event) = 0;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool DispatchCancelTouchEvent(TouchEvent* event) = 0;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_BASE_GESTURES_GESTURE_TYPES_H_
215