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