Line data Source code
1 0 : /* 2 : 3 : GameController+FullScreen.m 4 : 5 : 6 : Oolite 7 : Copyright (C) 2004-2013 Giles C Williams and contributors 8 : 9 : This program is free software; you can redistribute it and/or 10 : modify it under the terms of the GNU General Public License 11 : as published by the Free Software Foundation; either version 2 12 : of the License, or (at your option) any later version. 13 : 14 : This program is distributed in the hope that it will be useful, 15 : but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 : GNU General Public License for more details. 18 : 19 : You should have received a copy of the GNU General Public License 20 : along with this program; if not, write to the Free Software 21 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 22 : MA 02110-1301, USA. 23 : 24 : */ 25 : 26 : 27 : #import "GameController.h" 28 : #import "MyOpenGLView.h" 29 : #import "OOCollectionExtractors.h" 30 : 31 : 32 : #if OOLITE_MAC_OS_X // TEMP, should be used for SDL too 33 : 34 : #if OOLITE_MAC_OS_X 35 : 36 : #import "OOMacSnowLeopardFullScreenController.h" 37 : #import "OOMacSystemStandardFullScreenController.h" 38 : #import "OOPrimaryWindow.h" 39 : 40 : 41 : @interface GameController (OOPrimaryWindowDelegate) <OOPrimaryWindowDelegate> 42 : @end 43 : 44 : #endif 45 : 46 : 47 : @implementation GameController (FullScreen) 48 : 49 : - (void) setUpDisplayModes 50 : { 51 : #if OOLITE_MAC_OS_X 52 : OOFullScreenController *fullScreenController = nil; 53 : 54 : #if OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN 55 : if ([OOMacSystemStandardFullScreenController shouldUseSystemStandardFullScreenController]) 56 : { 57 : fullScreenController = [[OOMacSystemStandardFullScreenController alloc] initWithGameView:gameView]; 58 : } 59 : #endif 60 : 61 : if (fullScreenController == nil) 62 : { 63 : fullScreenController = [[OOMacSnowLeopardFullScreenController alloc] initWithGameView:gameView]; 64 : } 65 : #endif 66 : 67 : // Load preferred display mode, falling back to current mode if no preferences set. 68 : NSDictionary *currentMode = [fullScreenController currentDisplayMode]; 69 : NSUInteger width = [currentMode oo_unsignedIntegerForKey:kOODisplayWidth]; 70 : NSUInteger height = [currentMode oo_unsignedIntegerForKey:kOODisplayHeight]; 71 : NSUInteger refresh = [currentMode oo_unsignedIntegerForKey:kOODisplayRefreshRate]; 72 : 73 : NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 74 : width = [userDefaults oo_unsignedIntegerForKey:@"display_width" defaultValue:width]; 75 : height = [userDefaults oo_unsignedIntegerForKey:@"display_height" defaultValue:height]; 76 : refresh = [userDefaults oo_unsignedIntegerForKey:@"display_refresh" defaultValue:refresh]; 77 : 78 : [fullScreenController setDisplayWidth:width height:height refreshRate:refresh]; 79 : 80 : _fullScreenController = fullScreenController; 81 : } 82 : 83 : 84 : #if OOLITE_MAC_OS_X 85 : 86 : - (IBAction) toggleFullScreenAction:(id)sender 87 : { 88 : [self setFullScreenMode:![self inFullScreenMode]]; 89 : } 90 : 91 : 92 0 : - (void) toggleFullScreenCalledForWindow:(OOPrimaryWindow *)window withSender:(id)sender 93 : { 94 : [self toggleFullScreenAction:sender]; 95 : } 96 : 97 : #endif 98 : 99 : 100 : - (BOOL) inFullScreenMode 101 : { 102 : return [_fullScreenController inFullScreenMode]; 103 : } 104 : 105 : 106 : - (void) setFullScreenMode:(BOOL)value 107 : { 108 : if (value == [self inFullScreenMode]) return; 109 : 110 : [[NSUserDefaults standardUserDefaults] setBool:value forKey:@"fullscreen"]; 111 : 112 : if (value) 113 : { 114 : [_fullScreenController setFullScreenMode:YES]; 115 : } 116 : else 117 : { 118 : [_fullScreenController setFullScreenMode:NO]; 119 : } 120 : } 121 : 122 : 123 : - (void) exitFullScreenMode 124 : { 125 : [self setFullScreenMode:NO]; 126 : } 127 : 128 : 129 : - (BOOL) setDisplayWidth:(unsigned int)width Height:(unsigned int)height Refresh:(unsigned int)refreshRate 130 : { 131 : if ([_fullScreenController setDisplayWidth:width height:height refreshRate:refreshRate]) 132 : { 133 : NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 134 : 135 : [userDefaults setInteger:width forKey:@"display_width"]; 136 : [userDefaults setInteger:height forKey:@"display_height"]; 137 : [userDefaults setInteger:refreshRate forKey:@"display_refresh"]; 138 : 139 : [userDefaults synchronize]; 140 : 141 : return YES; 142 : } 143 : else 144 : { 145 : return NO; 146 : } 147 : } 148 : 149 : 150 : - (NSDictionary *) findDisplayModeForWidth:(unsigned int)d_width Height:(unsigned int)d_height Refresh:(unsigned int)d_refresh 151 : { 152 : return [_fullScreenController findDisplayModeForWidth:d_width height:d_height refreshRate:d_refresh]; 153 : } 154 : 155 : 156 : - (NSArray *) displayModes 157 : { 158 : return [_fullScreenController displayModes]; 159 : } 160 : 161 : 162 : - (NSUInteger) indexOfCurrentDisplayMode 163 : { 164 : return [_fullScreenController indexOfCurrentDisplayMode]; 165 : } 166 : 167 : 168 : - (void) pauseFullScreenModeToPerform:(SEL)selector onTarget:(id)target 169 : { 170 : [target performSelector:selector]; 171 : } 172 : 173 : @end 174 : 175 : #endif