Index: remoting/ios/utility.mm |
diff --git a/remoting/ios/utility.mm b/remoting/ios/utility.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..212299783b7015b3fe1bb38b183cacf55ee0e723 |
--- /dev/null |
+++ b/remoting/ios/utility.mm |
@@ -0,0 +1,150 @@ |
+// 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. |
+ |
+#if !defined(__has_feature) || !__has_feature(objc_arc) |
+#error "This file requires ARC support." |
+#endif |
+ |
+#import "Utility.h" |
+ |
+@implementation Utility |
+ |
++ (BOOL)isPad { |
+ return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); |
+} |
+ |
++ (BOOL)isInLandscapeMode { |
+ UIInterfaceOrientation orientation = |
+ [UIApplication sharedApplication].statusBarOrientation; |
+ |
+ if ((orientation == UIInterfaceOrientationLandscapeLeft) || |
+ (orientation == UIInterfaceOrientationLandscapeRight)) { |
+ return YES; |
+ } |
+ return NO; |
+} |
+ |
++ (CGSize)getOrientatedSize:(CGSize)size |
+ shouldWidthBeLongestSide:(BOOL)shouldWidthBeLongestSide { |
+ if (shouldWidthBeLongestSide && (size.height > size.width)) { |
+ return CGSizeMake(size.height, size.width); |
+ } |
+ return size; |
+} |
+ |
++ (void)showAlert:(NSString*)title message:(NSString*)message { |
+ UIAlertView* alert; |
+ alert = [[UIAlertView alloc] init]; |
+ alert.title = title; |
+ alert.message = message; |
+ alert.delegate = nil; |
+ [alert addButtonWithTitle:@"OK"]; |
+ [alert show]; |
+} |
+ |
++ (NSString*)appVersionNumberDisplayString { |
+ NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
+ |
+ NSString* majorVersion = |
+ [infoDictionary objectForKey:@"CFBundleShortVersionString"]; |
+ NSString* minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"]; |
+ |
+ return [NSString |
+ stringWithFormat:@"Version %@ (%@)", majorVersion, minorVersion]; |
+} |
+ |
++ (void)bindTextureForIOS:(GLuint)glName { |
+ glBindTexture(GL_TEXTURE_2D, glName); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
+} |
+ |
++ (void)logGLErrorCode:(NSString*)funcName { |
+ GLenum errorCode = 1; |
+ |
+ while (errorCode != 0) { |
+ errorCode = glGetError(); // I don't know why this is returning an error |
+ // on the first call to this function, but if I |
+ // don't read it, then stuff doesn't work... |
+#if DEBUG |
+ if (errorCode != 0) { |
+ NSLog(@"glerror in %@: %X", funcName, errorCode); |
+ } |
+#endif // DEBUG |
+ } |
+} |
+ |
++ (void)drawSubRectToGLFromRectOfSize:(const webrtc::DesktopSize&)rectSize |
+ subRect:(const webrtc::DesktopRect&)subRect |
+ data:(const uint8_t*)data { |
+ DCHECK(rectSize.width() >= subRect.width()); |
+ DCHECK(rectSize.height() >= subRect.height()); |
+ DCHECK(rectSize.width() >= (subRect.left() + subRect.width())); |
+ DCHECK(rectSize.height() >= (subRect.top() + subRect.height())); |
+ DCHECK(data); |
+ |
+ glTexSubImage2D(GL_TEXTURE_2D, |
+ 0, |
+ subRect.left(), |
+ subRect.top(), |
+ subRect.width(), |
+ subRect.height(), |
+ GL_RGBA, |
+ GL_UNSIGNED_BYTE, |
+ data); |
+} |
+ |
++ (void)moveMouse:(HostProxy*)controller |
+ at:(const webrtc::DesktopVector&)point { |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:0 |
+ buttonDown:NO]; |
+} |
+ |
++ (void)leftClickOn:(HostProxy*)controller |
+ at:(const webrtc::DesktopVector&)point { |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:1 |
+ buttonDown:YES]; |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:1 |
+ buttonDown:NO]; |
+} |
+ |
++ (void)middleClickOn:(HostProxy*)controller |
+ at:(const webrtc::DesktopVector&)point { |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:2 |
+ buttonDown:YES]; |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:2 |
+ buttonDown:NO]; |
+} |
+ |
++ (void)rightClickOn:(HostProxy*)controller |
+ at:(const webrtc::DesktopVector&)point { |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:3 |
+ buttonDown:YES]; |
+ [controller mouseAction:point |
+ wheelDelta:webrtc::DesktopVector(0, 0) |
+ whichButton:3 |
+ buttonDown:NO]; |
+} |
+ |
++ (void)mouseScroll:(HostProxy*)controller |
+ at:(const webrtc::DesktopVector&)point |
+ delta:(const webrtc::DesktopVector&)delta { |
+ [controller mouseAction:point wheelDelta:delta whichButton:0 buttonDown:NO]; |
+} |
+ |
+@end |