1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DETAILS_H_ 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DETAILS_H_ 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/logging.h" 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/events/event_constants.h" 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/events/events_base_export.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/rect.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/rect_conversions.h" 13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace ui { 15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct EVENTS_BASE_EXPORT GestureEventDetails { 17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GestureEventDetails(); 19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GestureEventDetails(EventType type, float delta_x, float delta_y); 20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EventType type() const { return type_; } 22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int touch_points() const { return touch_points_; } 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void set_touch_points(int touch_points) { 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK_GT(touch_points, 0); 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) touch_points_ = touch_points; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TODO(tdresser): Return RectF. See crbug.com/337824. 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const gfx::Rect bounding_box() const { 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return ToEnclosingRect(bounding_box_); 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const gfx::RectF& bounding_box_f() const { 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return bounding_box_; 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void set_bounding_box(const gfx::RectF& box) { bounding_box_ = box; } 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scroll_x_hint() const { 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SCROLL_BEGIN, type_); 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.scroll_begin.x_hint; 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scroll_y_hint() const { 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SCROLL_BEGIN, type_); 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.scroll_begin.y_hint; 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scroll_x() const { 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SCROLL_UPDATE, type_); 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.scroll_update.x; 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scroll_y() const { 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SCROLL_UPDATE, type_); 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.scroll_update.y; 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float velocity_x() const { 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_SCROLL_FLING_START, type_); 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return data.fling_velocity.x; 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float velocity_y() const { 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_SCROLL_FLING_START, type_); 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return data.fling_velocity.y; 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float first_finger_width() const { 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_TWO_FINGER_TAP, type_); 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.first_finger_enclosing_rectangle.width; 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float first_finger_height() const { 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_TWO_FINGER_TAP, type_); 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.first_finger_enclosing_rectangle.height; 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scale() const { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_PINCH_UPDATE, type_); 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.scale; 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool swipe_left() const { 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SWIPE, type_); 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.swipe.left; 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool swipe_right() const { 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SWIPE, type_); 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.swipe.right; 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool swipe_up() const { 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SWIPE, type_); 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.swipe.up; 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool swipe_down() const { 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK_EQ(ET_GESTURE_SWIPE, type_); 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.swipe.down; 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int tap_count() const { 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(type_ == ET_GESTURE_TAP || 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) type_ == ET_GESTURE_TAP_UNCONFIRMED || 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch type_ == ET_GESTURE_DOUBLE_TAP); 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return data.tap_count; 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void set_tap_count(int tap_count) { 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK_GE(tap_count, 0); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(type_ == ET_GESTURE_TAP || 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) type_ == ET_GESTURE_TAP_UNCONFIRMED || 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) type_ == ET_GESTURE_DOUBLE_TAP); 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) data.tap_count = tap_count; 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EventType type_; 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch union Details { 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Details(); 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct { // SCROLL start details. 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Distance that caused the scroll to start. Generally redundant with 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // the x/y values from the first scroll_update. 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float x_hint; 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float y_hint; 129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } scroll_begin; 130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct { // SCROLL delta. 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float x; 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float y; 134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } scroll_update; 135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float scale; // PINCH scale. 137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct { // FLING velocity. 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float x; 140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float y; 141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } fling_velocity; 142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Dimensions of the first finger's enclosing rectangle for 144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // TWO_FINGER_TAP. 145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct { 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float width; 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch float height; 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } first_finger_enclosing_rectangle; 149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch struct { // SWIPE direction. 151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool left; 152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool right; 153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool up; 154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool down; 155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } swipe; 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Tap information must be set for ET_GESTURE_TAP, 158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // ET_GESTURE_TAP_UNCONFIRMED, and ET_GESTURE_DOUBLE_TAP events. 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int tap_count; // TAP repeat count. 160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } data; 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int touch_points_; // Number of active touch points in the gesture. 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Bounding box is an axis-aligned rectangle that contains all the 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // enclosing rectangles of the touch-points in the gesture. 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gfx::RectF bounding_box_; 167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace ui 170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif // UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DETAILS_H_ 172