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

Unified Diff: remoting/ios/ui/host_view_controller.h

Issue 186733007: iOS Chromoting Client (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months 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 side-by-side diff with in-line comments
Download patch
Index: remoting/ios/ui/host_view_controller.h
diff --git a/remoting/ios/ui/host_view_controller.h b/remoting/ios/ui/host_view_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..05afd0b71393dc460ce1a3f14423cfa0ee1872cf
--- /dev/null
+++ b/remoting/ios/ui/host_view_controller.h
@@ -0,0 +1,162 @@
+// 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 <GLKit/GLKit.h>
+
+#import "GTMOAuth2Authentication.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
+#include "third_party/webrtc/modules/desktop_capture/mouse_cursor.h"
+
+#import "remoting/ios/host.h"
+#import "remoting/ios/key_input.h"
+#import "remoting/ios/utility.h"
+#import "remoting/ios/bridge/client_controller.h"
+#import "remoting/ios/ui/pin_entry_view_controller.h"
+
+@interface HostViewController
+ : GLKViewController<PinEntryViewControllerDelegate,
+ KeyInputDelegate,
+ ClientControllerDelegate,
+ UIGestureRecognizerDelegate,
+ UIToolbarDelegate> {
+ @private
+ IBOutlet UIActivityIndicatorView* _busyIndicator;
+ IBOutlet UIBarButtonItem* _bbiHostAndStatus;
+ IBOutlet UIButton* _barBtnKeyboard;
+ IBOutlet UIButton* _barBtnNavigation;
+ IBOutlet UIButton* _barBtnMiddleMouse;
+ IBOutlet UIButton* _barBtnRightMouse;
+ IBOutlet UILongPressGestureRecognizer* _longPressRecognizer;
+ IBOutlet UIPanGestureRecognizer* _panRecognizer;
+ IBOutlet UIPanGestureRecognizer* _threeFingerPanRecognizer;
+ IBOutlet UIPinchGestureRecognizer* _pinchRecognizer;
+ IBOutlet UITapGestureRecognizer* _singleTapRecognizer;
+ IBOutlet UITapGestureRecognizer* _twoFingerTapRecognizer;
+ IBOutlet UITapGestureRecognizer* _threeFingerTapRecognizer;
+ IBOutlet UIToolbar* _viewToolbar;
+ IBOutlet UIToolbar* _viewHiddenToolbar;
+
+ KeyInput* _keyEntryView;
+ NSTimer* _updateDisplayTimer;
+
+ // The GLES2 context being drawn too.
+ EAGLContext* _context;
+
+ // The draw surface is a triangle strip (triangles defined by the intersecting
+ // vertexs) to create a rectangle surface.
+ // 1****3
+ // | / |
+ // | / |
+ // 2****4
+ // This also determines the resolution of our surface, being a unit (NxN) grid
+ // with finite divisions. For our surface N = 1, and the number of divisions
+ // respects the CLIENT's desktop resolution.
+ TexturedQuad _quad;
+ // 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.
+ GLuint _textureIds[2];
+
+ // GLKBaseEffect encapsulates the GL Shaders needed to draw at most two
+ // textures |_textureIds| given vectex information |_quad|. As well as
+ // the textures positions and lighting.
+ GLKBaseEffect* _effect;
+ // The possition of the scene is tracked in the prospective of the CLIENT
+ // resolution. The Z-axis is used to track the scale of the render, our scene
+ // never changes position on the Z-axis.
+ GLKVector3 _scenePosition;
+
+ // List of regions and data that have pending draws to a GL Texture
+ ScopedVector<GLRegion> _glRegions;
+ // Lock for |_glRegions|, regions are delivered from HOST on a network thread,
+ // and drawn to a GL Texture from a GL Context thread
+ NSLock* _glBufferLock;
+
+ // The current cursor
+ scoped_ptr<webrtc::MouseCursor> _cursor;
+ BOOL _needCursorRedraw;
+
+ // Lock for |_cursor|, cursor updates are delivered from HOST on a network
+ // thread, and drawn to a GL Texture from a GL Context thread
+ NSLock* _glCursorLock;
+ // Rectangle of the most recent cursor drawn to a GL Texture. On each
+ // successive frame when a new cursor is available this region is cleared on
+ // the GL Texture, so that the GL Texture is completely transparent again, and
+ // the cursor is then redrawn.
+ webrtc::DesktopRect _cursorDrawnToGL;
+
+ // Location of the mouse according to the CLIENT in the prospective of the
+ // HOST resolution
+ webrtc::DesktopVector _mousePosition;
+
+ BOOL _isAnchorRight;
+ BOOL _isAnchorLeft;
+ BOOL _isAnchorTop;
+ BOOL _isAnchorBottom;
+
+ // Descendent controller for the user to enter their PIN for the selected host
+ PinEntryViewController* _pinEntry;
+
+ // Communication channel from CLIENT to HOST
+ ClientController* _controller;
+
+ // Jabber supplied Details for the host being viewed
+ Host* _host;
+ // Authorization agent for the host being viewed
+ GTMOAuth2Authentication* _authorization;
+
+ // Cache of the CLIENT's desktop resolution.
+ webrtc::DesktopSize _contentSize;
+ // Cache of the HOST's desktop resolution.
+ webrtc::DesktopSize _frameSize;
+
+ // Indicates that the |_frameSize| has changed, when this happens
+ // |_textureIds| must be re initilized at the new size.
+ BOOL _sizeChanged;
+
+ // You can not change the size of a toolbar, so we rely on the value being
+ // wellknown. When |_viewToolbar| is hidden change this value to zero, when
+ // its shown the value is 40
+ int _toolbarHeight;
+
+ // When a user pans they expect the view to experience accelleration after
+ // they release the pan gesture. We track that velocity vecter as a position
+ // delta factored over the frame rate of the GL Context. Velocity is
+ // accounted as a float.
+ CGPoint _panVelocity;
+}
+
+- (void)setHostDetails:(Host*)host
+ authorization:(GTMOAuth2Authentication*)authorization;
+
+// 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;
+// Toggle Toolbar's hidden state
+- (IBAction)barBtnToolBarHidePressed:(id)sender;
+
+@end
+
+#endif // REMOTING_IOS_UI_HOST_VIEW_CONTROLLER_H_

Powered by Google App Engine
This is Rietveld 408576698