1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/test/mock_motion_event.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using base::TimeTicks; 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui { 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test { 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PointerProperties CreatePointer() { 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PointerProperties pointer; 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer.touch_major = MockMotionEvent::TOUCH_MAJOR; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return pointer; 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)PointerProperties CreatePointer(float x, float y, int id) { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PointerProperties pointer(x, y); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer.touch_major = MockMotionEvent::TOUCH_MAJOR; 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer.id = id; 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return pointer; 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockMotionEvent::MockMotionEvent() 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(ACTION_CANCEL, base::TimeTicks(), CreatePointer()) { 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockMotionEvent::MockMotionEvent(Action action) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(action, base::TimeTicks(), CreatePointer()) { 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockMotionEvent::MockMotionEvent(Action action, 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TimeTicks time, 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) float x0, 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) float y0) 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(action, time, CreatePointer(x0, y0, 0)) { 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockMotionEvent::MockMotionEvent(Action action, 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TimeTicks time, 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float x0, 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float y0, 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float x1, 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) float y1) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(action, time, CreatePointer(x0, y0, 0)) { 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PushPointer(x1, y1); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (action == ACTION_POINTER_UP || action == ACTION_POINTER_DOWN) 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(1); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuMockMotionEvent::MockMotionEvent(Action action, 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TimeTicks time, 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float x0, 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float y0, 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float x1, 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float y1, 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float x2, 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu float y2) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(action, time, CreatePointer(x0, y0, 0)) { 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PushPointer(x1, y1); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PushPointer(x2, y2); 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (action == ACTION_POINTER_UP || action == ACTION_POINTER_DOWN) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(2); 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MockMotionEvent::MockMotionEvent(Action action, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::TimeTicks time, 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::vector<gfx::PointF>& positions) { 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(action); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_event_time(time); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (action == ACTION_POINTER_UP || action == ACTION_POINTER_DOWN) 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(static_cast<int>(positions.size()) - 1); 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < positions.size(); ++i) 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PushPointer(positions[i].x(), positions[i].y()); 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MockMotionEvent::MockMotionEvent(const MockMotionEvent& other) 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : MotionEventGeneric(other) { 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)MockMotionEvent::~MockMotionEvent() {} 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<MotionEvent> MockMotionEvent::Clone() const { 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<MotionEvent>(new MockMotionEvent(*this)); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)scoped_ptr<MotionEvent> MockMotionEvent::Cancel() const { 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<MockMotionEvent> event(new MockMotionEvent(*this)); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event->set_action(MotionEvent::ACTION_CANCEL); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return event.PassAs<MotionEvent>(); 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockMotionEvent::PressPoint(float x, float y) { 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResolvePointers(); 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PushPointer(x, y); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GetPointerCount() > 1) { 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(static_cast<int>(GetPointerCount()) - 1); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_POINTER_DOWN); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_DOWN); 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockMotionEvent::MovePoint(size_t index, float x, float y) { 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResolvePointers(); 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_LT(index, GetPointerCount()); 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PointerProperties& p = pointer(index); 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) float dx = x - p.x; 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) float dy = x - p.y; 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p.x = x; 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p.y = y; 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p.raw_x += dx; 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p.raw_y += dy; 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_MOVE); 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockMotionEvent::ReleasePoint() { 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResolvePointers(); 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_GT(GetPointerCount(), 0U); 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (GetPointerCount() > 1) { 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(static_cast<int>(GetPointerCount()) - 1); 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_POINTER_UP); 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_UP); 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockMotionEvent::CancelPoint() { 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResolvePointers(); 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_GT(GetPointerCount(), 0U); 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action(ACTION_CANCEL); 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void MockMotionEvent::SetTouchMajor(float new_touch_major) { 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < GetPointerCount(); ++i) 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer(i).touch_major = new_touch_major; 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void MockMotionEvent::SetRawOffset(float raw_offset_x, float raw_offset_y) { 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (size_t i = 0; i < GetPointerCount(); ++i) { 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer(i).raw_x = pointer(i).x + raw_offset_x; 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer(i).raw_y = pointer(i).y + raw_offset_y; 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MockMotionEvent::SetToolType(size_t pointer_index, ToolType tool_type) { 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK_LT(pointer_index, GetPointerCount()); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) pointer(pointer_index).tool_type = tool_type; 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MockMotionEvent::PushPointer(float x, float y) { 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MotionEventGeneric::PushPointer( 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreatePointer(x, y, static_cast<int>(GetPointerCount()))); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void MockMotionEvent::ResolvePointers() { 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_action_index(-1); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch (GetAction()) { 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ACTION_UP: 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ACTION_POINTER_UP: 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case ACTION_CANCEL: 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PopPointer(); 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) default: 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace test 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ui 178