Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(682)

Unified Diff: ui/events/gestures/motion_event_aura.cc

Issue 251543003: Unified Gesture Recognizer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/gestures/motion_event_aura.h ('k') | ui/events/gestures/motion_event_aura_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/gestures/motion_event_aura.cc
diff --git a/ui/events/gestures/motion_event_aura.cc b/ui/events/gestures/motion_event_aura.cc
new file mode 100644
index 0000000000000000000000000000000000000000..c19341ec1a40bbcd5d527c27a8e2addb6db3c54d
--- /dev/null
+++ b/ui/events/gestures/motion_event_aura.cc
@@ -0,0 +1,241 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/gestures/motion_event_aura.h"
+
+#include "base/logging.h"
+#include "ui/events/gestures/gesture_configuration.h"
+
+namespace ui {
+
+MotionEventAura::MotionEventAura()
+ : pointer_count_(0), cached_action_index_(-1) {
+}
+
+MotionEventAura::MotionEventAura(
+ size_t pointer_count,
+ const base::TimeTicks& last_touch_time,
+ Action cached_action,
+ int cached_action_index,
+ const PointData (&active_touches)[GestureSequence::kMaxGesturePoints])
+ : pointer_count_(pointer_count),
+ last_touch_time_(last_touch_time),
+ cached_action_(cached_action),
+ cached_action_index_(cached_action_index) {
+ DCHECK(pointer_count_);
+ for (size_t i = 0; i < pointer_count; ++i)
+ active_touches_[i] = active_touches[i];
+}
+
+MotionEventAura::~MotionEventAura() {}
+
+MotionEventAura::PointData MotionEventAura::GetPointDataFromTouchEvent(
+ const TouchEvent& touch) {
+ PointData point_data;
+ point_data.x = touch.x();
+ point_data.y = touch.y();
+ point_data.touch_id = touch.touch_id();
+ point_data.pressure = touch.force();
+ point_data.source_device_id = touch.source_device_id();
+
+ // TODO(tdresser): at some point we should start using both radii if they are
+ // available, but for now we use the max.
+ point_data.major_radius = std::max(touch.radius_x(), touch.radius_y());
+ if (!point_data.major_radius)
+ point_data.major_radius = GestureConfiguration::default_radius();
+ return point_data;
+}
+
+void MotionEventAura::OnTouch(const TouchEvent& touch) {
+ switch (touch.type()) {
+ case ET_TOUCH_PRESSED:
+ AddTouch(touch);
+ break;
+ case ET_TOUCH_RELEASED:
+ case ET_TOUCH_CANCELLED:
+ // Removing these touch points needs to be postponed until after the
+ // MotionEvent has been dispatched. This cleanup occurs in
+ // CleanupRemovedTouchPoints.
+ UpdateTouch(touch);
+ break;
+ case ET_TOUCH_MOVED:
+ UpdateTouch(touch);
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+
+ UpdateCachedAction(touch);
+ last_touch_time_ = touch.time_stamp() + base::TimeTicks();
+}
+
+int MotionEventAura::GetId() const {
+ return GetPointerId(0);
+}
+
+MotionEvent::Action MotionEventAura::GetAction() const {
+ return cached_action_;
+}
+
+int MotionEventAura::GetActionIndex() const {
+ DCHECK(cached_action_ == ACTION_POINTER_DOWN ||
+ cached_action_ == ACTION_POINTER_UP);
+ DCHECK_GE(cached_action_index_, 0);
+ DCHECK_LE(cached_action_index_, static_cast<int>(pointer_count_));
+ return cached_action_index_;
+}
+
+size_t MotionEventAura::GetPointerCount() const { return pointer_count_; }
+
+int MotionEventAura::GetPointerId(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].touch_id;
+}
+
+float MotionEventAura::GetX(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].x;
+}
+
+float MotionEventAura::GetY(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].y;
+}
+
+float MotionEventAura::GetTouchMajor(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].major_radius * 2;
+}
+
+float MotionEventAura::GetPressure(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].pressure;
+}
+
+base::TimeTicks MotionEventAura::GetEventTime() const {
+ return last_touch_time_;
+}
+
+size_t MotionEventAura::GetHistorySize() const { return 0; }
+
+base::TimeTicks MotionEventAura::GetHistoricalEventTime(
+ size_t historical_index) const {
+ NOTIMPLEMENTED();
+ return base::TimeTicks();
+}
+
+float MotionEventAura::GetHistoricalTouchMajor(size_t pointer_index,
+ size_t historical_index) const {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+float MotionEventAura::GetHistoricalX(size_t pointer_index,
+ size_t historical_index) const {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+float MotionEventAura::GetHistoricalY(size_t pointer_index,
+ size_t historical_index) const {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+scoped_ptr<MotionEvent> MotionEventAura::Clone() const {
+ return scoped_ptr<MotionEvent>(new MotionEventAura(pointer_count_,
+ last_touch_time_,
+ cached_action_,
+ cached_action_index_,
+ active_touches_));
+}
+scoped_ptr<MotionEvent> MotionEventAura::Cancel() const {
+ return scoped_ptr<MotionEvent>(new MotionEventAura(
+ pointer_count_, last_touch_time_, ACTION_CANCEL, -1, active_touches_));
+}
+
+void MotionEventAura::CleanupRemovedTouchPoints(const TouchEvent& event) {
+ if (event.type() != ET_TOUCH_RELEASED &&
+ event.type() != ET_TOUCH_CANCELLED) {
+ return;
+ }
+
+ int index_to_delete = static_cast<int>(GetIndexFromId(event.touch_id()));
+ pointer_count_--;
+ active_touches_[index_to_delete] = active_touches_[pointer_count_];
+}
+
+MotionEventAura::PointData::PointData()
+ : x(0),
+ y(0),
+ touch_id(0),
+ pressure(0),
+ source_device_id(0),
+ major_radius(0) {
+}
+
+int MotionEventAura::GetSourceDeviceId(size_t pointer_index) const {
+ DCHECK_LE(pointer_index, pointer_count_);
+ return active_touches_[pointer_index].source_device_id;
+}
+
+void MotionEventAura::AddTouch(const TouchEvent& touch) {
+ if (pointer_count_ == static_cast<size_t>(GestureSequence::kMaxGesturePoints))
+ return;
+
+ active_touches_[pointer_count_] = GetPointDataFromTouchEvent(touch);
+ pointer_count_++;
+}
+
+
+void MotionEventAura::UpdateTouch(const TouchEvent& touch) {
+ active_touches_[GetIndexFromId(touch.touch_id())] =
+ GetPointDataFromTouchEvent(touch);
+}
+
+void MotionEventAura::UpdateCachedAction(const TouchEvent& touch) {
+ DCHECK(pointer_count_);
+ switch (touch.type()) {
+ case ET_TOUCH_PRESSED:
+ if (pointer_count_ == 1) {
+ cached_action_ = ACTION_DOWN;
+ } else {
+ cached_action_ = ACTION_POINTER_DOWN;
+ cached_action_index_ =
+ static_cast<int>(GetIndexFromId(touch.touch_id()));
+ }
+ break;
+ case ET_TOUCH_RELEASED:
+ if (pointer_count_ == 1) {
+ cached_action_ = ACTION_UP;
+ } else {
+ cached_action_ = ACTION_POINTER_UP;
+ cached_action_index_ =
+ static_cast<int>(GetIndexFromId(touch.touch_id()));
+ DCHECK_LE(cached_action_index_, static_cast<int>(pointer_count_));
+ }
+ break;
+ case ET_TOUCH_CANCELLED:
+ cached_action_ = ACTION_CANCEL;
+ break;
+ case ET_TOUCH_MOVED:
+ cached_action_ = ACTION_MOVE;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+}
+
+size_t MotionEventAura::GetIndexFromId(int id) const {
+ for (size_t i = 0; i < pointer_count_; ++i) {
+ if (active_touches_[i].touch_id == id)
+ return i;
+ }
+ NOTREACHED();
+ return 0;
+}
+
+} // namespace ui
« no previous file with comments | « ui/events/gestures/motion_event_aura.h ('k') | ui/events/gestures/motion_event_aura_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698