Oolite 1.93.0.7767-260207-f2a8cb5
Loading...
Searching...
No Matches
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
(OOSDRToneMapper- sdrToneMapper
(void) - setSDRToneMapper:
(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
int _sdrToneMapper
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 1658 of file MyOpenGLView.m.

1658 :(float)colorSaturationAdjustment;
1659{
1660 _colorSaturation += colorSaturationAdjustment;
1662}
#define MAX_COLOR_SATURATION
float _colorSaturation

References _colorSaturation, and MAX_COLOR_SATURATION.

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

Here is the caller graph for this function:

◆ allowingStringInput [1/2]

◆ allowingStringInput [2/2]

◆ allowStringInput: [1/2]

- (void) allowStringInput: (BOOL) value

Definition at line 589 of file MyOpenGLView.m.

589 : (BOOL) value
590{
591 if (value)
593 else
595}
@ 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

+ (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 568 of file MyOpenGLView.m.

569{
570 //don't touch the 'please wait...' cursor.
571 if (fullScreen)
572 {
573 if (SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE)
574 SDL_ShowCursor(SDL_DISABLE);
575 }
576 else
577 {
578 if (SDL_ShowCursor(SDL_QUERY) == SDL_DISABLE)
579 SDL_ShowCursor(SDL_ENABLE);
580 }
581}

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 2110 of file MyOpenGLView.m.

2111{
2112 // SDL stub for the mac function.
2113}

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 1972 of file MyOpenGLView.m.

1972 : (int)theKey
1973{
1974 if (theKey >= 0 && theKey < [self numKeys])
1975 {
1976 keys[theKey] = NO;
1977 }
1978}
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 1652 of file MyOpenGLView.m.

1653{
1654 return _colorSaturation;
1655}

References _colorSaturation, and colorSaturation.

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

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

◆ createSurface

- (void) createSurface
implementation

Definition at line 122 of file MyOpenGLView.m.

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

2924{
2925 NSDictionary *mode=[screenSizes objectAtIndex: currentSize];
2926
2927 if(mode)
2928 {
2929 return NSMakeSize([[mode objectForKey: kOODisplayWidth] intValue],
2930 [[mode objectForKey: kOODisplayHeight] intValue]);
2931 }
2932 OOLog(@"display.mode.unknown", @"%@", @"Screen size unknown!");
2934}
#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:85
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 762 of file MyOpenGLView.m.

763{
764 [self updateScreen];
765}

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 772 of file MyOpenGLView.m.

772 :(NSRect)rect
773{
774 [self updateScreenWithVideoMode:YES];
775}

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 3059 of file MyOpenGLView.m.

3059 :(NSString *)name
3060 bytes:(uint8_t *)bytes
3061 width:(NSUInteger)width
3062 height:(NSUInteger)height
3063 rowBytes:(NSUInteger)rowBytes
3064{
3065 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 2) return;
3066
3067 // use the snapshots directory
3068 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
3069 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
3070
3071 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 16, rowBytes, 0xFF, 0xFF, 0xFF, 0xFF);
3072 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
3073 SDL_FreeSurface(tmpSurface);
3074}
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 3041 of file MyOpenGLView.m.

3041 :(NSString *)name
3042 bytes:(uint8_t *)bytes
3043 width:(NSUInteger)width
3044 height:(NSUInteger)height
3045 rowBytes:(NSUInteger)rowBytes
3046{
3047 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width) return;
3048
3049 // use the snapshots directory
3050 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
3051 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
3052
3053 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 8, rowBytes, 0xFF, 0xFF, 0xFF, 0x0);
3054 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
3055 SDL_FreeSurface(tmpSurface);
3056}

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 3004 of file MyOpenGLView.m.

3004 :(NSString *)name
3005 bytes:(uint8_t *)bytes
3006 width:(NSUInteger)width
3007 height:(NSUInteger)height
3008 rowBytes:(NSUInteger)rowBytes
3009{
3010 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 4) return;
3011
3012 // use the snapshots directory
3013 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
3014 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
3015
3016 // convert transparency to black before saving to bmp
3017 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 32, rowBytes, 0xFF, 0xFF00, 0xFF0000, 0xFF000000);
3018 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
3019 SDL_FreeSurface(tmpSurface);
3020}

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 3077 of file MyOpenGLView.m.

3077 :(NSString *)rgbName
3078 andGrayFileNamed:(NSString *)grayName
3079 bytes:(uint8_t *)bytes
3080 width:(NSUInteger)width
3081 height:(NSUInteger)height
3082 rowBytes:(NSUInteger)rowBytes
3083{
3084 if ((rgbName == nil && grayName == nil) || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 4) return;
3085
3086 uint8_t *rgbBytes, *rgbPx, *grayBytes, *grayPx, *srcPx;
3087 NSUInteger x, y;
3088 BOOL trivalAlpha = YES;
3089
3090 rgbPx = rgbBytes = malloc(width * height * 3);
3091 if (rgbBytes == NULL) return;
3092
3093 grayPx = grayBytes = malloc(width * height);
3094 if (grayBytes == NULL)
3095 {
3096 free(rgbBytes);
3097 return;
3098 }
3099
3100 for (y = 0; y < height; y++)
3101 {
3102 srcPx = bytes + rowBytes * y;
3103
3104 for (x = 0; x < width; x++)
3105 {
3106 *rgbPx++ = *srcPx++;
3107 *rgbPx++ = *srcPx++;
3108 *rgbPx++ = *srcPx++;
3109 trivalAlpha = trivalAlpha && ((*srcPx == 0xFF) || (*srcPx == 0x00)); // Look for any "interesting" pixels in alpha.
3110 *grayPx++ = *srcPx++;
3111 }
3112 }
3113
3114 [self dumpRGBToFileNamed:rgbName
3115 bytes:rgbBytes
3116 width:width
3117 height:height
3118 rowBytes:width * 3];
3119 free(rgbBytes);
3120
3121 if (!trivalAlpha)
3122 {
3123 [self dumpGrayToFileNamed:grayName
3124 bytes:grayBytes
3125 width:width
3126 height:height
3127 rowBytes:width];
3128 }
3129 free(grayBytes);
3130}
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 3023 of file MyOpenGLView.m.

