From cd666c66cf2852d2af536a4bf1040436bb37d660 Mon Sep 17 00:00:00 2001 From: kappaOne Date: Sun, 3 Nov 2013 14:02:22 +0000 Subject: [PATCH] Fix CALayer/Display.setParent() initial position bug on OS X. --- .../lwjgl/opengl/MacOSXCanvasPeerInfo.java | 20 +++++++++++++++++++ src/native/macosx/context.h | 12 +++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java index 959328d1..b182f6f4 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java @@ -83,6 +83,26 @@ abstract class MacOSXCanvasPeerInfo extends MacOSXPeerInfo { // fix for CALayer position not covering Canvas due to a Java 7 bug // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7172187 addComponentListener(component); + + if (SwingUtilities.getWindowAncestor(component.getParent()) != null) { + Point componentPosition = SwingUtilities.convertPoint(component, component.getLocation(), null); + Point parentPosition = SwingUtilities.convertPoint(component.getParent(), component.getLocation(), null); + + if (componentPosition.getX() == parentPosition.getX() && componentPosition.getY() == parentPosition.getY()) { + insets = getWindowInsets(component); + + top = insets != null ? insets.top : 0; + left = insets != null ? insets.left : 0; + + int x = (int)componentPosition.getX()-left; + int y = (int)-componentPosition.getY()+top-component.getHeight(); + + int width = component.getWidth(); + int height = component.getHeight(); + + nSetLayerBounds(getHandle(), x, y, width, height); + } + } } } diff --git a/src/native/macosx/context.h b/src/native/macosx/context.h index 05dbe4d7..c2d7438d 100644 --- a/src/native/macosx/context.h +++ b/src/native/macosx/context.h @@ -52,13 +52,13 @@ enum { NSControlLeftKeyMask = 0x0001, - NSControlRightKeyMask = 0x2000, - NSShiftLeftKeyMask = 0x0002, - NSShiftRightKeyMask = 0x0004, - NSCommandLeftKeyMask = 0x0008, + NSControlRightKeyMask = 0x2000, + NSShiftLeftKeyMask = 0x0002, + NSShiftRightKeyMask = 0x0004, + NSCommandLeftKeyMask = 0x0008, NSCommandRightKeyMask = 0x0010, - NSAlternateLeftKeyMask = 0x0020, - NSAlternateRightKeyMask = 0x0040 + NSAlternateLeftKeyMask = 0x0020, + NSAlternateRightKeyMask = 0x0040 }; @class NSOpenGLContext, NSOpenGLPixelFormat, MacOSXOpenGLView, MacOSXKeyableWindow;