blob: 98fceae1a8ed9d27e92c6ba6dd5c179074413ddb [file] [log] [blame]
// 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/test/mock_motion_event.h"
#include "base/logging.h"
using base::TimeTicks;
namespace ui {
namespace test {
MockMotionEvent::MockMotionEvent()
: action(ACTION_CANCEL), pointer_count(1), touch_major(TOUCH_MAJOR), id(0),
button_state(0) {
}
MockMotionEvent::MockMotionEvent(Action action)
: action(action), pointer_count(1), touch_major(TOUCH_MAJOR), id(0),
button_state(0) {
}
MockMotionEvent::MockMotionEvent(Action action,
TimeTicks time,
float x,
float y)
: action(action),
pointer_count(1),
time(time),
touch_major(TOUCH_MAJOR),
id(0),
button_state(0) {
points[0].SetPoint(x, y);
tool_types[0] = TOOL_TYPE_UNKNOWN;
}
MockMotionEvent::MockMotionEvent(Action action,
TimeTicks time,
float x0,
float y0,
float x1,
float y1)
: action(action),
pointer_count(2),
time(time),
touch_major(TOUCH_MAJOR),
id(0),
button_state(0) {
points[0].SetPoint(x0, y0);
tool_types[0] = TOOL_TYPE_UNKNOWN;
points[1].SetPoint(x1, y1);
tool_types[1] = TOOL_TYPE_UNKNOWN;
}
MockMotionEvent::MockMotionEvent(Action action,
TimeTicks time,
float x0,
float y0,
float x1,
float y1,
float x2,
float y2)
: action(action),
pointer_count(3),
time(time),
touch_major(TOUCH_MAJOR),
id(0),
button_state(0) {
points[0].SetPoint(x0, y0);
tool_types[0] = TOOL_TYPE_UNKNOWN;
points[1].SetPoint(x1, y1);
tool_types[1] = TOOL_TYPE_UNKNOWN;
points[2].SetPoint(x2, y2);
tool_types[2] = TOOL_TYPE_UNKNOWN;
}
MockMotionEvent::MockMotionEvent(const MockMotionEvent& other)
: action(other.action),
pointer_count(other.pointer_count),
time(other.time),
touch_major(other.touch_major),
id(other.GetId()),
button_state(other.GetButtonState()) {
for (size_t i = 0; i < pointer_count; ++i) {
points[i] = other.points[i];
tool_types[i] = other.tool_types[i];
}
}
MockMotionEvent::~MockMotionEvent() {}
MotionEvent::Action MockMotionEvent::GetAction() const { return action; }
int MockMotionEvent::GetActionIndex() const {
return static_cast<int>(pointer_count) - 1;
}
size_t MockMotionEvent::GetPointerCount() const { return pointer_count; }
int MockMotionEvent::GetId() const {
return id;
}
int MockMotionEvent::GetPointerId(size_t pointer_index) const {
DCHECK(pointer_index < pointer_count);
return static_cast<int>(pointer_index);
}
float MockMotionEvent::GetX(size_t pointer_index) const {
return points[pointer_index].x();
}
float MockMotionEvent::GetY(size_t pointer_index) const {
return points[pointer_index].y();
}
float MockMotionEvent::GetRawX(size_t pointer_index) const {
return GetX(pointer_index) + raw_offset.x();
}
float MockMotionEvent::GetRawY(size_t pointer_index) const {
return GetY(pointer_index) + raw_offset.y();
}
float MockMotionEvent::GetTouchMajor(size_t pointer_index) const {
return touch_major;
}
float MockMotionEvent::GetPressure(size_t pointer_index) const {
return 0;
}
TimeTicks MockMotionEvent::GetEventTime() const { return time; }
size_t MockMotionEvent::GetHistorySize() const { return 0; }
TimeTicks MockMotionEvent::GetHistoricalEventTime(
size_t historical_index) const {
return TimeTicks();
}
float MockMotionEvent::GetHistoricalTouchMajor(size_t pointer_index,
size_t historical_index) const {
return 0;
}
float MockMotionEvent::GetHistoricalX(size_t pointer_index,
size_t historical_index) const {
return 0;
}
float MockMotionEvent::GetHistoricalY(size_t pointer_index,
size_t historical_index) const {
return 0;
}
MotionEvent::ToolType MockMotionEvent::GetToolType(size_t pointer_index) const {
DCHECK_LT(pointer_index, pointer_count);
return tool_types[pointer_index];
}
int MockMotionEvent::GetButtonState() const {
return button_state;
}
scoped_ptr<MotionEvent> MockMotionEvent::Clone() const {
return scoped_ptr<MotionEvent>(new MockMotionEvent(*this));
}
scoped_ptr<MotionEvent> MockMotionEvent::Cancel() const {
scoped_ptr<MockMotionEvent> cancel_event(new MockMotionEvent(*this));
cancel_event->action = MotionEvent::ACTION_CANCEL;
return cancel_event.PassAs<MotionEvent>();
}
void MockMotionEvent::SetId(int new_id) {
id = new_id;
}
void MockMotionEvent::SetTime(base::TimeTicks new_time) {
time = new_time;
}
void MockMotionEvent::PressPoint(float x, float y) {
// Reset the pointer count if the previously released and/or cancelled pointer
// was the last pointer in the event.
if (pointer_count == 1 && (action == ACTION_UP || action == ACTION_CANCEL))
pointer_count = 0;
DCHECK_LT(pointer_count, static_cast<size_t>(MAX_POINTERS));
points[pointer_count++] = gfx::PointF(x, y);
tool_types[pointer_count] = TOOL_TYPE_UNKNOWN;
action = pointer_count > 1 ? ACTION_POINTER_DOWN : ACTION_DOWN;
}
void MockMotionEvent::MovePoint(size_t index, float x, float y) {
DCHECK_LT(index, pointer_count);
points[index] = gfx::PointF(x, y);
tool_types[index] = TOOL_TYPE_UNKNOWN;
action = ACTION_MOVE;
}
void MockMotionEvent::ReleasePoint() {
DCHECK_GT(pointer_count, 0U);
if (pointer_count > 1) {
--pointer_count;
action = ACTION_POINTER_UP;
} else {
action = ACTION_UP;
}
}
void MockMotionEvent::CancelPoint() {
DCHECK_GT(pointer_count, 0U);
if (pointer_count > 1)
--pointer_count;
action = ACTION_CANCEL;
}
void MockMotionEvent::SetTouchMajor(float new_touch_major) {
touch_major = new_touch_major;
}
void MockMotionEvent::SetRawOffset(float raw_offset_x, float raw_offset_y) {
raw_offset.set_x(raw_offset_x);
raw_offset.set_y(raw_offset_y);
}
void MockMotionEvent::SetToolType(size_t pointer_index, ToolType tool_type) {
DCHECK_LT(pointer_index, pointer_count);
tool_types[pointer_index] = tool_type;
}
void MockMotionEvent::SetButtonState(int new_button_state) {
button_state = new_button_state;
}
} // namespace test
} // namespace ui