3023 :(NSString *)name
3024 bytes:(uint8_t *)bytes
3025 width:(NSUInteger)width
3026 height:(NSUInteger)height
3027 rowBytes:(NSUInteger)rowBytes
3028{
3029 if (name == nil || bytes == NULL || width == 0 || height == 0 || rowBytes < width * 3) return;
3030
3031 // use the snapshots directory
3032 NSString *dumpFile = [[NSHomeDirectory() stringByAppendingPathComponent:@SAVEDIR] stringByAppendingPathComponent:@SNAPSHOTDIR];
3033 dumpFile = [dumpFile stringByAppendingPathComponent: [NSString stringWithFormat:@"%@.bmp", name]];
3034
3035 SDL_Surface* tmpSurface = SDL_CreateRGBSurfaceFrom(bytes, width, height, 24, rowBytes, 0xFF, 0xFF00, 0xFF0000, 0x0);
3036 SDL_SaveBMP(tmpSurface, [dumpFile UTF8String]);
3037 SDL_FreeSurface(tmpSurface);
3038}

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 453 of file MyOpenGLView.m.

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

2896 :(unsigned int) d_width Height:(unsigned int) d_height Refresh:(unsigned int) d_refresh
2897{
2898 int i, modeCount;
2899 NSDictionary *mode;
2900 unsigned int modeWidth, modeHeight, modeRefresh;
2901
2902 modeCount = [screenSizes count];
2903
2904 for (i = 0; i < modeCount; i++)
2905 {
2906 mode = [screenSizes objectAtIndex: i];
2907 modeWidth = [[mode objectForKey: kOODisplayWidth] intValue];
2908 modeHeight = [[mode objectForKey: kOODisplayHeight] intValue];
2909 modeRefresh = [[mode objectForKey: kOODisplayRefreshRate] intValue];
2910 if ((modeWidth == d_width)&&(modeHeight == d_height)&&(modeRefresh == d_refresh))
2911 {
2912 OOLog(@"display.mode.found", @"Found mode %@", mode);
2913 return i;
2914 }
2915 }
2916
2917 OOLog(@"display.mode.found.failed", @"Failed to find mode: width=%d height=%d refresh=%d", d_width, d_height, d_refresh);
2918 OOLog(@"display.mode.found.failed.list", @"Contents of list: %@", screenSizes);
2919 return 0;
2920}
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 2967 of file MyOpenGLView.m.

2967 :(BOOL)inFraction
2968{
2969 return inFraction ? _fov : 2 * atan(_fov) * 180 / M_PI;
2970}
#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]

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

Here is the call graph for this function:

◆ gameController [2/2]

◆ gammaValue [1/2]

- (float) gammaValue

Definition at line 2955 of file MyOpenGLView.m.

2956{
2957 return _gamma;
2958}

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

