Index: content/browser/renderer_host/input/gestures/motion_event.cc |
diff --git a/content/browser/renderer_host/input/gestures/motion_event.cc b/content/browser/renderer_host/input/gestures/motion_event.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cbd0dd3019a7aa6e981a17381e3713e100550563 |
--- /dev/null |
+++ b/content/browser/renderer_host/input/gestures/motion_event.cc |
@@ -0,0 +1,130 @@ |
+// 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 "content/browser/renderer_host/input/gestures/motion_event.h" |
+ |
+#include "base/logging.h" |
+ |
+using blink::WebInputEvent; |
+using blink::WebTouchEvent; |
+using blink::WebTouchPoint; |
+ |
+namespace content { |
+namespace { |
+ |
+ bool AllTouchPointsHaveState(const WebTouchEvent& event, |
+ WebTouchPoint::State state) { |
+ for (size_t i = 0; i < event.touchesLength; ++i) |
+ if (event.touches[i].state != state) |
+ return true; |
+ return false; |
+} |
+ |
+} // namespace |
+ |
+MotionEvent::MotionEvent(const WebTouchEvent& event) : event(event) { |
+ DCHECK_GT(GetPointerCount(), 0U); |
+} |
+ |
+MotionEvent::~MotionEvent() {} |
+ |
+MotionEvent::Action MotionEvent::GetActionMasked() const { |
+ switch (event.type) { |
+ case WebInputEvent::TouchStart: |
+ if (AllTouchPointsHaveState(event, WebTouchPoint::StatePressed)) |
+ return ACTION_DOWN; |
+ else |
+ return ACTION_POINTER_DOWN; |
+ case WebInputEvent::TouchEnd: |
+ if (AllTouchPointsHaveState(event, WebTouchPoint::StateReleased)) |
+ return ACTION_UP; |
+ else |
+ return ACTION_POINTER_UP; |
+ case WebInputEvent::TouchCancel: |
+ DCHECK(AllTouchPointsHaveState(event, WebTouchPoint::StateCancelled)); |
+ return ACTION_CANCEL; |
+ case WebInputEvent::TouchMove: |
+ return ACTION_MOVE; |
+ default: |
+ break; |
+ }; |
+ NOTREACHED() << "Invalid masked MotionEvent action."; |
+ return ACTION_CANCEL; |
+} |
+ |
+size_t MotionEvent::GetActionIndex() const { |
+ for (size_t i = 0; i < GetPointerCount(); ++i) { |
+ if (event.touches[i].state != WebTouchPoint::StateUndefined && |
+ event.touches[i].state != WebTouchPoint::StateStationary) |
+ return i; |
+ } |
+ NOTREACHED() << "Invalid MotionEvent action index."; |
+ return 0; |
+} |
+ |
+size_t MotionEvent::GetPointerCount() const { |
+ return event.touchesLength; |
+} |
+ |
+int MotionEvent::GetPointerId(size_t pointer_index) const { |
+ DCHECK_LT(pointer_index, GetPointerCount()); |
+ return event.touches[pointer_index].id; |
+} |
+ |
+float MotionEvent::GetX(size_t pointer_index) const { |
+ DCHECK_LT(pointer_index, GetPointerCount()); |
+ return event.touches[pointer_index].position.x; |
+} |
+ |
+float MotionEvent::GetY(size_t pointer_index) const { |
+ DCHECK_LT(pointer_index, GetPointerCount()); |
+ return event.touches[pointer_index].position.y; |
+} |
+ |
+float MotionEvent::GetTouchMajor(size_t pointer_index) const { |
+ DCHECK_LT(pointer_index, GetPointerCount()); |
+ // TODO(jdduke): We should be a bit more careful about axes here. |
+ return std::max(event.touches[pointer_index].radiusX, |
+ event.touches[pointer_index].radiusY); |
+} |
+ |
+base::TimeTicks MotionEvent::GetEventTime() const { |
+ return base::TimeTicks() + |
+ base::TimeDelta::FromMicroseconds(event.timeStampSeconds * 1000000); |
+} |
+ |
+base::TimeTicks MotionEvent::GetDownTime() const { |
+ return base::TimeTicks() + |
+ base::TimeDelta::FromMicroseconds(event.timeStampSeconds * 1000000); |
+} |
+ |
+size_t MotionEvent::GetHistorySize() const { |
+ return 0; |
+} |
+ |
+base::TimeTicks MotionEvent::GetHistoricalEventTime( |
+ size_t historical_index) const { |
+ NOTIMPLEMENTED(); |
+ return base::TimeTicks(); |
+} |
+ |
+float MotionEvent::GetHistoricalTouchMajor(size_t pointer_index, |
+ size_t historical_index) const { |
+ NOTIMPLEMENTED(); |
+ return 0.f; |
+} |
+ |
+float MotionEvent::GetHistoricalX(size_t pointer_index, |
+ size_t historical_index) const { |
+ NOTIMPLEMENTED(); |
+ return 0.f; |
+} |
+ |
+float MotionEvent::GetHistoricalY(size_t pointer_index, |
+ size_t historical_index) const { |
+ NOTIMPLEMENTED(); |
+ return 0.f; |
+} |
+ |
+} // namespace content |