Oolite 1.91.0.7658-250404-b1488af
All Classes Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
MyOpenGLView Class Reference

#include <MyOpenGLView.h>

+ Inheritance diagram for MyOpenGLView:
+ Collaboration diagram for MyOpenGLView:

Instance Methods

(void) - initKeyMappingData
 
(void) - setStringInput:
 
(void) - allowStringInput:
 
(enum StringInput- allowingStringInput
 
(NSString *) - typedString
 
(void) - resetTypedString
 
(void) - setTypedString:
 
(NSSize) - viewSize
 
(NSSize) - backingViewSize
 
(GLfloat) - display_z
 
(GLfloat) - x_offset
 
(GLfloat) - y_offset
 
(GameController *) - gameController
 
(void) - setGameController:
 
(void) - noteMouseInteractionModeChangedFrom:to:
 
(void) - initialiseGLWithSize:
 
(NSData *) - pixelFormatAttributes
 
(void) - drawRect:
 
(void) - updateScreen
 
(void) - pollControls
 
(void) - stringToClipboard:
 
(BOOL) - snapShot:
 
(void) - mouseDown:
 
(void) - mouseUp:
 
(void) - resetMouse
 
(void) - setVirtualJoystick:vmx:
 
(NSPoint) - virtualJoystickPosition
 
(void) - clearKeys
 
(void) - clearMouse
 
(void) - clearKey:
 
(BOOL) - isAlphabetKeyDown
 
(void) - suppressKeysUntilKeyUp
 
(BOOL) - isDown:
 
(BOOL) - isOptDown
 
(BOOL) - isCtrlDown
 
(BOOL) - isCommandDown
 
(BOOL) - isShiftDown
 
(BOOL) - isCapsLockOn
 
(BOOL) - lastKeyWasShifted
 
(int- numKeys
 
(int- mouseWheelState
 
(float) - mouseWheelDelta
 
(void) - setMouseWheelDelta:
 
(BOOL) - isCommandQDown
 
(BOOL) - isCommandFDown
 
(void) - clearCommandF
 
(OOOpenGLMatrixManager *) - getOpenGLMatrixManager
 
(void) - dumpRGBAToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpRGBToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpGrayToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpGrayAlphaToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes:
 
(void) - setGammaValue:
 
(float) - gammaValue
 
(void) - setFov:fromFraction:
 
(float) - fov:
 
(id) - init
 
(void) - initSplashScreen
 
(void) - endSplashScreen
 
(void) - autoShowMouse
 
(void) - initKeyMappingData
 
(void) - setStringInput:
 
(void) - allowStringInput:
 
(enum StringInput- allowingStringInput
 
(NSString *) - typedString
 
(void) - resetTypedString
 
(void) - setTypedString:
 
(NSSize) - viewSize
 
(NSSize) - backingViewSize
 
(GLfloat) - display_z
 
(GLfloat) - x_offset
 
(GLfloat) - y_offset
 
(GameController *) - gameController
 
(void) - setGameController:
 
(void) - noteMouseInteractionModeChangedFrom:to:
 
(void) - initialiseGLWithSize:
 
(void) - initialiseGLWithSize:useVideoMode:
 
(BOOL) - isRunningOnPrimaryDisplayDevice
 
(float) - colorSaturation
 
(void) - adjustColorSaturation:
 
(BOOL) - hdrOutput
 
(BOOL) - isOutputDisplayHDREnabled
 
(void) - grabMouseInsideGameWindow:
 
(void) - stringToClipboard:
 
(void) - drawRect:
 
(void) - updateScreen
 
(void) - updateScreenWithVideoMode:
 
(void) - display
 
(BOOL) - snapShot:
 
(BOOL) - pngSaveSurface:withSurface:
 
(NSRect) - bounds
 
(void) - setFullScreenMode:
 
(BOOL) - inFullScreenMode
 
(void) - toggleScreenMode
 
(void) - setDisplayMode:fullScreen:
 
(int- indexOfCurrentSize
 
(void) - setScreenSize:
 
(NSMutableArray *) - getScreenSizeArray
 
(void) - populateFullScreenModelist
 
(NSSize) - modeAsSize:
 
(void) - saveWindowSize:
 
(NSSize) - loadWindowSize
 
(int- loadFullscreenSettings
 
(int- findDisplayModeForWidth:Height:Refresh:
 
(NSSize) - currentScreenSize
 
(void) - pollControls
 
(void) - setVirtualJoystick:vmx:
 
(NSPoint) - virtualJoystickPosition
 
(void) - clearKeys
 
(void) - clearMouse
 
(void) - clearKey:
 
(void) - resetMouse
 
(BOOL) - isAlphabetKeyDown
 
(void) - suppressKeysUntilKeyUp
 
(BOOL) - isDown:
 
(BOOL) - isOptDown
 
(BOOL) - isCtrlDown
 
(BOOL) - isCommandDown
 
(BOOL) - isShiftDown
 
(BOOL) - isCapsLockOn
 
(BOOL) - lastKeyWasShifted
 
(int- numKeys
 
(int- mouseWheelState
 
(float) - mouseWheelDelta
 
(void) - setMouseWheelDelta:
 
(BOOL) - isCommandQDown
 
(BOOL) - isCommandFDown
 
(void) - clearCommandF
 
(void) - setMouseInDeltaMode:
 
(void) - setGammaValue:
 
(float) - gammaValue
 
(void) - setFov:fromFraction:
 
(float) - fov:
 
(void) - setMsaa:
 
(BOOL) - msaa
 
(OOOpenGLMatrixManager *) - getOpenGLMatrixManager
 
(void) - dumpRGBAToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpRGBToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpGrayToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpGrayAlphaToFileNamed:bytes:width:height:rowBytes:
 
(void) - dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes:
 
(id) - initWithFrame: [implementation]
 
(void) - dealloc [implementation]
 
(void) - noteMovedToBadDisplay [implementation]
 
(void) - update [implementation]
 
(BOOL) - acceptsFirstResponder [implementation]
 
(void) - keyUp: [implementation]
 
(void) - keyDown: [implementation]
 
(void) - flagsChanged: [implementation]
 
(void) - mouseMoved: [implementation]
 
(void) - mouseDragged: [implementation]
 
(void) - scrollWheel: [implementation]
 
(void) - otherMouseDragged: [implementation]
 
(void) - rightMouseDown: [implementation]
 
(void) - rightMouseUp: [implementation]
 
(void) - touchesEndedWithEvent: [implementation]
 
(void) - recenterVirtualJoystick [implementation]
 
(int- translateKeyCode: [implementation]
 
(void) - createSurface [implementation]
 
(void) - resetSDLKeyModifiers [implementation]
 
(void) - setWindowBorderless: [implementation]
 
(void) - handleStringInput:keyID: [implementation]
 
(BOOL) - isCommandModifierKeyDown [implementation]
 

Class Methods

(BOOL) + pollShiftKey
 
(NSMutableDictionary *) + getNativeSize
 
(BOOL) + pollShiftKey
 
(static void) + GetDesiredCursorState [implementation]
 
(static void) + ApplyCursorState [implementation]
 
(static void) + UnapplyCursorState [implementation]
 

Protected Attributes

NSPoint mouseDragStartPoint
 
BOOL mouseWarped
 
NSTimeInterval timeSinceLastMouseWheel
 
float _mouseVirtualStickSensitivityFactor
 
double squareX
 
double squareY
 
NSRect bounds
 
float _gamma
 
BOOL _msaa
 
NSMutableArray * screenSizes
 
int currentSize
 
BOOL fullScreen
 
NSSize currentWindowSize
 
SDL_Surface * surface
 
BOOL showSplashScreen
 
float _colorSaturation
 
BOOL _hdrOutput
 
BOOL grabMouseStatus
 
NSSize firstScreen
 
BOOL mouseInDeltaMode
 

Private Attributes

GameControllergameController
 
BOOL keys [NUM_KEYS]
 
int scancode2Unicode [NUM_KEYS]
 
NSDictionary * keyMappings_normal
 
NSDictionary * keyMappings_shifted
 
BOOL suppressKeys
 
BOOL opt
 
BOOL ctrl
 
BOOL command
 
BOOL shift
 
BOOL capsLockOn
 
BOOL lastKeyShifted
 
BOOL allowingStringInput
 
BOOL isAlphabetKeyDown
 
BOOL commandQ
 
BOOL commandF
 
BOOL f12
 
int keycodetrans [255]
 
BOOL m_glContextInitialized
 
NSTimeInterval timeIntervalAtLastClick
 
NSTimeInterval timeIntervalAtLastMouseWheel
 
BOOL doubleClick
 
NSMutableString * typedString
 
NSPoint virtualJoystickPosition
 
float _mouseWheelDelta
 
NSSize viewSize
 
NSSize backingViewSize
 
GLfloat display_z
 
GLfloat x_offset
 
GLfloat y_offset
 
float _fov
 
int _virtualScreen
 
NSData * _pixelFormatAttributes
 
OOOpenGLMatrixManagermatrixManager
 

Detailed Description

Definition at line 123 of file MyOpenGLView.h.

Method Documentation

◆ acceptsFirstResponder

- (BOOL) acceptsFirstResponder
implementation

Definition at line 547 of file MyOpenGLView.m.

548{
549 return YES;
550}

References acceptsFirstResponder.

Referenced by acceptsFirstResponder.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ adjustColorSaturation:

- (void) adjustColorSaturation: (float) colorSaturationAdjustment

Definition at line 1599 of file MyOpenGLView.m.

1599 :(float)colorSaturationAdjustment;
1600{
1601 _colorSaturation += colorSaturationAdjustment;
1603}
#define MAX_COLOR_SATURATION
float _colorSaturation

References _colorSaturation, and MAX_COLOR_SATURATION.

Referenced by PlayerEntity(OOPrivate)::gameOverFadeToBW, and GlobalSetColorSaturation().

+ Here is the caller graph for this function:

◆ allowingStringInput [1/2]

- (enum StringInput) allowingStringInput

References allowingStringInput.

◆ allowingStringInput [2/2]

- (enum StringInput) allowingStringInput

References allowingStringInput.

◆ allowStringInput: [1/2]

- (void) allowStringInput: (BOOL) value

Definition at line 584 of file MyOpenGLView.m.

584 : (BOOL) value
585{
586 if (value)
588 else
590}
@ gvStringInputAlpha
@ gvStringInputNo
BOOL allowingStringInput

References allowingStringInput, gvStringInputAlpha, and gvStringInputNo.

Referenced by PlayerEntity(OOControlsPrivate)::pollApplicationControls, PlayerEntity(OOControlsPrivate)::pollDemoControls:, PlayerEntity(OOControlsPrivate)::pollDockedControls:, PlayerEntity(OOControlsPrivate)::pollFlightControls:, PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:, and PlayerEntity(Controls)::switchToMainView.

+ Here is the caller graph for this function:

◆ allowStringInput: [2/2]

- (void) allowStringInput: (BOOL) value

◆ ApplyCursorState

+ (static void) ApplyCursorState (OOMouseInteractionMode) mode
implementation

Definition at line 1341 of file MyOpenGLView.m.

1342{
1343 BOOL hidden, obscured;
1344 GetDesiredCursorState(mode, &hidden, &obscured);
1345 if (hidden) [NSCursor hide];
1346 if (obscured) [NSCursor setHiddenUntilMouseMoves:YES];
1347}
static void GetDesiredCursorState(OOMouseInteractionMode mode, BOOL *outHidden, BOOL *outObscured)
const char int mode
Definition ioapi.h:133

References GetDesiredCursorState().

+ Here is the call graph for this function:

◆ autoShowMouse

- (void) autoShowMouse

Definition at line 563 of file MyOpenGLView.m.

564{
565 //don't touch the 'please wait...' cursor.
566 if (fullScreen)
567 {
568 if (SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE)
569 SDL_ShowCursor(SDL_DISABLE);
570 }
571 else
572 {
573 if (SDL_ShowCursor(SDL_QUERY) == SDL_DISABLE)
574 SDL_ShowCursor(SDL_ENABLE);
575 }
576}

References autoShowMouse, and fullScreen.

Referenced by autoShowMouse, endSplashScreen, init, initialiseGLWithSize:useVideoMode:, and noteMouseInteractionModeChangedFrom:to:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ backingViewSize [1/2]

- (NSSize) backingViewSize

References backingViewSize.

◆ backingViewSize [2/2]

- (NSSize) backingViewSize

References backingViewSize.

◆ bounds

- (NSRect) bounds

References bounds, and getNativeSize.

+ Here is the call graph for this function:

◆ clearCommandF [1/2]

- (void) clearCommandF

Definition at line 2051 of file MyOpenGLView.m.

2052{
2053 // SDL stub for the mac function.
2054}

References clearCommandF.

Referenced by clearCommandF, isAlphabetKeyDown, and PlayerEntity(OOControlsPrivate)::pollApplicationControls.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clearCommandF [2/2]

- (void) clearCommandF

References clearCommandF.

+ Here is the call graph for this function:

◆ clearKey: [1/2]

- (void) clearKey: (int) theKey

Definition at line 1913 of file MyOpenGLView.m.

1913 : (int)theKey
1914{
1915 if (theKey >= 0 && theKey < [self numKeys])
1916 {
1917 keys[theKey] = NO;
1918 }
1919}
BOOL keys[NUM_KEYS]
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque

References keys, and numKeys.

Referenced by PlayerEntity(OOControlsPrivate)::pollFlightControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ clearKey: [2/2]

- (void) clearKey: (int) theKey

◆ clearKeys [1/2]

◆ clearKeys [2/2]

- (void) clearKeys

References clearKeys.

+ Here is the call graph for this function:

◆ clearMouse [1/2]

◆ clearMouse [2/2]

- (void) clearMouse

References clearMouse.

+ Here is the call graph for this function:

◆ colorSaturation

- (float) colorSaturation

Definition at line 1593 of file MyOpenGLView.m.

1594{
1595 return _colorSaturation;
1596}

References _colorSaturation, and colorSaturation.

Referenced by colorSaturation, PlayerEntity(OOPrivate)::gameOverFadeToBW, GlobalSetColorSaturation(), and initialiseGLWithSize:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createSurface

- (void) createSurface
implementation

Definition at line 121 of file MyOpenGLView.m.

122{
123 // Changing these flags can trigger texture bugs.
124 const int videoModeFlags = SDL_HWSURFACE | SDL_OPENGL | SDL_RESIZABLE;
125
127 {
128#if OOLITE_WINDOWS
129 // Pre setVideoMode adjustments.
130 NSSize tmp = currentWindowSize;
131 ShowWindow(SDL_Window,SW_SHOWMINIMIZED);
132 updateContext = NO; //don't update the (splash screen) window yet!
133
134 // Initialise the SDL surface. (need custom SDL.dll)
135 surface = SDL_SetVideoMode(firstScreen.width, firstScreen.height, 32, videoModeFlags);
136
137 // Post setVideoMode adjustments.
139#else
140 // Changing the flags can trigger texture bugs.
141 surface = SDL_SetVideoMode(8, 8, 32, videoModeFlags);
142#endif
143 if (!surface) {
144 return;
145 }
146 }
147 else
148 {
149#if OOLITE_WINDOWS
150 updateContext = YES;
151#endif
152 surface = SDL_SetVideoMode(firstScreen.width, firstScreen.height, 32, videoModeFlags);
153 if (!surface) {
154 return;
155 }
156 // blank the surface / go to fullscreen
157 [self initialiseGLWithSize: firstScreen];
158 }
159
160 _gamma = 1.0f;
161 if (SDL_SetGamma(_gamma, _gamma, _gamma) < 0 )
162 {
163 char * errStr = SDL_GetError();
164 OOLogWARN(@"gamma.set.failed", @"Could not set gamma: %s", errStr);
165 // CIM: this doesn't seem to necessarily be fatal. Gamma settings
166 // mostly work on mine despite this function failing.
167 // exit(1);
168 }
169 SDL_EnableUNICODE(1);
170}
#define OOLogWARN(class, format,...)
Definition OOLogging.h:113
BOOL showSplashScreen
SDL_Surface * surface
NSSize currentWindowSize
NSSize firstScreen

References _gamma, createSurface, currentWindowSize, firstScreen, initialiseGLWithSize:, OOLogWARN, showSplashScreen, and surface.

Referenced by createSurface, and init.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ currentScreenSize

- (NSSize) currentScreenSize

Definition at line 2862 of file MyOpenGLView.m.

2863{
2864 NSDictionary *mode=[screenSizes objectAtIndex: currentSize];
2865
2866 if(mode)
2867 {
2868 return NSMakeSize([[mode objectForKey: kOODisplayWidth] intValue],
2869 [[mode objectForKey: kOODisplayHeight] intValue]);
2870 }
2871 OOLog(@"display.mode.unknown", @"%@", @"Screen size unknown!");
2873}
#define kOODisplayHeight
#define kOODisplayWidth
#define OOLog(class, format,...)
Definition OOLogging.h:88
#define WINDOW_SIZE_DEFAULT_HEIGHT
#define WINDOW_SIZE_DEFAULT_WIDTH

References currentScreenSize, kOODisplayHeight, kOODisplayWidth, OOLog, WINDOW_SIZE_DEFAULT_HEIGHT, and WINDOW_SIZE_DEFAULT_WIDTH.

Referenced by currentScreenSize, and modeAsSize:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dealloc

- (void) dealloc
implementation

Definition at line 173 of file MyOpenGLView.m.

174{
178
180 [keyMappings_normal release];
182 [keyMappings_shifted release];
183
184 [super dealloc];
185}
#define DESTROY(x)
Definition OOCocoa.h:77
NSDictionary * keyMappings_shifted
NSMutableString * typedString
NSData * _pixelFormatAttributes
OOOpenGLMatrixManager * matrixManager
NSDictionary * keyMappings_normal

References _pixelFormatAttributes, dealloc, DESTROY, keyMappings_normal, keyMappings_shifted, matrixManager, and typedString.

Referenced by dealloc, and init.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ display

- (void) display

Definition at line 757 of file MyOpenGLView.m.

758{
759 [self updateScreen];
760}

References display, and updateScreen.

Referenced by display, and updateScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ display_z [1/2]

- (GLfloat) display_z

References display_z.

◆ display_z [2/2]

- (GLfloat) display_z

References display_z.

◆ drawRect: [1/2]

- (void) drawRect: (NSRect) rect

Definition at line 767 of file MyOpenGLView.m.

767 :(NSRect)rect
768{
769 [self updateScreenWithVideoMode:YES];
770}

References updateScreenWithVideoMode:.

Referenced by updateScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ drawRect: [2/2]

- (void) drawRect: (NSRect) rect

◆ dumpGrayAlphaToFileNamed:bytes:width:height:rowBytes: [1/2]

- (void) dumpGrayAlphaToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

Definition at line 2992 of file MyOpenGLView.m.

2992 :(NSString *)name
2993 bytes:(uint8_t *)bytes
2994 width:(NSUInteger)width
2995 height:(NSUInteger)height
2996 rowBytes:(NSUInteger)rowBytes
2997{
2998 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 2) return;
2999
3000 // use the snapshots directory
3001 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
3002 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
3003
3004 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 16, rowBytes, 0xFF, 0xFF, 0xFF, 0xFF);
3005 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
3006 SDL_FreeSurface(tmpSurface);
3007}
return nil

References nil.

Referenced by OODumpPixMap().

+ Here is the caller graph for this function:

◆ dumpGrayAlphaToFileNamed:bytes:width:height:rowBytes: [2/2]

- (void) dumpGrayAlphaToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

◆ dumpGrayToFileNamed:bytes:width:height:rowBytes: [1/2]

- (void) dumpGrayToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

Definition at line 2974 of file MyOpenGLView.m.

2974 :(NSString *)name
2975 bytes:(uint8_t *)bytes
2976 width:(NSUInteger)width
2977 height:(NSUInteger)height
2978 rowBytes:(NSUInteger)rowBytes
2979{
2980 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width) return;
2981
2982 // use the snapshots directory
2983 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
2984 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
2985
2986 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 8, rowBytes, 0xFF, 0xFF, 0xFF, 0x0);
2987 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
2988 SDL_FreeSurface(tmpSurface);
2989}

References nil.

Referenced by dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes:, and OODumpPixMap().

+ Here is the caller graph for this function:

◆ dumpGrayToFileNamed:bytes:width:height:rowBytes: [2/2]

- (void) dumpGrayToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

◆ dumpRGBAToFileNamed:bytes:width:height:rowBytes: [1/2]

- (void) dumpRGBAToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

Definition at line 2937 of file MyOpenGLView.m.

2937 :(NSString *)name
2938 bytes:(uint8_t *)bytes
2939 width:(NSUInteger)width
2940 height:(NSUInteger)height
2941 rowBytes:(NSUInteger)rowBytes
2942{
2943 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 4) return;
2944
2945 // use the snapshots directory
2946 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
2947 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
2948
2949 // convert transparency to black before saving to bmp
2950 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 32, rowBytes, 0xFF, 0xFF00, 0xFF0000, 0xFF000000);
2951 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
2952 SDL_FreeSurface(tmpSurface);
2953}

References nil.

◆ dumpRGBAToFileNamed:bytes:width:height:rowBytes: [2/2]

- (void) dumpRGBAToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

◆ dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes: [1/2]

- (void) dumpRGBAToRGBFileNamed: (NSString *) rgbName
andGrayFileNamed: (NSString *) grayName
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

Definition at line 3010 of file MyOpenGLView.m.

3010 :(NSString *)rgbName
3011 andGrayFileNamed:(NSString *)grayName
3012 bytes:(uint8_t *)bytes
3013 width:(NSUInteger)width
3014 height:(NSUInteger)height
3015 rowBytes:(NSUInteger)rowBytes
3016{
3017 if ((rgbName == nil && grayName == nil) || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 4) return;
3018
3019 uint8_t *rgbBytes, *rgbPx, *grayBytes, *grayPx, *srcPx;
3020 NSUInteger x, y;
3021 BOOL trivalAlpha = YES;
3022
3023 rgbPx = rgbBytes = malloc(width * height * 3);
3024 if (rgbBytes == NULL) return;
3025
3026 grayPx = grayBytes = malloc(width * height);
3027 if (grayBytes == NULL)
3028 {
3029 free(rgbBytes);
3030 return;
3031 }
3032
3033 for (y = 0; y < height; y++)
3034 {
3035 srcPx = bytes + rowBytes * y;
3036
3037 for (x = 0; x < width; x++)
3038 {
3039 *rgbPx++ = *srcPx++;
3040 *rgbPx++ = *srcPx++;
3041 *rgbPx++ = *srcPx++;
3042 trivalAlpha = trivalAlpha && ((*srcPx == 0xFF) || (*srcPx == 0x00)); // Look for any "interesting" pixels in alpha.
3043 *grayPx++ = *srcPx++;
3044 }
3045 }
3046
3047 [self dumpRGBToFileNamed:rgbName
3048 bytes:rgbBytes
3049 width:width
3050 height:height
3051 rowBytes:width * 3];
3052 free(rgbBytes);
3053
3054 if (!trivalAlpha)
3055 {
3056 [self dumpGrayToFileNamed:grayName
3057 bytes:grayBytes
3058 width:width
3059 height:height
3060 rowBytes:width];
3061 }
3062 free(grayBytes);
3063}
float y
float x

References dumpGrayToFileNamed:bytes:width:height:rowBytes:, dumpRGBToFileNamed:bytes:width:height:rowBytes:, nil, x, and y.

Referenced by OODumpPixMap().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes: [2/2]

- (void) dumpRGBAToRGBFileNamed: (NSString *) rgbName
andGrayFileNamed: (NSString *) grayName
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

◆ dumpRGBToFileNamed:bytes:width:height:rowBytes: [1/2]

- (void) dumpRGBToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

Definition at line 2956 of file MyOpenGLView.m.

2956 :(NSString *)name
2957 bytes:(uint8_t *)bytes
2958 width:(NSUInteger)width
2959 height:(NSUInteger)height
2960 rowBytes:(NSUInteger)rowBytes
2961{
2962 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 3) return;
2963
2964 // use the snapshots directory
2965 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
2966 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
2967
2968 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 24, rowBytes, 0xFF, 0xFF00, 0xFF0000, 0x0);
2969 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
2970 SDL_FreeSurface(tmpSurface);
2971}

References nil.

Referenced by dumpRGBAToRGBFileNamed:andGrayFileNamed:bytes:width:height:rowBytes:.

+ Here is the caller graph for this function:

◆ dumpRGBToFileNamed:bytes:width:height:rowBytes: [2/2]

- (void) dumpRGBToFileNamed: (NSString *) name
bytes: (uint8_t *) bytes
width: (NSUInteger) width
height: (NSUInteger) height
rowBytes: (NSUInteger) rowBytes 

◆ endSplashScreen

- (void) endSplashScreen

Definition at line 448 of file MyOpenGLView.m.

449{
450#if OOLITE_WINDOWS
451 if ([self hdrOutput] && ![self isOutputDisplayHDREnabled])
452 {
453 if (MessageBox(NULL, "No primary display in HDR mode was detected.\n\n"
454 "If you continue, graphics will not be rendered as intended.\n"
455 "Click OK to launch anyway, or Cancel to exit.", "oolite.exe - HDR requested",
456 MB_OKCANCEL | MB_ICONWARNING) == IDCANCEL)
457 {
458 exit (1);
459 }
460 }
461#endif // OOLITE_WINDOWS
462
463 if (!showSplashScreen) return;
464
465#if OOLITE_WINDOWS
466
467 wasFullScreen = !fullScreen;
468 updateContext = YES;
469 ShowWindow(SDL_Window,SW_RESTORE);
470 [self initialiseGLWithSize: firstScreen];
471
472#else
473
474 int videoModeFlags = SDL_HWSURFACE | SDL_OPENGL;
475
476 videoModeFlags |= (fullScreen) ? SDL_FULLSCREEN : SDL_RESIZABLE;
477 surface = SDL_SetVideoMode(firstScreen.width, firstScreen.height, 32, videoModeFlags);
478
479 if (!surface && fullScreen == YES)
480 {
481 [self setFullScreenMode: NO];
482 videoModeFlags &= ~SDL_FULLSCREEN;
483 videoModeFlags |= SDL_RESIZABLE;
484 surface = SDL_SetVideoMode(currentWindowSize.width, currentWindowSize.height, 32, videoModeFlags);
485 }
486
487 SDL_putenv ("SDL_VIDEO_WINDOW_POS=none"); //stop linux from auto centering on resize
488
489 /* MKW 2011.11.11
490 * Eat all SDL events to gobble up any resize events while the
491 * splash-screen was visible. They affected the main window after 1.74.
492 * TODO: should really process SDL events while showing the splash-screen
493
494 int numEvents = 0;
495 */
496 SDL_Event dummyEvent;
497 while (SDL_PollEvent(&dummyEvent))
498 {
499 /* Do nothing; the below is for development info
500 numEvents++;
501 OOLog(@"display.splash", @"Suppressed splash-screen event %d: %d ", numEvents, dummyEvent.type);
502 */
503 }
504
505
506#endif
507
508 [self updateScreen];
509 [self autoShowMouse];
510}
BOOL isOutputDisplayHDREnabled()

References autoShowMouse, currentWindowSize, endSplashScreen, firstScreen, fullScreen, hdrOutput, initialiseGLWithSize:, isOutputDisplayHDREnabled, setFullScreenMode:, showSplashScreen, surface, and updateScreen.

Referenced by GameController::endSplashScreen, endSplashScreen, and initSplashScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ findDisplayModeForWidth:Height:Refresh:

- (int) findDisplayModeForWidth: (unsigned int) d_width
Height: (unsigned int) d_height
Refresh: (unsigned int) d_refresh 

Definition at line 2835 of file MyOpenGLView.m.

2835 :(unsigned int) d_width Height:(unsigned int) d_height Refresh:(unsigned int) d_refresh
2836{
2837 int i, modeCount;
2838 NSDictionary *mode;
2839 unsigned int modeWidth, modeHeight, modeRefresh;
2840
2841 modeCount = [screenSizes count];
2842
2843 for (i = 0; i < modeCount; i++)
2844 {
2845 mode = [screenSizes objectAtIndex: i];
2846 modeWidth = [[mode objectForKey: kOODisplayWidth] intValue];
2847 modeHeight = [[mode objectForKey: kOODisplayHeight] intValue];
2848 modeRefresh = [[mode objectForKey: kOODisplayRefreshRate] intValue];
2849 if ((modeWidth == d_width)&&(modeHeight == d_height)&&(modeRefresh == d_refresh))
2850 {
2851 OOLog(@"display.mode.found", @"Found mode %@", mode);
2852 return i;
2853 }
2854 }
2855
2856 OOLog(@"display.mode.found.failed", @"Failed to find mode: width=%d height=%d refresh=%d", d_width, d_height, d_refresh);
2857 OOLog(@"display.mode.found.failed.list", @"Contents of list: %@", screenSizes);
2858 return 0;
2859}
NSMutableArray * screenSizes

References int(), OOLog, and screenSizes.

Referenced by loadFullscreenSettings.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ flagsChanged:

- (void) flagsChanged: (NSEvent *) theEvent
implementation

Definition at line 743 of file MyOpenGLView.m.

743 :(NSEvent *)theEvent
744{
745 NSUInteger flags = [theEvent modifierFlags];
746 opt = (flags & NSAlternateKeyMask) ? YES : NO;
747 ctrl = (flags & NSControlKeyMask) ? YES : NO;
748 command = (flags & NSCommandKeyMask) ? YES : NO;
749 shift = ( flags & NSShiftKeyMask ) ? YES : NO;
750 if ([theEvent keyCode] == 0x39) // 57 = key code for caps lock
751 {
752 capsLockOn = (flags & NSAlphaShiftKeyMask) ? YES : NO;
753 }
754}

References capsLockOn, command, ctrl, opt, and shift.

◆ fov: [1/2]

- (float) fov: (BOOL) inFraction

Definition at line 2906 of file MyOpenGLView.m.

2906 :(BOOL)inFraction
2907{
2908 return inFraction ? _fov : 2 * atan(_fov) * 180 / M_PI;
2909}
#define M_PI
Definition OOMaths.h:73

References _fov, and M_PI.

Referenced by HeadUpDisplay::drawScannerGrid, Universe::drawUniverse, Universe::gameSettings, PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, and PlayerEntity::setGuiToGameOptionsScreen.

+ Here is the caller graph for this function:

◆ fov: [2/2]

- (float) fov: (BOOL) inFraction

References msaa.

+ Here is the call graph for this function:

◆ gameController [1/2]

- (GameController *) gameController

References gameController, pixelFormatAttributes, pollControls, resetMouse, and updateScreen.

+ Here is the call graph for this function:

◆ gameController [2/2]

- (GameController *) gameController

References gameController.

◆ gammaValue [1/2]

- (float) gammaValue

Definition at line 2894 of file MyOpenGLView.m.

2895{
2896 return _gamma;
2897}

References _gamma, and gammaValue.

Referenced by Universe::gameSettings, gammaValue, PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, isAlphabetKeyDown, and PlayerEntity::setGuiToGameOptionsScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gammaValue [2/2]

- (float) gammaValue

References gammaValue.

+ Here is the call graph for this function:

◆ GetDesiredCursorState

+ (static void) GetDesiredCursorState (OOMouseInteractionMode) mode
(BOOL *) outHidden
(BOOL *) outObscured 
implementation

Definition at line 1332 of file MyOpenGLView.m.

1333{
1334 NSCParameterAssert(outHidden != NULL && outObscured != NULL);
1335
1337 *outObscured = (mode == MOUSE_MODE_FLIGHT_NO_MOUSE_CONTROL);
1338}
@ MOUSE_MODE_FLIGHT_WITH_MOUSE_CONTROL
@ MOUSE_MODE_FLIGHT_NO_MOUSE_CONTROL

References MOUSE_MODE_FLIGHT_NO_MOUSE_CONTROL, and MOUSE_MODE_FLIGHT_WITH_MOUSE_CONTROL.

◆ getNativeSize

+ (NSMutableDictionary *) getNativeSize

Definition at line 87 of file MyOpenGLView.m.

88{
89 NSMutableDictionary *mode=[[NSMutableDictionary alloc] init];
90 int nativeDisplayWidth = 1024;
91 int nativeDisplayHeight = 768;
92
93#if OOLITE_LINUX
94 SDL_SysWMinfo dpyInfo;
95 SDL_VERSION(&dpyInfo.version);
96 if(SDL_GetWMInfo(&dpyInfo))
97 {
98 nativeDisplayWidth = DisplayWidth(dpyInfo.info.x11.display, 0);
99 nativeDisplayHeight = DisplayHeight(dpyInfo.info.x11.display, 0);
100 OOLog(@"display.mode.list.native", @"X11 native resolution detected: %d x %d", nativeDisplayWidth, nativeDisplayHeight);
101 }
102 else
103 {
104 OOLog(@"display.mode.list.native.failed", @"%@", @"SDL_GetWMInfo failed, defaulting to 1024x768 for native size");
105 }
106#elif OOLITE_WINDOWS
107 nativeDisplayWidth = GetSystemMetrics(SM_CXSCREEN);
108 nativeDisplayHeight = GetSystemMetrics(SM_CYSCREEN);
109 OOLog(@"display.mode.list.native", @"Windows native resolution detected: %d x %d", nativeDisplayWidth, nativeDisplayHeight);
110#else
111 OOLog(@"display.mode.list.native.unknown", @"Unknown architecture, defaulting to 1024x768");
112#endif
113 [mode setValue: [NSNumber numberWithInt: nativeDisplayWidth] forKey:kOODisplayWidth];
114 [mode setValue: [NSNumber numberWithInt: nativeDisplayHeight] forKey: kOODisplayHeight];
115 [mode setValue: [NSNumber numberWithInt: 0] forKey: kOODisplayRefreshRate];
116
117 return [mode autorelease];
118}

References getNativeSize, and OOLog.

Referenced by bounds, getNativeSize, and populateFullScreenModelist.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getOpenGLMatrixManager [1/2]

- (OOOpenGLMatrixManager *) getOpenGLMatrixManager

Definition at line 2924 of file MyOpenGLView.m.

2925{
2926 return matrixManager;
2927}

References getOpenGLMatrixManager, and matrixManager.

Referenced by getOpenGLMatrixManager, and isAlphabetKeyDown.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getOpenGLMatrixManager [2/2]

- (OOOpenGLMatrixManager *) getOpenGLMatrixManager

References getOpenGLMatrixManager.

+ Here is the call graph for this function:

◆ getScreenSizeArray

- (NSMutableArray *) getScreenSizeArray

References getScreenSizeArray, and populateFullScreenModelist.

Referenced by getScreenSizeArray.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ grabMouseInsideGameWindow:

- (void) grabMouseInsideGameWindow: (BOOL) value

Definition at line 1322 of file MyOpenGLView.m.

1322 :(BOOL) value
1323{
1324 // do nothing
1325}

Referenced by PlayerEntity(OOControlsPrivate)::pollApplicationControls, and pollControls.

+ Here is the caller graph for this function:

◆ handleStringInput:keyID:

- (void) handleStringInput: (SDL_KeyboardEvent *) kbd_event
keyID: (Uint16) key_id 
implementation

Provided by category MyOpenGLView(OOPrivate).

Definition at line 2670 of file MyOpenGLView.m.

2670 : (SDL_KeyboardEvent *) kbd_event keyID:(Uint16)key_id;
2671{
2672 SDLKey key=kbd_event->keysym.sym;
2673
2674 // Del, Backspace
2675 if((key == SDLK_BACKSPACE || key == SDLK_DELETE) && [typedString length] > 0)
2676 {
2677 // delete
2678 [typedString deleteCharactersInRange:NSMakeRange([typedString length]-1, 1)];
2679 }
2680
2682
2683 // TODO: a more flexible mechanism for max. string length ?
2684 if([typedString length] < 40)
2685 {
2688 {
2689 // inputAlpha - limited input for planet find screen
2690 if(key >= SDLK_a && key <= SDLK_z)
2691 {
2693 [typedString appendFormat:@"%c", key];
2694 // if in inputAlpha, keep in lower case.
2695 }
2696 }
2697 else
2698 {
2699 //Uint16 unicode = kbd_event->keysym.unicode;
2700 // printable range
2701 if (key_id >= 32 && key_id <= 255) // 126
2702 {
2703 if ((char)key_id != '/' || allowingStringInput == gvStringInputAll)
2704 {
2706 [typedString appendFormat:@"%c", key_id];
2707 }
2708 }
2709 }
2710 }
2711}
@ gvStringInputAll

References gvStringInputAll, and gvStringInputAlpha.

Referenced by pollControls.

+ Here is the caller graph for this function:

◆ hdrOutput

- (BOOL) hdrOutput

Definition at line 1346 of file MyOpenGLView.m.

1347{
1348 return NO;
1349}

References hdrOutput.

Referenced by endSplashScreen, hdrOutput, initialiseGLWithSize:, pngSaveSurface:withSurface:, and snapShot:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ indexOfCurrentSize

- (int) indexOfCurrentSize

References indexOfCurrentSize, and int().

Referenced by indexOfCurrentSize.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ inFullScreenMode

- (BOOL) inFullScreenMode

Definition at line 671 of file MyOpenGLView.m.

672{
673 return fullScreen;
674}

References fullScreen, and inFullScreenMode.

Referenced by inFullScreenMode, setFullScreenMode:, and update.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initialiseGLWithSize: [1/2]

- (void) initialiseGLWithSize: (NSSize) v_size

Definition at line 1360 of file MyOpenGLView.m.

1360 :(NSSize) v_size
1361{
1362 [self initialiseGLWithSize:v_size useVideoMode:YES];
1363}

References initialiseGLWithSize:useVideoMode:.

Referenced by createSurface, endSplashScreen, and pollControls.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initialiseGLWithSize: [2/2]

- (void) initialiseGLWithSize: (NSSize) v_size

References colorSaturation, hdrOutput, isOutputDisplayHDREnabled, and isRunningOnPrimaryDisplayDevice.

+ Here is the call graph for this function:

◆ initialiseGLWithSize:useVideoMode:

- (void) initialiseGLWithSize: (NSSize) v_size
useVideoMode: (BOOL) v_mode 

Definition at line 1366 of file MyOpenGLView.m.

1366 :(NSSize) v_size useVideoMode:(BOOL) v_mode
1367{
1368#if OOLITE_LINUX
1369 NSSize oldViewSize = viewSize;
1370#endif
1371 viewSize = v_size;
1372 OOLog(@"display.initGL", @"Requested a new surface of %d x %d, %@.", (int)viewSize.width, (int)viewSize.height,(fullScreen ? @"fullscreen" : @"windowed"));
1373 SDL_GL_SwapBuffers(); // clear the buffer before resize
1374
1375#if OOLITE_WINDOWS
1376 if (!updateContext) return;
1377
1378 DEVMODE settings;
1379 settings.dmSize = sizeof(DEVMODE);
1380 settings.dmDriverExtra = 0;
1381 EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &settings);
1382
1383 WINDOWPLACEMENT windowPlacement;
1384 windowPlacement.length = sizeof(WINDOWPLACEMENT);
1385 GetWindowPlacement(SDL_Window, &windowPlacement);
1386
1387 static BOOL lastWindowPlacementMaximized = NO;
1388 if (fullScreen && (windowPlacement.showCmd == SW_SHOWMAXIMIZED))
1389 {
1390 if (!wasFullScreen)
1391 {
1392 lastWindowPlacementMaximized = YES;
1393 }
1394 }
1395
1396 if (lastWindowPlacementMaximized)
1397 {
1398 windowPlacement.showCmd = SW_SHOWMAXIMIZED;
1399 }
1400
1401 // are we attempting to go to a different screen resolution? Note: this also takes care of secondary monitor situations because
1402 // by design the only resolution available for fullscreen on a secondary display device is its native one - Nikos 20150605
1403 BOOL changingResolution = [self isRunningOnPrimaryDisplayDevice] &&
1404 ((fullScreen && (settings.dmPelsWidth != viewSize.width || settings.dmPelsHeight != viewSize.height)) ||
1405 (wasFullScreen && (settings.dmPelsWidth != [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayWidth] intValue]
1406 || settings.dmPelsHeight != [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayHeight] intValue])));
1407
1408 RECT wDC;
1409
1410 if (fullScreen)
1411 {
1412 /*NOTE: If we ever decide to change the default behaviour of launching
1413 always on primary monitor to launching on the monitor the program was
1414 started on, all that needs to be done is comment out the line below, as
1415 well as the identical one in the else branch further down.
1416 Nikos 20141222
1417 */
1418 [self getCurrentMonitorInfo: &monitorInfo];
1419
1420 settings.dmPelsWidth = viewSize.width;
1421 settings.dmPelsHeight = viewSize.height;
1422 settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
1423
1424 // just before going fullscreen, save the location of the current window. It
1425 // may be needed in case of potential attempts to move our fullscreen window
1426 // in a maximized state (yes, in Windows this is entirely possible).
1427 if(lastWindowPlacementMaximized)
1428 {
1429 CopyRect(&lastGoodRect, &windowPlacement.rcNormalPosition);
1430 // if maximized, switch to normal placement before going full screen
1431 windowPlacement.showCmd = SW_SHOWNORMAL;
1432 SetWindowPlacement(SDL_Window, &windowPlacement);
1433 }
1434 else GetWindowRect(SDL_Window, &lastGoodRect);
1435
1436 // ok, can go fullscreen now
1437 SetForegroundWindow(SDL_Window);
1438 if (changingResolution)
1439 {
1440 if (ChangeDisplaySettingsEx(monitorInfo.szDevice, &settings, NULL, CDS_FULLSCREEN, NULL) != DISP_CHANGE_SUCCESSFUL)
1441 {
1443 OOLogERR(@"displayMode.change.error", @"Could not switch to requested display mode.");
1444 return;
1445 }
1446 atDesktopResolution = settings.dmPelsWidth == [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayWidth] intValue]
1447 && settings.dmPelsHeight == [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayHeight] intValue];
1448 }
1449
1450 MoveWindow(SDL_Window, monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top, (int)viewSize.width, (int)viewSize.height, TRUE);
1451 if(!wasFullScreen)
1452 {
1453 [self setWindowBorderless:YES];
1454 }
1455 }
1456
1457 else if ( wasFullScreen )
1458 {
1459 if (changingResolution)
1460 {
1461 // restore original desktop resolution
1462 if (ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL)
1463 {
1464 atDesktopResolution = YES;
1465 }
1466 }
1467
1468 /*NOTE: If we ever decide to change the default behaviour of launching
1469 always on primary monitor to launching on the monitor the program was
1470 started on, we need to comment out the line below.
1471 For now, this line is needed for correct positioning of our window in case
1472 we return from a non-native resolution fullscreen and has to come after the
1473 display settings have been reverted.
1474 Nikos 20141222
1475 */
1476 [self getCurrentMonitorInfo: &monitorInfo];
1477
1478 if (lastWindowPlacementMaximized) CopyRect(&windowPlacement.rcNormalPosition, &lastGoodRect);
1479 SetWindowPlacement(SDL_Window, &windowPlacement);
1480 if (!lastWindowPlacementMaximized)
1481 {
1482 MoveWindow(SDL_Window, (monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left - (int)viewSize.width)/2 +
1483 monitorInfo.rcMonitor.left,
1484 (monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top - (int)viewSize.height)/2 +
1485 monitorInfo.rcMonitor.top,
1486 (int)viewSize.width, (int)viewSize.height, TRUE);
1487 }
1488
1489 [self setWindowBorderless:NO];
1490
1491 lastWindowPlacementMaximized = NO;
1492 ShowWindow(SDL_Window,SW_SHOW);
1493 }
1494
1495 // stop saveWindowSize from reacting to caption & frame if necessary
1496 saveSize = !wasFullScreen;
1497
1498 GetClientRect(SDL_Window, &wDC);
1499
1500 if (!fullScreen && (bounds.size.width != wDC.right - wDC.left
1501 || bounds.size.height != wDC.bottom - wDC.top))
1502 {
1503 // Resize the game window if needed. When we ask for a W x H
1504 // window, we intend that the client area be W x H. The actual
1505 // window itself must become big enough to accomodate an area
1506 // of such size.
1507 if (wasFullScreen) // this is true when switching from full screen or when starting in windowed mode
1508 //after the splash screen has ended
1509 {
1510 RECT desiredClientRect;
1511 GetWindowRect(SDL_Window, &desiredClientRect);
1512 AdjustWindowRect(&desiredClientRect, WS_CAPTION | WS_THICKFRAME, FALSE);
1513 SetWindowPos(SDL_Window, NULL, desiredClientRect.left, desiredClientRect.top,
1514 desiredClientRect.right - desiredClientRect.left,
1515 desiredClientRect.bottom - desiredClientRect.top, 0);
1516 }
1517 GetClientRect(SDL_Window, &wDC);
1518 viewSize.width = wDC.right - wDC.left;
1519 viewSize.height = wDC.bottom - wDC.top;
1520 }
1521
1522 // Reset bounds and viewSize to current values
1523 bounds.size.width = viewSize.width = wDC.right - wDC.left;
1524 bounds.size.height = viewSize.height = wDC.bottom - wDC.top;
1525
1526 if (fullScreen) // bounds on fullscreen coincide with client area, since we are borderless
1527 {
1528 bounds.origin.x = monitorInfo.rcMonitor.left;
1529 bounds.origin.y = monitorInfo.rcMonitor.top;
1530 }
1531 wasFullScreen=fullScreen;
1532
1533#else //OOLITE_LINUX
1534
1535 int videoModeFlags = SDL_HWSURFACE | SDL_OPENGL;
1536
1537 if (v_mode == NO)
1538 videoModeFlags |= SDL_NOFRAME;
1539 if (fullScreen == YES)
1540 {
1541 videoModeFlags |= SDL_FULLSCREEN;
1542 }
1543 else
1544 {
1545 videoModeFlags |= SDL_RESIZABLE;
1546 }
1547 surface = SDL_SetVideoMode((int)viewSize.width, (int)viewSize.height, 32, videoModeFlags);
1548
1549 if (!surface && fullScreen == YES)
1550 {
1551 [self setFullScreenMode: NO];
1552 viewSize = oldViewSize;
1553 videoModeFlags &= ~SDL_FULLSCREEN;
1554 videoModeFlags |= SDL_RESIZABLE;
1555 surface = SDL_SetVideoMode((int)viewSize.width, (int)viewSize.height, 32, videoModeFlags);
1556 }
1557
1558 if (!surface)
1559 {
1560 // we should always have a valid surface, but in case we don't
1561 OOLogERR(@"display.mode.error",@"Unable to change display mode: %s",SDL_GetError());
1562 exit(1);
1563 }
1564
1565 bounds.size.width = surface->w;
1566 bounds.size.height = surface->h;
1567
1568#endif
1569 OOLog(@"display.initGL", @"Created a new surface of %d x %d, %@.", (int)viewSize.width, (int)viewSize.height,(fullScreen ? @"fullscreen" : @"windowed"));
1570
1571 if (viewSize.width/viewSize.height > 4.0/3.0) {
1572 display_z = 480.0 * bounds.size.width/bounds.size.height;
1573 x_offset = 240.0 * bounds.size.width/bounds.size.height;
1574 y_offset = 240.0;
1575 } else {
1576 display_z = 640.0;
1577 x_offset = 320.0;
1578 y_offset = 320.0 * bounds.size.height/bounds.size.width;
1579 }
1580
1581 if (surface != 0) SDL_FreeSurface(surface);
1582
1583 [self autoShowMouse];
1584
1585 [[self gameController] setUpBasicOpenGLStateWithSize:viewSize];
1586 SDL_GL_SwapBuffers();
1587 squareX = 0.0f;
1588
1590}
#define OOLogERR(class, format,...)
Definition OOLogging.h:112
BOOL m_glContextInitialized
GLfloat display_z
GLfloat x_offset
GLfloat y_offset

References autoShowMouse, bounds, display_z, fullScreen, gameController, isRunningOnPrimaryDisplayDevice, m_glContextInitialized, OOLog, OOLogERR, setFullScreenMode:, GameController::setUpBasicOpenGLStateWithSize:, setWindowBorderless:, squareX, surface, viewSize, x_offset, and y_offset.

Referenced by initialiseGLWithSize:, and updateScreenWithVideoMode:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initKeyMappingData [1/2]

- (void) initKeyMappingData

Definition at line 513 of file MyOpenGLView.m.

514{
515 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
516 // load in our keyboard scancode mappings
517#if OOLITE_WINDOWS
518 NSDictionary *kmap = [NSDictionary dictionaryWithDictionary:[ResourceManager dictionaryFromFilesNamed:@"keymappings_windows.plist" inFolder:@"Config" mergeMode:MERGE_BASIC cache:NO]];
519#else
520 NSDictionary *kmap = [NSDictionary dictionaryWithDictionary:[ResourceManager dictionaryFromFilesNamed:@"keymappings_linux.plist" inFolder:@"Config" mergeMode:MERGE_BASIC cache:NO]];
521#endif
522 // get the stored keyboard code from preferences
523 NSString *kbd = [prefs oo_stringForKey:@"keyboard-code" defaultValue:@"default"];
524 NSDictionary *subset = [kmap objectForKey:kbd];
525
526 [keyMappings_normal release];
527 keyMappings_normal = [[subset objectForKey:@"mapping_normal"] copy];
528 [keyMappings_shifted release];
529 keyMappings_shifted = [[subset objectForKey:@"mapping_shifted"] copy];
530}
NSDictionary * dictionaryFromFilesNamed:inFolder:mergeMode:cache:(NSString *fileName,[inFolder] NSString *folderName,[mergeMode] OOResourceMergeMode mergeMode,[cache] BOOL useCache)

