Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / remoting / ios / ui / host_view_controller.h
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.
4
5 #ifndef REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_
6 #define REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_
7
8 #import <GLKit/GLKit.h>
9
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h"
12
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"
21
22 @interface HostViewController
23     : GLKViewController<PinEntryViewControllerDelegate,
24                         KeyInputDelegate,
25                         // Communication channel from HOST to CLIENT
26                         ClientProxyDelegate,
27                         UIGestureRecognizerDelegate,
28                         UIToolbarDelegate> {
29  @private
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;
46
47   KeyInput* _keyEntryView;
48   NSString* _statusMessage;
49
50   // The GLES2 context being drawn too.
51   EAGLContext* _context;
52
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
57   // cursor.
58   GLKBaseEffect* _effect;
59
60   // All the details needed to draw our GL Scene, and our two textures.
61   SceneView* _scene;
62   DesktopTexture* _desktop;
63   CursorTexture* _mouse;
64
65   // List of regions and data that have pending draws to |_desktop| .
66   ScopedVector<GLRegion> _glRegions;
67
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;
71
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;
75
76   // Communication channel from CLIENT to HOST
77   HostProxy* _clientToHostProxy;
78 }
79
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;
84
85 - (void)setHostDetails:(Host*)host
86              userEmail:(NSString*)userEmail
87     authorizationToken:(NSString*)authorizationToken;
88
89 // Zoom in/out
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;
97 // Right mouse click
98 - (IBAction)twoFingerTapGestureTriggered:(UITapGestureRecognizer*)sender;
99 // Middle mouse click
100 - (IBAction)threeFingerTapGestureTriggered:(UITapGestureRecognizer*)sender;
101 // Show hidden menus.  Swipe up for keyboard, swipe down for navigation menu
102 - (IBAction)threeFingerPanGestureTriggered:(UIPanGestureRecognizer*)sender;
103
104 // Do navigation 'back'
105 - (IBAction)barBtnNavigationBackPressed:(id)sender;
106 // Show keyboard
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;
112
113 @end
114
115 #endif  // REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_