diff --git a/src/native/macosx/org_lwjgl_opengl_Display.m b/src/native/macosx/org_lwjgl_opengl_Display.m index f6510bf8..5145d5e6 100644 --- a/src/native/macosx/org_lwjgl_opengl_Display.m +++ b/src/native/macosx/org_lwjgl_opengl_Display.m @@ -62,16 +62,15 @@ static NSAutoreleasePool *pool; @implementation MacOSXOpenGLView -+ (NSOpenGLPixelFormat*)defaultPixelFormat -{ - NSOpenGLPixelFormatAttribute defaultAttribs[] = { ++ (NSOpenGLPixelFormat*)defaultPixelFormat { + NSOpenGLPixelFormatAttribute defaultAttribs[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFADepthSize, 16, NSOpenGLPFAColorSize, 32, 0 }; - if (default_format == nil) { - default_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:defaultAttribs]; + if (default_format == nil) { + default_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:defaultAttribs]; } return default_format; } @@ -86,91 +85,84 @@ static NSAutoreleasePool *pool; return NO; } -- (id)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat*)format -{ - self = [super initWithFrame:frameRect]; - if (self != nil) { - _pixelFormat = [format retain]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(_surfaceNeedsUpdate:) - name:NSViewGlobalFrameDidChangeNotification - object:self]; +- (id)initWithFrame:(NSRect)frameRect pixelFormat:(NSOpenGLPixelFormat*)format { + self = [super initWithFrame:frameRect]; + if (self != nil) { + _pixelFormat = [format retain]; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_surfaceNeedsUpdate:) + name:NSViewGlobalFrameDidChangeNotification + object:self]; } return self; } -- (void) _surfaceNeedsUpdate:(NSNotification*)notification -{ +- (void) _surfaceNeedsUpdate:(NSNotification*)notification { [self update]; } -- (void)setOpenGLContext:(NSOpenGLContext*)context -{ +- (void)setOpenGLContext:(NSOpenGLContext*)context { _openGLContext = context; } -- (NSOpenGLContext*)openGLContext -{ +- (NSOpenGLContext*)openGLContext { return _openGLContext; } -- (void)clearGLContext -{ - [_openGLContext release]; - _openGLContext = nil; +- (void)clearGLContext { + [_openGLContext release]; + _openGLContext = nil; } -- (void)prepareOpenGL -{ - +- (void)prepareOpenGL { + } -- (void)update -{ - [_openGLContext update]; +- (void)update { + [_openGLContext update]; } -- (void)lockFocus -{ - NSOpenGLContext* context = [self openGLContext]; - - [super lockFocus]; +- (void)lockFocus { + [super lockFocus]; + + NSOpenGLContext* context = [self openGLContext]; + + if (context == nil) return; + if ([context view] != self) { - [context setView:self]; - } - - [context makeCurrentContext]; + [context setView:self]; + } + + [context makeCurrentContext]; } -- (void)setPixelFormat:(NSOpenGLPixelFormat*)pixelFormat -{ - _pixelFormat = [pixelFormat retain]; +- (void)setPixelFormat:(NSOpenGLPixelFormat*)pixelFormat { + _pixelFormat = [pixelFormat retain]; } -- (NSOpenGLPixelFormat*)pixelFormat -{ - return _pixelFormat; +- (NSOpenGLPixelFormat*)pixelFormat { + return _pixelFormat; } - (BOOL)acceptsFirstResponder { - return YES; + return YES; } - (void)setParent:(MacOSXWindowInfo*)parent { - _parent = parent; + _parent = parent; } - (void)keyDown:(NSEvent *)event { - JNIEnv *env = attachCurrentThread(); - if (env == nil || event == nil || _parent == nil || _parent->jkeyboard == nil) { - return; - } - long time = [event timestamp] * 1000000000; - jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard); - jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(IIJ)V"); - const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding]; - int charcode = (charbuf == nil) ? 0 : charbuf[0]; - (*env)->CallVoidMethod(env, _parent->jkeyboard, keydown, [event keyCode], charcode, time); + JNIEnv *env = attachCurrentThread(); + if (env == nil || event == nil || _parent == nil || _parent->jkeyboard == nil) { + return; + } + long time = [event timestamp] * 1000000000; + jclass keyboard_class = (*env)->GetObjectClass(env, _parent->jkeyboard); + jmethodID keydown = (*env)->GetMethodID(env, keyboard_class, "keyPressed", "(IIJ)V"); + const char* charbuf = [[event characters] cStringUsingEncoding:NSASCIIStringEncoding]; + int charcode = (charbuf == nil) ? 0 : charbuf[0]; + (*env)->CallVoidMethod(env, _parent->jkeyboard, keydown, [event keyCode], charcode, time); } - (void)keyUp:(NSEvent *)event { diff --git a/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m b/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m index e135e193..4abf8ba4 100644 --- a/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m +++ b/src/native/macosx/org_lwjgl_opengl_MacOSXContextImplementation.m @@ -182,10 +182,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nSetSwa JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXContextImplementation_nDestroy (JNIEnv *env, jclass clazz, jobject context_handle) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - MacOSXPeerInfo *peer_info = ((MacOSXContext *)(*env)->GetDirectBufferAddress(env, context_handle))->peer_info; - + + MacOSXContext *context_info = (MacOSXContext *)(*env)->GetDirectBufferAddress(env, context_handle); // clearDrawable on main thread to ensure its not in use - [[peer_info->window_info->view openGLContext] performSelectorOnMainThread:@selector(clearDrawable) withObject:nil waitUntilDone:YES]; - [[peer_info->window_info->view openGLContext] release]; + [context_info->context performSelectorOnMainThread:@selector(clearDrawable) withObject:nil waitUntilDone:YES]; + [context_info->peer_info->window_info->view setOpenGLContext:nil]; + [context_info->context release]; + [pool release]; }