References ResourceManager::dictionaryFromFilesNamed:inFolder:mergeMode:cache:, initKeyMappingData, keyMappings_normal, and keyMappings_shifted.

Referenced by init, initKeyMappingData, and initWithFrame:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initKeyMappingData [2/2]

- (void) initKeyMappingData

References initKeyMappingData.

+ Here is the call graph for this function:

◆ initSplashScreen

- (void) initSplashScreen

Definition at line 804 of file MyOpenGLView.m.

805{
806 if (!showSplashScreen) return;
807
808 //too early for OOTexture!
809 SDL_Surface *image=NULL;
810 SDL_Rect dest;
811
812 NSString *imagesDir = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Images"];
813
814 image = SDL_LoadBMP([[imagesDir stringByAppendingPathComponent:@"splash.bmp"] UTF8String]);
815
816 if (image == NULL)
817 {
818 SDL_FreeSurface(image);
819 OOLogWARN(@"sdl.gameStart", @"%@", @"image 'splash.bmp' not found!");
820 [self endSplashScreen];
821 return;
822 }
823
824 dest.x = 0;
825 dest.y = 0;
826 dest.w = image->w;
827 dest.h = image->h;
828
829 #if OOLITE_WINDOWS
830
831 dest.x = (GetSystemMetrics(SM_CXSCREEN)- dest.w)/2;
832 dest.y = (GetSystemMetrics(SM_CYSCREEN)-dest.h)/2;
833 SetWindowLong(SDL_Window,GWL_STYLE,GetWindowLong(SDL_Window,GWL_STYLE) & ~WS_CAPTION & ~WS_THICKFRAME);
834 ShowWindow(SDL_Window,SW_RESTORE);
835 MoveWindow(SDL_Window,dest.x,dest.y,dest.w,dest.h,TRUE);
836
837 #else
838
839 /* MKW 2011.11.11
840 * According to Marc using the NOFRAME flag causes trouble under Ubuntu 8.04.
841 *
842 * The current Ubuntu LTS is 10.04, which doesn't seem to have that problem.
843 * 12.04 LTS is going to be released soon, also without apparent problems.
844 * Changed to SDL_NOFRAME, throwing caution to the wind - Kaks 2012.03.23
845 * Took SDL_NOFRAME out, since it still causes strange problems here - cim 2012.04.09
846 */
847 surface = SDL_SetVideoMode(dest.w, dest.h, 32, SDL_HWSURFACE | SDL_OPENGL);
848
849 #endif
850
852
853 glViewport( 0, 0, dest.w, dest.h);
854
855 glEnable( GL_TEXTURE_2D );
856 glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
857 glClear( GL_COLOR_BUFFER_BIT );
858
859 [matrixManager resetProjection];
860 [matrixManager orthoLeft: 0.0f right: dest.w bottom: dest.h top: 0.0 near: -1.0 far: 1.0];
861 [matrixManager syncProjection];
862
863 [matrixManager resetModelView];
864 [matrixManager syncModelView];
865
866 GLuint texture;
867 GLenum texture_format;
868 GLint nOfColors;
869
870 // get the number of channels in the SDL image
871 nOfColors = image->format->BytesPerPixel;
872 if (nOfColors == 4) // contains an alpha channel
873 {
874 if (image->format->Rmask == 0x000000ff)
875 texture_format = GL_RGBA;
876 else
877 texture_format = GL_BGRA;
878 }
879 else if (nOfColors == 3) // no alpha channel
880 {
881 if (image->format->Rmask == 0x000000ff)
882 texture_format = GL_RGB;
883 else
884 texture_format = GL_BGR;
885 } else {
886 SDL_FreeSurface(image);
887 OOLog(@"Sdl.GameStart", @"%@", @"----- Encoding error within image 'splash.bmp'");
888 [self endSplashScreen];
889 return;
890 }
891
892 glGenTextures( 1, &texture );
893 glBindTexture( GL_TEXTURE_2D, texture );
894
895 // Set the texture's stretching properties
896 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
897 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
898
899 // Set the texture image data with the information from SDL_Surface
900 glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, image->w, image->h, 0,
901 texture_format, GL_UNSIGNED_BYTE, image->pixels );
902
903 glBindTexture( GL_TEXTURE_2D, texture );
904 glBegin( GL_QUADS );
905
906 glTexCoord2i( 0, 0 );
907 glVertex2i( 0, 0 );
908 glTexCoord2i( 1, 0 );
909 glVertex2i( dest.w, 0 );
910 glTexCoord2i( 1, 1 );
911 glVertex2i( dest.w, dest.h );
912 glTexCoord2i( 0, 1 );
913 glVertex2i( 0, dest.h );
914
915 glEnd();
916
917 SDL_GL_SwapBuffers();
918 [matrixManager resetModelView];
919 [matrixManager syncModelView];
920
921 if ( image ) {
922 SDL_FreeSurface( image );
923 }
924 glDeleteTextures(1, &texture);
925
926 glDisable( GL_TEXTURE_2D );
928}
@ OPENGL_STATE_OVERLAY
Definition OOOpenGL.h:126
#define OOVerifyOpenGLState()
Definition OOOpenGL.h:136
#define OOSetOpenGLState(STATE)
Definition OOOpenGL.h:135

References endSplashScreen, initSplashScreen, OOLog, OOLogWARN, OOSetOpenGLState, OOVerifyOpenGLState, OPENGL_STATE_OVERLAY, OOOpenGLMatrixManager::orthoLeft:right:bottom:top:near:far:, OOOpenGLMatrixManager::resetModelView, OOOpenGLMatrixManager::resetProjection, showSplashScreen, surface, OOOpenGLMatrixManager::syncModelView, and OOOpenGLMatrixManager::syncProjection.

Referenced by GameController::beginSplashScreen, and initSplashScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initWithFrame:

- (id) initWithFrame: (NSRect) frameRect
implementation

Definition at line 81 of file MyOpenGLView.m.

81 :(NSRect)frameRect
82{
83#ifndef NDEBUG
84 if (NSZombieEnabled)
85 {
86 OOLog(@"debug.zombieEnabled", @"*** ZOMBIES WILL EAT YOUR BRAIN ***");
87 }
88#endif
89
90 // Pixel Format Attributes for the View-based (non-FullScreen) NSOpenGLContext
91 NSOpenGLPixelFormatAttribute attrs[] =
92 {
93 // Specify that we want a windowed OpenGL context.
94 // Must be first or we'll hit an assert in the legacy fullscreen controller.
95 NSOpenGLPFAWindow,
96
97 // We may be on a multi-display system (and each screen may be driven by a different renderer), so we need to specify which screen we want to take over.
98 // For this demo, we'll specify the main screen.
99 NSOpenGLPFAScreenMask, CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay),
100
101 // Specifying "NoRecovery" gives us a context that cannot fall back to the software renderer.
102 // This makes the View-based context a compatible with the fullscreen context, enabling us to use the "shareContext"
103 // feature to share textures, display lists, and other OpenGL objects between the two.
104 NSOpenGLPFANoRecovery,
105
106 // Attributes Common to FullScreen and non-FullScreen
107 NSOpenGLPFACompliant,
108
109 NSOpenGLPFAColorSize, 32,
110 NSOpenGLPFADepthSize, 32,
111 NSOpenGLPFADoubleBuffer,
112 NSOpenGLPFAAccelerated,
113#if FSAA
114 // Need a preference or other sane way to activate this
115 NSOpenGLPFAMultisample,
116 NSOpenGLPFASampleBuffers, 1,
117 NSOpenGLPFASamples,4,
118#endif
119 0
120 };
121
122 // Create our non-FullScreen pixel format.
123 NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];
124
125 if ((self = [super initWithFrame:frameRect pixelFormat:pixelFormat]))
126 {
127 if ([self respondsToSelector:@selector(setAcceptsTouchEvents:)])
128 {
129 [self setAcceptsTouchEvents:YES];
130 }
131
132 if ([self respondsToSelector:@selector(setWantsBestResolutionOpenGLSurface:)])
133 {
134 // Enable high resolution on Retina displays.
135 [self setWantsBestResolutionOpenGLSurface:YES];
136 }
137
138 matrixManager = [[OOOpenGLMatrixManager alloc] init];
139 _pixelFormatAttributes = [[NSData alloc] initWithBytes:attrs length:sizeof attrs];
140 virtualJoystickPosition = NSMakePoint(0.0,0.0);
141
142 typedString = [[NSMutableString alloc] initWithString:@""];
145
146 timeIntervalAtLastClick = [NSDate timeIntervalSinceReferenceDate];
147
148 _virtualScreen = [[self openGLContext] currentVirtualScreen];
149 }
150
151 // preload the printscreen key into our translation array because SDLK_PRINTSCREEN isn't available
153 [self initKeyMappingData];
154
155 return self;
156}
@ gvPrintScreenKey
int scancode2Unicode[NUM_KEYS]
NSPoint virtualJoystickPosition
NSTimeInterval timeIntervalAtLastClick

References _pixelFormatAttributes, _virtualScreen, allowingStringInput, gvPrintScreenKey, gvStringInputNo, initKeyMappingData, isAlphabetKeyDown, matrixManager, OOLog, scancode2Unicode, timeIntervalAtLastClick, typedString, and virtualJoystickPosition.

+ Here is the call graph for this function:

◆ isAlphabetKeyDown [1/2]

- (BOOL) isAlphabetKeyDown

References clearCommandF, gammaValue, getOpenGLMatrixManager, int(), isAlphabetKeyDown, isCapsLockOn, isCommandDown, isCommandFDown, isCommandQDown, isCtrlDown, isOptDown, isShiftDown, lastKeyWasShifted, mouseWheelDelta, mouseWheelState, numKeys, pollShiftKey, and suppressKeysUntilKeyUp.

+ Here is the call graph for this function:

◆ isAlphabetKeyDown [2/2]

- (BOOL) isAlphabetKeyDown

References isAlphabetKeyDown.

◆ isCapsLockOn [1/2]

- (BOOL) isCapsLockOn

Definition at line 1993 of file MyOpenGLView.m.

1994{
1995 /* Caps Lock state check - This effectively gives us
1996 an alternate keyboard state to play with and, in
1997 the future, we could assign different behaviours
1998 to existing controls, depending on the state of
1999 Caps Lock. - Nikos 20160304
2000 */
2001 return (SDL_GetModState() & KMOD_CAPS) == KMOD_CAPS;
2002}

References isCapsLockOn.

Referenced by isAlphabetKeyDown, isCapsLockOn, pollControls, and PlayerEntity(OOControlsPrivate)::pollFlightArrowKeyControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isCapsLockOn [2/2]

- (BOOL) isCapsLockOn

References isCapsLockOn.

+ Here is the call graph for this function:

◆ isCommandDown [1/2]

- (BOOL) isCommandDown

Definition at line 1981 of file MyOpenGLView.m.

1982{
1983 return command;
1984}

References command, and isCommandDown.

Referenced by isAlphabetKeyDown, and isCommandDown.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isCommandDown [2/2]

- (BOOL) isCommandDown

References isCommandDown.

+ Here is the call graph for this function:

◆ isCommandFDown [1/2]

- (BOOL) isCommandFDown

Definition at line 2045 of file MyOpenGLView.m.

2046{
2047 return NO;
2048}

References isCommandFDown.

Referenced by isAlphabetKeyDown, and isCommandFDown.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isCommandFDown [2/2]

- (BOOL) isCommandFDown

References isCommandFDown.

+ Here is the call graph for this function:

◆ isCommandModifierKeyDown

- (BOOL) isCommandModifierKeyDown
implementation

Provided by category MyOpenGLView(OOLoadSaveExtensions).

Definition at line 1354 of file PlayerEntityLoadSave.m.

1355{
1356 return [self isCtrlDown];
1357}

◆ isCommandQDown [1/2]

- (BOOL) isCommandQDown

Definition at line 2039 of file MyOpenGLView.m.

2040{
2041 return NO;
2042}

References isCommandQDown.

Referenced by isAlphabetKeyDown, and isCommandQDown.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isCommandQDown [2/2]

- (BOOL) isCommandQDown

References isCommandQDown.

+ Here is the call graph for this function:

◆ isCtrlDown [1/2]

- (BOOL) isCtrlDown

Definition at line 1975 of file MyOpenGLView.m.

1976{
1977 return ctrl;
1978}

References ctrl, and isCtrlDown.

Referenced by isAlphabetKeyDown, MyOpenGLView(OOLoadSaveExtensions)::isCommandModifierKeyDown, isCtrlDown, PlayerEntity(OOControlsPrivate)::pollCustomViewControls, PlayerEntity(OOControlsPrivate)::pollFlightArrowKeyControls:, and PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isCtrlDown [2/2]

- (BOOL) isCtrlDown

References isCtrlDown.

+ Here is the call graph for this function:

◆ isDown: [1/2]

- (BOOL) isDown: (int) key

Definition at line 1957 of file MyOpenGLView.m.

1957 : (int) key
1958{
1959 if ( suppressKeys )
1960 return NO;
1961 if ( key < 0 )
1962 return NO;
1963 if ( key >= [self numKeys] )
1964 return NO;
1965 return keys[key];
1966}

References keys, numKeys, and suppressKeys.

Referenced by PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, PlayerEntity(Controls)::handleGUIUpDownArrowKeys, PlayerEntity(KeyMapper)::handleKeyboardLayoutEntryKeys:view:, PlayerEntity(KeyMapper)::handleKeyConfigKeys:view:, PlayerEntity(KeyMapper)::handleKeyMapperConfirmClearKeys:view:, PlayerEntity(KeyMapper)::keyMapperInputHandler:view:, and PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isDown: [2/2]

- (BOOL) isDown: (int) key

◆ isOptDown [1/2]

- (BOOL) isOptDown

Definition at line 1969 of file MyOpenGLView.m.

1970{
1971 return opt;
1972}

References isOptDown, and opt.

Referenced by isAlphabetKeyDown, isOptDown, and PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isOptDown [2/2]

- (BOOL) isOptDown

References isOptDown.

+ Here is the call graph for this function:

◆ isOutputDisplayHDREnabled

- (BOOL) isOutputDisplayHDREnabled

Definition at line 1352 of file MyOpenGLView.m.

1353{
1354 return NO;
1355}

References isOutputDisplayHDREnabled.

Referenced by endSplashScreen, initialiseGLWithSize:, and isOutputDisplayHDREnabled.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isRunningOnPrimaryDisplayDevice

- (BOOL) isRunningOnPrimaryDisplayDevice

Definition at line 1316 of file MyOpenGLView.m.

1317{
1318 return YES;
1319}

References isRunningOnPrimaryDisplayDevice.

Referenced by initialiseGLWithSize:, initialiseGLWithSize:useVideoMode:, isRunningOnPrimaryDisplayDevice, and PlayerEntity::setGuiToGameOptionsScreen.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isShiftDown [1/2]

- (BOOL) isShiftDown

Definition at line 1987 of file MyOpenGLView.m.

1988{
1989 return shift;
1990}

References isShiftDown, and shift.

Referenced by isAlphabetKeyDown, isShiftDown, PlayerEntity(OOControlsPrivate)::pollCustomViewControls, and PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ isShiftDown [2/2]

- (BOOL) isShiftDown

References isShiftDown.

+ Here is the call graph for this function:

◆ keyDown:

- (void) keyDown: (NSEvent *) theEvent
implementation

Definition at line 616 of file MyOpenGLView.m.

616 :(NSEvent *)theEvent
617{
618 NSString *stringValue = nil;
619 int key;
620 int keycode;
621
622 stringValue = [theEvent charactersIgnoringModifiers];
623
624 /* Bug: exception when pressing accent key.
625 Analysis: Dead keys (accents and similar) return an empty string.
626 Fix: reject zero-length strings. This is the Wrong Thing - we should
627 really be using KeyTranslate()/UCKeyTranslate() to find out what the
628 string would be if you pressed the key and then space.
629 -- Ahruman 20070714
630 */
631 //if ([stringValue length] < 1) return;
632
633 keycode = [theEvent keyCode] & 255;
634
635 if ([stringValue length] < 1)
636 {
637 if (!shift)
638 {
639 NSString *keyNormal = [keyMappings_normal objectForKey:[NSString stringWithFormat:@"%d", keycode]];
640 if (keyNormal) stringValue = [NSString stringWithFormat:@"%c", [keyNormal integerValue]];
641 }
642 else
643 {
644 NSString *keyShifted = [keyMappings_shifted objectForKey:[NSString stringWithFormat:@"%d", keycode]];
645 if (keyShifted) stringValue = [NSString stringWithFormat:@"%c", [keyShifted integerValue]];
646 }
647 // if we still have a zero-length string, return at this point
648 if ([stringValue length] < 1) return;
649 }
650
651 key = [stringValue characterAtIndex:0];
652 key = [self translateKeyCode:key];
653
654 OOLog(kOOLogKeyDown, @"Key down: stringValue = \"%@\", keyCode = %d, key = %u", stringValue, keycode, key);
655
656 // Special handling of command keys used in full-screen mode.
657 if ([theEvent modifierFlags] & NSCommandKeyMask)
658 {
659 switch (key)
660 {
661 case 'q':
662 commandQ = YES;
663 break;
664
665 case 'f':
666 commandF = YES;
667 break;
668 }
669
670 return;
671 }
672
673 keycodetrans[keycode] = key; // record the character we got for pressing the hardware at key location 'keycode'
674
675 /* HACK: treat f12 as alias to cmd-F for compatibility with helpful forum
676 advice etc.
677 */
678 if (key == NSF12FunctionKey)
679 {
680 if (!f12)
681 {
682 f12 = YES;
683 [gameController performSelector:@selector(toggleFullScreenAction:) withObject:nil afterDelay:0.0];
684 }
685
686 return;
687 };
688
689 if ((key >= 0)&&(key < [self numKeys])&&(!keys[key]))
690 {
691 keys[key] = YES;
692
694 {
695 if ((key == gvDeleteKey || key == gvBackspaceKey) && [typedString length] > 0)
696 {
697 // delete
698 [typedString deleteCharactersInRange:NSMakeRange([typedString length] - 1, 1)];
699 }
700
703
704 // limited input for planet find screen
706 {
707 if (isalpha(key))
708 {
709 isAlphabetKeyDown = YES;
710 // convert to lower case
711 [typedString appendFormat:@"%c", tolower(key)];
712 }
713 }
714
715 // full input for load-save screen or 'all' input
717 {
718 // except '/' for loadsave
719 if (isprint(key) && key != '/')
720 {
721 isAlphabetKeyDown = YES;
722 [typedString appendFormat:@"%c", key];
723 }
724 else if (key == '/' && allowingStringInput == gvStringInputAll)
725 {
726 isAlphabetKeyDown = YES;
727 [typedString appendFormat:@"%c", key];
728 }
729 }
730
731 }
732 }
733 else
734 {
735 if (key > [self numKeys])
736 {
737 OOLog(kOOLogKeyCodeOutOfRange, @"Translated key: %d out of range", key);
738 }
739 }
740}
static NSString * kOOLogKeyCodeOutOfRange
static NSString * kOOLogKeyDown
@ gvBackspaceKey
@ gvDeleteKey
@ gvStringInputLoadSave
int keycodetrans[255]

References allowingStringInput, commandF, commandQ, f12, gvBackspaceKey, gvDeleteKey, gvStringInputAll, gvStringInputAlpha, gvStringInputLoadSave, isAlphabetKeyDown, keycodetrans, keys, kOOLogKeyCodeOutOfRange, kOOLogKeyDown, lastKeyShifted, nil, numKeys, OOLog, shift, translateKeyCode:, and typedString.

Referenced by OoliteApp::sendEvent:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ keyUp:

- (void) keyUp: (NSEvent *) theEvent
implementation

Definition at line 553 of file MyOpenGLView.m.

553 :(NSEvent *)theEvent
554{
555 NSString *stringValue = nil;
556 int key;
557 int keycode;
558
559 stringValue = [theEvent charactersIgnoringModifiers];
560
561 /* Bug: exception when releasing accent key.
562 Analysis: Dead keys (accents and similar) return an empty string.
563 Fix: reject zero-length strings. This is the Wrong Thing - we should
564 really be using KeyTranslate()/UCKeyTranslate() to find out what the
565 string would be if you pressed the key and then space.
566 -- Ahruman 20070714
567 */
568 if ([stringValue length] < 1) return;
569
570 suppressKeys = NO;
571
572 keycode = [theEvent keyCode] & 255;
573 key = keycodetrans[keycode]; // retrieve the character we got for pressing the hardware at key location 'keycode'
574
575 OOLog(kOOLogKeyUp, @"Key up: stringValue = \"%@\", keyCode = %d, key = %u", stringValue, keycode, key);
576
577 // Special handling of command keys used in full-screen mode.
578 if ([theEvent modifierFlags] & NSCommandKeyMask)
579 {
580 switch (key)
581 {
582 case 'q':
583 commandQ = NO;
584 break;
585
586 case 'f':
587 commandF = NO;
588 break;
589 }
590 // Pass through to allow clearing of normal key as well.
591 }
592
593 /* HACK: treat f12 as alias to cmd-F for compatibility with helpful forum
594 advice etc.
595 */
596 if (key == NSF12FunctionKey)
597 {
598 commandF = NO;
599 f12 = NO;
600 return;
601 };
602
604 if ((key >= 0)&&(key < [self numKeys])&&(keys[key]))
605 {
606 keys[key] = NO;
607 }
608 else
609 {
610 if (key > [self numKeys])
611 OOLog(kOOLogKeyCodeOutOfRange, @"Translated key: %d out of range", key);
612 }
613}
static NSString * kOOLogKeyUp

References commandF, commandQ, f12, isAlphabetKeyDown, keycodetrans, keys, kOOLogKeyCodeOutOfRange, kOOLogKeyUp, nil, numKeys, OOLog, and suppressKeys.

Referenced by OoliteApp::sendEvent:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lastKeyWasShifted [1/2]

- (BOOL) lastKeyWasShifted

Definition at line 2005 of file MyOpenGLView.m.

2006{
2007 return lastKeyShifted;
2008}

References lastKeyShifted, and lastKeyWasShifted.

Referenced by isAlphabetKeyDown, and lastKeyWasShifted.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ lastKeyWasShifted [2/2]

- (BOOL) lastKeyWasShifted

References lastKeyWasShifted.

+ Here is the call graph for this function:

◆ loadFullscreenSettings

- (int) loadFullscreenSettings

Definition at line 2799 of file MyOpenGLView.m.

2800{
2801 currentSize=0;
2802 int width=0, height=0, refresh=0;
2803 unsigned i;
2804
2805 NSArray* cmdline_arguments = [[NSProcessInfo processInfo] arguments];
2806
2807 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
2808 if ([userDefaults objectForKey:@"display_width"])
2809 width = [userDefaults integerForKey:@"display_width"];
2810 if ([userDefaults objectForKey:@"display_height"])
2811 height = [userDefaults integerForKey:@"display_height"];
2812 if ([userDefaults objectForKey:@"display_refresh"])
2813 refresh = [userDefaults integerForKey:@"display_refresh"];
2814 if([userDefaults objectForKey:@"fullscreen"])
2815 fullScreen=[userDefaults boolForKey:@"fullscreen"];
2816
2817 // Check if -fullscreen or -windowed has been passed on the command line. If yes,
2818 // set it regardless of what is set by .GNUstepDefaults. If both are found in the
2819 // arguments list, the one that comes last wins.
2820 for (i = 0; i < [cmdline_arguments count]; i++)
2821 {
2822 if ([[cmdline_arguments objectAtIndex:i] isEqual:@"-fullscreen"]) fullScreen = YES;
2823 if ([[cmdline_arguments objectAtIndex:i] isEqual:@"-windowed"]) fullScreen = NO;
2824 }
2825
2826 if(width && height)
2827 {
2828 currentSize=[self findDisplayModeForWidth: width Height: height Refresh: refresh];
2829 return currentSize;
2830 }
2831 return currentSize;
2832}

References currentSize, findDisplayModeForWidth:Height:Refresh:, fullScreen, int(), and loadFullscreenSettings.

Referenced by init, loadFullscreenSettings, and modeAsSize:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ loadWindowSize

- (NSSize) loadWindowSize

Definition at line 2781 of file MyOpenGLView.m.

2782{
2783 NSSize windowSize;
2784 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
2785 if([defaults objectForKey:@"window_width"] && [defaults objectForKey:@"window_height"])
2786 {
2787 windowSize=NSMakeSize([defaults integerForKey: @"window_width"],
2788 [defaults integerForKey: @"window_height"]);
2789 }
2790 else
2791 {
2793 }
2794 currentWindowSize=windowSize;
2795 return windowSize;
2796}

References currentWindowSize, loadWindowSize, WINDOW_SIZE_DEFAULT_HEIGHT, and WINDOW_SIZE_DEFAULT_WIDTH.

Referenced by init, loadWindowSize, and modeAsSize:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ modeAsSize:

- (NSSize) modeAsSize: (int) sizeIndex

References currentScreenSize, int(), loadFullscreenSettings, and loadWindowSize.

+ Here is the call graph for this function:

◆ mouseDown:

- (void) mouseDown: (NSEvent *) theEvent

Definition at line 757 of file MyOpenGLView.m.

757 :(NSEvent *)theEvent
758{
759 if (doubleClick)
760 {
761 doubleClick = NO;
762 keys[gvMouseDoubleClick] = NO;
763 }
764 keys[gvMouseLeftButton] = YES; // 'a' down
765}

References doubleClick, and keys.

◆ mouseDragged:

- (void) mouseDragged: (NSEvent *) theEvent
implementation

Definition at line 811 of file MyOpenGLView.m.

811 :(NSEvent *)theEvent
812{
813 [self mouseMoved:theEvent];
814}

References mouseMoved:.

+ Here is the call graph for this function:

◆ mouseMoved:

- (void) mouseMoved: (NSEvent *) theEvent
implementation

Definition at line 791 of file MyOpenGLView.m.

791 :(NSEvent *)theEvent
792{
793 double mx = [theEvent locationInWindow].x - viewSize.width/2.0;
794 double my = [theEvent locationInWindow].y - viewSize.height/2.0;
795
796 if (display_z > 640.0)
797 {
799 my /= viewSize.height;
800 }
801 else
802 {
803 mx /= MAIN_GUI_PIXEL_WIDTH * viewSize.width / 640.0;
804 my /= MAIN_GUI_PIXEL_HEIGHT * viewSize.width / 640.0;
805 }
806
807 [self setVirtualJoystick:mx :-my];
808}
#define MAIN_GUI_PIXEL_WIDTH
#define MAIN_GUI_PIXEL_HEIGHT

References display_z, MAIN_GUI_PIXEL_HEIGHT, MAIN_GUI_PIXEL_WIDTH, and viewSize.

Referenced by mouseDragged:, and otherMouseDragged:.

+ Here is the caller graph for this function:

◆ mouseUp:

- (void) mouseUp: (NSEvent *) theEvent

Definition at line 768 of file MyOpenGLView.m.

768 :(NSEvent *)theEvent
769{
770 NSTimeInterval timeBetweenClicks = [NSDate timeIntervalSinceReferenceDate] - timeIntervalAtLastClick;
771 timeIntervalAtLastClick += timeBetweenClicks;
772
773 if (!doubleClick)
774 {
775 doubleClick = (timeBetweenClicks < MOUSE_DOUBLE_CLICK_INTERVAL); // One fifth of a second
776 keys[gvMouseDoubleClick] = doubleClick;
777 }
778
779 keys[gvMouseLeftButton] = NO; // 'a' up
780}
#define MOUSE_DOUBLE_CLICK_INTERVAL

References doubleClick, keys, MOUSE_DOUBLE_CLICK_INTERVAL, and timeIntervalAtLastClick.

◆ mouseWheelDelta [1/2]

- (float) mouseWheelDelta

Definition at line 2027 of file MyOpenGLView.m.

2028{
2030}
#define OOMOUSEWHEEL_DELTA
float _mouseWheelDelta

