Oolite 1.91.0.7604-240417-a536cbe
Loading...
Searching...
No Matches
OOMacSystemStandardFullScreenController.m
Go to the documentation of this file.
1/*
2
3OOMacSystemStandardFullScreenController.m
4
5
6Oolite
7Copyright (C) 2004-2013 Giles C Williams and contributors
8
9This program is free software; you can redistribute it and/or
10modify it under the terms of the GNU General Public License
11as published by the Free Software Foundation; either version 2
12of the License, or (at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with this program; if not, write to the Free Software
21Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22MA 02110-1301, USA.
23
24*/
25
27
28#if OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN
29
30
31#import "MyOpenGLView.h"
32#import "OOLogging.h"
33#import "OOPrimaryWindow.h"
35
36
37#ifndef NSAppKitVersionNumber10_7
38#define NSAppKitVersionNumber10_7 1138
39#endif
40
41
42@implementation OOMacSystemStandardFullScreenController
43
44+ (BOOL) shouldUseSystemStandardFullScreenController
45{
46 if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_6)
47 {
48 // Never on 10.6 or earlier; the necessary API doesn't exist.
49 return NO;
50 }
51
52 // If safe to use, allow override for debugging.
53 NSString *override = [[NSUserDefaults standardUserDefaults] stringForKey:@"full-screen-mode-override"];
54 if (override != nil)
55 {
56 if ([override isEqualToString:@"lion"]) return YES;
57 if ([override isEqualToString:@"snow-leopard"]) return NO;
58 }
59
60 if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7)
61 {
62 // Always use on 10.8 or later.
63 return YES;
64 }
65
66 return NSScreen.screens.count == 1; // Use if there's a single screen on 10.7.
67}
68
69
70- (BOOL) inFullScreenMode
71{
72 return ([NSApp presentationOptions] & NSApplicationPresentationFullScreen) != 0;
73}
74
75
76- (void) setFullScreenMode:(BOOL)value
77{
78 if (value != self.fullScreenMode)
79 {
80 OOPrimaryWindow *window = (OOPrimaryWindow *)self.gameView.window;
81 NSAssert([window isKindOfClass:OOPrimaryWindow.class], @"Incorrect UI setup; main game window should be OOPrimaryWindow.");
82
83 [window makeKeyAndOrderFront:nil];
84 [window standardToggleFullScreen:nil];
85 }
86}
87
88
89- (NSArray *) displayModes
90{
91 NSSize size = self.gameView.window.frame.size;
92 NSDictionary *fakeMode = [NSDictionary dictionaryWithObjectsAndKeys:
93 [NSNumber numberWithUnsignedInt:size.width], kOODisplayWidth,
94 [NSNumber numberWithUnsignedInt:size.height], kOODisplayHeight,
95 nil];
96 return [NSArray arrayWithObject:fakeMode];
97}
98
99
100- (NSUInteger) indexOfCurrentDisplayMode
101{
102 return 0;
103}
104
105
106- (BOOL) setDisplayWidth:(NSUInteger)width height:(NSUInteger)height refreshRate:(NSUInteger)refresh
107{
108 return NO;
109}
110
111
112- (NSDictionary *) findDisplayModeForWidth:(NSUInteger)width height:(NSUInteger)height refreshRate:(NSUInteger)refresh
113{
114 NSDictionary *fakeMode = [self.displayModes objectAtIndex:0];
115 if (width == [fakeMode oo_unsignedIntegerForKey:kOODisplayWidth] &&
116 height == [fakeMode oo_unsignedIntegerForKey:kOODisplayHeight])
117 {
118 return fakeMode;
119 }
120 return nil;
121}
122
123
124- (void) noteMouseInteractionModeChangedFrom:(OOMouseInteractionMode)oldMode to:(OOMouseInteractionMode)newMode
125{
126 [self.gameView noteMouseInteractionModeChangedFrom:oldMode to:newMode];
127}
128
129@end
130
131#endif
#define kOODisplayHeight
#define kOODisplayWidth
OOMouseInteractionMode
return nil
voidpf void uLong size
Definition ioapi.h:134