Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: content/browser/renderer_host/input/synthetic_touch_driver.cc

Issue 2336803003: Make SyntheticPointerAction to flush the pointer action sequence (Closed)
Patch Set: controller Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/input/synthetic_touch_driver.h" 5 #include "content/browser/renderer_host/input/synthetic_touch_driver.h"
6 6
7 #include "content/browser/renderer_host/input/synthetic_gesture_target.h" 7 #include "content/browser/renderer_host/input/synthetic_gesture_target.h"
8 8
9 using blink::WebTouchEvent;
10
11 namespace content { 9 namespace content {
12 10
13 SyntheticTouchDriver::SyntheticTouchDriver() {} 11 SyntheticTouchDriver::SyntheticTouchDriver() {
12 std::fill(index_map_.begin(), index_map_.end(), -1);
13 }
14 14
15 SyntheticTouchDriver::SyntheticTouchDriver(SyntheticWebTouchEvent touch_event) 15 SyntheticTouchDriver::SyntheticTouchDriver(SyntheticWebTouchEvent touch_event)
16 : touch_event_(touch_event) {} 16 : touch_event_(touch_event) {
17 std::fill(index_map_.begin(), index_map_.end(), -1);
18 }
17 19
18 SyntheticTouchDriver::~SyntheticTouchDriver() {} 20 SyntheticTouchDriver::~SyntheticTouchDriver() {}
19 21
20 void SyntheticTouchDriver::DispatchEvent(SyntheticGestureTarget* target, 22 void SyntheticTouchDriver::DispatchEvent(SyntheticGestureTarget* target,
21 const base::TimeTicks& timestamp) { 23 const base::TimeTicks& timestamp) {
22 touch_event_.timeStampSeconds = ConvertTimestampToSeconds(timestamp); 24 touch_event_.timeStampSeconds = ConvertTimestampToSeconds(timestamp);
23 target->DispatchInputEventToPlatform(touch_event_); 25 target->DispatchInputEventToPlatform(touch_event_);
24 touch_event_.ResetPoints(); 26 touch_event_.ResetPoints();
25 } 27 }
26 28
27 int SyntheticTouchDriver::Press(float x, float y) { 29 void SyntheticTouchDriver::Press(float x, float y, int index) {
28 int index = touch_event_.PressPoint(x, y); 30 DCHECK_GE(index, 0);
29 return index; 31 DCHECK_LT(index, blink::WebTouchEvent::kTouchesLengthCap);
32 int touch_index = touch_event_.PressPoint(x, y);
33 index_map_[index] = touch_index;
30 } 34 }
31 35
32 void SyntheticTouchDriver::Move(float x, float y, int index) { 36 void SyntheticTouchDriver::Move(float x, float y, int index) {
33 touch_event_.MovePoint(index, x, y); 37 DCHECK_GE(index, 0);
38 DCHECK_LT(index, blink::WebTouchEvent::kTouchesLengthCap);
39 touch_event_.MovePoint(index_map_[index], x, y);
34 } 40 }
35 41
36 void SyntheticTouchDriver::Release(int index) { 42 void SyntheticTouchDriver::Release(int index) {
37 touch_event_.ReleasePoint(index); 43 DCHECK_GE(index, 0);
44 DCHECK_LT(index, blink::WebTouchEvent::kTouchesLengthCap);
45 touch_event_.ReleasePoint(index_map_[index]);
46 index_map_[index] = -1;
38 } 47 }
39 48
40 bool SyntheticTouchDriver::UserInputCheck( 49 bool SyntheticTouchDriver::UserInputCheck(
41 const SyntheticPointerActionParams& params) const { 50 const SyntheticPointerActionParams& params) const {
42 DCHECK_GE(params.index(), -1); 51 if (params.index() < 0 || params.index() >= WebTouchEvent::kTouchesLengthCap)
43 DCHECK_LT(params.index(), WebTouchEvent::kTouchesLengthCap);
44 if (params.gesture_source_type != SyntheticGestureParams::TOUCH_INPUT)
45 return false; 52 return false;
46 53
47 if (params.pointer_action_type() == 54 if (params.pointer_action_type() ==
48 SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED) { 55 SyntheticPointerActionParams::PointerActionType::NOT_INITIALIZED) {
49 return false; 56 return false;
50 } 57 }
51 58
52 if (params.pointer_action_type() == 59 if (params.pointer_action_type() ==
53 SyntheticPointerActionParams::PointerActionType::PRESS && 60 SyntheticPointerActionParams::PointerActionType::PRESS &&
54 params.index() >= 0) { 61 index_map_[params.index()] >= 0) {
55 return false; 62 return false;
56 } 63 }
57 64
58 if (params.pointer_action_type() == 65 if (params.pointer_action_type() ==
59 SyntheticPointerActionParams::PointerActionType::MOVE && 66 SyntheticPointerActionParams::PointerActionType::MOVE &&
60 params.index() == -1) { 67 index_map_[params.index()] == -1) {
61 return false; 68 return false;
62 } 69 }
63 70
64 if (params.pointer_action_type() == 71 if (params.pointer_action_type() ==
65 SyntheticPointerActionParams::PointerActionType::RELEASE && 72 SyntheticPointerActionParams::PointerActionType::RELEASE &&
66 params.index() == -1) { 73 index_map_[params.index()] == -1) {
67 return false; 74 return false;
68 } 75 }
69 76
70 return true; 77 return true;
71 } 78 }
72 79
73 } // namespace content 80 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698