References _mouseWheelDelta, mouseWheelDelta, and OOMOUSEWHEEL_DELTA.

Referenced by PlayerEntity::doBookkeeping:, isAlphabetKeyDown, and mouseWheelDelta.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mouseWheelDelta [2/2]

- (float) mouseWheelDelta

References mouseWheelDelta.

+ Here is the call graph for this function:

◆ mouseWheelState [1/2]

- (int) mouseWheelState

Definition at line 2016 of file MyOpenGLView.m.

2017{
2018 if (_mouseWheelDelta > 0.0f)
2019 return gvMouseWheelUp;
2020 else if (_mouseWheelDelta < 0.0f)
2021 return gvMouseWheelDown;
2022 else
2023 return gvMouseWheelNeutral;
2024}
@ gvMouseWheelDown
@ gvMouseWheelNeutral
@ gvMouseWheelUp

References _mouseWheelDelta, gvMouseWheelDown, gvMouseWheelNeutral, gvMouseWheelUp, int(), and mouseWheelState.

Referenced by isAlphabetKeyDown, and mouseWheelState.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mouseWheelState [2/2]

- (int) mouseWheelState

References int(), and mouseWheelState.

+ Here is the call graph for this function:

◆ msaa

- (BOOL) msaa

Definition at line 2912 of file MyOpenGLView.m.

2913{
2914 return _msaa;
2915}

References _msaa, and msaa.

Referenced by fov:, and msaa.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noteMouseInteractionModeChangedFrom:to: [1/2]

- (void) noteMouseInteractionModeChangedFrom: (OOMouseInteractionMode) oldMode
to: (OOMouseInteractionMode) newMode 

Definition at line 664 of file MyOpenGLView.m.

665{
666 [self autoShowMouse];
667 [self setMouseInDeltaMode:OOMouseInteractionModeIsFlightMode(newMode)];
668}
OOMouseInteractionMode

References autoShowMouse, and setMouseInDeltaMode:.

Referenced by GameController::setMouseInteractionMode:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ noteMouseInteractionModeChangedFrom:to: [2/2]

- (void) noteMouseInteractionModeChangedFrom: (OOMouseInteractionMode) oldMode
to: (OOMouseInteractionMode) newMode 

◆ noteMovedToBadDisplay

- (void) noteMovedToBadDisplay
implementation

Definition at line 316 of file MyOpenGLView.m.

317{
318 NSRunInformationalAlertPanel(DESC(@"oolite-mac-bad-display"), @"%@", nil, nil, nil, DESC(@"oolite-mac-bad-display-2"));
319}
#define DESC(key)
Definition Universe.h:846

References DESC, nil, and noteMovedToBadDisplay.

Referenced by noteMovedToBadDisplay, and update.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ numKeys [1/2]

- (int) numKeys

Definition at line 2010 of file MyOpenGLView.m.

2011{
2012 return NUM_KEYS;
2013}
#define NUM_KEYS

References int(), NUM_KEYS, and numKeys.

Referenced by clearKey:, clearKeys, isAlphabetKeyDown, isDown:, keyDown:, keyUp:, numKeys, and pollControls.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ numKeys [2/2]

- (int) numKeys

References int(), and numKeys.

+ Here is the call graph for this function:

◆ otherMouseDragged:

- (void) otherMouseDragged: (NSEvent *) theEvent
implementation

Definition at line 840 of file MyOpenGLView.m.

840 :(NSEvent *)theEvent
841{
842 [self mouseMoved:theEvent];
843}

References mouseMoved:.

+ Here is the call graph for this function:

◆ pixelFormatAttributes

- (NSData *) pixelFormatAttributes

Definition at line 389 of file MyOpenGLView.m.

390{
392}

References _pixelFormatAttributes, and pixelFormatAttributes.

Referenced by gameController, and pixelFormatAttributes.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pngSaveSurface:withSurface:

- (BOOL) pngSaveSurface: (NSString *) fileName
withSurface: (SDL_Surface *) surf 

Definition at line 1729 of file MyOpenGLView.m.