+ (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 88 of file MyOpenGLView.m.

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

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 2985 of file MyOpenGLView.m.

2986{
2987 return matrixManager;
2988}

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 1367 of file MyOpenGLView.m.

1367 :(BOOL) value
1368{
1369 // do nothing
1370}

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 2731 of file MyOpenGLView.m.

2731 : (SDL_KeyboardEvent *) kbd_event keyID:(Uint16)key_id;
2732{
2733 SDLKey key=kbd_event->keysym.sym;
2734
2735 // Del, Backspace
2736 if((key == SDLK_BACKSPACE || key == SDLK_DELETE) && [typedString length] > 0)
2737 {
2738 // delete
2739 [typedString deleteCharactersInRange:NSMakeRange([typedString length]-1, 1)];
2740 }
2741
2743
2744 // TODO: a more flexible mechanism for max. string length ?
2745 if([typedString length] < 40)
2746 {
2749 {
2750 // inputAlpha - limited input for planet find screen
2751 if(key >= SDLK_a && key <= SDLK_z)
2752 {
2754 [typedString appendFormat:@"%c", key];
2755 // if in inputAlpha, keep in lower case.
2756 }
2757 }
2758 else
2759 {
2760 //Uint16 unicode = kbd_event->keysym.unicode;
2761 // printable range
2762 if (key_id >= 32 && key_id <= 255) // 126
2763 {
2764 if ((char)key_id != '/' || allowingStringInput == gvStringInputAll)
2765 {
2767 [typedString appendFormat:@"%c", key_id];
2768 }
2769 }
2770 }
2771 }
2772}
@ gvStringInputAll

References gvStringInputAll, and gvStringInputAlpha.

Referenced by pollControls.

Here is the caller graph for this function:

◆ hdrOutput

- (BOOL) hdrOutput

Definition at line 1391 of file MyOpenGLView.m.

1392{
1393 return NO;
1394}

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 676 of file MyOpenGLView.m.

677{
678 return fullScreen;
679}

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 1419 of file MyOpenGLView.m.

1419 :(NSSize) v_size
1420{
1421 [self initialiseGLWithSize:v_size useVideoMode:YES];
1422}

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, isRunningOnPrimaryDisplayDevice, and sdrToneMapper.

Here is the call graph for this function:

◆ initialiseGLWithSize:useVideoMode:

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

Definition at line 1425 of file MyOpenGLView.m.

1425 :(NSSize) v_size useVideoMode:(BOOL) v_mode
1426{
1427#if OOLITE_LINUX
1428 NSSize oldViewSize = viewSize;
1429#endif
1430 viewSize = v_size;
1431 OOLog(@"display.initGL", @"Requested a new surface of %d x %d, %@.", (int)viewSize.width, (int)viewSize.height,(fullScreen ? @"fullscreen" : @"windowed"));
1432 SDL_GL_SwapBuffers(); // clear the buffer before resize
1433
1434#if OOLITE_WINDOWS
1435 if (!updateContext) return;
1436
1437 DEVMODE settings;
1438 settings.dmSize = sizeof(DEVMODE);
1439 settings.dmDriverExtra = 0;
1440 EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &settings);
1441
1442 WINDOWPLACEMENT windowPlacement;
1443 windowPlacement.length = sizeof(WINDOWPLACEMENT);
1444 GetWindowPlacement(SDL_Window, &windowPlacement);
1445
1446 static BOOL lastWindowPlacementMaximized = NO;
1447 if (fullScreen && (windowPlacement.showCmd == SW_SHOWMAXIMIZED))
1448 {
1449 if (!wasFullScreen)
1450 {
1451 lastWindowPlacementMaximized = YES;
1452 }
1453 }
1454
1455 if (lastWindowPlacementMaximized)
1456 {
1457 windowPlacement.showCmd = SW_SHOWMAXIMIZED;
1458 }
1459
1460 // are we attempting to go to a different screen resolution? Note: this also takes care of secondary monitor situations because
1461 // by design the only resolution available for fullscreen on a secondary display device is its native one - Nikos 20150605
1462 BOOL changingResolution = [self isRunningOnPrimaryDisplayDevice] &&
1463 ((fullScreen && (settings.dmPelsWidth != viewSize.width || settings.dmPelsHeight != viewSize.height)) ||
1464 (wasFullScreen && (settings.dmPelsWidth != [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayWidth] intValue]
1465 || settings.dmPelsHeight != [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayHeight] intValue])));
1466
1467 RECT wDC;
1468
1469 if (fullScreen)
1470 {
1471 /*NOTE: If we ever decide to change the default behaviour of launching
1472 always on primary monitor to launching on the monitor the program was
1473 started on, all that needs to be done is comment out the line below, as
1474 well as the identical one in the else branch further down.
1475 Nikos 20141222
1476 */
1477 [self getCurrentMonitorInfo: &monitorInfo];
1478
1479 settings.dmPelsWidth = viewSize.width;
1480 settings.dmPelsHeight = viewSize.height;
1481 settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
1482
1483 // just before going fullscreen, save the location of the current window. It
1484 // may be needed in case of potential attempts to move our fullscreen window
1485 // in a maximized state (yes, in Windows this is entirely possible).
1486 if(lastWindowPlacementMaximized)
1487 {
1488 CopyRect(&lastGoodRect, &windowPlacement.rcNormalPosition);
1489 // if maximized, switch to normal placement before going full screen
1490 windowPlacement.showCmd = SW_SHOWNORMAL;
1491 SetWindowPlacement(SDL_Window, &windowPlacement);
1492 }
1493 else GetWindowRect(SDL_Window, &lastGoodRect);
1494
1495 // ok, can go fullscreen now
1496 SetForegroundWindow(SDL_Window);
1497 if (changingResolution)
1498 {
1499 if (ChangeDisplaySettingsEx(monitorInfo.szDevice, &settings, NULL, CDS_FULLSCREEN, NULL) != DISP_CHANGE_SUCCESSFUL)
1500 {
1502 OOLogERR(@"displayMode.change.error", @"Could not switch to requested display mode.");
1503 return;
1504 }
1505 atDesktopResolution = settings.dmPelsWidth == [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayWidth] intValue]
1506 && settings.dmPelsHeight == [[[screenSizes objectAtIndex:0] objectForKey: kOODisplayHeight] intValue];
1507 }
1508
1509 MoveWindow(SDL_Window, monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top, (int)viewSize.width, (int)viewSize.height, TRUE);
1510 if(!wasFullScreen)
1511 {
1512 [self setWindowBorderless:YES];
1513 }
1514 }
1515
1516 else if ( wasFullScreen )
1517 {
1518 if (changingResolution)
1519 {
1520 // restore original desktop resolution
1521 if (ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL)
1522 {
1523 atDesktopResolution = YES;
1524 }
1525 }
1526
1527 /*NOTE: If we ever decide to change the default behaviour of launching
1528 always on primary monitor to launching on the monitor the program was
1529 started on, we need to comment out the line below.
1530 For now, this line is needed for correct positioning of our window in case
1531 we return from a non-native resolution fullscreen and has to come after the
1532 display settings have been reverted.
1533 Nikos 20141222
1534 */
1535 [self getCurrentMonitorInfo: &monitorInfo];
1536
1537 if (lastWindowPlacementMaximized) CopyRect(&windowPlacement.rcNormalPosition, &lastGoodRect);
1538 SetWindowPlacement(SDL_Window, &windowPlacement);
1539 if (!lastWindowPlacementMaximized)
1540 {
1541 MoveWindow(SDL_Window, (monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left - (int)viewSize.width)/2 +
1542 monitorInfo.rcMonitor.left,
1543 (monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top - (int)viewSize.height)/2 +
1544 monitorInfo.rcMonitor.top,
1545 (int)viewSize.width, (int)viewSize.height, TRUE);
1546 }
1547
1548 [self setWindowBorderless:NO];
1549
1550 lastWindowPlacementMaximized = NO;
1551 ShowWindow(SDL_Window,SW_SHOW);
1552 }
1553
1554 // stop saveWindowSize from reacting to caption & frame if necessary
1555 saveSize = !wasFullScreen;
1556
1557 GetClientRect(SDL_Window, &wDC);
1558
1559 if (!fullScreen && (bounds.size.width != wDC.right - wDC.left
1560 || bounds.size.height != wDC.bottom - wDC.top))
1561 {
1562 // Resize the game window if needed. When we ask for a W x H
1563 // window, we intend that the client area be W x H. The actual
1564 // window itself must become big enough to accomodate an area
1565 // of such size.
1566 if (wasFullScreen) // this is true when switching from full screen or when starting in windowed mode
1567 //after the splash screen has ended
1568 {
1569 RECT desiredClientRect;
1570 GetWindowRect(SDL_Window, &desiredClientRect);
1571 AdjustWindowRect(&desiredClientRect, WS_CAPTION | WS_THICKFRAME, FALSE);
1572 SetWindowPos(SDL_Window, NULL, desiredClientRect.left, desiredClientRect.top,
1573 desiredClientRect.right - desiredClientRect.left,
1574 desiredClientRect.bottom - desiredClientRect.top, 0);
1575 }
1576 GetClientRect(SDL_Window, &wDC);
1577 viewSize.width = wDC.right - wDC.left;
1578 viewSize.height = wDC.bottom - wDC.top;
1579 }
1580
1581 // Reset bounds and viewSize to current values
1582 bounds.size.width = viewSize.width = wDC.right - wDC.left;
1583 bounds.size.height = viewSize.height = wDC.bottom - wDC.top;
1584
1585 if (fullScreen) // bounds on fullscreen coincide with client area, since we are borderless
1586 {
1587 bounds.origin.x = monitorInfo.rcMonitor.left;
1588 bounds.origin.y = monitorInfo.rcMonitor.top;
1589 }
1590 wasFullScreen=fullScreen;
1591
1592#else //OOLITE_LINUX
1593
1594 int videoModeFlags = SDL_HWSURFACE | SDL_OPENGL;
1595
1596 if (v_mode == NO)
1597 videoModeFlags |= SDL_NOFRAME;
1598 if (fullScreen == YES)
1599 {
1600 videoModeFlags |= SDL_FULLSCREEN;
1601 }
1602 else
1603 {
1604 videoModeFlags |= SDL_RESIZABLE;
1605 }
1606 surface = SDL_SetVideoMode((int)viewSize.width, (int)viewSize.height, 32, videoModeFlags);
1607
1608 if (!surface && fullScreen == YES)
1609 {
1610 [self setFullScreenMode: NO];
1611 viewSize = oldViewSize;
1612 videoModeFlags &= ~SDL_FULLSCREEN;
1613 videoModeFlags |= SDL_RESIZABLE;
1614 surface = SDL_SetVideoMode((int)viewSize.width, (int)viewSize.height, 32, videoModeFlags);
1615 }
1616
1617 if (!surface)
1618 {
1619 // we should always have a valid surface, but in case we don't
1620 OOLogERR(@"display.mode.error",@"Unable to change display mode: %s",SDL_GetError());
1621 exit(1);
1622 }
1623
1624 bounds.size.width = surface->w;
1625 bounds.size.height = surface->h;
1626
1627#endif
1628 OOLog(@"display.initGL", @"Created a new surface of %d x %d, %@.", (int)viewSize.width, (int)viewSize.height,(fullScreen ? @"fullscreen" : @"windowed"));
1629
1630 if (viewSize.width/viewSize.height > 4.0/3.0) {
1631 display_z = 480.0 * bounds.size.width/bounds.size.height;
1632 x_offset = 240.0 * bounds.size.width/bounds.size.height;
1633 y_offset = 240.0;
1634 } else {
1635 display_z = 640.0;
1636 x_offset = 320.0;
1637 y_offset = 320.0 * bounds.size.height/bounds.size.width;
1638 }
1639
1640 if (surface != 0) SDL_FreeSurface(surface);
1641
1642 [self autoShowMouse];
1643
1644 [[self gameController] setUpBasicOpenGLStateWithSize:viewSize];
1645 SDL_GL_SwapBuffers();
1646 squareX = 0.0f;
1647
1649}
#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 518 of file MyOpenGLView.m.

