1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/events/test/mock_motion_event.h"
6
7 #include "base/logging.h"
8
9 using base::TimeTicks;
10
11 namespace ui {
12 namespace test {
13
MockMotionEvent()14 MockMotionEvent::MockMotionEvent()
15 : action(ACTION_CANCEL), pointer_count(1), touch_major(TOUCH_MAJOR), id(0),
16 button_state(0) {
17 }
18
MockMotionEvent(Action action)19 MockMotionEvent::MockMotionEvent(Action action)
20 : action(action), pointer_count(1), touch_major(TOUCH_MAJOR), id(0),
21 button_state(0) {
22 }
23
MockMotionEvent(Action action,TimeTicks time,float x,float y)24 MockMotionEvent::MockMotionEvent(Action action,
25 TimeTicks time,
26 float x,
27 float y)
28 : action(action),
29 pointer_count(1),
30 time(time),
31 touch_major(TOUCH_MAJOR),
32 id(0),
33 button_state(0) {
34 points[0].SetPoint(x, y);
35 tool_types[0] = TOOL_TYPE_UNKNOWN;
36 }
37
MockMotionEvent(Action action,TimeTicks time,float x0,float y0,float x1,float y1)38 MockMotionEvent::MockMotionEvent(Action action,
39 TimeTicks time,
40 float x0,
41 float y0,
42 float x1,
43 float y1)
44 : action(action),
45 pointer_count(2),
46 time(time),
47 touch_major(TOUCH_MAJOR),
48 id(0),
49 button_state(0) {
50 points[0].SetPoint(x0, y0);
51 tool_types[0] = TOOL_TYPE_UNKNOWN;
52 points[1].SetPoint(x1, y1);
53 tool_types[1] = TOOL_TYPE_UNKNOWN;
54 }
55
MockMotionEvent(Action action,TimeTicks time,float x0,float y0,float x1,float y1,float x2,float y2)56 MockMotionEvent::MockMotionEvent(Action action,
57 TimeTicks time,
58 float x0,
59 float y0,
60 float x1,
61 float y1,
62 float x2,
63 float y2)
64 : action(action),
65 pointer_count(3),
66 time(time),
67 touch_major(TOUCH_MAJOR),
68 id(0),
69 button_state(0) {
70 points[0].SetPoint(x0, y0);
71 tool_types[0] = TOOL_TYPE_UNKNOWN;
72 points[1].SetPoint(x1, y1);
73 tool_types[1] = TOOL_TYPE_UNKNOWN;
74 points[2].SetPoint(x2, y2);
75 tool_types[2] = TOOL_TYPE_UNKNOWN;
76 }
77
MockMotionEvent(const MockMotionEvent & other)78 MockMotionEvent::MockMotionEvent(const MockMotionEvent& other)
79 : action(other.action),
80 pointer_count(other.pointer_count),
81 time(other.time),
82 touch_major(other.touch_major),
83 id(other.GetId()),
84 button_state(other.GetButtonState()) {
85 for (size_t i = 0; i < pointer_count; ++i) {
86 points[i] = other.points[i];
87 tool_types[i] = other.tool_types[i];
88 }
89 }
90
~MockMotionEvent()91 MockMotionEvent::~MockMotionEvent() {}
92
GetAction() const93 MotionEvent::Action MockMotionEvent::GetAction() const { return action; }
94
GetActionIndex() const95 int MockMotionEvent::GetActionIndex() const {
96 return static_cast<int>(pointer_count) - 1;
97 }
98
GetPointerCount() const99 size_t MockMotionEvent::GetPointerCount() const { return pointer_count; }
100
GetId() const101 int MockMotionEvent::GetId() const {
102 return id;
103 }
104
GetPointerId(size_t pointer_index) const105 int MockMotionEvent::GetPointerId(size_t pointer_index) const {
106 DCHECK(pointer_index < pointer_count);
107 return static_cast<int>(pointer_index);
108 }
109
GetX(size_t pointer_index) const110 float MockMotionEvent::GetX(size_t pointer_index) const {
111 return points[pointer_index].x();
112 }
113
GetY(size_t pointer_index) const114 float MockMotionEvent::GetY(size_t pointer_index) const {
115 return points[pointer_index].y();
116 }
117
GetRawX(size_t pointer_index) const118 float MockMotionEvent::GetRawX(size_t pointer_index) const {
119 return GetX(pointer_index) + raw_offset.x();
120 }
121
GetRawY(size_t pointer_index) const122 float MockMotionEvent::GetRawY(size_t pointer_index) const {
123 return GetY(pointer_index) + raw_offset.y();
124 }
125
GetTouchMajor(size_t pointer_index) const126 float MockMotionEvent::GetTouchMajor(size_t pointer_index) const {
127 return touch_major;
128 }
129
GetPressure(size_t pointer_index) const130 float MockMotionEvent::GetPressure(size_t pointer_index) const {
131 return 0;
132 }
133
GetEventTime() const134 TimeTicks MockMotionEvent::GetEventTime() const { return time; }
135
GetHistorySize() const136 size_t MockMotionEvent::GetHistorySize() const { return 0; }
137
GetHistoricalEventTime(size_t historical_index) const138 TimeTicks MockMotionEvent::GetHistoricalEventTime(
139 size_t historical_index) const {
140 return TimeTicks();
141 }
142
GetHistoricalTouchMajor(size_t pointer_index,size_t historical_index) const143 float MockMotionEvent::GetHistoricalTouchMajor(size_t pointer_index,
144 size_t historical_index) const {
145 return 0;
146 }
147
GetHistoricalX(size_t pointer_index,size_t historical_index) const148 float MockMotionEvent::GetHistoricalX(size_t pointer_index,
149 size_t historical_index) const {
150 return 0;
151 }
152
GetHistoricalY(size_t pointer_index,size_t historical_index) const153 float MockMotionEvent::GetHistoricalY(size_t pointer_index,
154 size_t historical_index) const {
155 return 0;
156 }
157
GetToolType(size_t pointer_index) const158 MotionEvent::ToolType MockMotionEvent::GetToolType(size_t pointer_index) const {
159 DCHECK_LT(pointer_index, pointer_count);
160 return tool_types[pointer_index];
161 }
162
GetButtonState() const163 int MockMotionEvent::GetButtonState() const {
164 return button_state;
165 }
166
Clone() const167 scoped_ptr<MotionEvent> MockMotionEvent::Clone() const {
168 return scoped_ptr<MotionEvent>(new MockMotionEvent(*this));
169 }
170
Cancel() const171 scoped_ptr<MotionEvent> MockMotionEvent::Cancel() const {
172 scoped_ptr<MockMotionEvent> cancel_event(new MockMotionEvent(*this));
173 cancel_event->action = MotionEvent::ACTION_CANCEL;
174 return cancel_event.PassAs<MotionEvent>();
175 }
176
SetId(int new_id)177 void MockMotionEvent::SetId(int new_id) {
178 id = new_id;
179 }
180
SetTime(base::TimeTicks new_time)181 void MockMotionEvent::SetTime(base::TimeTicks new_time) {
182 time = new_time;
183 }
184
PressPoint(float x,float y)185 void MockMotionEvent::PressPoint(float x, float y) {
186 // Reset the pointer count if the previously released and/or cancelled pointer
187 // was the last pointer in the event.
188 if (pointer_count == 1 && (action == ACTION_UP || action == ACTION_CANCEL))
189 pointer_count = 0;
190
191 DCHECK_LT(pointer_count, static_cast<size_t>(MAX_POINTERS));
192 points[pointer_count++] = gfx::PointF(x, y);
193 tool_types[pointer_count] = TOOL_TYPE_UNKNOWN;
194 action = pointer_count > 1 ? ACTION_POINTER_DOWN : ACTION_DOWN;
195 }
196
MovePoint(size_t index,float x,float y)197 void MockMotionEvent::MovePoint(size_t index, float x, float y) {
198 DCHECK_LT(index, pointer_count);
199 points[index] = gfx::PointF(x, y);
200 tool_types[index] = TOOL_TYPE_UNKNOWN;
201 action = ACTION_MOVE;
202 }
203
ReleasePoint()204 void MockMotionEvent::ReleasePoint() {
205 DCHECK_GT(pointer_count, 0U);
206 if (pointer_count > 1) {
207 --pointer_count;
208 action = ACTION_POINTER_UP;
209 } else {
210 action = ACTION_UP;
211 }
212 }
213
CancelPoint()214 void MockMotionEvent::CancelPoint() {
215 DCHECK_GT(pointer_count, 0U);
216 if (pointer_count > 1)
217 --pointer_count;
218 action = ACTION_CANCEL;
219 }
220
SetTouchMajor(float new_touch_major)221 void MockMotionEvent::SetTouchMajor(float new_touch_major) {
222 touch_major = new_touch_major;
223 }
224
SetRawOffset(float raw_offset_x,float raw_offset_y)225 void MockMotionEvent::SetRawOffset(float raw_offset_x, float raw_offset_y) {
226 raw_offset.set_x(raw_offset_x);
227 raw_offset.set_y(raw_offset_y);
228 }
229
SetToolType(size_t pointer_index,ToolType tool_type)230 void MockMotionEvent::SetToolType(size_t pointer_index, ToolType tool_type) {
231 DCHECK_LT(pointer_index, pointer_count);
232 tool_types[pointer_index] = tool_type;
233 }
234
SetButtonState(int new_button_state)235 void MockMotionEvent::SetButtonState(int new_button_state) {
236 button_state = new_button_state;
237 }
238
239 } // namespace test
240 } // namespace ui
241