Don't autoresize CALayer's when using the Java 7 workaround
This commit is contained in:
parent
cd666c66cf
commit
675838f692
|
@ -63,6 +63,8 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo {
|
||||||
|
|
||||||
protected void initHandle(Canvas component) throws LWJGLException {
|
protected void initHandle(Canvas component) throws LWJGLException {
|
||||||
boolean forceCALayer = true;
|
boolean forceCALayer = true;
|
||||||
|
boolean autoResizable = true; // set the CALayer to autoResize
|
||||||
|
|
||||||
String javaVersion = System.getProperty("java.version");
|
String javaVersion = System.getProperty("java.version");
|
||||||
|
|
||||||
if (javaVersion.startsWith("1.5") || javaVersion.startsWith("1.6")) {
|
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.
|
// where the older cocoaViewRef NSView method maybe be available.
|
||||||
forceCALayer = false;
|
forceCALayer = false;
|
||||||
}
|
}
|
||||||
|
else if (javaVersion.startsWith("1.7")) {
|
||||||
|
autoResizable = false;
|
||||||
|
}
|
||||||
|
|
||||||
Insets insets = getInsets(component);
|
Insets insets = getInsets(component);
|
||||||
|
|
||||||
int top = insets != null ? insets.top : 0;
|
int top = insets != null ? insets.top : 0;
|
||||||
int left = insets != null ? insets.left : 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")) {
|
if (javaVersion.startsWith("1.7")) {
|
||||||
// fix for CALayer position not covering Canvas due to a Java 7 bug
|
// 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);
|
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);
|
private static native void nSetLayerPosition(ByteBuffer peer_info_handle, int x, int y);
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,7 @@ typedef struct {
|
||||||
JAWT_Rectangle canvasBounds;
|
JAWT_Rectangle canvasBounds;
|
||||||
MacOSXWindowInfo *window_info;
|
MacOSXWindowInfo *window_info;
|
||||||
bool setViewport;
|
bool setViewport;
|
||||||
|
bool autoResizable;
|
||||||
|
|
||||||
@private
|
@private
|
||||||
CGLContextObj contextObject;
|
CGLContextObj contextObject;
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
#include "common_tools.h"
|
#include "common_tools.h"
|
||||||
|
|
||||||
JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle
|
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];
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle);
|
MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle);
|
||||||
|
@ -79,6 +79,7 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nInitHandle
|
||||||
peer_info->glLayer->canvasBounds = (JAWT_Rectangle)surface->dsi->bounds;
|
peer_info->glLayer->canvasBounds = (JAWT_Rectangle)surface->dsi->bounds;
|
||||||
peer_info->window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle);
|
peer_info->window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle);
|
||||||
peer_info->glLayer->window_info = peer_info->window_info;
|
peer_info->glLayer->window_info = peer_info->window_info;
|
||||||
|
peer_info->glLayer->autoResizable = autoResizable;
|
||||||
|
|
||||||
// ensure the CALayer size is correct, needed for Java 7+
|
// 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);
|
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.asynchronous = YES;
|
||||||
self.needsDisplayOnBoundsChange = YES;
|
self.needsDisplayOnBoundsChange = YES;
|
||||||
self.opaque = NO;
|
self.opaque = NO;
|
||||||
|
if (autoResizable) {
|
||||||
self.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
|
self.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.autoresizingMask = kCALayerNotSizable;
|
||||||
|
}
|
||||||
|
|
||||||
// get root layer of the AWT Canvas and add self to it
|
// get root layer of the AWT Canvas and add self to it
|
||||||
id <JAWT_SurfaceLayers> surfaceLayers = (id <JAWT_SurfaceLayers>)macosx_dsi;
|
id <JAWT_SurfaceLayers> surfaceLayers = (id <JAWT_SurfaceLayers>)macosx_dsi;
|
||||||
|
|
Loading…
Reference in New Issue