519{
520 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
521 // load in our keyboard scancode mappings
522#if OOLITE_WINDOWS
523 NSDictionary *kmap = [NSDictionary dictionaryWithDictionary:[ResourceManager dictionaryFromFilesNamed:@"keymappings_windows.plist" inFolder:@"Config" mergeMode:MERGE_BASIC cache:NO]];
524#else
525 NSDictionary *kmap = [NSDictionary dictionaryWithDictionary:[ResourceManager dictionaryFromFilesNamed:@"keymappings_linux.plist" inFolder:@"Config" mergeMode:MERGE_BASIC cache:NO]];
526#endif
527 // get the stored keyboard code from preferences
528 NSString *kbd = [prefs oo_stringForKey:@"keyboard-code" defaultValue:@"default"];
529 NSDictionary *subset = [kmap objectForKey:kbd];
530
531 [keyMappings_normal release];
532 keyMappings_normal = [[subset objectForKey:@"mapping_normal"] copy];
533 [keyMappings_shifted release];
534 keyMappings_shifted = [[subset objectForKey:@"mapping_shifted"] copy];
535}
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 809 of file MyOpenGLView.m.

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

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]

References isAlphabetKeyDown.

◆ isCapsLockOn [1/2]

- (BOOL) isCapsLockOn

Definition at line 2052 of file MyOpenGLView.m.

2053{
2054 /* Caps Lock state check - This effectively gives us
2055 an alternate keyboard state to play with and, in
2056 the future, we could assign different behaviours
2057 to existing controls, depending on the state of
2058 Caps Lock. - Nikos 20160304
2059 */
2060 return (SDL_GetModState() & KMOD_CAPS) == KMOD_CAPS;
2061}

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 2040 of file MyOpenGLView.m.

2041{
2042 return command;
2043}

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 2104 of file MyOpenGLView.m.

2105{
2106 return NO;
2107}

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 1355 of file PlayerEntityLoadSave.m.

1356{
1357 return [self isCtrlDown];
1358}

◆ isCommandQDown [1/2]

- (BOOL) isCommandQDown

Definition at line 2098 of file MyOpenGLView.m.

2099{
2100 return NO;
2101}

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 2034 of file MyOpenGLView.m.

2035{
2036 return ctrl;
2037}

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 2016 of file MyOpenGLView.m.

2016 : (int) key
2017{
2018 if ( suppressKeys )
2019 return NO;
2020 if ( key < 0 )
2021 return NO;
2022 if ( key >= [self numKeys] )
2023 return NO;
2024 return keys[key];
2025}

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 2028 of file MyOpenGLView.m.

2029{
2030 return opt;
2031}

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 1397 of file MyOpenGLView.m.

