15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/gesture_detection/motion_event_generic.h"
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/logging.h"
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace ui {
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PointerProperties::PointerProperties()
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : id(0),
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      tool_type(MotionEvent::TOOL_TYPE_UNKNOWN),
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      x(0),
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      y(0),
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      raw_x(0),
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      raw_y(0),
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      pressure(0),
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      touch_major(0),
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      touch_minor(0),
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      orientation(0) {
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PointerProperties::PointerProperties(float x, float y)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : id(0),
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      tool_type(MotionEvent::TOOL_TYPE_UNKNOWN),
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      x(x),
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      y(y),
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      raw_x(x),
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      raw_y(y),
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      pressure(0),
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      touch_major(0),
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      touch_minor(0),
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      orientation(0) {
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEventGeneric::MotionEventGeneric()
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : action_(ACTION_CANCEL),
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      id_(0),
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      action_index_(0),
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      button_state_(0),
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      flags_(0) {
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEventGeneric::MotionEventGeneric(Action action,
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                       base::TimeTicks event_time,
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                       const PointerProperties& pointer)
485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : action_(action),
495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event_time_(event_time),
505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      id_(0),
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      action_index_(0),
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      button_state_(0),
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      flags_(0) {
545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  PushPointer(pointer);
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEventGeneric::MotionEventGeneric(const MotionEventGeneric& other)
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    : action_(other.action_),
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      event_time_(other.event_time_),
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      id_(other.id_),
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      action_index_(other.action_index_),
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      button_state_(other.button_state_),
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      flags_(other.flags_),
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      pointers_(other.pointers_) {
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEventGeneric::~MotionEventGeneric() {
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int MotionEventGeneric::GetId() const {
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return id_;
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEvent::Action MotionEventGeneric::GetAction() const {
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return action_;
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int MotionEventGeneric::GetActionIndex() const {
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return action_index_;
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)size_t MotionEventGeneric::GetPointerCount() const {
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_->size();
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int MotionEventGeneric::GetPointerId(size_t pointer_index) const {
875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].id;
895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetX(size_t pointer_index) const {
925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].x;
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetY(size_t pointer_index) const {
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].y;
995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetRawX(size_t pointer_index) const {
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].raw_x;
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetRawY(size_t pointer_index) const {
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].raw_y;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetTouchMajor(size_t pointer_index) const {
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].touch_major;
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifloat MotionEventGeneric::GetTouchMinor(size_t pointer_index) const {
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_LT(pointer_index, pointers_->size());
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return pointers_[pointer_index].touch_minor;
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifloat MotionEventGeneric::GetOrientation(size_t pointer_index) const {
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_LT(pointer_index, pointers_->size());
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return pointers_[pointer_index].orientation;
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)float MotionEventGeneric::GetPressure(size_t pointer_index) const {
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].pressure;
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MotionEvent::ToolType MotionEventGeneric::GetToolType(
1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    size_t pointer_index) const {
1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_LT(pointer_index, pointers_->size());
1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return pointers_[pointer_index].tool_type;
1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)int MotionEventGeneric::GetButtonState() const {
1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return button_state_;
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint MotionEventGeneric::GetFlags() const {
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return flags_;
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)base::TimeTicks MotionEventGeneric::GetEventTime() const {
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return event_time_;
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_ptr<MotionEvent> MotionEventGeneric::Clone() const {
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return scoped_ptr<MotionEvent>(new MotionEventGeneric(*this));
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)scoped_ptr<MotionEvent> MotionEventGeneric::Cancel() const {
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<MotionEventGeneric> event(new MotionEventGeneric(*this));
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  event->set_action(ACTION_CANCEL);
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return event.PassAs<MotionEvent>();
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MotionEventGeneric::PushPointer(const PointerProperties& pointer) {
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pointers_->push_back(pointer);
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MotionEventGeneric::PopPointer() {
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DCHECK_GT(pointers_->size(), 0U);
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  pointers_->pop_back();
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace ui
169