// Copyright 2014 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. #ifndef REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_ #define REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_ #import #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #import "remoting/ios/host.h" #import "remoting/ios/key_input.h" #import "remoting/ios/utility.h" #import "remoting/ios/bridge/host_proxy.h" #import "remoting/ios/ui/desktop_texture.h" #import "remoting/ios/ui/cursor_texture.h" #import "remoting/ios/ui/pin_entry_view_controller.h" #import "remoting/ios/ui/scene_view.h" @interface HostViewController : GLKViewController { @private IBOutlet UIActivityIndicatorView* _busyIndicator; IBOutlet UIButton* _barBtnDisconnect; IBOutlet UIButton* _barBtnKeyboard; IBOutlet UIButton* _barBtnNavigation; IBOutlet UIButton* _barBtnCtrlAltDel; IBOutlet UILongPressGestureRecognizer* _longPressRecognizer; IBOutlet UIPanGestureRecognizer* _panRecognizer; IBOutlet UIPanGestureRecognizer* _threeFingerPanRecognizer; IBOutlet UIPinchGestureRecognizer* _pinchRecognizer; IBOutlet UITapGestureRecognizer* _singleTapRecognizer; IBOutlet UITapGestureRecognizer* _twoFingerTapRecognizer; IBOutlet UITapGestureRecognizer* _threeFingerTapRecognizer; IBOutlet UIToolbar* _toolbar; IBOutlet UIToolbar* _hiddenToolbar; IBOutlet NSLayoutConstraint* _toolBarYPosition; IBOutlet NSLayoutConstraint* _hiddenToolbarYPosition; KeyInput* _keyEntryView; NSString* _statusMessage; // The GLES2 context being drawn too. EAGLContext* _context; // GLKBaseEffect encapsulates the GL Shaders needed to draw at most two // textures |_textureIds| given vertex information. The draw surface consists // of two layers (GL Textures). The bottom layer is the desktop of the HOST. // The top layer is mostly transparent and is used to overlay the current // cursor. GLKBaseEffect* _effect; // All the details needed to draw our GL Scene, and our two textures. SceneView* _scene; DesktopTexture* _desktop; CursorTexture* _mouse; // List of regions and data that have pending draws to |_desktop| . ScopedVector _glRegions; // Lock for |_glRegions|, regions are delivered from HOST on another thread, // and drawn to |_desktop| from a GL Context thread NSLock* _glBufferLock; // Lock for |_mouse.cursor|, cursor updates are delivered from HOST on another // thread, and drawn to |_mouse| from a GL Context thread NSLock* _glCursorLock; // Communication channel from CLIENT to HOST HostProxy* _clientToHostProxy; } // Details for the host and user @property(nonatomic, readonly) Host* host; @property(nonatomic, readonly) NSString* userEmail; @property(nonatomic, readonly) NSString* userAuthorizationToken; - (void)setHostDetails:(Host*)host userEmail:(NSString*)userEmail authorizationToken:(NSString*)authorizationToken; // Zoom in/out - (IBAction)pinchGestureTriggered:(UIPinchGestureRecognizer*)sender; // Left mouse click, moves cursor - (IBAction)tapGestureTriggered:(UITapGestureRecognizer*)sender; // Scroll the view in 2d - (IBAction)panGestureTriggered:(UIPanGestureRecognizer*)sender; // Right mouse click and drag, moves cursor - (IBAction)longPressGestureTriggered:(UILongPressGestureRecognizer*)sender; // Right mouse click - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender; // Middle mouse click - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender; // Show hidden menus. Swipe up for keyboard, swipe down for navigation menu - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender; // Do navigation 'back' - (IBAction)barBtnNavigationBackPressed:(id)sender; // Show keyboard - (IBAction)barBtnKeyboardPressed:(id)sender; // Trigger |_toolbar| animation - (IBAction)barBtnToolBarHidePressed:(id)sender; // Send Keys for ctrl, atl, delete - (IBAction)barBtnCtrlAltDelPressed:(id)sender; @end #endif // REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_