| Index: remoting/client/ios/client_gestures.mm
|
| diff --git a/remoting/client/ios/client_gestures.mm b/remoting/client/ios/client_gestures.mm
|
| deleted file mode 100644
|
| index f67beac120a2cc9807ceb13a42f3bd796d5dc2e5..0000000000000000000000000000000000000000
|
| --- a/remoting/client/ios/client_gestures.mm
|
| +++ /dev/null
|
| @@ -1,358 +0,0 @@
|
| -// Copyright 2017 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| -#error "This file requires ARC support."
|
| -#endif
|
| -
|
| -#import "remoting/client/ios/client_gestures.h"
|
| -#import "remoting/client/ios/session/remoting_client.h"
|
| -
|
| -#include "remoting/client/gesture_interpreter.h"
|
| -
|
| -@implementation ClientGestures
|
| -
|
| -- (instancetype)initWithView:(UIView*)view client:(RemotingClient*)client {
|
| - _view = view;
|
| - _client = client;
|
| -
|
| - _inputScheme = HostInputSchemeTouch;
|
| -
|
| - _longPressRecognizer = [[UILongPressGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(longPressGestureTriggered:)];
|
| - _longPressRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_longPressRecognizer];
|
| -
|
| - _panRecognizer = [[UIPanGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(panGestureTriggered:)];
|
| - _panRecognizer.minimumNumberOfTouches = 1;
|
| - _panRecognizer.maximumNumberOfTouches = 2;
|
| - _panRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_panRecognizer];
|
| -
|
| - _threeFingerPanRecognizer = [[UIPanGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(threeFingerPanGestureTriggered:)];
|
| - _threeFingerPanRecognizer.minimumNumberOfTouches = 3;
|
| - _threeFingerPanRecognizer.maximumNumberOfTouches = 3;
|
| - _threeFingerPanRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_threeFingerPanRecognizer];
|
| -
|
| - _pinchRecognizer = [[UIPinchGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(pinchGestureTriggered:)];
|
| - _pinchRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_pinchRecognizer];
|
| -
|
| - _singleTapRecognizer = [[UITapGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(tapGestureTriggered:)];
|
| - _singleTapRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_singleTapRecognizer];
|
| -
|
| - _twoFingerTapRecognizer = [[UITapGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(twoFingerTapGestureTriggered:)];
|
| - _twoFingerTapRecognizer.numberOfTouchesRequired = 2;
|
| - _twoFingerTapRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_twoFingerTapRecognizer];
|
| -
|
| - _threeFingerTapRecognizer = [[UITapGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(threeFingerTapGestureTriggered:)];
|
| - _threeFingerTapRecognizer.numberOfTouchesRequired = 3;
|
| - _threeFingerPanRecognizer.delegate = self;
|
| - [view addGestureRecognizer:_threeFingerTapRecognizer];
|
| -
|
| - _inputScheme = HostInputSchemeTouch;
|
| -
|
| - [_singleTapRecognizer requireGestureRecognizerToFail:_twoFingerTapRecognizer];
|
| - [_twoFingerTapRecognizer
|
| - requireGestureRecognizerToFail:_threeFingerTapRecognizer];
|
| - [_pinchRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
|
| - [_panRecognizer requireGestureRecognizerToFail:_singleTapRecognizer];
|
| - [_threeFingerPanRecognizer
|
| - requireGestureRecognizerToFail:_threeFingerTapRecognizer];
|
| -
|
| - _edgeGesture = [[UIScreenEdgePanGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(edgeGestureTriggered:)];
|
| - //_edgeGesture.edges = UIRectEdgeLeft;
|
| - _edgeGesture.delegate = self;
|
| - [view addGestureRecognizer:_edgeGesture];
|
| -
|
| - _swipeGesture = [[UISwipeGestureRecognizer alloc]
|
| - initWithTarget:self
|
| - action:@selector(swipeGestureTriggered:)];
|
| - _swipeGesture.numberOfTouchesRequired = 2;
|
| - _swipeGesture.delegate = self;
|
| - [view addGestureRecognizer:_swipeGesture];
|
| -
|
| - return self;
|
| -}
|
| -
|
| -// TODO(nicholss): The following several methods have been commented out.
|
| -// Integreation with the original implementation will be done with the app
|
| -// is able to run to the point of interaction and debugging can happen.
|
| -// I would prefer to leave this here rather than deleting because it is close
|
| -// to the implementation that will be used client gestures integration.
|
| -// This is a new class that was derived from the original source which had
|
| -// the implementation mixed in with the host controller and was a huge mess.
|
| -
|
| -// Resize the view of the desktop - Zoom in/out. This can occur during a Pan.
|
| -- (IBAction)pinchGestureTriggered:(UIPinchGestureRecognizer*)sender {
|
| - // LOG_TRACE(INFO) << "pinchGestureTriggered";
|
| - if ([sender state] == UIGestureRecognizerStateChanged) {
|
| - CGPoint pivot = [sender locationInView:_view];
|
| - _client.gestureInterpreter->Pinch(pivot.x, pivot.y, sender.scale);
|
| -
|
| - sender.scale = 1.0; // reset scale so next iteration is a relative ratio
|
| - }
|
| -}
|
| -
|
| -- (IBAction)tapGestureTriggered:(UITapGestureRecognizer*)sender {
|
| - CGPoint touchPoint = [sender locationInView:_view];
|
| - _client.gestureInterpreter->Tap(touchPoint.x, touchPoint.y);
|
| -}
|
| -
|
| -// Change position of scene. This can occur during a pinch or long press.
|
| -// Or perform a Mouse Wheel Scroll.
|
| -// TODO(yuweih): The comment above doesn't seem right. Non-panning gestures
|
| -// should be moved out of this method.
|
| -- (IBAction)panGestureTriggered:(UIPanGestureRecognizer*)sender {
|
| - // TODO(yuweih): Need deceleration animation, probably in another class.
|
| - if ([sender state] == UIGestureRecognizerStateChanged &&
|
| - [sender numberOfTouches] == 1) {
|
| - CGPoint translation = [sender translationInView:_view];
|
| - _client.gestureInterpreter->Pan(translation.x, translation.y);
|
| -
|
| - // Reset translation so next iteration is relative
|
| - [sender setTranslation:CGPointZero inView:_view];
|
| - }
|
| -
|
| - // LOG_TRACE(INFO) << "panGestureTriggered";
|
| - // CGPoint translation = [sender translationInView:self.view];
|
| - // // If we start with 2 touches, and the pinch gesture is not in progress
|
| - // yet,
|
| - // // then disable it, so mouse scrolling and zoom do not occur at the same
|
| - // // time.
|
| - // if ([sender numberOfTouches] == 2 &&
|
| - // [sender state] == UIGestureRecognizerStateBegan &&
|
| - // !(_pinchRecognizer.state == UIGestureRecognizerStateBegan ||
|
| - // _pinchRecognizer.state == UIGestureRecognizerStateChanged)) {
|
| - // _pinchRecognizer.enabled = NO;
|
| - // }
|
| - //
|
| - // if (!_pinchRecognizer.enabled) {
|
| - // // Began with 2 touches, so this is a scroll event.
|
| - // translation.x *= kMouseWheelSensitivity;
|
| - // translation.y *= kMouseWheelSensitivity;
|
| - // // [Utility mouseScroll:_clientToHostProxy
|
| - // // at:_scene.mousePosition
|
| - // // delta:webrtc::DesktopVector(translation.x,
|
| - // translation.y)];
|
| - // } else {
|
| - // // Did not begin with 2 touches, doing a pan event.
|
| - // if ([sender state] == UIGestureRecognizerStateChanged) {
|
| - // CGPoint translation = [sender translationInView:self.view];
|
| - // BOOL shouldApplyPanAndTapBounding =
|
| - // _inputScheme == HostInputSchemeTouch &&
|
| - // [_longPressRecognizer state] != UIGestureRecognizerStateChanged;
|
| - //
|
| - // if (shouldApplyPanAndTapBounding) {
|
| - // // Reverse the orientation on both axes.
|
| - // translation = CGPointMake(-translation.x, -translation.y);
|
| - // }
|
| - //
|
| - // // if (shouldApplyPanAndTapBounding) {
|
| - // // // Stop the translation as soon as the view becomes anchored.
|
| - // // if ([SceneView
|
| - // // couldMouseMoveTowardAnchorWithTranslation:translation.x
|
| - // // isAnchoredLow:_scene.anchored.left
|
| - // // isAnchoredHigh:_scene.anchored
|
| - // // .right]) {
|
| - // // translation = CGPointMake(0, translation.y);
|
| - // // }
|
| - // //
|
| - // // if ([SceneView
|
| - // // couldMouseMoveTowardAnchorWithTranslation:translation.y
|
| - // // isAnchoredLow:_scene.anchored.top
|
| - // // isAnchoredHigh:_scene.anchored
|
| - // // .bottom])
|
| - // {
|
| - // // translation = CGPointMake(translation.x, 0);
|
| - // // }
|
| - // // }
|
| - //
|
| - // [self applySceneChange:translation scaleBy:1.0];
|
| - //
|
| - // if (_inputScheme == HostInputSchemeTouch &&
|
| - // [_longPressRecognizer state] == UIGestureRecognizerStateChanged
|
| - // &&
|
| - // [sender numberOfTouches] == 1) {
|
| - // // [_scene
|
| - // // setMouseLocationFromLocationInView:[sender
|
| - // // locationInView:self.view]];
|
| - //
|
| - // // [Utility moveMouse:_clientToHostProxy at:_scene.mousePosition];
|
| - // }
|
| - //
|
| - // } else if ([sender state] == UIGestureRecognizerStateEnded) {
|
| - // // After user removes their fingers from the screen
|
| - // // apply an acceleration effect.
|
| - // CGPoint velocity = [sender velocityInView:self.view];
|
| - //
|
| - // if (_inputScheme == HostInputSchemeTouch) {
|
| - // // Reverse the orientation on both axes.
|
| - // velocity = CGPointMake(-velocity.x, -velocity.y);
|
| - // }
|
| - // // [_scene setPanVelocity:velocity];
|
| - // }
|
| - // }
|
| - //
|
| - // // Finished the event chain.
|
| - // if (!([sender state] == UIGestureRecognizerStateBegan ||
|
| - // [sender state] == UIGestureRecognizerStateChanged)) {
|
| - // _pinchRecognizer.enabled = YES;
|
| - // }
|
| - //
|
| - // // Reset translation so next iteration is relative. Wait until a changed
|
| - // // event in order to also capture the portion of the translation that
|
| - // occurred
|
| - // // between the Began and Changed States.
|
| - // if ([sender state] == UIGestureRecognizerStateChanged) {
|
| - // [sender setTranslation:CGPointZero inView:self.view];
|
| - // }
|
| -}
|
| -
|
| -// Click-Drag mouse operation. This can occur during a Pan.
|
| -- (IBAction)longPressGestureTriggered:(UILongPressGestureRecognizer*)sender {
|
| - CGPoint touchPoint = [sender locationInView:_view];
|
| - remoting::GestureInterpreter::GestureState state;
|
| - switch ([sender state]) {
|
| - case UIGestureRecognizerStateBegan:
|
| - state = remoting::GestureInterpreter::GESTURE_BEGAN;
|
| - break;
|
| - case UIGestureRecognizerStateChanged:
|
| - state = remoting::GestureInterpreter::GESTURE_CHANGED;
|
| - break;
|
| - default:
|
| - state = remoting::GestureInterpreter::GESTURE_ENDED;
|
| - }
|
| - _client.gestureInterpreter->LongPress(touchPoint.x, touchPoint.y, state);
|
| -
|
| - // LOG_TRACE(INFO) << "longPressGestureTriggered";
|
| - // if ([sender state] == UIGestureRecognizerStateBegan) {
|
| - // if (_inputScheme == HostInputSchemeTouch) {
|
| - // CGPoint touchPoint = [sender locationInView:self.view];
|
| - // [_scene setMouseLocationFromLocationInView:touchPoint];
|
| - // }
|
| - // [_clientToHostProxy mouseAction:_scene.mousePosition
|
| - // wheelDelta:webrtc::DesktopVector(0, 0)
|
| - // whichButton:1
|
| - // buttonDown:YES];
|
| - // if (_inputScheme == HostInputSchemeTouch) {
|
| - // // location is going to be under the user's finger
|
| - // // create a bigger bubble.
|
| - // _circle.expandedRadius = 110.0f;
|
| - // } else {
|
| - // _circle.expandedRadius = 11.0f;
|
| - // }
|
| - //
|
| - // [_circle doExpandingAnimationAtLocation:[_scene mouseLocationInView]];
|
| - // } else if (!([sender state] == UIGestureRecognizerStateBegan ||
|
| - // [sender state] == UIGestureRecognizerStateChanged)) {
|
| - // [_clientToHostProxy mouseAction:_scene.mousePosition
|
| - // wheelDelta:webrtc::DesktopVector(0, 0)
|
| - // whichButton:1
|
| - // buttonDown:NO];
|
| - // if (_inputScheme == HostInputSchemeTouch) {
|
| - // // Return to the center.
|
| - // [_scene centerMouseInView];
|
| - // }
|
| - // }
|
| -}
|
| -
|
| -- (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
|
| - CGPoint touchPoint = [sender locationInView:_view];
|
| - _client.gestureInterpreter->TwoFingerTap(touchPoint.x, touchPoint.y);
|
| -}
|
| -
|
| -- (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender {
|
| - // LOG_TRACE(INFO) << "threeFingerTapGestureTriggered";
|
| - if (_inputScheme == HostInputSchemeTouch) {
|
| - // disabled
|
| - return;
|
| - }
|
| -
|
| - // if ([_scene containsTouchPoint:[sender locationInView:self.view]]) {
|
| - // [Utility middleClickOn:_clientToHostProxy at:_scene.mousePosition];
|
| - // }
|
| -}
|
| -
|
| -- (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender {
|
| - // LOG_TRACE(INFO) << "threeFingerPanGestureTriggered";
|
| - // if ([sender state] == UIGestureRecognizerStateChanged) {
|
| - // CGPoint translation = [sender translationInView:self.view];
|
| - // if (translation.y > 0) {
|
| - // // Swiped down - do nothing
|
| - // } else if (translation.y < 0) {
|
| - // // Swiped up
|
| - // [_keyEntryView becomeFirstResponder];
|
| - // }
|
| - // [sender setTranslation:CGPointZero inView:self.view];
|
| - // }
|
| -}
|
| -
|
| -- (IBAction)edgeGestureTriggered:(UIScreenEdgePanGestureRecognizer*)sender {
|
| - // LOG_TRACE(INFO) << "edgeGestureTriggered";
|
| -}
|
| -
|
| -- (IBAction)swipeGestureTriggered:(UISwipeGestureRecognizer*)sender {
|
| - // LOG_TRACE(INFO) << "swipeGestureTriggered";
|
| -}
|
| -
|
| -#pragma mark - UIGestureRecognizerDelegate
|
| -
|
| -// Allow panning and zooming to occur simultaneously.
|
| -// Allow panning and long press to occur simultaneously.
|
| -// Pinch requires 2 touches, and long press requires a single touch, so they are
|
| -// mutually exclusive regardless of if panning is the initiating gesture.
|
| -- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer
|
| - shouldRecognizeSimultaneouslyWithGestureRecognizer:
|
| - (UIGestureRecognizer*)otherGestureRecognizer {
|
| - if (gestureRecognizer == _pinchRecognizer ||
|
| - (gestureRecognizer == _panRecognizer)) {
|
| - if (otherGestureRecognizer == _pinchRecognizer ||
|
| - otherGestureRecognizer == _panRecognizer) {
|
| - return YES;
|
| - }
|
| - }
|
| -
|
| - if (gestureRecognizer == _longPressRecognizer ||
|
| - gestureRecognizer == _panRecognizer) {
|
| - if (otherGestureRecognizer == _longPressRecognizer ||
|
| - otherGestureRecognizer == _panRecognizer) {
|
| - return YES;
|
| - }
|
| - }
|
| -
|
| - if (gestureRecognizer == _twoFingerTapRecognizer &&
|
| - otherGestureRecognizer == _longPressRecognizer) {
|
| - return YES;
|
| - }
|
| -
|
| - if (gestureRecognizer == _panRecognizer &&
|
| - otherGestureRecognizer == _edgeGesture) {
|
| - return YES;
|
| - }
|
| - // TODO(nicholss): If we return NO here, it dismisses the other reconizers.
|
| - // As we add more types of reconizers, they need to be accounted for in the
|
| - // above logic.
|
| - return NO;
|
| -}
|
| -
|
| -@end
|
|
|