diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java index b182f6f4..b5c773ea 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java @@ -63,6 +63,8 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo { protected void initHandle(Canvas component) throws LWJGLException { boolean forceCALayer = true; + boolean autoResizable = true; // set the CALayer to autoResize + String javaVersion = System.getProperty("java.version"); if (javaVersion.startsWith("1.5") || javaVersion.startsWith("1.6")) { @@ -71,13 +73,16 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo { // where the older cocoaViewRef NSView method maybe be available. forceCALayer = false; } + else if (javaVersion.startsWith("1.7")) { + autoResizable = false; + } Insets insets = getInsets(component); int top = insets != null ? insets.top : 0; int left = insets != null ? insets.left : 0; - window_handle = nInitHandle(awt_surface.lockAndGetHandle(component), getHandle(), window_handle, forceCALayer, component.getX()-left, component.getY()-top); + window_handle = nInitHandle(awt_surface.lockAndGetHandle(component), getHandle(), window_handle, forceCALayer, autoResizable, component.getX()-left, component.getY()-top); if (javaVersion.startsWith("1.7")) { // fix for CALayer position not covering Canvas due to a Java 7 bug @@ -187,7 +192,7 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo { component.addComponentListener(comp); } - private static native ByteBuffer nInitHandle(ByteBuffer surface_buffer, ByteBuffer peer_info_handle, ByteBuffer window_handle, boolean forceCALayer, int x, int y) throws LWJGLException; + private static native ByteBuffer nInitHandle(ByteBuffer surface_buffer, ByteBuffer peer_info_handle, ByteBuffer window_handle, boolean forceCALayer, boolean autoResizable, int x, int y) throws LWJGLException; private static native void nSetLayerPosition(ByteBuffer peer_info_handle, int x, int y); diff --git a/src/native/macosx/context.h b/src/native/macosx/context.h index c2d7438d..e36a8989 100644 --- a/src/native/macosx/context.h +++ b/src/native/macosx/context.h @@ -118,6 +118,7 @@ typedef struct { JAWT_Rectangle canvasBounds; MacOSXWindowInfo *window_info; bool setViewport; + bool autoResizable; @private CGLContextObj contextObject; diff --git a/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m b/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m index 0006b856..efa25b1e 100644 --- a/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m +++ b/src/native/macosx/org_lwjgl_opengl_MacOSXCanvasPeerInfo.m @@ -48,7 +48,7 @@ #include "common_tools.h" JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle -(JNIEnv *env, jclass clazz, jobject lock_buffer_handle, jobject peer_info_handle, jobject window_handle, jboolean forceCALayer, jint x, jint y) { +(JNIEnv *env, jclass clazz, jobject lock_buffer_handle, jobject peer_info_handle, jobject window_handle, jboolean forceCALayer, jboolean autoResizable, jint x, jint y) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle); @@ -79,7 +79,8 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle peer_info->glLayer->canvasBounds = (JAWT_Rectangle)surface->dsi->bounds; peer_info->window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle); peer_info->glLayer->window_info = peer_info->window_info; - + peer_info->glLayer->autoResizable = autoResizable; + // ensure the CALayer size is correct, needed for Java 7+ peer_info->glLayer.frame = CGRectMake(x, y, peer_info->glLayer->canvasBounds.width, peer_info->glLayer->canvasBounds.height); @@ -131,7 +132,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nSetLayerBound self.asynchronous = YES; self.needsDisplayOnBoundsChange = YES; self.opaque = NO; - self.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable; + if (autoResizable) { + self.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable; + } + else { + self.autoresizingMask = kCALayerNotSizable; + } // get root layer of the AWT Canvas and add self to it id surfaceLayers = (id )macosx_dsi;