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

Side by Side Diff: remoting/ios/client_gestures.mm

Issue 2904703003: [CRD iOS] Add support for three-finger gestures (Closed)
Patch Set: Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 #if !defined(__has_feature) || !__has_feature(objc_arc) 5 #if !defined(__has_feature) || !__has_feature(objc_arc)
6 #error "This file requires ARC support." 6 #error "This file requires ARC support."
7 #endif 7 #endif
8 8
9 #import "remoting/ios/client_gestures.h" 9 #import "remoting/ios/client_gestures.h"
10 10
11 #import "remoting/ios/app/host_view_controller.h"
11 #import "remoting/ios/session/remoting_client.h" 12 #import "remoting/ios/session/remoting_client.h"
12 13
13 #include "base/logging.h" 14 #include "base/logging.h"
14 #include "remoting/client/ui/gesture_interpreter.h" 15 #include "remoting/client/ui/gesture_interpreter.h"
15 16
16 remoting::GestureInterpreter::GestureState toGestureState( 17 remoting::GestureInterpreter::GestureState toGestureState(
17 UIGestureRecognizerState state) { 18 UIGestureRecognizerState state) {
18 switch (state) { 19 switch (state) {
19 case UIGestureRecognizerStateBegan: 20 case UIGestureRecognizerStateBegan:
20 return remoting::GestureInterpreter::GESTURE_BEGAN; 21 return remoting::GestureInterpreter::GESTURE_BEGAN;
21 case UIGestureRecognizerStateChanged: 22 case UIGestureRecognizerStateChanged:
22 return remoting::GestureInterpreter::GESTURE_CHANGED; 23 return remoting::GestureInterpreter::GESTURE_CHANGED;
23 default: 24 default:
24 return remoting::GestureInterpreter::GESTURE_ENDED; 25 return remoting::GestureInterpreter::GESTURE_ENDED;
25 } 26 }
26 } 27 }
27 28
28 @implementation ClientGestures 29 @implementation ClientGestures
29 30
30 - (instancetype)initWithView:(UIView*)view client:(RemotingClient*)client { 31 - (instancetype)initWithHostViewController:(HostViewController*)controller {
31 _view = view; 32 _view = controller.view;
32 _client = client; 33 _client = controller.client;
34 _controller = controller;
33 35
34 _inputScheme = HostInputSchemeTouch; 36 _inputScheme = HostInputSchemeTouch;
35 37
36 _longPressRecognizer = [[UILongPressGestureRecognizer alloc] 38 _longPressRecognizer = [[UILongPressGestureRecognizer alloc]
37 initWithTarget:self 39 initWithTarget:self
38 action:@selector(longPressGestureTriggered:)]; 40 action:@selector(longPressGestureTriggered:)];
39 _longPressRecognizer.delegate = self; 41 _longPressRecognizer.delegate = self;
40 [view addGestureRecognizer:_longPressRecognizer]; 42 [_view addGestureRecognizer:_longPressRecognizer];
41 43
42 _panRecognizer = [[UIPanGestureRecognizer alloc] 44 _panRecognizer = [[UIPanGestureRecognizer alloc]
43 initWithTarget:self 45 initWithTarget:self
44 action:@selector(panGestureTriggered:)]; 46 action:@selector(panGestureTriggered:)];
45 _panRecognizer.minimumNumberOfTouches = 1; 47 _panRecognizer.minimumNumberOfTouches = 1;
46 _panRecognizer.maximumNumberOfTouches = 2; 48 _panRecognizer.maximumNumberOfTouches = 2;
47 _panRecognizer.delegate = self; 49 _panRecognizer.delegate = self;
48 [view addGestureRecognizer:_panRecognizer]; 50 [_view addGestureRecognizer:_panRecognizer];
49 51
50 _flingRecognizer = [[UIPanGestureRecognizer alloc] 52 _flingRecognizer = [[UIPanGestureRecognizer alloc]
51 initWithTarget:self 53 initWithTarget:self
52 action:@selector(flingGestureTriggered:)]; 54 action:@selector(flingGestureTriggered:)];
53 _flingRecognizer.minimumNumberOfTouches = 1; 55 _flingRecognizer.minimumNumberOfTouches = 1;
54 _flingRecognizer.maximumNumberOfTouches = 1; 56 _flingRecognizer.maximumNumberOfTouches = 1;
55 _flingRecognizer.delegate = self; 57 _flingRecognizer.delegate = self;
56 [view addGestureRecognizer:_flingRecognizer]; 58 [_view addGestureRecognizer:_flingRecognizer];
57 59
58 _scrollRecognizer = [[UIPanGestureRecognizer alloc] 60 _scrollRecognizer = [[UIPanGestureRecognizer alloc]
59 initWithTarget:self 61 initWithTarget:self
60 action:@selector(scrollGestureTriggered:)]; 62 action:@selector(scrollGestureTriggered:)];
61 _scrollRecognizer.minimumNumberOfTouches = 2; 63 _scrollRecognizer.minimumNumberOfTouches = 2;
62 _scrollRecognizer.maximumNumberOfTouches = 2; 64 _scrollRecognizer.maximumNumberOfTouches = 2;
63 _scrollRecognizer.delegate = self; 65 _scrollRecognizer.delegate = self;
64 [view addGestureRecognizer:_scrollRecognizer]; 66 [_view addGestureRecognizer:_scrollRecognizer];
65 67
66 _threeFingerPanRecognizer = [[UIPanGestureRecognizer alloc] 68 _threeFingerPanRecognizer = [[UIPanGestureRecognizer alloc]
67 initWithTarget:self 69 initWithTarget:self
68 action:@selector(threeFingerPanGestureTriggered:)]; 70 action:@selector(threeFingerPanGestureTriggered:)];
69 _threeFingerPanRecognizer.minimumNumberOfTouches = 3; 71 _threeFingerPanRecognizer.minimumNumberOfTouches = 3;
70 _threeFingerPanRecognizer.maximumNumberOfTouches = 3; 72 _threeFingerPanRecognizer.maximumNumberOfTouches = 3;
71 _threeFingerPanRecognizer.delegate = self; 73 _threeFingerPanRecognizer.delegate = self;
72 [view addGestureRecognizer:_threeFingerPanRecognizer]; 74 [_view addGestureRecognizer:_threeFingerPanRecognizer];
73 75
74 _pinchRecognizer = [[UIPinchGestureRecognizer alloc] 76 _pinchRecognizer = [[UIPinchGestureRecognizer alloc]
75 initWithTarget:self 77 initWithTarget:self
76 action:@selector(pinchGestureTriggered:)]; 78 action:@selector(pinchGestureTriggered:)];
77 _pinchRecognizer.delegate = self; 79 _pinchRecognizer.delegate = self;
78 [view addGestureRecognizer:_pinchRecognizer]; 80 [_view addGestureRecognizer:_pinchRecognizer];
79 81
80 _singleTapRecognizer = [[UITapGestureRecognizer alloc] 82 _singleTapRecognizer = [[UITapGestureRecognizer alloc]
81 initWithTarget:self 83 initWithTarget:self
82 action:@selector(tapGestureTriggered:)]; 84 action:@selector(tapGestureTriggered:)];
83 _singleTapRecognizer.delegate = self; 85 _singleTapRecognizer.delegate = self;
84 [view addGestureRecognizer:_singleTapRecognizer]; 86 [_view addGestureRecognizer:_singleTapRecognizer];
85 87
86 _twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] 88 _twoFingerTapRecognizer = [[UITapGestureRecognizer alloc]
87 initWithTarget:self 89 initWithTarget:self
88 action:@selector(twoFingerTapGestureTriggered:)]; 90 action:@selector(twoFingerTapGestureTriggered:)];
89 _twoFingerTapRecognizer.numberOfTouchesRequired = 2; 91 _twoFingerTapRecognizer.numberOfTouchesRequired = 2;
90 _twoFingerTapRecognizer.delegate = self; 92 _twoFingerTapRecognizer.delegate = self;
91 [view addGestureRecognizer:_twoFingerTapRecognizer]; 93 [_view addGestureRecognizer:_twoFingerTapRecognizer];
92 94
93 _threeFingerTapRecognizer = [[UITapGestureRecognizer alloc] 95 _threeFingerTapRecognizer = [[UITapGestureRecognizer alloc]
94 initWithTarget:self 96 initWithTarget:self
95 action:@selector(threeFingerTapGestureTriggered:)]; 97 action:@selector(threeFingerTapGestureTriggered:)];
96 _threeFingerTapRecognizer.numberOfTouchesRequired = 3; 98 _threeFingerTapRecognizer.numberOfTouchesRequired = 3;
97 _threeFingerPanRecognizer.delegate = self; 99 _threeFingerPanRecognizer.delegate = self;
98 [view addGestureRecognizer:_threeFingerTapRecognizer]; 100 [_view addGestureRecognizer:_threeFingerTapRecognizer];
99 101
100 _inputScheme = HostInputSchemeTouch; 102 _inputScheme = HostInputSchemeTouch;
101 103
102 [_singleTapRecognizer requireGestureRecognizerToFail:_twoFingerTapRecognizer]; 104 [_singleTapRecognizer requireGestureRecognizerToFail:_twoFingerTapRecognizer];
103 [_twoFingerTapRecognizer 105 [_twoFingerTapRecognizer
104 requireGestureRecognizerToFail:_threeFingerTapRecognizer]; 106 requireGestureRecognizerToFail:_threeFingerTapRecognizer];
105 [_pinchRecognizer requireGestureRecognizerToFail:_singleTapRecognizer]; 107 [_pinchRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
108 [_pinchRecognizer requireGestureRecognizerToFail:_threeFingerPanRecognizer];
106 [_panRecognizer requireGestureRecognizerToFail:_singleTapRecognizer]; 109 [_panRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
107 [_threeFingerPanRecognizer 110 [_threeFingerPanRecognizer
108 requireGestureRecognizerToFail:_threeFingerTapRecognizer]; 111 requireGestureRecognizerToFail:_threeFingerTapRecognizer];
109 [_panRecognizer requireGestureRecognizerToFail:_scrollRecognizer]; 112 [_panRecognizer requireGestureRecognizerToFail:_scrollRecognizer];
110 113
111 _edgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] 114 _edgeGesture = [[UIScreenEdgePanGestureRecognizer alloc]
112 initWithTarget:self 115 initWithTarget:self
113 action:@selector(edgeGestureTriggered:)]; 116 action:@selector(edgeGestureTriggered:)];
114 //_edgeGesture.edges = UIRectEdgeLeft; 117 //_edgeGesture.edges = UIRectEdgeLeft;
115 _edgeGesture.delegate = self; 118 _edgeGesture.delegate = self;
116 [view addGestureRecognizer:_edgeGesture]; 119 [_view addGestureRecognizer:_edgeGesture];
117 120
118 _swipeGesture = [[UISwipeGestureRecognizer alloc] 121 _swipeGesture = [[UISwipeGestureRecognizer alloc]
119 initWithTarget:self 122 initWithTarget:self
120 action:@selector(swipeGestureTriggered:)]; 123 action:@selector(swipeGestureTriggered:)];
121 _swipeGesture.numberOfTouchesRequired = 2; 124 _swipeGesture.numberOfTouchesRequired = 2;
122 _swipeGesture.delegate = self; 125 _swipeGesture.delegate = self;
123 [view addGestureRecognizer:_swipeGesture]; 126 [_view addGestureRecognizer:_swipeGesture];
124 127
125 return self; 128 return self;
126 } 129 }
127 130
128 // TODO(nicholss): The following several methods have been commented out. 131 // TODO(nicholss): The following several methods have been commented out.
129 // Integreation with the original implementation will be done with the app 132 // Integreation with the original implementation will be done with the app
130 // is able to run to the point of interaction and debugging can happen. 133 // is able to run to the point of interaction and debugging can happen.
131 // I would prefer to leave this here rather than deleting because it is close 134 // I would prefer to leave this here rather than deleting because it is close
132 // to the implementation that will be used client gestures integration. 135 // to the implementation that will be used client gestures integration.
133 // This is a new class that was derived from the original source which had 136 // This is a new class that was derived from the original source which had
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 // } 321 // }
319 // } 322 // }
320 } 323 }
321 324
322 - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender { 325 - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
323 CGPoint touchPoint = [sender locationInView:_view]; 326 CGPoint touchPoint = [sender locationInView:_view];
324 _client.gestureInterpreter->TwoFingerTap(touchPoint.x, touchPoint.y); 327 _client.gestureInterpreter->TwoFingerTap(touchPoint.x, touchPoint.y);
325 } 328 }
326 329
327 - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender { 330 - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
328 // LOG_TRACE(INFO) << "threeFingerTapGestureTriggered"; 331 CGPoint touchPoint = [sender locationInView:_view];
329 if (_inputScheme == HostInputSchemeTouch) { 332 _client.gestureInterpreter->ThreeFingerTap(touchPoint.x, touchPoint.y);
330 // disabled
331 return;
332 }
333
334 // if ([_scene containsTouchPoint:[sender locationInView:self.view]]) {
335 // [Utility middleClickOn:_clientToHostProxy at:_scene.mousePosition];
336 // }
337 } 333 }
338 334
339 - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender { 335 - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender {
340 // LOG_TRACE(INFO) << "threeFingerPanGestureTriggered"; 336 // LOG_TRACE(INFO) << "threeFingerPanGestureTriggered";
341 // if ([sender state] == UIGestureRecognizerStateChanged) { 337 if ([sender state] != UIGestureRecognizerStateEnded) {
342 // CGPoint translation = [sender translationInView:self.view]; 338 return;
343 // if (translation.y > 0) { 339 }
344 // // Swiped down - do nothing 340
345 // } else if (translation.y < 0) { 341 CGPoint translation = [sender translationInView:_view];
346 // // Swiped up 342 if (translation.y > 0) {
347 // [_keyEntryView becomeFirstResponder]; 343 // Swiped down - hide keyboard (for now)
348 // } 344 [_controller hideKeyboard];
349 // [sender setTranslation:CGPointZero inView:self.view]; 345 } else if (translation.y < 0) {
350 // } 346 // Swiped up - show keyboard
347 [_controller showKeyboard];
348 }
351 } 349 }
352 350
353 - (IBAction)edgeGestureTriggered:(UIScreenEdgePanGestureRecognizer*)sender { 351 - (IBAction)edgeGestureTriggered:(UIScreenEdgePanGestureRecognizer*)sender {
354 // LOG_TRACE(INFO) << "edgeGestureTriggered"; 352 // LOG_TRACE(INFO) << "edgeGestureTriggered";
355 } 353 }
356 354
357 - (IBAction)swipeGestureTriggered:(UISwipeGestureRecognizer*)sender { 355 - (IBAction)swipeGestureTriggered:(UISwipeGestureRecognizer*)sender {
358 // LOG_TRACE(INFO) << "swipeGestureTriggered"; 356 // LOG_TRACE(INFO) << "swipeGestureTriggered";
359 } 357 }
360 358
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 otherGestureRecognizer == _edgeGesture) { 398 otherGestureRecognizer == _edgeGesture) {
401 return YES; 399 return YES;
402 } 400 }
403 // TODO(nicholss): If we return NO here, it dismisses the other reconizers. 401 // TODO(nicholss): If we return NO here, it dismisses the other reconizers.
404 // As we add more types of reconizers, they need to be accounted for in the 402 // As we add more types of reconizers, they need to be accounted for in the
405 // above logic. 403 // above logic.
406 return NO; 404 return NO;
407 } 405 }
408 406
409 @end 407 @end
OLDNEW
« remoting/ios/client_gestures.h ('K') | « remoting/ios/client_gestures.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698