• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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#if !defined(__has_feature) || !__has_feature(objc_arc)
6#error "This file requires ARC support."
7#endif
8
9#import "Utility.h"
10
11@implementation Utility
12
13+ (BOOL)isPad {
14  return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
15}
16
17+ (BOOL)isInLandscapeMode {
18  UIInterfaceOrientation orientation =
19      [UIApplication sharedApplication].statusBarOrientation;
20
21  if ((orientation == UIInterfaceOrientationLandscapeLeft) ||
22      (orientation == UIInterfaceOrientationLandscapeRight)) {
23    return YES;
24  }
25  return NO;
26}
27
28+ (CGSize)getOrientatedSize:(CGSize)size
29    shouldWidthBeLongestSide:(BOOL)shouldWidthBeLongestSide {
30  if (shouldWidthBeLongestSide && (size.height > size.width)) {
31    return CGSizeMake(size.height, size.width);
32  }
33  return size;
34}
35
36+ (void)showAlert:(NSString*)title message:(NSString*)message {
37  UIAlertView* alert;
38  alert = [[UIAlertView alloc] init];
39  alert.title = title;
40  alert.message = message;
41  alert.delegate = nil;
42  [alert addButtonWithTitle:@"OK"];
43  [alert show];
44}
45
46+ (NSString*)appVersionNumberDisplayString {
47  NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
48
49  NSString* majorVersion =
50      [infoDictionary objectForKey:@"CFBundleShortVersionString"];
51  NSString* minorVersion = [infoDictionary objectForKey:@"CFBundleVersion"];
52
53  return [NSString
54      stringWithFormat:@"Version %@ (%@)", majorVersion, minorVersion];
55}
56
57+ (void)bindTextureForIOS:(GLuint)glName {
58  glBindTexture(GL_TEXTURE_2D, glName);
59  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
60  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
61  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
62  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
63}
64
65+ (void)logGLErrorCode:(NSString*)funcName {
66  GLenum errorCode = 1;
67
68  while (errorCode != 0) {
69    errorCode = glGetError();  // I don't know why this is returning an error
70                               // on the first call to this function, but if I
71                               // don't read it, then stuff doesn't work...
72#if DEBUG
73    if (errorCode != 0) {
74      NSLog(@"glerror in %@: %X", funcName, errorCode);
75    }
76#endif  // DEBUG
77  }
78}
79
80+ (void)drawSubRectToGLFromRectOfSize:(const webrtc::DesktopSize&)rectSize
81                              subRect:(const webrtc::DesktopRect&)subRect
82                                 data:(const uint8_t*)data {
83  DCHECK(rectSize.width() >= subRect.width());
84  DCHECK(rectSize.height() >= subRect.height());
85  DCHECK(rectSize.width() >= (subRect.left() + subRect.width()));
86  DCHECK(rectSize.height() >= (subRect.top() + subRect.height()));
87  DCHECK(data);
88
89  glTexSubImage2D(GL_TEXTURE_2D,
90                  0,
91                  subRect.left(),
92                  subRect.top(),
93                  subRect.width(),
94                  subRect.height(),
95                  GL_RGBA,
96                  GL_UNSIGNED_BYTE,
97                  data);
98}
99
100+ (void)moveMouse:(HostProxy*)controller
101               at:(const webrtc::DesktopVector&)point {
102  [controller mouseAction:point
103               wheelDelta:webrtc::DesktopVector(0, 0)
104              whichButton:0
105               buttonDown:NO];
106}
107
108+ (void)leftClickOn:(HostProxy*)controller
109                 at:(const webrtc::DesktopVector&)point {
110  [controller mouseAction:point
111               wheelDelta:webrtc::DesktopVector(0, 0)
112              whichButton:1
113               buttonDown:YES];
114  [controller mouseAction:point
115               wheelDelta:webrtc::DesktopVector(0, 0)
116              whichButton:1
117               buttonDown:NO];
118}
119
120+ (void)middleClickOn:(HostProxy*)controller
121                   at:(const webrtc::DesktopVector&)point {
122  [controller mouseAction:point
123               wheelDelta:webrtc::DesktopVector(0, 0)
124              whichButton:2
125               buttonDown:YES];
126  [controller mouseAction:point
127               wheelDelta:webrtc::DesktopVector(0, 0)
128              whichButton:2
129               buttonDown:NO];
130}
131
132+ (void)rightClickOn:(HostProxy*)controller
133                  at:(const webrtc::DesktopVector&)point {
134  [controller mouseAction:point
135               wheelDelta:webrtc::DesktopVector(0, 0)
136              whichButton:3
137               buttonDown:YES];
138  [controller mouseAction:point
139               wheelDelta:webrtc::DesktopVector(0, 0)
140              whichButton:3
141               buttonDown:NO];
142}
143
144+ (void)mouseScroll:(HostProxy*)controller
145                 at:(const webrtc::DesktopVector&)point
146              delta:(const webrtc::DesktopVector&)delta {
147  [controller mouseAction:point wheelDelta:delta whichButton:0 buttonDown:NO];
148}
149
150@end