1398{
1399 return NO;
1400}

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 1361 of file MyOpenGLView.m.

1362{
1363 return YES;
1364}

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 2046 of file MyOpenGLView.m.

2047{
2048 return shift;
2049}

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 2064 of file MyOpenGLView.m.

2065{
2066 return lastKeyShifted;
2067}

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 2860 of file MyOpenGLView.m.

2861{
2862 currentSize=0;
2863 int width=0, height=0, refresh=0;
2864 unsigned i;
2865
2866 NSArray* cmdline_arguments = [[NSProcessInfo processInfo] arguments];
2867
2868 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
2869 if ([userDefaults objectForKey:@"display_width"])
2870 width = [userDefaults integerForKey:@"display_width"];
2871 if ([userDefaults objectForKey:@"display_height"])
2872 height = [userDefaults integerForKey:@"display_height"];
2873 if ([userDefaults objectForKey:@"display_refresh"])
2874 refresh = [userDefaults integerForKey:@"display_refresh"];
2875 if([userDefaults objectForKey:@"fullscreen"])
2876 fullScreen=[userDefaults boolForKey:@"fullscreen"];
2877
2878 // Check if -fullscreen or -windowed has been passed on the command line. If yes,
2879 // set it regardless of what is set by .GNUstepDefaults. If both are found in the
2880 // arguments list, the one that comes last wins.
2881 for (i = 0; i < [cmdline_arguments count]; i++)
2882 {
2883 if ([[cmdline_arguments objectAtIndex:i] isEqual:@"-fullscreen"]) fullScreen = YES;
2884 if ([[cmdline_arguments objectAtIndex:i] isEqual:@"-windowed"]) fullScreen = NO;
2885 }
2886
2887 if(width && height)
2888 {
2889 currentSize=[self findDisplayModeForWidth: width Height: height Refresh: refresh];
2890 return currentSize;
2891 }
2892 return currentSize;
2893}

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 2842 of file MyOpenGLView.m.

2843{
2844 NSSize windowSize;
2845 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
2846 if([defaults objectForKey:@"window_width"] && [defaults objectForKey:@"window_height"])
2847 {
2848 windowSize=NSMakeSize([defaults integerForKey: @"window_width"],
2849 [defaults integerForKey: @"window_height"]);
2850 }
2851 else
2852 {
2854 }
2855 currentWindowSize=windowSize;
2856 return windowSize;
2857}

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 2086 of file MyOpenGLView.m.

2087{
2089}
#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 2075 of file MyOpenGLView.m.

2076{
2077 if (_mouseWheelDelta > 0.0f)
2078 return gvMouseWheelUp;
2079 else if (_mouseWheelDelta < 0.0f)
2080 return gvMouseWheelDown;
2081 else
2082 return gvMouseWheelNeutral;
2083}
@ 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 2973 of file MyOpenGLView.m.

2974{
2975 return _msaa;
2976}

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 669 of file MyOpenGLView.m.

670{
671 [self autoShowMouse];
672 [self setMouseInDeltaMode:OOMouseInteractionModeIsFlightMode(newMode)];
673}
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:850

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 2069 of file MyOpenGLView.m.

2070{
2071 return NUM_KEYS;
2072}
#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 1788 of file MyOpenGLView.m.