1729 :(NSString *)fileName withSurface:(SDL_Surface *)surf
1730{
1731 FILE *fp;
1732 png_structp pngPtr;
1733 png_infop infoPtr;
1734 int i, colorType;
1735 png_bytep *rowPointers;
1736
1737 fp = fopen([fileName UTF8String], "wb");
1738 if (fp == NULL)
1739 {
1740 OOLog(@"pngSaveSurface.fileCreate.failed", @"Failed to create output screenshot file %@", fileName);
1741 return NO;
1742 }
1743
1744 // initialize png structures (no callbacks)
1745 pngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
1746 if (pngPtr == NULL)
1747 {
1748 return NO;
1749 }
1750
1751 infoPtr = png_create_info_struct(pngPtr);
1752 if (infoPtr == NULL) {
1753 png_destroy_write_struct(&pngPtr, (png_infopp)NULL);
1754 OOLog(@"pngSaveSurface.info_struct.failed", @"%@", @"png_create_info_struct error");
1755 exit(-1);
1756 }
1757
1758 if (setjmp(png_jmpbuf(pngPtr)))
1759 {
1760 png_destroy_write_struct(&pngPtr, &infoPtr);
1761 fclose(fp);
1762 exit(-1);
1763 }
1764
1765 png_init_io(pngPtr, fp);
1766
1767 colorType = PNG_COLOR_MASK_COLOR; /* grayscale not supported */
1768 if (surf->format->palette)
1769 {
1770 colorType |= PNG_COLOR_MASK_PALETTE;
1771 }
1772 else if (surf->format->Amask)
1773 {
1774 colorType |= PNG_COLOR_MASK_ALPHA;
1775 }
1776
1777 png_set_IHDR(pngPtr, infoPtr, surf->w, surf->h, 8, colorType, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
1778
1779 // if we are outputting HDR, our backbuffer is linear, so gamma is 1.0. Make sure our png has this info
1780 // note: some image viewers seem to ignore the gAMA chunk; still, this is better than not having it at all
1781 if ([self hdrOutput]) png_set_gAMA(pngPtr, infoPtr, 1.0f);
1782
1783 // write the image
1784 png_write_info(pngPtr, infoPtr);
1785 png_set_packing(pngPtr);
1786
1787 rowPointers = (png_bytep*) malloc(sizeof(png_bytep)*surf->h);
1788 for (i = 0; i < surf->h; i++)
1789 {
1790 rowPointers[i] = (png_bytep)(Uint8 *)surf->pixels + i*surf->pitch;
1791 }
1792 png_write_image(pngPtr, rowPointers);
1793 png_write_end(pngPtr, infoPtr);
1794
1795 free(rowPointers);
1796 png_destroy_write_struct(&pngPtr, &infoPtr);
1797 fclose(fp);
1798
1799 return YES;
1800}

References hdrOutput, and OOLog.

+ Here is the call graph for this function:

◆ pollControls [1/2]

- (void) pollControls

Definition at line 2057 of file MyOpenGLView.m.

2058{
2059 SDL_Event event;
2060 SDL_KeyboardEvent *kbd_event;
2061 SDL_MouseButtonEvent *mbtn_event;
2062 SDL_MouseMotionEvent *mmove_event;
2063 int mxdelta, mydelta;
2064 float mouseVirtualStickSensitivityX = viewSize.width * _mouseVirtualStickSensitivityFactor;
2065 float mouseVirtualStickSensitivityY = viewSize.height * _mouseVirtualStickSensitivityFactor;
2066 NSTimeInterval timeNow = [NSDate timeIntervalSinceReferenceDate];
2067 Uint16 key_id;
2068 int scan_code;
2069
2070 while (SDL_PollEvent(&event))
2071 {
2072 switch (event.type) {
2073 case SDL_JOYAXISMOTION:
2074 case SDL_JOYBUTTONUP:
2075 case SDL_JOYBUTTONDOWN:
2076 case SDL_JOYHATMOTION:
2078 break;
2079
2080 case SDL_MOUSEBUTTONDOWN:
2081 mbtn_event = (SDL_MouseButtonEvent*)&event;
2082#if OOLITE_LINUX
2083 short inDelta = 0;
2084#else
2085 // specially built SDL.dll is required for this
2086 short inDelta = mbtn_event->wheelDelta;
2087#endif
2088 switch(mbtn_event->button)
2089 {
2090 case SDL_BUTTON_LEFT:
2091 keys[gvMouseLeftButton] = YES;
2092 break;
2093 case SDL_BUTTON_RIGHT:
2094 // Cocoa version does this in the GameController
2095 /*
2096 The mouseWarped variable is quite important as far as mouse control is concerned. When we
2097 reset the virtual joystick (mouse) coordinates, we need to send a WarpMouse call because we
2098 must recenter the pointer physically on screen. This goes together with a mouse motion event,
2099 so we use mouseWarped to simply ignore handling of motion events in this case. - Nikos 20110721
2100 */
2101 [self resetMouse]; // Will set mouseWarped to YES
2102 break;
2103 // mousewheel stuff
2104#if OOLITE_LINUX
2105 case SDL_BUTTON_WHEELUP:
2106 inDelta = OOMOUSEWHEEL_DELTA;
2107 // allow fallthrough
2108 case SDL_BUTTON_WHEELDOWN:
2109 if (inDelta == 0) inDelta = -OOMOUSEWHEEL_DELTA;
2110#else
2111 case SDL_BUTTON_WHEELUP:
2112 case SDL_BUTTON_WHEELDOWN:
2113#endif
2114 if (inDelta > 0)
2115 {
2116 if (_mouseWheelDelta >= 0.0f)
2117 _mouseWheelDelta += inDelta;
2118 else
2119 _mouseWheelDelta = 0.0f;
2120 }
2121 else if (inDelta < 0)
2122 {
2123 if (_mouseWheelDelta <= 0.0f)
2124 _mouseWheelDelta += inDelta;
2125 else
2126 _mouseWheelDelta = 0.0f;
2127 }
2128 break;
2129 }
2130 break;
2131
2132 case SDL_MOUSEBUTTONUP:
2133 mbtn_event = (SDL_MouseButtonEvent*)&event;
2134 NSTimeInterval timeBetweenClicks = timeNow - timeIntervalAtLastClick;
2135 timeIntervalAtLastClick += timeBetweenClicks;
2136 if (mbtn_event->button == SDL_BUTTON_LEFT)
2137 {
2138 if (!doubleClick)
2139 {
2140 doubleClick = (timeBetweenClicks < MOUSE_DOUBLE_CLICK_INTERVAL); // One fifth of a second
2141 keys[gvMouseDoubleClick] = doubleClick;
2142 }
2143 keys[gvMouseLeftButton] = NO;
2144 }
2145 /*
2146 Mousewheel handling - just note time since last use here and mark as inactive,
2147 if needed, at the end of this method. Note that the mousewheel button up event is
2148 kind of special, as in, it is sent at the same time as its corresponding mousewheel
2149 button down one - Nikos 20140809
2150 */
2151 if (mbtn_event->button == SDL_BUTTON_WHEELUP || mbtn_event->button == SDL_BUTTON_WHEELDOWN)
2152 {
2153 NSTimeInterval timeBetweenMouseWheels = timeNow - timeSinceLastMouseWheel;
2154 timeSinceLastMouseWheel += timeBetweenMouseWheels;
2155 }
2156 break;
2157
2158 case SDL_MOUSEMOTION:
2159 {
2160 // Delta mode is set when the game is in 'flight' mode.
2161 // In this mode, the mouse movement delta is used rather
2162 // than absolute position. This is because if the user
2163 // clicks the right button to recentre the virtual joystick,
2164 // if we are using absolute joystick positioning, as soon
2165 // as the player touches the mouse again, the virtual joystick
2166 // will snap back to the absolute position (which can be
2167 // annoyingly fatal in battle).
2169 {
2170 // note: virtual stick sensitivity is configurable
2171 SDL_GetRelativeMouseState(&mxdelta, &mydelta);
2172 double mxd=(double)mxdelta / mouseVirtualStickSensitivityX;
2173 double myd=(double)mydelta / mouseVirtualStickSensitivityY;
2174
2175 if (!mouseWarped) // Standard event, update coordinates
2176 {
2177 virtualJoystickPosition.x += mxd;
2178 virtualJoystickPosition.y += myd;
2179
2180 // if we excceed the limits, revert changes
2182 {
2183 virtualJoystickPosition.x -= mxd;
2184 }
2186 {
2187 virtualJoystickPosition.y -= myd;
2188 }
2189 }
2190 else
2191 {
2192 // Motion event generated by WarpMouse is ignored and
2193 // we reset mouseWarped for the next time.
2194 mouseWarped = NO;
2195 }
2196 }
2197 else
2198 {
2199 // Windowed mode. Use the absolute position so the
2200 // Oolite mouse pointer appears under the X Window System
2201 // mouse pointer.
2202 mmove_event = (SDL_MouseMotionEvent*)&event;
2203
2204 int w=bounds.size.width;
2205 int h=bounds.size.height;
2206
2207 if (!mouseWarped) // standard event, handle it
2208 {
2209 double mx = mmove_event->x - w/2.0;
2210 double my = mmove_event->y - h/2.0;
2211 if (display_z > 640.0)
2212 {
2213 mx /= w * MAIN_GUI_PIXEL_WIDTH / display_z;
2214 my /= h;
2215 }
2216 else
2217 {
2218 mx /= MAIN_GUI_PIXEL_WIDTH * w / 640.0;
2219 my /= MAIN_GUI_PIXEL_HEIGHT * w / 640.0;
2220 }
2221
2222 [self setVirtualJoystick:mx :my];
2223 }
2224 else
2225 {
2226 // event coming from WarpMouse ignored, get ready for the next
2227 mouseWarped = NO;
2228 }
2229 }
2230 break;
2231 }
2232 case SDL_KEYDOWN:
2233 kbd_event = (SDL_KeyboardEvent*)&event;
2234 key_id = (Uint16)kbd_event->keysym.unicode;
2235 scan_code = kbd_event->keysym.scancode;
2236
2237 //char *keychar = SDL_GetKeyName(kbd_event->keysym.sym);
2238 // deal with modifiers first
2239 BOOL modifier_pressed = NO;
2240 BOOL special_key = NO;
2241
2242 // translate scancode to unicode equiv
2243 switch (kbd_event->keysym.sym)
2244 {
2245 case SDLK_LSHIFT:
2246 case SDLK_RSHIFT:
2247 shift = YES;
2248 modifier_pressed = YES;
2249 break;
2250
2251 case SDLK_LCTRL:
2252 case SDLK_RCTRL:
2253 ctrl = YES;
2254 modifier_pressed = YES;
2255 break;
2256
2257 case SDLK_LALT:
2258 case SDLK_RALT:
2259 opt = YES;
2260 modifier_pressed = YES;
2261 break;
2262
2263 case SDLK_KP0: key_id = (!allowingStringInput ? gvNumberPadKey0 : gvNumberKey0); special_key = YES; break;
2264 case SDLK_KP1: key_id = (!allowingStringInput ? gvNumberPadKey1 : gvNumberKey1); special_key = YES; break;
2265 case SDLK_KP2: key_id = (!allowingStringInput ? gvNumberPadKey2 : gvNumberKey2); special_key = YES; break;
2266 case SDLK_KP3: key_id = (!allowingStringInput ? gvNumberPadKey3 : gvNumberKey3); special_key = YES; break;
2267 case SDLK_KP4: key_id = (!allowingStringInput ? gvNumberPadKey4 : gvNumberKey4); special_key = YES; break;
2268 case SDLK_KP5: key_id = (!allowingStringInput ? gvNumberPadKey5 : gvNumberKey5); special_key = YES; break;
2269 case SDLK_KP6: key_id = (!allowingStringInput ? gvNumberPadKey6 : gvNumberKey6); special_key = YES; break;
2270 case SDLK_KP7: key_id = (!allowingStringInput ? gvNumberPadKey7 : gvNumberKey7); special_key = YES; break;
2271 case SDLK_KP8: key_id = (!allowingStringInput ? gvNumberPadKey8 : gvNumberKey8); special_key = YES; break;
2272 case SDLK_KP9: key_id = (!allowingStringInput ? gvNumberPadKey9 : gvNumberKey9); special_key = YES; break;
2273 case SDLK_KP_PERIOD: key_id = (!allowingStringInput ? gvNumberPadKeyPeriod : 46); special_key = YES; break;
2274 case SDLK_KP_DIVIDE: key_id = (!allowingStringInput ? gvNumberPadKeyDivide : 47); special_key = YES; break;
2275 case SDLK_KP_MULTIPLY: key_id = (!allowingStringInput ? gvNumberPadKeyMultiply : 42); special_key = YES; break;
2276 case SDLK_KP_MINUS: key_id = (!allowingStringInput ? gvNumberPadKeyMinus : 45); special_key = YES; break;
2277 case SDLK_KP_PLUS: key_id = (!allowingStringInput ? gvNumberPadKeyPlus : 43); special_key = YES; break;
2278 case SDLK_KP_EQUALS: key_id = (!allowingStringInput ? gvNumberPadKeyEquals : 61); special_key = YES; break;
2279 case SDLK_KP_ENTER: key_id = gvNumberPadKeyEnter; special_key = YES; break;
2280 case SDLK_HOME: key_id = gvHomeKey; special_key = YES; break;
2281 case SDLK_END: key_id = gvEndKey; special_key = YES; break;
2282 case SDLK_INSERT: key_id = gvInsertKey; special_key = YES; break;
2283 case SDLK_PAGEUP: key_id = gvPageUpKey; special_key = YES; break;
2284 case SDLK_PAGEDOWN: key_id = gvPageDownKey; special_key = YES; break;
2285 case SDLK_SPACE: key_id = 32; special_key = YES; break;
2286 case SDLK_RETURN: key_id = 13; special_key = YES; break;
2287 case SDLK_TAB: key_id = 9; special_key = YES; break;
2288 case SDLK_UP: key_id = gvArrowKeyUp; special_key = YES; break;
2289 case SDLK_DOWN: key_id = gvArrowKeyDown; special_key = YES; break;
2290 case SDLK_LEFT: key_id = gvArrowKeyLeft; special_key = YES; break;
2291 case SDLK_RIGHT: key_id = gvArrowKeyRight; special_key = YES; break;
2292 case SDLK_PAUSE: key_id = gvPauseKey; special_key = YES; break;
2293 case SDLK_BACKSPACE: key_id = gvBackspaceKey; special_key = YES; break;
2294 case SDLK_DELETE: key_id = gvDeleteKey; special_key = YES; break;
2295 case SDLK_F1: key_id = gvFunctionKey1; special_key = YES; break;
2296 case SDLK_F2: key_id = gvFunctionKey2; special_key = YES; break;
2297 case SDLK_F3: key_id = gvFunctionKey3; special_key = YES; break;
2298 case SDLK_F4: key_id = gvFunctionKey4; special_key = YES; break;
2299 case SDLK_F5: key_id = gvFunctionKey5; special_key = YES; break;
2300 case SDLK_F6: key_id = gvFunctionKey6; special_key = YES; break;
2301 case SDLK_F7: key_id = gvFunctionKey7; special_key = YES; break;
2302 case SDLK_F8: key_id = gvFunctionKey8; special_key = YES; break;
2303 case SDLK_F9: key_id = gvFunctionKey9; special_key = YES; break;
2304 case SDLK_F10: key_id = gvFunctionKey10; special_key = YES; break;
2305 case SDLK_F11: key_id = gvFunctionKey11; special_key = YES; break;
2306 case SDLK_F12:
2307 key_id = 327;
2308 [self toggleScreenMode];
2309 special_key = YES;
2310 break;
2311
2312 case SDLK_ESCAPE:
2313 if (shift)
2314 {
2315 SDL_FreeSurface(surface);
2316 [gameController exitAppWithContext:@"Shift-escape pressed"];
2317 }
2318 else
2319 key_id = 27;
2320 special_key = YES;
2321 break;
2322 default:
2323 //OOLog(@"keys.test", @"Unhandled Keydown scancode with unicode = 0: %d", scan_code);
2324 ;
2325 }
2326
2327 // the keyup event doesn't give us the unicode value, so store it here so it can be retrieved on keyup
2328 // the ctrl key tends to mix up the unicode values, so deal with some special cases
2329 // we also need (in most cases) to get the character without the impact of caps lock.
2330 if (((!special_key && (ctrl || key_id == 0)) || ([self isCapsLockOn] && (!special_key && !allowingStringInput))) && !modifier_pressed) //
2331 {
2332 // ctrl changes alpha characters to control codes (1-26)
2333 if (ctrl && key_id >=1 && key_id <= 26)
2334 {
2335 if (shift)
2336 key_id += 64; // A-Z is from 65, offset by -1 for the scancode start point
2337 else
2338 key_id += 96; // a-z is from 97, offset by -1 for the scancode start point
2339 }
2340 else
2341 {
2342 key_id = 0; // reset the value here to force a lookup from the keymappings data
2343 }
2344 }
2345
2346 // if we get here and we still don't have a key id, grab the unicode value from our keymappings dict
2347 if (key_id == 0)
2348 {
2349 // get unicode value for keycode from keymappings files
2350 // this handles all the non-functional keys. the function keys are handled in the switch above
2351 if (!shift)
2352 {
2353 NSString *keyNormal = [keyMappings_normal objectForKey:[NSString stringWithFormat:@"%d", scan_code]];
2354 if (keyNormal) key_id = [keyNormal integerValue];
2355 }
2356 else
2357 {
2358 NSString *keyShifted = [keyMappings_shifted objectForKey:[NSString stringWithFormat:@"%d", scan_code]];
2359 if (keyShifted) key_id = [keyShifted integerValue];
2360 }
2361 }
2362
2363 // if we've got the unicode value, we can store it in our array now
2364 if (key_id > 0) scancode2Unicode[scan_code] = key_id;
2365
2367 {
2368 [self handleStringInput:kbd_event keyID:key_id];
2369 }
2370
2371 OOLog(kOOLogKeyDown, @"Keydown scancode = %d, unicode = %i, sym = %i, character = %c, shift = %d, ctrl = %d, alt = %d", scan_code, key_id, kbd_event->keysym.sym, key_id, shift, ctrl, opt);
2372 //OOLog(kOOLogKeyDown, @"Keydown scancode = %d, unicode = %i", kbd_event->keysym.scancode, key_id);
2373
2374 if (key_id > 0 && key_id <= [self numKeys])
2375 {
2376 keys[key_id] = YES;
2377 }
2378 else
2379 {
2380 //OOLog(@"keys.test", @"Unhandled Keydown scancode/unicode: %d %i", scan_code, key_id);
2381 }
2382 break;
2383
2384 case SDL_KEYUP:
2385 suppressKeys = NO; // DJS
2386 kbd_event = (SDL_KeyboardEvent*)&event;
2387 scan_code = kbd_event->keysym.scancode;
2388
2389 // all the work should have been down on the keydown event, so all we need to do is get the unicode value from the array
2390 key_id = scancode2Unicode[scan_code];
2391
2392 // deal with modifiers first
2393 switch (kbd_event->keysym.sym)
2394 {
2395 case SDLK_LSHIFT:
2396 case SDLK_RSHIFT:
2397 shift = NO;
2398 break;
2399
2400 case SDLK_LCTRL:
2401 case SDLK_RCTRL:
2402 ctrl = NO;
2403 break;
2404
2405 case SDLK_LALT:
2406 case SDLK_RALT:
2407 opt = NO;
2408 break;
2409 default:
2410 ;
2411 }
2412 OOLog(kOOLogKeyUp, @"Keyup scancode = %d, unicode = %i, sym = %i, character = %c, shift = %d, ctrl = %d, alt = %d", scan_code, key_id, kbd_event->keysym.sym, key_id, shift, ctrl, opt);
2413 //OOLog(kOOLogKeyUp, @"Keyup scancode = %d, shift = %d, ctrl = %d, alt = %d", scan_code, shift, ctrl, opt);
2414
2415 // translate scancode to unicode equiv
2416 switch (kbd_event->keysym.sym)
2417 {
2418 case SDLK_KP0: key_id = (!allowingStringInput ? gvNumberPadKey0 : gvNumberKey0); break;
2419 case SDLK_KP1: key_id = (!allowingStringInput ? gvNumberPadKey1 : gvNumberKey1); break;
2420 case SDLK_KP2: key_id = (!allowingStringInput ? gvNumberPadKey2 : gvNumberKey2); break;
2421 case SDLK_KP3: key_id = (!allowingStringInput ? gvNumberPadKey3 : gvNumberKey3); break;
2422 case SDLK_KP4: key_id = (!allowingStringInput ? gvNumberPadKey4 : gvNumberKey4); break;
2423 case SDLK_KP5: key_id = (!allowingStringInput ? gvNumberPadKey5 : gvNumberKey5); break;
2424 case SDLK_KP6: key_id = (!allowingStringInput ? gvNumberPadKey6 : gvNumberKey6); break;
2425 case SDLK_KP7: key_id = (!allowingStringInput ? gvNumberPadKey7 : gvNumberKey7); break;
2426 case SDLK_KP8: key_id = (!allowingStringInput ? gvNumberPadKey8 : gvNumberKey8); break;
2427 case SDLK_KP9: key_id = (!allowingStringInput ? gvNumberPadKey9 : gvNumberKey9); break;
2428 case SDLK_KP_PERIOD: key_id = (!allowingStringInput ? gvNumberPadKeyPeriod : 46); break;
2429 case SDLK_KP_DIVIDE: key_id = (!allowingStringInput ? gvNumberPadKeyDivide : 47); break;
2430 case SDLK_KP_MULTIPLY: key_id = (!allowingStringInput ? gvNumberPadKeyMultiply : 42); break;
2431 case SDLK_KP_MINUS: key_id = (!allowingStringInput ? gvNumberPadKeyMinus : 45); break;
2432 case SDLK_KP_PLUS: key_id = (!allowingStringInput ? gvNumberPadKeyPlus : 43); break;
2433 case SDLK_KP_EQUALS: key_id = (!allowingStringInput ? gvNumberPadKeyEquals : 61); break;
2434 case SDLK_KP_ENTER: key_id = gvNumberPadKeyEnter; break;
2435 case SDLK_HOME: key_id = gvHomeKey; break;
2436 case SDLK_END: key_id = gvEndKey; break;
2437 case SDLK_INSERT: key_id = gvInsertKey; break;
2438 case SDLK_PAGEUP: key_id = gvPageUpKey; break;
2439 case SDLK_PAGEDOWN: key_id = gvPageDownKey; break;
2440 case SDLK_SPACE: key_id = 32; break;
2441 case SDLK_RETURN: key_id = 13; break;
2442 case SDLK_TAB: key_id = 9; break;
2443 case SDLK_ESCAPE: key_id = 27; break;
2444 case SDLK_UP: key_id = gvArrowKeyUp; break;
2445 case SDLK_DOWN: key_id = gvArrowKeyDown; break;
2446 case SDLK_LEFT: key_id = gvArrowKeyLeft; break;
2447 case SDLK_RIGHT: key_id = gvArrowKeyRight; break;
2448 case SDLK_PAUSE: key_id = gvPauseKey; break;
2449 case SDLK_F1: key_id = gvFunctionKey1; break;
2450 case SDLK_F2: key_id = gvFunctionKey2; break;
2451 case SDLK_F3: key_id = gvFunctionKey3; break;
2452 case SDLK_F4: key_id = gvFunctionKey4; break;
2453 case SDLK_F5: key_id = gvFunctionKey5; break;
2454 case SDLK_F6: key_id = gvFunctionKey6; break;
2455 case SDLK_F7: key_id = gvFunctionKey7; break;
2456 case SDLK_F8: key_id = gvFunctionKey8; break;
2457 case SDLK_F9: key_id = gvFunctionKey9; break;
2458 case SDLK_F10: key_id = gvFunctionKey10; break;
2459 case SDLK_F11: key_id = gvFunctionKey11; break;
2460 case SDLK_F12: key_id = 327; break;
2461 case SDLK_BACKSPACE: key_id = gvBackspaceKey; break;
2462 case SDLK_DELETE: key_id = gvDeleteKey; break;
2463
2464 default:
2465 //OOLog(@"keys.test", @"Unhandled Keyup scancode with unicode = 0: %d", kbd_event->keysym.scancode);
2466 ;
2467 }
2468
2469 if (key_id > 0 && key_id <= [self numKeys])
2470 {
2471 keys[key_id] = NO;
2472 }
2473 else
2474 {
2475 //OOLog(@"keys.test", @"Unhandled Keyup scancode: %d", kbd_event->keysym.scancode);
2476 }
2477 break;
2478
2479 case SDL_VIDEORESIZE:
2480 {
2481 SDL_ResizeEvent *rsevt=(SDL_ResizeEvent *)&event;
2482 NSSize newSize=NSMakeSize(rsevt->w, rsevt->h);
2483#if OOLITE_WINDOWS
2484 if (!fullScreen && updateContext)
2485 {
2486 if (saveSize == NO)
2487 {
2488 // event triggered by caption & frame
2489 // next event will be a real resize.
2490 saveSize = YES;
2491 }
2492 else
2493 {
2494 [self initialiseGLWithSize: newSize];
2495 [self saveWindowSize: newSize];
2496 }
2497 }
2498#else
2499 [self initialiseGLWithSize: newSize];
2500 [self saveWindowSize: newSize];
2501#endif
2502 // certain gui screens will require an immediate redraw after
2503 // a resize event - Nikos 20140129
2504 if ([PlayerEntity sharedPlayer])
2505 {
2507 }
2508 break;
2509 }
2510
2511#if OOLITE_WINDOWS
2512 // if we minimize the window while in fullscreen (e.g. via
2513 // Win+M or Win+DownArrow), restore the non-borderless window
2514 // style before minimuzing and reset it when we return, otherwise
2515 // there might be issues with the game window remaining stuck on
2516 // top in some cases (seen with some Intel gfx chips).
2517 // N.B. active event gain of zero means app is iconified
2518 case SDL_ACTIVEEVENT:
2519 {
2520 if ((event.active.state & SDL_APPACTIVE) && fullScreen)
2521 {
2522 [self setWindowBorderless:event.active.gain];
2523 }
2524 break;
2525 }
2526
2527 // need to track this because the user may move the game window
2528 // to a secondary monitor, in which case we must potentially
2529 // refresh the information displayed (e.g. Game Options screen)
2530 // Nikos - 20140920
2531 case SDL_SYSWMEVENT:
2532 {
2533 DWORD dwLastError = 0;
2534 switch (event.syswm.msg->msg)
2535 {
2536 case WM_WINDOWPOSCHANGING:
2537 /* if we are in fullscreen mode we normally don't worry about having the window moved.
2538 However, when using multiple monitors, one can use hotkey combinations to make the
2539 window "jump" from one monitor to the next. We don't want this to happen, so if we
2540 detect that our (fullscreen) window has moved, we immediately bring it back to its
2541 original position. Nikos - 20140922
2542 */
2543 if (fullScreen)
2544 {
2545 RECT rDC;
2546
2547 /* attempting to move our fullscreen window while in maximized state can freak
2548 Windows out and the window may not return to its original position properly.
2549 Solution: if such a move takes place, first change the window placement to
2550 normal, move it normally, then restore its placement to maximized again.
2551 Additionally, the last good known window position seems to be lost in such
2552 a case. While at it, update also the coordinates of the non-maximized window
2553 so that it can return to its original position - this is why we need lastGoodRect.
2554 */
2555 WINDOWPLACEMENT wp;
2556 wp.length = sizeof(WINDOWPLACEMENT);
2557 GetWindowPlacement(SDL_Window, &wp);
2558
2559 GetWindowRect(SDL_Window, &rDC);
2560 if (rDC.left != monitorInfo.rcMonitor.left || rDC.top != monitorInfo.rcMonitor.top)
2561 {
2562 BOOL fullScreenMaximized = NO;
2563 if (wp.showCmd == SW_SHOWMAXIMIZED && !fullScreenMaximized)
2564 {
2565 fullScreenMaximized = YES;
2566 wp.showCmd = SW_SHOWNORMAL;
2567 SetWindowPlacement(SDL_Window, &wp);
2568 }
2569
2570 if (wp.showCmd != SW_SHOWMINIMIZED && wp.showCmd != SW_MINIMIZE)
2571 {
2572 MoveWindow(SDL_Window, monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top,
2573 (int)viewSize.width, (int)viewSize.height, TRUE);
2574 }
2575
2576 if (fullScreenMaximized)
2577 {
2578 GetWindowPlacement(SDL_Window, &wp);
2579 wp.showCmd = SW_SHOWMAXIMIZED;
2580 CopyRect(&wp.rcNormalPosition, &lastGoodRect);
2581 SetWindowPlacement(SDL_Window, &wp);
2582 }
2583 }
2584 else if (wp.showCmd == SW_SHOWMAXIMIZED)
2585 {
2586 CopyRect(&wp.rcNormalPosition, &lastGoodRect);
2587 SetWindowPlacement(SDL_Window, &wp);
2588 }
2589 }
2590 // it is important that this gets done after we've dealt with possible fullscreen movements,
2591 // because -doGuiScreenResizeUpdates does itself an update on current monitor
2592 if ([PlayerEntity sharedPlayer])
2593 {
2595 }
2596 /*
2597 deliberately no break statement here - moving or resizing the window changes its bounds
2598 rectangle. Therefore we must check whether to clip the mouse or not inside the newly
2599 updated rectangle, so just let it fall through
2600 */
2601
2602 case WM_ACTIVATEAPP:
2603 if(grabMouseStatus) [self grabMouseInsideGameWindow:YES];
2604 break;
2605
2606 case WM_SETTINGCHANGE:
2607 // TODO: we really should be checking the status of event.syswm.msg->lParam here and run our
2608 // dark / light mode refresh check only if the lParam LPCTSTR matches "ImmersiveColorSet".
2609 // However, for some reason I cannot get an actual string on lParam. This means that the
2610 // mode refresh check runs every time something changes the Windows Registry while the game
2611 // is running. Still, should be OK because our refreshDarKOrLightMode will be transparent in
2612 // such cases, plus we would not practically expect too many events doing things to the Registry
2613 // while we are running. If in the future we need to respond to a different event which changes
2614 // system settings in real time, then yes, we will have to find a way to decode lParam properly.
2615 // Nikos, 20230805
2616 [self refreshDarKOrLightMode];
2617 break;
2618
2619 case WM_SETFOCUS:
2620 /*
2621 ` make sure that all modifier keys like Shift, Alt, Ctrl and Caps Lock
2622 ` are set correctly to what they should be when we get focus. We have
2623 ` to do it ourselves because SDL on Windows has problems with this
2624 ` when focus change events occur, like e.g. Alt-Tab in/out of the
2625 application
2626 ` */
2627 [self resetSDLKeyModifiers];
2628 if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL))
2629 {
2630 dwLastError = GetLastError();
2631 OOLog(@"wm_setfocus.message", @"Setting thread priority to time critical failed! (error code: %d)", dwLastError);
2632 }
2633 break;
2634
2635 case WM_KILLFOCUS:
2636 if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL))
2637 {
2638 dwLastError = GetLastError();
2639 OOLog(@"wm_killfocus.message", @"Setting thread priority to normal failed! (error code: %d)", dwLastError);
2640 }
2641 break;
2642
2643 default:
2644 ;
2645 }
2646 break;
2647 }
2648#endif
2649
2650 // caused by INTR or someone hitting close
2651 case SDL_QUIT:
2652 {
2653 SDL_FreeSurface(surface);
2654 [gameController exitAppWithContext:@"SDL_QUIT event received"];
2655 }
2656 }
2657 }
2658 // check if enough time has passed since last use of the mousewheel and act
2659 // if needed
2661 {
2662 _mouseWheelDelta = 0.0f;
2663 }
2664}
@ gvNumberKey4
@ gvNumberPadKeyDivide
@ gvNumberPadKeyMultiply
@ gvNumberKey9
@ gvNumberKey5
@ gvNumberPadKeyPeriod
@ gvFunctionKey2
@ gvInsertKey
@ gvNumberPadKeyPlus
@ gvNumberPadKey9
@ gvNumberPadKey1
@ gvFunctionKey10
@ gvFunctionKey5
@ gvNumberKey2
@ gvArrowKeyDown
@ gvNumberPadKey2
@ gvFunctionKey9
@ gvNumberPadKey3
@ gvFunctionKey4
@ gvEndKey
@ gvNumberKey0
@ gvNumberKey7
@ gvHomeKey
@ gvNumberPadKeyEquals
@ gvNumberPadKey6
@ gvNumberPadKeyEnter
@ gvNumberPadKey5
@ gvNumberPadKey4
@ gvNumberKey8
@ gvNumberKey3
@ gvNumberKey6
@ gvPauseKey
@ gvNumberPadKeyMinus
@ gvNumberPadKey7
@ gvFunctionKey11
@ gvFunctionKey8
@ gvNumberKey1
@ gvPageDownKey
@ gvNumberPadKey8
@ gvFunctionKey3
@ gvArrowKeyUp
@ gvArrowKeyRight
@ gvFunctionKey6
@ gvArrowKeyLeft
@ gvFunctionKey7
@ gvPageUpKey
@ gvNumberPadKey0
@ gvFunctionKey1
#define MOUSEY_MAXIMUM
#define OOMOUSEWHEEL_EVENTS_DELAY_INTERVAL
#define MOUSEX_MAXIMUM
BOOL mouseInDeltaMode
float _mouseVirtualStickSensitivityFactor
NSTimeInterval timeSinceLastMouseWheel
BOOL handleSDLEvent:(SDL_Event *evt)
void doGuiScreenResizeUpdates()
PlayerEntity * sharedPlayer()

References _mouseVirtualStickSensitivityFactor, _mouseWheelDelta, allowingStringInput, bounds, ctrl, display_z, PlayerEntity::doGuiScreenResizeUpdates, doubleClick, GameController::exitAppWithContext:, fullScreen, grabMouseInsideGameWindow:, grabMouseStatus, gvArrowKeyDown, gvArrowKeyLeft, gvArrowKeyRight, gvArrowKeyUp, gvBackspaceKey, gvDeleteKey, gvEndKey, gvFunctionKey1, gvFunctionKey10, gvFunctionKey11, gvFunctionKey2, gvFunctionKey3, gvFunctionKey4, gvFunctionKey5, gvFunctionKey6, gvFunctionKey7, gvFunctionKey8, gvFunctionKey9, gvHomeKey, gvInsertKey, gvNumberKey0, gvNumberKey1, gvNumberKey2, gvNumberKey3, gvNumberKey4, gvNumberKey5, gvNumberKey6, gvNumberKey7, gvNumberKey8, gvNumberKey9, gvNumberPadKey0, gvNumberPadKey1, gvNumberPadKey2, gvNumberPadKey3, gvNumberPadKey4, gvNumberPadKey5, gvNumberPadKey6, gvNumberPadKey7, gvNumberPadKey8, gvNumberPadKey9, gvNumberPadKeyDivide, gvNumberPadKeyEnter, gvNumberPadKeyEquals, gvNumberPadKeyMinus, gvNumberPadKeyMultiply, gvNumberPadKeyPeriod, gvNumberPadKeyPlus, gvPageDownKey, gvPageUpKey, gvPauseKey, OOSDLJoystickManager::handleSDLEvent:, handleStringInput:keyID:, initialiseGLWithSize:, isCapsLockOn, keys, kOOLogKeyDown, kOOLogKeyUp, MAIN_GUI_PIXEL_HEIGHT, MAIN_GUI_PIXEL_WIDTH, MOUSE_DOUBLE_CLICK_INTERVAL, mouseInDeltaMode, mouseWarped, MOUSEX_MAXIMUM, MOUSEY_MAXIMUM, numKeys, OOLog, OOMOUSEWHEEL_DELTA, OOMOUSEWHEEL_EVENTS_DELAY_INTERVAL, opt, pollControls, resetMouse, resetSDLKeyModifiers, saveWindowSize:, scancode2Unicode, setWindowBorderless:, PlayerEntity::sharedPlayer, OOJoystickManager::sharedStickHandler, shift, suppressKeys, surface, timeIntervalAtLastClick, timeSinceLastMouseWheel, toggleScreenMode, viewSize, and virtualJoystickPosition.

