1 // Copyright 2014 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.
5 #ifndef REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_
6 #define REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_
8 #import <GLKit/GLKit.h>
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
13 #import "remoting/ios/host.h"
14 #import "remoting/ios/key_input.h"
15 #import "remoting/ios/utility.h"
16 #import "remoting/ios/bridge/host_proxy.h"
17 #import "remoting/ios/ui/desktop_texture.h"
18 #import "remoting/ios/ui/cursor_texture.h"
19 #import "remoting/ios/ui/pin_entry_view_controller.h"
20 #import "remoting/ios/ui/scene_view.h"
22 @interface HostViewController
23 : GLKViewController<PinEntryViewControllerDelegate,
25 // Communication channel from HOST to CLIENT
27 UIGestureRecognizerDelegate,
30 IBOutlet UIActivityIndicatorView* _busyIndicator;
31 IBOutlet UIButton* _barBtnDisconnect;
32 IBOutlet UIButton* _barBtnKeyboard;
33 IBOutlet UIButton* _barBtnNavigation;
34 IBOutlet UIButton* _barBtnCtrlAltDel;
35 IBOutlet UILongPressGestureRecognizer* _longPressRecognizer;
36 IBOutlet UIPanGestureRecognizer* _panRecognizer;
37 IBOutlet UIPanGestureRecognizer* _threeFingerPanRecognizer;
38 IBOutlet UIPinchGestureRecognizer* _pinchRecognizer;
39 IBOutlet UITapGestureRecognizer* _singleTapRecognizer;
40 IBOutlet UITapGestureRecognizer* _twoFingerTapRecognizer;
41 IBOutlet UITapGestureRecognizer* _threeFingerTapRecognizer;
42 IBOutlet UIToolbar* _toolbar;
43 IBOutlet UIToolbar* _hiddenToolbar;
44 IBOutlet NSLayoutConstraint* _toolBarYPosition;
45 IBOutlet NSLayoutConstraint* _hiddenToolbarYPosition;
47 KeyInput* _keyEntryView;
48 NSString* _statusMessage;
50 // The GLES2 context being drawn too.
51 EAGLContext* _context;
53 // GLKBaseEffect encapsulates the GL Shaders needed to draw at most two
54 // textures |_textureIds| given vertex information. The draw surface consists
55 // of two layers (GL Textures). The bottom layer is the desktop of the HOST.
56 // The top layer is mostly transparent and is used to overlay the current
58 GLKBaseEffect* _effect;
60 // All the details needed to draw our GL Scene, and our two textures.
62 DesktopTexture* _desktop;
63 CursorTexture* _mouse;
65 // List of regions and data that have pending draws to |_desktop| .
66 ScopedVector<GLRegion> _glRegions;
68 // Lock for |_glRegions|, regions are delivered from HOST on another thread,
69 // and drawn to |_desktop| from a GL Context thread
70 NSLock* _glBufferLock;
72 // Lock for |_mouse.cursor|, cursor updates are delivered from HOST on another
73 // thread, and drawn to |_mouse| from a GL Context thread
74 NSLock* _glCursorLock;
76 // Communication channel from CLIENT to HOST
77 HostProxy* _clientToHostProxy;
80 // Details for the host and user
81 @property(nonatomic, readonly) Host* host;
82 @property(nonatomic, readonly) NSString* userEmail;
83 @property(nonatomic, readonly) NSString* userAuthorizationToken;
85 - (void)setHostDetails:(Host*)host
86 userEmail:(NSString*)userEmail
87 authorizationToken:(NSString*)authorizationToken;
90 - (IBAction)pinchGestureTriggered:(UIPinchGestureRecognizer*)sender;
91 // Left mouse click, moves cursor
92 - (IBAction)tapGestureTriggered:(UITapGestureRecognizer*)sender;
93 // Scroll the view in 2d
94 - (IBAction)panGestureTriggered:(UIPanGestureRecognizer*)sender;
95 // Right mouse click and drag, moves cursor
96 - (IBAction)longPressGestureTriggered:(UILongPressGestureRecognizer*)sender;
98 - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender;
100 - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender;
101 // Show hidden menus. Swipe up for keyboard, swipe down for navigation menu
102 - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender;
104 // Do navigation 'back'
105 - (IBAction)barBtnNavigationBackPressed:(id)sender;
107 - (IBAction)barBtnKeyboardPressed:(id)sender;
108 // Trigger |_toolbar| animation
109 - (IBAction)barBtnToolBarHidePressed:(id)sender;
110 // Send Keys for ctrl, atl, delete
111 - (IBAction)barBtnCtrlAltDelPressed:(id)sender;
115 #endif // REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_