1788 :(NSString *)fileName withSurface:(SDL_Surface *)surf
1789{
1790 FILE *fp;
1791 png_structp pngPtr;
1792 png_infop infoPtr;
1793 int i, colorType;
1794 png_bytep *rowPointers;
1795
1796 fp = fopen([fileName UTF8String], "wb");
1797 if (fp == NULL)
1798 {
1799 OOLog(@"pngSaveSurface.fileCreate.failed", @"Failed to create output screenshot file %@", fileName);
1800 return NO;
1801 }
1802
1803 // initialize png structures (no callbacks)
1804 pngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
1805 if (pngPtr == NULL)
1806 {
1807 return NO;
1808 }
1809
1810 infoPtr = png_create_info_struct(pngPtr);
1811 if (infoPtr == NULL) {
1812 png_destroy_write_struct(&pngPtr, (png_infopp)NULL);
1813 OOLog(@"pngSaveSurface.info_struct.failed", @"%@", @"png_create_info_struct error");
1814 exit(-1);
1815 }
1816
1817 if (setjmp(png_jmpbuf(pngPtr)))
1818 {
1819 png_destroy_write_struct(&pngPtr, &infoPtr);
1820 fclose(fp);
1821 exit(-1);
1822 }
1823
1824 png_init_io(pngPtr, fp);
1825
1826 colorType = PNG_COLOR_MASK_COLOR; /* grayscale not supported */
1827 if (surf->format->palette)
1828 {
1829 colorType |= PNG_COLOR_MASK_PALETTE;
1830 }
1831 else if (surf->format->Amask)
1832 {
1833 colorType |= PNG_COLOR_MASK_ALPHA;
1834 }
1835
1836 png_set_IHDR(pngPtr, infoPtr, surf->w, surf->h, 8, colorType, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
1837
1838 // if we are outputting HDR, our backbuffer is linear, so gamma is 1.0. Make sure our png has this info
1839 // note: some image viewers seem to ignore the gAMA chunk; still, this is better than not having it at all
1840 if ([self hdrOutput]) png_set_gAMA(pngPtr, infoPtr, 1.0f);
1841
1842 // write the image
1843 png_write_info(pngPtr, infoPtr);
1844 png_set_packing(pngPtr);
1845
1846 rowPointers = (png_bytep*) malloc(sizeof(png_bytep)*surf->h);
1847 for (i = 0; i < surf->h; i++)
1848 {
1849 rowPointers[i] = (png_bytep)(Uint8 *)surf->pixels + i*surf->pitch;
1850 }
1851 png_write_image(pngPtr, rowPointers);
1852 png_write_end(pngPtr, infoPtr);
1853
1854 free(rowPointers);
1855 png_destroy_write_struct(&pngPtr, &infoPtr);
1856 fclose(fp);
1857
1858 return YES;
1859}

References hdrOutput, and OOLog.

Here is the call graph for this function:

◆ pollControls [1/2]

- (void) pollControls

Definition at line 2116 of file MyOpenGLView.m.

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

2992{
2993#if !OOLITE_WINDOWS
2994 return 0 != (SDL_GetModState() & (KMOD_LSHIFT | KMOD_RSHIFT));
2995#else
2996 // SDL_GetModState() does not seem to do exactly what is intended under Windows. For this reason,
2997 // the GetKeyState Windows API call is used to detect the Shift keypress. -- Nikos.
2998 return 0 != (GetKeyState(VK_SHIFT) & 0x100);
2999#endif
3000}

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 2776 of file MyOpenGLView.m.

2777{
2778 int i;
2779 SDL_Rect **modes;
2780 NSMutableDictionary *mode;
2781
2782 screenSizes=[[NSMutableArray alloc] init];
2783
2784 // The default resolution (slot 0) is the resolution we are
2785 // already in since this is guaranteed to work.
2787 [screenSizes addObject: mode];
2788
2789 modes=SDL_ListModes(NULL, SDL_FULLSCREEN|SDL_HWSURFACE);
2790 if(modes == (SDL_Rect **)NULL)
2791 {
2792 OOLog(@"display.mode.list.none", @"%@", @"SDL didn't return any screen modes");
2793 return;
2794 }
2795
2796 if(modes == (SDL_Rect **)-1)
2797 {
2798 OOLog(@"display.mode.list.none", @"%@", @"SDL claims 'all resolutions available' which is unhelpful in the extreme");
2799 return;
2800 }
2801
2802 int lastw=[[mode objectForKey: kOODisplayWidth] intValue];
2803 int lasth=[[mode objectForKey: kOODisplayHeight] intValue];
2804 for(i=0; modes[i]; i++)
2805 {
2806 // SDL_ListModes often lists a mode several times,
2807 // presumably because each mode has several refresh rates.
2808 // But the modes pointer is an SDL_Rect which can't represent
2809 // refresh rates. WHY!?
2810 if(modes[i]->w != lastw || modes[i]->h != lasth)
2811 {
2812 // new resolution, save it
2813 mode=[NSMutableDictionary dictionary];
2814 [mode setValue: [NSNumber numberWithInt: (int)modes[i]->w]
2815 forKey: kOODisplayWidth];
2816 [mode setValue: [NSNumber numberWithInt: (int)modes[i]->h]
2817 forKey: kOODisplayHeight];
2818 [mode setValue: [NSNumber numberWithInt: 0]
2819 forKey: kOODisplayRefreshRate];
2820 if (![screenSizes containsObject:mode])
2821 {
2822 [screenSizes addObject: mode];
2823 OOLog(@"display.mode.list", @"Added res %d x %d", modes[i]->w, modes[i]->h);
2824 lastw=modes[i]->w;
2825 lasth=modes[i]->h;
2826 }
2827 }
2828 }
2829}
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 1981 of file MyOpenGLView.m.

1982{
1983 [self setVirtualJoystick:0.0 :0.0];
1984 if ([[PlayerEntity sharedPlayer] isMouseControlOn])
1985 {
1986 SDL_WarpMouse([self viewSize].width / 2, [self viewSize].height / 2);
1987 mouseWarped = YES;
1988 }
1989}

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 1379 of file MyOpenGLView.m.

1380{
1381 // probably not needed for Linux
1382}

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 609 of file MyOpenGLView.m.

610{
611 [typedString setString:@""];
612}

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 2833 of file MyOpenGLView.m.

2833 : (NSSize) windowSize
2834{
2835 NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
2836 [defaults setInteger: (int)windowSize.width forKey: @"window_width"];
2837 [defaults setInteger: (int)windowSize.height forKey: @"window_height"];
2838 currentWindowSize=windowSize;
2839}

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.

◆ sdrToneMapper

- (OOSDRToneMapper) sdrToneMapper

Definition at line 1405 of file MyOpenGLView.m.

1406{
1407 return _sdrToneMapper;
1408}

References _sdrToneMapper, and sdrToneMapper.

Referenced by Universe::gameSettings, initialiseGLWithSize:, and sdrToneMapper.

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

◆ setDisplayMode:fullScreen:

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

◆ setFov:fromFraction: [1/2]

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

Definition at line 2961 of file MyOpenGLView.m.

2961 :(float)value fromFraction:(BOOL)fromFraction
2962{
2963 _fov = fromFraction ? value : tan((value / 2) * M_PI / 180);
2964}

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 663 of file MyOpenGLView.m.

663 :(GameController *) controller
664{
665 gameController = controller;
666}
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 2943 of file MyOpenGLView.m.

2943 : (float) value
2944{
2945 if (value < 0.2f) value = 0.2f;
2946 if (value > 4.0f) value = 4.0f;
2947
2948 _gamma = value;
2949 SDL_SetGamma(_gamma, _gamma, _gamma);
2950
2951 [[NSUserDefaults standardUserDefaults] setFloat:_gamma forKey:@"gamma-value"];
2952}

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 2937 of file MyOpenGLView.m.

2937 : (BOOL) inDelta
2938{
2939 mouseInDeltaMode=inDelta;
2940}

References mouseInDeltaMode.

Referenced by noteMouseInteractionModeChangedFrom:to:.

Here is the caller graph for this function:

◆ setMouseWheelDelta: [1/2]

- (void) setMouseWheelDelta: (float) newWheelDelta

Definition at line 2092 of file MyOpenGLView.m.

2092 : (float) newWheelDelta
2093{
2094 _mouseWheelDelta = newWheelDelta * OOMOUSEWHEEL_DELTA;
2095}

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 2979 of file MyOpenGLView.m.

2979 :(BOOL)newMsaa
2980{
2981 _msaa = !!newMsaa;
2982}

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:

◆ setSDRToneMapper:

- (void) setSDRToneMapper: (OOSDRToneMapper) newToneMapper

Definition at line 1411 of file MyOpenGLView.m.

1411 : (OOSDRToneMapper)newToneMapper
1412{
1413 if (newToneMapper > OOSDR_TONEMAPPER_REINHARD) newToneMapper = OOSDR_TONEMAPPER_REINHARD;
1414 if (newToneMapper < OOSDR_TONEMAPPER_NONE) newToneMapper = OOSDR_TONEMAPPER_NONE;
1415 _sdrToneMapper = newToneMapper;
1416}
OOSDRToneMapper
@ OOSDR_TONEMAPPER_REINHARD
@ OOSDR_TONEMAPPER_NONE

References _sdrToneMapper, OOSDR_TONEMAPPER_NONE, and OOSDR_TONEMAPPER_REINHARD.

Referenced by OoliteSetProperty().

Here is the caller graph for this function:

◆ setStringInput: [1/2]

- (void) setStringInput: (enum StringInput) value

Definition at line 583 of file MyOpenGLView.m.

583 : (enum StringInput) value
584{
585 allowingStringInput = value;
586}
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 615 of file MyOpenGLView.m.

615 :(NSString*) value
616{
617 [typedString setString:value];
618}

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 1940 of file MyOpenGLView.m.

1940 :(double) vmx :(double) vmy
1941{
1944}

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 1385 of file MyOpenGLView.m.

1385 :(BOOL)borderless
1386{
1387 // do nothing on Linux
1388}

Referenced by initialiseGLWithSize:useVideoMode:, and pollControls.

Here is the caller graph for this function:

◆ snapShot: [1/2]

- (BOOL) snapShot: (NSString *) filename

Definition at line 1665 of file MyOpenGLView.m.

1665 :(NSString *)filename
1666{
1667 BOOL snapShotOK = YES;
1668 SDL_Surface* tmpSurface;
1669
1670 // backup the previous directory
1671 NSString* originalDirectory = [[NSFileManager defaultManager] currentDirectoryPath];
1672 // use the snapshots directory
1673 [[NSFileManager defaultManager] chdirToSnapshotPath];
1674
1675 BOOL withFilename = (filename != nil);
1676 static unsigned imageNo = 0;
1677 unsigned tmpImageNo = 0;
1678 NSString *pathToPic = nil;
1679 NSString *baseName = @"oolite";
1680
1681#if SNAPSHOTS_PNG_FORMAT
1682 NSString *extension = @".png";
1683#else
1684 NSString *extension = @".bmp";
1685#endif
1686
1687 if (withFilename)
1688 {
1689 baseName = filename;
1690 pathToPic = [filename stringByAppendingString:extension];
1691 }
1692 else
1693 {
1694 tmpImageNo = imageNo;
1695 }
1696
1697 if (withFilename && [[NSFileManager defaultManager] fileExistsAtPath:pathToPic])
1698 {
1699 OOLog(@"screenshot.filenameExists", @"Snapshot \"%@%@\" already exists - adding numerical sequence.", pathToPic, extension);
1700 pathToPic = nil;
1701 }
1702
1703 if (pathToPic == nil)
1704 {
1705 do
1706 {
1707 tmpImageNo++;
1708 pathToPic = [NSString stringWithFormat:@"%@-%03d%@", baseName, tmpImageNo, extension];
1709 } while ([[NSFileManager defaultManager] fileExistsAtPath:pathToPic]);
1710 }
1711
1712 if (!withFilename)
1713 {
1714 imageNo = tmpImageNo;
1715 }
1716
1717 OOLog(@"screenshot", @"Saving screen shot \"%@\" (%u x %u pixels).", pathToPic, surface->w, surface->h);
1718
1719 int pitch = surface->w * 3;
1720 unsigned char *pixls = malloc(pitch * surface->h);
1721 int y;
1722 int off;
1723
1724 if (surface->w % 4) glPixelStorei(GL_PACK_ALIGNMENT,1);
1725 else glPixelStorei(GL_PACK_ALIGNMENT,4);
1726 for (y=surface->h-1, off=0; y>=0; y--, off+=pitch)
1727 {
1728 glReadPixels(0, y, surface->w, 1, GL_RGB, GL_UNSIGNED_BYTE, pixls + off);
1729 }
1730
1731 tmpSurface=SDL_CreateRGBSurfaceFrom(pixls,surface->w,surface->h,24,surface->w*3,0xFF,0xFF00,0xFF0000,0x0);
1732#if SNAPSHOTS_PNG_FORMAT
1733 if(![self pngSaveSurface:pathToPic withSurface:tmpSurface])
1734 {
1735 OOLog(@"screenshotPNG", @"Failed to save %@", pathToPic);
1736 snapShotOK = NO;
1737 }
1738#else
1739 if (SDL_SaveBMP(tmpSurface, [pathToPic UTF8String]) == -1)
1740 {
1741 OOLog(@"screenshotBMP", @"Failed to save %@", pathToPic);
1742 snapShotOK = NO;
1743 }
1744#endif
1745 SDL_FreeSurface(tmpSurface);
1746 free(pixls);
1747
1748 // if outputting HDR signal, save also either an .exr or a Radiance .hdr snapshot
1749 if ([self hdrOutput])
1750 {
1751 NSString *fileExtension = [[NSUserDefaults standardUserDefaults] oo_stringForKey:@"hdr-snapshot-format" defaultValue:SNAPSHOTHDR_EXTENSION_DEFAULT];
1752
1753 // we accept file extension with or without a leading dot; if it is without, insert it at the beginning now
1754 if (![[fileExtension substringToIndex:1] isEqual:@"."]) fileExtension = [@"." stringByAppendingString:fileExtension];
1755
1756 if (![fileExtension isEqual:SNAPSHOTHDR_EXTENSION_EXR] && ![fileExtension isEqual:SNAPSHOTHDR_EXTENSION_HDR])
1757 {
1758 OOLog(@"screenshotHDR", @"Unrecognized HDR file format requested, defaulting to %@", SNAPSHOTHDR_EXTENSION_DEFAULT);
1759 fileExtension = SNAPSHOTHDR_EXTENSION_DEFAULT;
1760 }
1761
1762 NSString *pathToPicHDR = [pathToPic stringByReplacingString:@".png" withString:fileExtension];
1763 OOLog(@"screenshot", @"Saving screen shot \"%@\" (%u x %u pixels).", pathToPicHDR, surface->w, surface->h);
1764 GLfloat *pixlsf = (GLfloat *)malloc(pitch * surface->h * sizeof(GLfloat));
1765 for (y=surface->h-1, off=0; y>=0; y--, off+=pitch)
1766 {
1767 glReadPixels(0, y, surface->w, 1, GL_RGB, GL_FLOAT, pixlsf + off);
1768 }
1769
1770 if (([fileExtension isEqual:SNAPSHOTHDR_EXTENSION_EXR] && SaveEXRSnapshot([pathToPicHDR cStringUsingEncoding:NSUTF8StringEncoding], surface->w, surface->h, pixlsf) != 0) //TINYEXR_SUCCESS
1771 || ([fileExtension isEqual:SNAPSHOTHDR_EXTENSION_HDR] && !stbi_write_hdr([pathToPicHDR cStringUsingEncoding:NSUTF8StringEncoding], surface->w, surface->h, 3, pixlsf)))
1772 {
1773 OOLog(@"screenshotHDR", @"Failed to save %@", pathToPicHDR);
1774 snapShotOK = NO;
1775 }
1776
1777 free(pixlsf);
1778 }
1779
1780 // return to the previous directory
1781 [[NSFileManager defaultManager] changeCurrentDirectoryPath:originalDirectory];
1782 return snapShotOK;
1783}
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 1373 of file MyOpenGLView.m.

1373 :(NSString *)stringToCopy
1374{
1375 // TODO: implement string clipboard copy for Linux
1376}

◆ stringToClipboard: [2/2]

- (void) stringToClipboard: (NSString *) stringToCopy

◆ suppressKeysUntilKeyUp [1/2]

- (void) suppressKeysUntilKeyUp

Definition at line 2001 of file MyOpenGLView.m.

2002{
2003 if (keys[gvMouseDoubleClick] == NO)
2004 {
2005 suppressKeys = YES;
2006 [self clearKeys];
2007 }
2008 else
2009 {
2010 [self clearMouse];
2011 }
2012
2013}
@ 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

+ (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 767 of file MyOpenGLView.m.

768{
769 [self drawRect: NSMakeRect(0, 0, viewSize.width, viewSize.height)];
770}

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 777 of file MyOpenGLView.m.

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

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]

References clearKeys, clearMouse, and virtualJoystickPosition.

Here is the call graph for this function:

◆ virtualJoystickPosition [2/2]

◆ 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 242 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 209 of file MyOpenGLView.h.

Referenced by createSurface, gammaValue, and setGammaValue:.

◆ _hdrOutput

- (BOOL) _hdrOutput
protected

Definition at line 244 of file MyOpenGLView.h.

Referenced by init.

◆ _mouseVirtualStickSensitivityFactor

- (float) _mouseVirtualStickSensitivityFactor
protected

Definition at line 200 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ _mouseWheelDelta

- (float) _mouseWheelDelta
private

◆ _msaa

- (BOOL) _msaa
protected

Definition at line 211 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.

◆ _sdrToneMapper

- (int) _sdrToneMapper
protected

Definition at line 240 of file MyOpenGLView.h.

Referenced by init, sdrToneMapper, and setSDRToneMapper:.

◆ _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 597 of file MyOpenGLView.m.

598{
599 return allowingStringInput;
600}

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

◆ backingViewSize

- (NSSize) backingViewSize
private

Definition at line 633 of file MyOpenGLView.m.

634{
635 return viewSize;
636}

Referenced by backingViewSize.

◆ bounds

- (NSRect) bounds
protected

Definition at line 621 of file MyOpenGLView.m.

622{
623 return bounds;
624}

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 215 of file MyOpenGLView.h.

Referenced by init, and loadFullscreenSettings.

◆ currentWindowSize

- (NSSize) currentWindowSize
protected

Definition at line 219 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 248 of file MyOpenGLView.h.

Referenced by createSurface, endSplashScreen, and init.

◆ fullScreen

- (BOOL) fullScreen
protected

◆ gameController

◆ grabMouseStatus

- (BOOL) grabMouseStatus
protected

Definition at line 246 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ isAlphabetKeyDown

- (BOOL) isAlphabetKeyDown
private

Definition at line 1992 of file MyOpenGLView.m.

1993{
1994 return isAlphabetKeyDown = NO;;
1995}

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 188 of file MyOpenGLView.h.

◆ mouseInDeltaMode

- (BOOL) mouseInDeltaMode
protected

Definition at line 253 of file MyOpenGLView.h.

Referenced by pollControls, and setMouseInDeltaMode:.

◆ mouseWarped

- (BOOL) mouseWarped
protected

Definition at line 190 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 222 of file MyOpenGLView.h.

Referenced by createSurface, endSplashScreen, init, and initSplashScreen.

◆ squareX

- (double) squareX
protected

Definition at line 206 of file MyOpenGLView.h.

Referenced by initialiseGLWithSize:useVideoMode:.

◆ squareY

- (double) squareY
protected

Definition at line 206 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 193 of file MyOpenGLView.h.

Referenced by init, and pollControls.

◆ typedString

◆ viewSize

◆ virtualJoystickPosition

◆ x_offset

- (GLfloat) x_offset
private

Definition at line 645 of file MyOpenGLView.m.

646{
647 return x_offset;
648}

Referenced by initialiseGLWithSize:useVideoMode:, and x_offset.

◆ y_offset

- (GLfloat) y_offset
private

Definition at line 651 of file MyOpenGLView.m.

652{
653 return y_offset;
654}

Referenced by initialiseGLWithSize:useVideoMode:, and y_offset.


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