Referenced by gameController, GameController::performGameTick:, and pollControls.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pollControls [2/2]

- (void) pollControls

References pollControls.

+ Here is the call graph for this function:

◆ pollShiftKey [1/2]

+ (BOOL) pollShiftKey

Definition at line 2930 of file MyOpenGLView.m.

2931{
2932 return 0 != (SDL_GetModState() & (KMOD_LSHIFT | KMOD_RSHIFT));
2933}

References pollShiftKey.

Referenced by isAlphabetKeyDown, and pollShiftKey.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pollShiftKey [2/2]

+ (BOOL) pollShiftKey

References pollShiftKey.

+ Here is the call graph for this function:

◆ populateFullScreenModelist

- (void) populateFullScreenModelist

Definition at line 2715 of file MyOpenGLView.m.

2716{
2717 int i;
2718 SDL_Rect **modes;
2719 NSMutableDictionary *mode;
2720
2721 screenSizes=[[NSMutableArray alloc] init];
2722
2723 // The default resolution (slot 0) is the resolution we are
2724 // already in since this is guaranteed to work.
2726 [screenSizes addObject: mode];
2727
2728 modes=SDL_ListModes(NULL, SDL_FULLSCREEN|SDL_HWSURFACE);
2729 if(modes == (SDL_Rect **)NULL)
2730 {
2731 OOLog(@"display.mode.list.none", @"%@", @"SDL didn't return any screen modes");
2732 return;
2733 }
2734
2735 if(modes == (SDL_Rect **)-1)
2736 {
2737 OOLog(@"display.mode.list.none", @"%@", @"SDL claims 'all resolutions available' which is unhelpful in the extreme");
2738 return;
2739 }
2740
2741 int lastw=[[mode objectForKey: kOODisplayWidth] intValue];
2742 int lasth=[[mode objectForKey: kOODisplayHeight] intValue];
2743 for(i=0; modes[i]; i++)
2744 {
2745 // SDL_ListModes often lists a mode several times,
2746 // presumably because each mode has several refresh rates.
2747 // But the modes pointer is an SDL_Rect which can't represent
2748 // refresh rates. WHY!?
2749 if(modes[i]->w != lastw || modes[i]->h != lasth)
2750 {
2751 // new resolution, save it
2752 mode=[NSMutableDictionary dictionary];
2753 [mode setValue: [NSNumber numberWithInt: (int)modes[i]->w]
2754 forKey: kOODisplayWidth];
2755 [mode setValue: [NSNumber numberWithInt: (int)modes[i]->h]
2756 forKey: kOODisplayHeight];
2757 [mode setValue: [NSNumber numberWithInt: 0]
2758 forKey: kOODisplayRefreshRate];
2759 if (![screenSizes containsObject:mode])
2760 {
2761 [screenSizes addObject: mode];
2762 OOLog(@"display.mode.list", @"Added res %d x %d", modes[i]->w, modes[i]->h);
2763 lastw=modes[i]->w;
2764 lasth=modes[i]->h;
2765 }
2766 }
2767 }
2768}
NSMutableDictionary * getNativeSize()

References getNativeSize, OOLog, populateFullScreenModelist, and screenSizes.

Referenced by getScreenSizeArray, init, and populateFullScreenModelist.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ recenterVirtualJoystick

- (void) recenterVirtualJoystick
implementation

Provided by category MyOpenGLView(Internal).

Definition at line 864 of file MyOpenGLView.m.

865{
866 if ([PLAYER guiScreen] == GUI_SCREEN_MAIN)
867 {
869 }
870}
#define PLAYER
GameController * sharedController()
void recenterVirtualJoystick()

References PLAYER, GameController::recenterVirtualJoystick, MyOpenGLView(Internal)::recenterVirtualJoystick, and GameController::sharedController.

Referenced by MyOpenGLView(Internal)::recenterVirtualJoystick, rightMouseUp:, and touchesEndedWithEvent:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetMouse [1/2]

- (void) resetMouse

Definition at line 1922 of file MyOpenGLView.m.

1923{
1924 [self setVirtualJoystick:0.0 :0.0];
1925 if ([[PlayerEntity sharedPlayer] isMouseControlOn])
1926 {
1927 SDL_WarpMouse([self viewSize].width / 2, [self viewSize].height / 2);
1928 mouseWarped = YES;
1929 }
1930}

References mouseWarped, resetMouse, and viewSize.

Referenced by gameController, PlayerEntity(OOControlsPrivate)::pollApplicationControls, pollControls, PlayerEntity(OOControlsPrivate)::pollCustomViewControls, resetMouse, and rightMouseDown:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetMouse [2/2]

- (void) resetMouse

References resetMouse.

+ Here is the call graph for this function:

◆ resetSDLKeyModifiers

- (void) resetSDLKeyModifiers
implementation

Provided by category MyOpenGLView(OOPrivate).

Definition at line 1334 of file MyOpenGLView.m.

1335{
1336 // probably not needed for Linux
1337}

References MyOpenGLView(OOPrivate)::resetSDLKeyModifiers.

Referenced by pollControls, and MyOpenGLView(OOPrivate)::resetSDLKeyModifiers.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetTypedString [1/2]

- (void) resetTypedString

Definition at line 604 of file MyOpenGLView.m.

605{
606 [typedString setString:@""];
607}

References resetTypedString.

Referenced by PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:, resetTypedString, PlayerEntity(KeyMapper)::setGuiToKeyConfigEntryScreen, PlayerEntity(Scripting)::setMissionChoiceByTextEntry:, and typedString.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ resetTypedString [2/2]

- (void) resetTypedString

References resetTypedString.

+ Here is the call graph for this function:

◆ rightMouseDown:

- (void) rightMouseDown: (NSEvent *) theEvent
implementation

Definition at line 846 of file MyOpenGLView.m.

846 :(NSEvent *)theEvent
847{
848 [self resetMouse];
849}

References resetMouse.

+ Here is the call graph for this function:

◆ rightMouseUp:

- (void) rightMouseUp: (NSEvent *) theEvent
implementation

Definition at line 852 of file MyOpenGLView.m.

852 :(NSEvent *)theEvent
853{
854 [self recenterVirtualJoystick];
855}

References recenterVirtualJoystick.

+ Here is the call graph for this function:

◆ saveWindowSize:

- (void) saveWindowSize: (NSSize) windowSize

Definition at line 2772 of file MyOpenGLView.m.

2772 : (NSSize) windowSize
2773{
2774 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
2775 [defaults setInteger: (int)windowSize.width forKey: @"window_width"];
2776 [defaults setInteger: (int)windowSize.height forKey: @"window_height"];
2777 currentWindowSize=windowSize;
2778}

References currentWindowSize.

Referenced by pollControls.

+ Here is the caller graph for this function:

◆ scrollWheel:

- (void) scrollWheel: (NSEvent *) theEvent
implementation

Definition at line 816 of file MyOpenGLView.m.

816 :(NSEvent *)theEvent
817{
818 float dy = [theEvent scrollingDeltaY];
819
820 if (dy == 0)
821 return;
822
823 if (dy > 0)
824 {
825 if (_mouseWheelDelta >= 0)
826 _mouseWheelDelta += dy;
827 else
829 }
830 else
831 {
832 if (_mouseWheelDelta <= 0)
833 _mouseWheelDelta += dy;
834 else
836 }
837 timeIntervalAtLastMouseWheel = [NSDate timeIntervalSinceReferenceDate];
838}
NSTimeInterval timeIntervalAtLastMouseWheel

References _mouseWheelDelta, and timeIntervalAtLastMouseWheel.

◆ setDisplayMode:fullScreen:

- (void) setDisplayMode: (int) mode
fullScreen: (BOOL) fsm 

◆ setFov:fromFraction: [1/2]

- (void) setFov: (float) value
fromFraction: (BOOL) fromFraction 

Definition at line 2900 of file MyOpenGLView.m.

2900 :(float)value fromFraction:(BOOL)fromFraction
2901{
2902 _fov = fromFraction ? value : tan((value / 2) * M_PI / 180);
2903}

References _fov, and M_PI.

Referenced by PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, and Universe::initWithGameView:.

+ Here is the caller graph for this function:

◆ setFov:fromFraction: [2/2]

- (void) setFov: (float) value
fromFraction: (BOOL) fromFraction 

◆ setFullScreenMode:

- (void) setFullScreenMode: (BOOL) fsm

References inFullScreenMode.

Referenced by endSplashScreen, and initialiseGLWithSize:useVideoMode:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setGameController: [1/2]

- (void) setGameController: (GameController *) controller

Definition at line 658 of file MyOpenGLView.m.

658 :(GameController *) controller
659{
660 gameController = controller;
661}
GameController * gameController

References gameController.

Referenced by GameController::beginSplashScreen, and GameController::setGameView:.

+ Here is the caller graph for this function:

◆ setGameController: [2/2]

- (void) setGameController: (GameController *) controller

◆ setGammaValue: [1/2]

- (void) setGammaValue: (float) value

Definition at line 2882 of file MyOpenGLView.m.

2882 : (float) value
2883{
2884 if (value < 0.2f) value = 0.2f;
2885 if (value > 4.0f) value = 4.0f;
2886
2887 _gamma = value;
2888 SDL_SetGamma(_gamma, _gamma, _gamma);
2889
2890 [[NSUserDefaults standardUserDefaults] setFloat:_gamma forKey:@"gamma-value"];
2891}

References _gamma.

Referenced by PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, and Universe::initWithGameView:.

+ Here is the caller graph for this function:

◆ setGammaValue: [2/2]

- (void) setGammaValue: (float) value

◆ setMouseInDeltaMode:

- (void) setMouseInDeltaMode: (BOOL) inDelta

Definition at line 2876 of file MyOpenGLView.m.

2876 : (BOOL) inDelta
2877{
2878 mouseInDeltaMode=inDelta;
2879}

References mouseInDeltaMode.

Referenced by noteMouseInteractionModeChangedFrom:to:.

+ Here is the caller graph for this function:

◆ setMouseWheelDelta: [1/2]

- (void) setMouseWheelDelta: (float) newWheelDelta

Definition at line 2033 of file MyOpenGLView.m.

2033 : (float) newWheelDelta
2034{
2035 _mouseWheelDelta = newWheelDelta * OOMOUSEWHEEL_DELTA;
2036}

References _mouseWheelDelta, and OOMOUSEWHEEL_DELTA.

Referenced by PlayerEntity::doBookkeeping:.

+ Here is the caller graph for this function:

◆ setMouseWheelDelta: [2/2]

- (void) setMouseWheelDelta: (float) newWheelDelta

◆ setMsaa:

- (void) setMsaa: (BOOL) newMsaa

Definition at line 2918 of file MyOpenGLView.m.

2918 :(BOOL)newMsaa
2919{
2920 _msaa = !!newMsaa;
2921}

References _msaa.

Referenced by Universe::initWithGameView:.

+ Here is the caller graph for this function:

◆ setScreenSize:

- (void) setScreenSize: (int) sizeIndex

Referenced by PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys.

+ Here is the caller graph for this function:

◆ setStringInput: [1/2]

- (void) setStringInput: (enum StringInput) value

Definition at line 578 of file MyOpenGLView.m.

578 : (enum StringInput) value
579{
580 allowingStringInput = value;
581}
StringInput

References allowingStringInput.

Referenced by PlayerEntity(OOControlsPrivate)::pollDemoControls:, PlayerEntity(OOControlsPrivate)::pollGuiArrowKeyControls:, PlayerEntity(KeyMapper)::setGuiToKeyConfigEntryScreen, and PlayerEntity(OOLoadSavePrivate)::setGuiToOverwriteScreen:.

+ Here is the caller graph for this function:

◆ setStringInput: [2/2]

- (void) setStringInput: (enum StringInput) value

◆ setTypedString: [1/2]

- (void) setTypedString: (NSString*) value

Definition at line 610 of file MyOpenGLView.m.

610 :(NSString*) value
611{
612 [typedString setString:value];
613}

Referenced by PlayerEntity(LoadSave)::saveCommanderInputHandler, PlayerEntity(KeyMapper)::setGuiToKeyConfigEntryScreen, and PlayerEntity(OOLoadSavePrivate)::setGuiToSaveCommanderScreen:.

+ Here is the caller graph for this function:

◆ setTypedString: [2/2]

- (void) setTypedString: (NSString *) value

◆ setVirtualJoystick:vmx: [1/2]

- (void) setVirtualJoystick: (double)
vmx: (double) vmy 

Definition at line 1881 of file MyOpenGLView.m.

1881 :(double) vmx :(double) vmy
1882{
1885}

References virtualJoystickPosition.

◆ setVirtualJoystick:vmx: [2/2]

- (void) setVirtualJoystick: (double)
vmx: (double) vmy 

◆ setWindowBorderless:

- (void) setWindowBorderless: (BOOL) borderless
implementation

Provided by category MyOpenGLView(OOPrivate).

Definition at line 1340 of file MyOpenGLView.m.

1340 :(BOOL)borderless
1341{
1342 // do nothing on Linux
1343}

Referenced by initialiseGLWithSize:useVideoMode:, and pollControls.

+ Here is the caller graph for this function:

◆ snapShot: [1/2]

- (BOOL) snapShot: (NSString *) filename

Definition at line 1606 of file MyOpenGLView.m.

1606 :(NSString *)filename
1607{
1608 BOOL snapShotOK = YES;
1609 SDL_Surface* tmpSurface;
1610
1611 // backup the previous directory
1612 NSString* originalDirectory = [[NSFileManager defaultManager] currentDirectoryPath];
1613 // use the snapshots directory
1614 [[NSFileManager defaultManager] chdirToSnapshotPath];
1615
1616 BOOL withFilename = (filename != nil);
1617 static unsigned imageNo = 0;
1618 unsigned tmpImageNo = 0;
1619 NSString *pathToPic = nil;
1620 NSString *baseName = @"oolite";
1621
1622#if SNAPSHOTS_PNG_FORMAT
1623 NSString *extension = @".png";
1624#else
1625 NSString *extension = @".bmp";
1626#endif
1627
1628 if (withFilename)
1629 {
1630 baseName = filename;
1631 pathToPic = [filename stringByAppendingString:extension];
1632 }
1633 else
1634 {
1635 tmpImageNo = imageNo;
1636 }
1637
1638 if (withFilename && [[NSFileManager defaultManager] fileExistsAtPath:pathToPic])
1639 {
1640 OOLog(@"screenshot.filenameExists", @"Snapshot \"%@%@\" already exists - adding numerical sequence.", pathToPic, extension);
1641 pathToPic = nil;
1642 }
1643
1644 if (pathToPic == nil)
1645 {
1646 do
1647 {
1648 tmpImageNo++;
1649 pathToPic = [NSString stringWithFormat:@"%@-%03d%@", baseName, tmpImageNo, extension];
1650 } while ([[NSFileManager defaultManager] fileExistsAtPath:pathToPic]);
1651 }
1652
1653 if (!withFilename)
1654 {
1655 imageNo = tmpImageNo;
1656 }
1657
1658 OOLog(@"screenshot", @"Saving screen shot \"%@\" (%u x %u pixels).", pathToPic, surface->w, surface->h);
1659
1660 int pitch = surface->w * 3;
1661 unsigned char *pixls = malloc(pitch * surface->h);
1662 int y;
1663 int off;
1664
1665 if (surface->w % 4) glPixelStorei(GL_PACK_ALIGNMENT,1);
1666 else glPixelStorei(GL_PACK_ALIGNMENT,4);
1667 for (y=surface->h-1, off=0; y>=0; y--, off+=pitch)
1668 {
1669 glReadPixels(0, y, surface->w, 1, GL_RGB, GL_UNSIGNED_BYTE, pixls + off);
1670 }
1671
1672 tmpSurface=SDL_CreateRGBSurfaceFrom(pixls,surface->w,surface->h,24,surface->w*3,0xFF,0xFF00,0xFF0000,0x0);
1673#if SNAPSHOTS_PNG_FORMAT
1674 if(![self pngSaveSurface:pathToPic withSurface:tmpSurface])
1675 {
1676 OOLog(@"screenshotPNG", @"Failed to save %@", pathToPic);
1677 snapShotOK = NO;
1678 }
1679#else
1680 if (SDL_SaveBMP(tmpSurface, [pathToPic UTF8String]) == -1)
1681 {
1682 OOLog(@"screenshotBMP", @"Failed to save %@", pathToPic);
1683 snapShotOK = NO;
1684 }
1685#endif
1686 SDL_FreeSurface(tmpSurface);
1687 free(pixls);
1688
1689 // if outputting HDR signal, save also either an .exr or a Radiance .hdr snapshot
1690 if ([self hdrOutput])
1691 {
1692 NSString *fileExtension = [[NSUserDefaults standardUserDefaults] oo_stringForKey:@"hdr-snapshot-format" defaultValue:SNAPSHOTHDR_EXTENSION_DEFAULT];
1693
1694 // we accept file extension with or without a leading dot; if it is without, insert it at the beginning now
1695 if (![[fileExtension substringToIndex:1] isEqual:@"."]) fileExtension = [@"." stringByAppendingString:fileExtension];
1696
1697 if (![fileExtension isEqual:SNAPSHOTHDR_EXTENSION_EXR] && ![fileExtension isEqual:SNAPSHOTHDR_EXTENSION_HDR])
1698 {
1699 OOLog(@"screenshotHDR", @"Unrecognized HDR file format requested, defaulting to "SNAPSHOTHDR_EXTENSION_DEFAULT);
1700 fileExtension = SNAPSHOTHDR_EXTENSION_DEFAULT;
1701 }
1702
1703 NSString *pathToPicHDR = [pathToPic stringByReplacingString:@".png" withString:fileExtension];
1704 OOLog(@"screenshot", @"Saving screen shot \"%@\" (%u x %u pixels).", pathToPicHDR, surface->w, surface->h);
1705 GLfloat *pixlsf = (GLfloat *)malloc(pitch * surface->h * sizeof(GLfloat));
1706 for (y=surface->h-1, off=0; y>=0; y--, off+=pitch)
1707 {
1708 glReadPixels(0, y, surface->w, 1, GL_RGB, GL_FLOAT, pixlsf + off);
1709 }
1710
1711 if (([fileExtension isEqual:SNAPSHOTHDR_EXTENSION_EXR] && SaveEXRSnapshot([pathToPicHDR cStringUsingEncoding:NSUTF8StringEncoding], surface->w, surface->h, pixlsf) != 0) //TINYEXR_SUCCESS
1712 || ([fileExtension isEqual:SNAPSHOTHDR_EXTENSION_HDR] && !stbi_write_hdr([pathToPicHDR cStringUsingEncoding:NSUTF8StringEncoding], surface->w, surface->h, 3, pixlsf)))
1713 {
1714 OOLog(@"screenshotHDR", @"Failed to save %@", pathToPicHDR);
1715 snapShotOK = NO;
1716 }
1717
1718 free(pixlsf);
1719 }
1720
1721 // return to the previous directory
1722 [[NSFileManager defaultManager] changeCurrentDirectoryPath:originalDirectory];
1723 return snapShotOK;
1724}
int SaveEXRSnapshot(const char *outfilename, int width, int height, const float *rgb)
#define SNAPSHOTHDR_EXTENSION_HDR
#define SNAPSHOTHDR_EXTENSION_DEFAULT
#define SNAPSHOTHDR_EXTENSION_EXR
const char * filename
Definition ioapi.h:133
STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data)

