Further fixes for Display.setParent() canvas position & size bugs on OS
X
This commit is contained in:
parent
ce43cfabd7
commit
adf780c63d
|
@ -104,25 +104,37 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void componentMoved(ComponentEvent e) {
|
public void componentMoved(ComponentEvent e) {
|
||||||
Insets insets = getWindowInsets(component);
|
Point componentPosition = SwingUtilities.convertPoint(component, component.getLocation(), null);
|
||||||
|
Point parentPosition = SwingUtilities.convertPoint(component.getParent(), component.getLocation(), null);
|
||||||
|
|
||||||
int top = insets != null ? insets.top : 0;
|
if (componentPosition.getX() == parentPosition.getX() && componentPosition.getY() == parentPosition.getY()) {
|
||||||
int left = insets != null ? insets.left : 0;
|
Insets insets = getWindowInsets(component);
|
||||||
|
|
||||||
Point p = SwingUtilities.convertPoint(component, component.getLocation(), null);
|
int top = insets != null ? insets.top : 0;
|
||||||
|
int left = insets != null ? insets.left : 0;
|
||||||
|
|
||||||
nSetLayerPosition(getHandle(), (int)p.getX()-left, (int)p.getY()-top);
|
nSetLayerBounds(getHandle(), (int)componentPosition.getX()-left, (int)componentPosition.getY()-top, component.getWidth(), component.getHeight());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nSetLayerPosition(getHandle(), component.getX(), component.getY());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void componentResized(ComponentEvent e) {
|
public void componentResized(ComponentEvent e) {
|
||||||
Insets insets = getWindowInsets(component);
|
Point componentPosition = SwingUtilities.convertPoint(component, component.getLocation(), null);
|
||||||
|
Point parentPosition = SwingUtilities.convertPoint(component.getParent(), component.getLocation(), null);
|
||||||
|
|
||||||
int top = insets != null ? insets.top : 0;
|
if (componentPosition.getX() == parentPosition.getX() && componentPosition.getY() == parentPosition.getY()) {
|
||||||
int left = insets != null ? insets.left : 0;
|
Insets insets = getWindowInsets(component);
|
||||||
|
|
||||||
Point p = SwingUtilities.convertPoint(component, component.getLocation(), null);
|
int top = insets != null ? insets.top : 0;
|
||||||
|
int left = insets != null ? insets.left : 0;
|
||||||
|
|
||||||
nSetLayerPosition(getHandle(), (int)p.getX()-left, (int)p.getY()-top);
|
nSetLayerBounds(getHandle(), (int)componentPosition.getX()-left, (int)componentPosition.getY()-top, component.getWidth(), component.getHeight());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
nSetLayerPosition(getHandle(), component.getX(), component.getY());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void componentShown(ComponentEvent e) {
|
public void componentShown(ComponentEvent e) {
|
||||||
|
@ -137,6 +149,16 @@ 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 void nSetLayerPosition(ByteBuffer peer_info_handle, int x, int y);
|
||||||
|
|
||||||
|
private static native void nSetLayerBounds(ByteBuffer peer_info_handle, int x, int y, int width, int height);
|
||||||
|
|
||||||
|
protected void doUnlock() throws LWJGLException {
|
||||||
|
awt_surface.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the Insets of the Window holding the Canvas
|
* Return the Insets of the Window holding the Canvas
|
||||||
*/
|
*/
|
||||||
|
@ -155,14 +177,6 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 void nSetLayerPosition(ByteBuffer peer_info_handle, int x, int y);
|
|
||||||
|
|
||||||
protected void doUnlock() throws LWJGLException {
|
|
||||||
awt_surface.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
private Insets getInsets(Canvas component) {
|
private Insets getInsets(Canvas component) {
|
||||||
Component parent = component.getParent();
|
Component parent = component.getParent();
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,17 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nSetLayerPosit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nSetLayerBounds
|
||||||
|
(JNIEnv *env, jclass clazz, jobject peer_info_handle, jint x, jint y, jint width, jint height) {
|
||||||
|
MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle);
|
||||||
|
|
||||||
|
if (peer_info->glLayer != nil) {
|
||||||
|
NSRect rect = NSMakeRect(x, y, width, height);
|
||||||
|
NSValue *value = [NSValue valueWithRect:rect];
|
||||||
|
[peer_info->glLayer performSelectorOnMainThread:@selector(updateBounds:) withObject:value waitUntilDone:NO];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@implementation GLLayer
|
@implementation GLLayer
|
||||||
|
|
||||||
- (void) attachLayer {
|
- (void) attachLayer {
|
||||||
|
@ -157,6 +168,11 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXCanvasPeerInfo_nSetLayerPosit
|
||||||
self.position = CGPointMake(point.x, self.superlayer.bounds.size.height - point.y - self.bounds.size.height);
|
self.position = CGPointMake(point.x, self.superlayer.bounds.size.height - point.y - self.bounds.size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)updateBounds:(NSValue*)value {
|
||||||
|
NSRect rect = [value rectValue];
|
||||||
|
self.frame = CGRectMake(rect.origin.x, self.superlayer.bounds.size.height - rect.origin.y - self.bounds.size.height, rect.size.width, rect.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
- (int) getWidth {
|
- (int) getWidth {
|
||||||
return canvasBounds.width;
|
return canvasBounds.width;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue