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

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

Issue 2555803002: Adding the iOS app and integration example with GlRenderer. (Closed)
Patch Set: Adjusting how gl_renderer draws layers and added a demo app for CRD iOS. Created 4 years 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
(Empty)
1 // Copyright 2016 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 #if !defined(__has_feature) || !__has_feature(objc_arc)
6 #error "This file requires ARC support."
7 #endif
8
9 #import "remoting/client/ios/client_gestures.h"
10
11 @implementation ClientGestures
12
13 - (id)initWithView:(UIView*)view {
14 _inputScheme = HostInputSchemeTouch;
15
16 _longPressRecognizer = [[UILongPressGestureRecognizer alloc]
17 initWithTarget:self
18 action:@selector(longPressGestureTriggered:)];
19 _longPressRecognizer.delegate = self;
20 [view addGestureRecognizer:_longPressRecognizer];
21
22 _panRecognizer = [[UIPanGestureRecognizer alloc]
23 initWithTarget:self
24 action:@selector(panGestureTriggered:)];
25 _panRecognizer.minimumNumberOfTouches = 1;
26 _panRecognizer.maximumNumberOfTouches = 2;
27 _panRecognizer.delegate = self;
28 [view addGestureRecognizer:_panRecognizer];
29
30 _threeFingerPanRecognizer = [[UIPanGestureRecognizer alloc]
31 initWithTarget:self
32 action:@selector(threeFingerPanGestureTriggered:)];
33 _threeFingerPanRecognizer.minimumNumberOfTouches = 3;
34 _threeFingerPanRecognizer.maximumNumberOfTouches = 3;
35 _threeFingerPanRecognizer.delegate = self;
36 [view addGestureRecognizer:_threeFingerPanRecognizer];
37
38 _pinchRecognizer = [[UIPinchGestureRecognizer alloc]
39 initWithTarget:self
40 action:@selector(pinchGestureTriggered:)];
41 _pinchRecognizer.delegate = self;
42 [view addGestureRecognizer:_pinchRecognizer];
43
44 _singleTapRecognizer = [[UITapGestureRecognizer alloc]
45 initWithTarget:self
46 action:@selector(tapGestureTriggered:)];
47 _singleTapRecognizer.delegate = self;
48 [view addGestureRecognizer:_singleTapRecognizer];
49
50 _twoFingerTapRecognizer = [[UITapGestureRecognizer alloc]
51 initWithTarget:self
52 action:@selector(twoFingerTapGestureTriggered:)];
53 _twoFingerTapRecognizer.numberOfTouchesRequired = 2;
54 _twoFingerTapRecognizer.delegate = self;
55 [view addGestureRecognizer:_twoFingerTapRecognizer];
56
57 _threeFingerTapRecognizer = [[UITapGestureRecognizer alloc]
58 initWithTarget:self
59 action:@selector(threeFingerTapGestureTriggered:)];
60 _threeFingerTapRecognizer.numberOfTouchesRequired = 3;
61 _threeFingerPanRecognizer.delegate = self;
62 [view addGestureRecognizer:_threeFingerTapRecognizer];
63
64 _inputScheme = HostInputSchemeTouch;
65
66 [_singleTapRecognizer requireGestureRecognizerToFail:_twoFingerTapRecognizer];
67 [_twoFingerTapRecognizer
68 requireGestureRecognizerToFail:_threeFingerTapRecognizer];
69 [_pinchRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
70 [_panRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
71 [_threeFingerPanRecognizer
72 requireGestureRecognizerToFail:_threeFingerTapRecognizer];
73
74 _edgeGesture = [[UIScreenEdgePanGestureRecognizer alloc]
75 initWithTarget:self
76 action:@selector(edgeGestureTriggered:)];
77 //_edgeGesture.edges = UIRectEdgeLeft;
78 _edgeGesture.delegate = self;
79 [view addGestureRecognizer:_edgeGesture];
80
81 _swipeGesture = [[UISwipeGestureRecognizer alloc]
82 initWithTarget:self
83 action:@selector(swipeGestureTriggered:)];
84 _swipeGesture.numberOfTouchesRequired = 2;
85 _swipeGesture.delegate = self;
86 [view addGestureRecognizer:_swipeGesture];
87
88 return self;
89 }
90
91 // Resize the view of the desktop - Zoom in/out. This can occur during a Pan.
92 - (IBAction)pinchGestureTriggered:(UIPinchGestureRecognizer*)sender {
93 // LOG_TRACE(INFO) << "pinchGestureTriggered";
94 // if ([sender state] == UIGestureRecognizerStateChanged) {
95 // [self applySceneChange:CGPointMake(0.0, 0.0) scaleBy:sender.scale];
96 //
97 // sender.scale = 1.0; // reset scale so next iteration is a relative ratio
98 // }
99 }
100
101 - (IBAction)tapGestureTriggered:(UITapGestureRecognizer*)sender {
102 // LOG_TRACE(INFO) << "tapGestureTriggered";
103 // CGPoint touchPoint = [sender locationInView:self.view];
104 // if ([_scene containsTouchPoint:touchPoint]) {
105 // if (_inputScheme == HostInputSchemeTouch) {
106 // [_scene setMouseLocationFromLocationInView:touchPoint];
107 // _circle.expandedRadius = 11.0f;
108 // [_circle doExpandingAnimationAtLocation:[_scene mouseLocationInView]];
109 // }
110 // [Utility leftClickOn:_clientToHostProxy at:_scene.mousePosition];
111 // }
112 }
113
114 // Change position of scene. This can occur during a pinch or long press.
115 // Or perform a Mouse Wheel Scroll.
116 - (IBAction)panGestureTriggered:(UIPanGestureRecognizer*)sender {
117 // LOG_TRACE(INFO) << "panGestureTriggered";
118 // CGPoint translation = [sender translationInView:self.view];
119 // // If we start with 2 touches, and the pinch gesture is not in progress
120 // yet,
121 // // then disable it, so mouse scrolling and zoom do not occur at the same
122 // // time.
123 // if ([sender numberOfTouches] == 2 &&
124 // [sender state] == UIGestureRecognizerStateBegan &&
125 // !(_pinchRecognizer.state == UIGestureRecognizerStateBegan ||
126 // _pinchRecognizer.state == UIGestureRecognizerStateChanged)) {
127 // _pinchRecognizer.enabled = NO;
128 // }
129 //
130 // if (!_pinchRecognizer.enabled) {
131 // // Began with 2 touches, so this is a scroll event.
132 // translation.x *= kMouseWheelSensitivity;
133 // translation.y *= kMouseWheelSensitivity;
134 // // [Utility mouseScroll:_clientToHostProxy
135 // // at:_scene.mousePosition
136 // // delta:webrtc::DesktopVector(translation.x,
137 // translation.y)];
138 // } else {
139 // // Did not begin with 2 touches, doing a pan event.
140 // if ([sender state] == UIGestureRecognizerStateChanged) {
141 // CGPoint translation = [sender translationInView:self.view];
142 // BOOL shouldApplyPanAndTapBounding =
143 // _inputScheme == HostInputSchemeTouch &&
144 // [_longPressRecognizer state] != UIGestureRecognizerStateChanged;
145 //
146 // if (shouldApplyPanAndTapBounding) {
147 // // Reverse the orientation on both axes.
148 // translation = CGPointMake(-translation.x, -translation.y);
149 // }
150 //
151 // // if (shouldApplyPanAndTapBounding) {
152 // // // Stop the translation as soon as the view becomes anchored.
153 // // if ([SceneView
154 // // couldMouseMoveTowardAnchorWithTranslation:translation.x
155 // // isAnchoredLow:_scene.anchored.left
156 // // isAnchoredHigh:_scene.anchored
157 // // .right]) {
158 // // translation = CGPointMake(0, translation.y);
159 // // }
160 // //
161 // // if ([SceneView
162 // // couldMouseMoveTowardAnchorWithTranslation:translation.y
163 // // isAnchoredLow:_scene.anchored.top
164 // // isAnchoredHigh:_scene.anchored
165 // // .bottom])
166 // {
167 // // translation = CGPointMake(translation.x, 0);
168 // // }
169 // // }
joedow 2016/12/19 23:56:26 Why is this code commented out?
170 //
171 // [self applySceneChange:translation scaleBy:1.0];
172 //
173 // if (_inputScheme == HostInputSchemeTouch &&
174 // [_longPressRecognizer state] == UIGestureRecognizerStateChanged
175 // &&
176 // [sender numberOfTouches] == 1) {
177 // // [_scene
178 // // setMouseLocationFromLocationInView:[sender
179 // // locationInView:self.view]];
180 //
181 // // [Utility moveMouse:_clientToHostProxy at:_scene.mousePosition];
182 // }
183 //
184 // } else if ([sender state] == UIGestureRecognizerStateEnded) {
185 // // After user removes their fingers from the screen
186 // // apply an acceleration effect.
187 // CGPoint velocity = [sender velocityInView:self.view];
188 //
189 // if (_inputScheme == HostInputSchemeTouch) {
190 // // Reverse the orientation on both axes.
191 // velocity = CGPointMake(-velocity.x, -velocity.y);
192 // }
193 // // [_scene setPanVelocity:velocity];
194 // }
195 // }
196 //
197 // // Finished the event chain.
198 // if (!([sender state] == UIGestureRecognizerStateBegan ||
199 // [sender state] == UIGestureRecognizerStateChanged)) {
200 // _pinchRecognizer.enabled = YES;
201 // }
202 //
203 // // Reset translation so next iteration is relative. Wait until a changed
204 // // event in order to also capture the portion of the translation that
205 // occurred
206 // // between the Began and Changed States.
207 // if ([sender state] == UIGestureRecognizerStateChanged) {
208 // [sender setTranslation:CGPointZero inView:self.view];
209 // }
210 }
211
212 // Click-Drag mouse operation. This can occur during a Pan.
213 - (IBAction)longPressGestureTriggered:(UILongPressGestureRecognizer*)sender {
214 // LOG_TRACE(INFO) << "longPressGestureTriggered";
215 // if ([sender state] == UIGestureRecognizerStateBegan) {
216 // if (_inputScheme == HostInputSchemeTouch) {
217 // CGPoint touchPoint = [sender locationInView:self.view];
218 // [_scene setMouseLocationFromLocationInView:touchPoint];
219 // }
220 // [_clientToHostProxy mouseAction:_scene.mousePosition
221 // wheelDelta:webrtc::DesktopVector(0, 0)
222 // whichButton:1
223 // buttonDown:YES];
224 // if (_inputScheme == HostInputSchemeTouch) {
225 // // location is going to be under the user's finger
226 // // create a bigger bubble.
227 // _circle.expandedRadius = 110.0f;
228 // } else {
229 // _circle.expandedRadius = 11.0f;
230 // }
231 //
232 // [_circle doExpandingAnimationAtLocation:[_scene mouseLocationInView]];
233 // } else if (!([sender state] == UIGestureRecognizerStateBegan ||
234 // [sender state] == UIGestureRecognizerStateChanged)) {
235 // [_clientToHostProxy mouseAction:_scene.mousePosition
236 // wheelDelta:webrtc::DesktopVector(0, 0)
237 // whichButton:1
238 // buttonDown:NO];
239 // if (_inputScheme == HostInputSchemeTouch) {
240 // // Return to the center.
241 // [_scene centerMouseInView];
242 // }
243 // }
244 }
245
246 - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
247 // LOG_TRACE(INFO) << "twoFingerTapGestureTriggered";
248 if (_inputScheme == HostInputSchemeTouch) {
249 // disabled
250 return;
251 }
252 // if ([_scene containsTouchPoint:[sender locationInView:self.view]]) {
253 // [Utility rightClickOn:_clientToHostProxy at:_scene.mousePosition];
254 // }
255 }
256
257 - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
258 // LOG_TRACE(INFO) << "threeFingerTapGestureTriggered";
259 if (_inputScheme == HostInputSchemeTouch) {
260 // disabled
261 return;
262 }
263
264 // if ([_scene containsTouchPoint:[sender locationInView:self.view]]) {
265 // [Utility middleClickOn:_clientToHostProxy at:_scene.mousePosition];
266 // }
267 }
268
269 - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender {
270 // LOG_TRACE(INFO) << "threeFingerPanGestureTriggered";
271 // if ([sender state] == UIGestureRecognizerStateChanged) {
272 // CGPoint translation = [sender translationInView:self.view];
273 // if (translation.y > 0) {
274 // // Swiped down - do nothing
275 // } else if (translation.y < 0) {
276 // // Swiped up
277 // [_keyEntryView becomeFirstResponder];
278 // }
279 // [sender setTranslation:CGPointZero inView:self.view];
280 // }
281 }
282
283 - (IBAction)edgeGestureTriggered:(UIScreenEdgePanGestureRecognizer*)sender {
284 // LOG_TRACE(INFO) << "edgeGestureTriggered";
285 }
286
287 - (IBAction)swipeGestureTriggered:(UISwipeGestureRecognizer*)sender {
288 // LOG_TRACE(INFO) << "swipeGestureTriggered";
289 }
290
291 #pragma mark - UIGestureRecognizerDelegate
292
293 // Allow panning and zooming to occur simultaneously.
294 // Allow panning and long press to occur simultaneously.
295 // Pinch requires 2 touches, and long press requires a single touch, so they are
296 // mutually exclusive regardless of if panning is the initiating gesture.
297 - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer
298 shouldRecognizeSimultaneouslyWithGestureRecognizer:
299 (UIGestureRecognizer*)otherGestureRecognizer {
300 if (gestureRecognizer == _pinchRecognizer ||
301 (gestureRecognizer == _panRecognizer)) {
302 if (otherGestureRecognizer == _pinchRecognizer ||
303 otherGestureRecognizer == _panRecognizer) {
304 return YES;
305 }
306 }
307
308 if (gestureRecognizer == _longPressRecognizer ||
309 gestureRecognizer == _panRecognizer) {
310 if (otherGestureRecognizer == _longPressRecognizer ||
311 otherGestureRecognizer == _panRecognizer) {
312 return YES;
313 }
314 }
315
316 if (gestureRecognizer == _twoFingerTapRecognizer &&
317 otherGestureRecognizer == _longPressRecognizer) {
318 return YES;
319 }
320
321 if (gestureRecognizer == _panRecognizer &&
322 otherGestureRecognizer == _edgeGesture) {
323 return YES;
324 }
325 return YES;
326 // return NO;
327 }
328
329 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698