References hdrOutput, nil, OOLog, SaveEXRSnapshot(), SNAPSHOTHDR_EXTENSION_DEFAULT, SNAPSHOTHDR_EXTENSION_EXR, SNAPSHOTHDR_EXTENSION_HDR, stbi_write_hdr(), surface, and y.

Referenced by PlayerEntity(OOControlsPrivate)::pollApplicationControls.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snapShot: [2/2]

- (BOOL) snapShot: (NSString *) filename

◆ stringToClipboard: [1/2]

- (void) stringToClipboard: (NSString *) stringToCopy

Definition at line 1328 of file MyOpenGLView.m.

1328 :(NSString *)stringToCopy
1329{
1330 // TODO: implement string clipboard copy for Linux
1331}

◆ stringToClipboard: [2/2]

- (void) stringToClipboard: (NSString *) stringToCopy

◆ suppressKeysUntilKeyUp [1/2]

- (void) suppressKeysUntilKeyUp

Definition at line 1942 of file MyOpenGLView.m.

1943{
1944 if (keys[gvMouseDoubleClick] == NO)
1945 {
1946 suppressKeys = YES;
1947 [self clearKeys];
1948 }
1949 else
1950 {
1951 [self clearMouse];
1952 }
1953
1954}
@ gvMouseDoubleClick

References clearKeys, clearMouse, gvMouseDoubleClick, keys, suppressKeys, and suppressKeysUntilKeyUp.

Referenced by PlayerEntity(LoadSave)::commanderSelector, PlayerEntity(KeyMapper)::handleKeyConfigEntryKeys:view:, PlayerEntity(KeyMapper)::handleKeyMapperConfirmClearKeys:view:, isAlphabetKeyDown, PlayerEntity(LoadSave)::saveCommanderInputHandler, PlayerEntity(OOLoadSavePrivate)::setGuiToSaveCommanderScreen:, and suppressKeysUntilKeyUp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ suppressKeysUntilKeyUp [2/2]

- (void) suppressKeysUntilKeyUp

References suppressKeysUntilKeyUp.

+ Here is the call graph for this function:

◆ toggleScreenMode

- (void) toggleScreenMode

References toggleScreenMode.

Referenced by PlayerEntity(OOControlsPrivate)::handleGameOptionsScreenKeys, pollControls, and toggleScreenMode.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ touchesEndedWithEvent:

- (void) touchesEndedWithEvent: (NSEvent *) theEvent
implementation

Definition at line 858 of file MyOpenGLView.m.

858 :(NSEvent *)theEvent
859{
860 [self recenterVirtualJoystick];
861}

References recenterVirtualJoystick.

+ Here is the call graph for this function:

◆ translateKeyCode:

- (int) translateKeyCode: (int) input
implementation

Provided by category MyOpenGLView(Internal).

Definition at line 875 of file MyOpenGLView.m.

875 : (int) input
876{
877 int key = input;
878 switch ( input )
879 {
880 case NSUpArrowFunctionKey:
881 key = gvArrowKeyUp;
882 break;
883
884 case NSDownArrowFunctionKey:
885 key = gvArrowKeyDown;
886 break;
887
888 case NSLeftArrowFunctionKey:
889 key = gvArrowKeyLeft;
890 break;
891
892 case NSRightArrowFunctionKey:
893 key = gvArrowKeyRight;
894 break;
895
896 case NSF1FunctionKey:
897 key = gvFunctionKey1;
898 break;
899
900 case NSF2FunctionKey:
901 key = gvFunctionKey2;
902 break;
903
904 case NSF3FunctionKey:
905 key = gvFunctionKey3;
906 break;
907
908 case NSF4FunctionKey:
909 key = gvFunctionKey4;
910 break;
911
912 case NSF5FunctionKey:
913 key = gvFunctionKey5;
914 break;
915
916 case NSF6FunctionKey:
917 key = gvFunctionKey6;
918 break;
919
920 case NSF7FunctionKey:
921 key = gvFunctionKey7;
922 break;
923
924 case NSF8FunctionKey:
925 key = gvFunctionKey8;
926 break;
927
928 case NSF9FunctionKey:
929 key = gvFunctionKey9;
930 break;
931
932 case NSF10FunctionKey:
933 key = gvFunctionKey10;
934 break;
935
936 case NSF11FunctionKey:
937 key = gvFunctionKey11;
938 break;
939
940 case NSHomeFunctionKey:
941 key = gvHomeKey;
942 break;
943
944 case NSBackspaceCharacter:
945 key = gvBackspaceKey;
946 break;
947
948 case NSDeleteCharacter:
949 key = gvDeleteKey;
950 break;
951
952 case NSInsertFunctionKey:
953 key = gvInsertKey;
954 break;
955
956 case NSEndFunctionKey:
957 key = gvEndKey;
958 break;
959
960 case NSPageUpFunctionKey:
961 key = gvPageUpKey;
962 break;
963
964 case NSPageDownFunctionKey:
965 key = gvPageDownKey;
966 break;
967
968 case NSPrintScreenFunctionKey:
969 key = gvPrintScreenKey;
970 break;
971
972 case NSPauseFunctionKey:
973 key = gvPauseKey;
974 break;
975
976 default:
977 break;
978 }
979 return key;
980}

References gvArrowKeyDown, gvArrowKeyLeft, gvArrowKeyRight, gvArrowKeyUp, gvBackspaceKey, gvDeleteKey, gvEndKey, gvFunctionKey1, gvFunctionKey10, gvFunctionKey11, gvFunctionKey2, gvFunctionKey3, gvFunctionKey4, gvFunctionKey5, gvFunctionKey6, gvFunctionKey7, gvFunctionKey8, gvFunctionKey9, gvHomeKey, gvInsertKey, gvPageDownKey, gvPageUpKey, gvPauseKey, gvPrintScreenKey, and int().

Referenced by keyDown:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ typedString [1/2]

- (NSString *) typedString

References resetTypedString, and typedString.

+ Here is the call graph for this function:

◆ typedString [2/2]

- (NSString *) typedString

References typedString.

◆ UnapplyCursorState

+ (static void) UnapplyCursorState (OOMouseInteractionMode) mode
implementation

Definition at line 1350 of file MyOpenGLView.m.

1351{
1352 BOOL hidden, obscured;
1353 GetDesiredCursorState(mode, &hidden, &obscured);
1354 if (hidden) [NSCursor unhide];
1355 if (obscured) [NSCursor setHiddenUntilMouseMoves:NO];
1356}

References GetDesiredCursorState().

+ Here is the call graph for this function:

◆ update

- (void) update
implementation

Definition at line 322 of file MyOpenGLView.m.

323{
324 NSOpenGLContext *context = [self openGLContext];
325
326 [context update];
327 int virtualScreen = [context currentVirtualScreen];
328 if (virtualScreen != _virtualScreen)
329 {
330 @try
331 {
333 _virtualScreen = virtualScreen;
334 }
335 @catch (NSException *exception)
336 {
337 /* Graphics reset failed, most likely because of OpenGL context
338 incompatibility. Reset to previous "virtual screen" (i.e.,
339 renderer). OS X's OpenGL implementation will take care of
340 copying
341 */
342 [context setCurrentVirtualScreen:_virtualScreen];
343 [[OOGraphicsResetManager sharedManager] resetGraphicsState]; // If this throws, we're screwed.
344
345 if ([[self gameController] inFullScreenMode])
346 {
347 [[self gameController] pauseFullScreenModeToPerform:@selector(noteMovedToBadDisplay) onTarget:self];
348 }
349 else
350 {
351 [self noteMovedToBadDisplay];
352 }
353 }
354 }
355}
BOOL inFullScreenMode()
OOGraphicsResetManager * sharedManager()

References _virtualScreen, gameController, inFullScreenMode, noteMovedToBadDisplay, GameController::pauseFullScreenModeToPerform:onTarget:, OOGraphicsResetManager::resetGraphicsState, OOGraphicsResetManager::sharedManager, and update.

Referenced by update.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateScreen [1/2]

- (void) updateScreen

Definition at line 762 of file MyOpenGLView.m.

763{
764 [self drawRect: NSMakeRect(0, 0, viewSize.width, viewSize.height)];
765}

References drawRect:, and updateScreen.

Referenced by GameController::beginSplashScreen, display, endSplashScreen, gameController, updateScreen, and GameController::windowDidResize:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateScreen [2/2]

- (void) updateScreen

References display, and updateScreen.

+ Here is the call graph for this function:

◆ updateScreenWithVideoMode:

- (void) updateScreenWithVideoMode: (BOOL) v_mode

Definition at line 772 of file MyOpenGLView.m.

772 :(BOOL) v_mode
773{
774 if ((viewSize.width != surface->w)||(viewSize.height != surface->h)) // resized
775 {
776#if OOLITE_LINUX
777 m_glContextInitialized = NO; //probably not needed
778#endif
779 viewSize.width = surface->w;
780 viewSize.height = surface->h;
781 }
782
783 if (m_glContextInitialized == NO)
784 {
785 [self initialiseGLWithSize:viewSize useVideoMode:v_mode];
786 }
787
788 if (surface == 0)
789 return;
790
791 // do all the drawing!
792 //
793 if (UNIVERSE) [UNIVERSE drawUniverse];
794 else
795 {
796 // not set up yet, draw a black screen
797 glClearColor( 0.0, 0.0, 0.0, 0.0);
798 glClear( GL_COLOR_BUFFER_BIT);
799 }
800
801 SDL_GL_SwapBuffers();
802}
#define UNIVERSE
Definition Universe.h:840

References initialiseGLWithSize:useVideoMode:, m_glContextInitialized, surface, UNIVERSE, and viewSize.

Referenced by drawRect:.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ viewSize [1/2]

- (NSSize) viewSize

References viewSize.

◆ viewSize [2/2]

- (NSSize) viewSize

References viewSize.

◆ virtualJoystickPosition [1/2]

- (NSPoint) virtualJoystickPosition

References clearKeys, clearMouse, and virtualJoystickPosition.

+ Here is the call graph for this function:

◆ virtualJoystickPosition [2/2]

- (NSPoint) virtualJoystickPosition

◆ x_offset [1/2]

- (GLfloat) x_offset

References x_offset.

◆ x_offset [2/2]

- (GLfloat) x_offset

References x_offset.

◆ y_offset [1/2]

- (GLfloat) y_offset

References y_offset.

◆ y_offset [2/2]

- (GLfloat) y_offset

References y_offset.

Member Data Documentation

◆ _colorSaturation

- (float) _colorSaturation
protected

Definition at line 219 of file MyOpenGLView.h.

Referenced by adjustColorSaturation:, colorSaturation, and init.

◆ _fov

- (float) _fov
private

Definition at line 160 of file MyOpenGLView.h.

Referenced by fov:, and setFov:fromFraction:.

◆ _gamma

- (float) _gamma
protected

Definition at line 189 of file MyOpenGLView.h.

Referenced by createSurface, gammaValue, and setGammaValue:.

◆ _hdrOutput

- (BOOL) _hdrOutput
protected

Definition at line 221 of file MyOpenGLView.h.

Referenced by init.

◆ _mouseVirtualStickSensitivityFactor

- (float) _mouseVirtualStickSensitivityFactor
protected

Definition at line 180 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ _mouseWheelDelta

- (float) _mouseWheelDelta
private

◆ _msaa

- (BOOL) _msaa
protected

Definition at line 191 of file MyOpenGLView.h.

Referenced by msaa, and setMsaa:.

◆ _pixelFormatAttributes

- (NSData*) _pixelFormatAttributes
private

Definition at line 163 of file MyOpenGLView.h.

Referenced by dealloc, initWithFrame:, and pixelFormatAttributes.

◆ _virtualScreen

- (int) _virtualScreen
private

Definition at line 162 of file MyOpenGLView.h.

Referenced by initWithFrame:, and update.

◆ allowingStringInput

- (enum StringInput) allowingStringInput
private

Definition at line 592 of file MyOpenGLView.m.

593{
594 return allowingStringInput;
595}

Referenced by allowingStringInput, allowStringInput:, init, initWithFrame:, keyDown:, pollControls, and setStringInput:.

◆ backingViewSize

- (NSSize) backingViewSize
private

Definition at line 628 of file MyOpenGLView.m.

629{
630 return viewSize;
631}

Referenced by backingViewSize.

◆ bounds

- (NSRect) bounds
protected

Definition at line 616 of file MyOpenGLView.m.

617{
618 return bounds;
619}

Referenced by bounds, init, initialiseGLWithSize:useVideoMode:, and pollControls.

◆ capsLockOn

- (BOOL) capsLockOn
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by flagsChanged:.

◆ command

- (BOOL) command
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by flagsChanged:, and isCommandDown.

◆ commandF

- (BOOL) commandF
private

Definition at line 139 of file MyOpenGLView.h.

Referenced by keyDown:, and keyUp:.

◆ commandQ

- (BOOL) commandQ
private

Definition at line 138 of file MyOpenGLView.h.

Referenced by keyDown:, and keyUp:.

◆ ctrl

- (BOOL) ctrl
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by flagsChanged:, isCtrlDown, and pollControls.

◆ currentSize

- (int) currentSize
protected

Definition at line 195 of file MyOpenGLView.h.

Referenced by init, and loadFullscreenSettings.

◆ currentWindowSize

- (NSSize) currentWindowSize
protected

Definition at line 199 of file MyOpenGLView.h.

Referenced by createSurface, endSplashScreen, init, loadWindowSize, and saveWindowSize:.

◆ display_z

- (GLfloat) display_z
private

◆ doubleClick

- (BOOL) doubleClick
private

Definition at line 148 of file MyOpenGLView.h.

Referenced by clearMouse, mouseDown:, mouseUp:, and pollControls.

◆ f12

- (BOOL) f12
private

Definition at line 140 of file MyOpenGLView.h.

Referenced by keyDown:, and keyUp:.

◆ firstScreen

- (NSSize) firstScreen
protected

Definition at line 225 of file MyOpenGLView.h.

Referenced by createSurface, endSplashScreen, and init.

◆ fullScreen

- (BOOL) fullScreen
protected

◆ gameController

◆ grabMouseStatus

- (BOOL) grabMouseStatus
protected

Definition at line 223 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ isAlphabetKeyDown

- (BOOL) isAlphabetKeyDown
private

Definition at line 1933 of file MyOpenGLView.m.

1934{
1935 return isAlphabetKeyDown = NO;;
1936}

Referenced by init, initWithFrame:, isAlphabetKeyDown, keyDown:, and keyUp:.

◆ keycodetrans

- (int) keycodetrans
private

Definition at line 142 of file MyOpenGLView.h.

Referenced by keyDown:, and keyUp:.

◆ keyMappings_normal

- (NSDictionary *) keyMappings_normal
private

Definition at line 130 of file MyOpenGLView.h.

Referenced by dealloc, and initKeyMappingData.

◆ keyMappings_shifted

- (NSDictionary *) keyMappings_shifted
private

Definition at line 131 of file MyOpenGLView.h.

Referenced by dealloc, and initKeyMappingData.

◆ keys

- (BOOL) keys
private

◆ lastKeyShifted

- (BOOL) lastKeyShifted
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by clearKeys, keyDown:, and lastKeyWasShifted.

◆ m_glContextInitialized

- (BOOL) m_glContextInitialized
private

Definition at line 144 of file MyOpenGLView.h.

Referenced by init, initialiseGLWithSize:useVideoMode:, and updateScreenWithVideoMode:.

◆ matrixManager

- (OOOpenGLMatrixManager *) matrixManager
private

Definition at line 165 of file MyOpenGLView.h.

Referenced by dealloc, getOpenGLMatrixManager, init, and initWithFrame:.

◆ mouseDragStartPoint

- (NSPoint) mouseDragStartPoint
protected

Definition at line 168 of file MyOpenGLView.h.

◆ mouseInDeltaMode

- (BOOL) mouseInDeltaMode
protected

Definition at line 230 of file MyOpenGLView.h.

Referenced by pollControls, and setMouseInDeltaMode:.

◆ mouseWarped

- (BOOL) mouseWarped
protected

Definition at line 170 of file MyOpenGLView.h.

Referenced by init, pollControls, and resetMouse.

◆ opt

- (BOOL) opt
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by flagsChanged:, isOptDown, and pollControls.

◆ scancode2Unicode

- (int) scancode2Unicode
private

Definition at line 129 of file MyOpenGLView.h.

Referenced by init, initWithFrame:, and pollControls.

◆ screenSizes

- (NSMutableArray*) screenSizes
protected

◆ shift

- (BOOL) shift
private

Definition at line 135 of file MyOpenGLView.h.

Referenced by flagsChanged:, isShiftDown, keyDown:, and pollControls.

◆ showSplashScreen

- (BOOL) showSplashScreen
protected

Definition at line 202 of file MyOpenGLView.h.

Referenced by createSurface, endSplashScreen, init, and initSplashScreen.

◆ squareX

- (double) squareX
protected

Definition at line 186 of file MyOpenGLView.h.

Referenced by initialiseGLWithSize:useVideoMode:.

◆ squareY

- (double) squareY
protected

Definition at line 186 of file MyOpenGLView.h.

◆ suppressKeys

- (BOOL) suppressKeys
private

Definition at line 133 of file MyOpenGLView.h.

Referenced by isDown:, keyUp:, pollControls, and suppressKeysUntilKeyUp.

◆ surface

- (SDL_Surface*) surface
protected

◆ timeIntervalAtLastClick

- (NSTimeInterval) timeIntervalAtLastClick
private

Definition at line 146 of file MyOpenGLView.h.

Referenced by init, initWithFrame:, mouseUp:, and pollControls.

◆ timeIntervalAtLastMouseWheel

- (NSTimeInterval) timeIntervalAtLastMouseWheel
private

Definition at line 147 of file MyOpenGLView.h.

Referenced by scrollWheel:.

◆ timeSinceLastMouseWheel

- (NSTimeInterval) timeSinceLastMouseWheel
protected

Definition at line 173 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ typedString

◆ viewSize

◆ virtualJoystickPosition

◆ x_offset

- (GLfloat) x_offset
private

Definition at line 640 of file MyOpenGLView.m.

641{
642 return x_offset;
643}

Referenced by initialiseGLWithSize:useVideoMode:, and x_offset.

◆ y_offset

- (GLfloat) y_offset
private

Definition at line 646 of file MyOpenGLView.m.

647{
648 return y_offset;
649}

Referenced by initialiseGLWithSize:useVideoMode:, and y_offset.


The documentation for this class was generated from the following files: