From b72bedc93e4dca6d3c55cae0cc811cb4baac13e0 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 25 Sep 2011 04:28:47 +0200 Subject: NativeWindow/OSX: Add nativewindow_macosx lib and nativewindow.os.macosx.jar for 'GetLocationOnScreen()' --- .../media/nativewindow/NativeWindowFactory.java | 3 ++ .../nativewindow/jawt/macosx/MacOSXJAWTWindow.java | 13 ++++++-- .../jogamp/nativewindow/macosx/OSXUtil.java | 39 ++++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java (limited to 'src/nativewindow/classes') diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java index 5c01c681a..ef8876f50 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java @@ -82,6 +82,7 @@ public abstract class NativeWindowFactory { public static final String AWTComponentClassName = "java.awt.Component" ; public static final String JAWTUtilClassName = "jogamp.nativewindow.jawt.JAWTUtil" ; public static final String X11UtilClassName = "jogamp.nativewindow.x11.X11Util"; + public static final String OSXUtilClassName = "jogamp.nativewindow.macosx.OSXUtil"; public static final String GDIClassName = "jogamp.nativewindow.windows.GDI"; public static final String X11JAWTToolkitLockClassName = "jogamp.nativewindow.jawt.x11.X11JAWTToolkitLock" ; public static final String X11ToolkitLockClassName = "jogamp.nativewindow.x11.X11ToolkitLock" ; @@ -139,6 +140,8 @@ public abstract class NativeWindowFactory { clazzName = X11UtilClassName; } else if( TYPE_WINDOWS.equals(nativeWindowingTypePure) ) { clazzName = GDIClassName; + } else if( TYPE_MACOSX.equals(nativeWindowingTypePure) ) { + clazzName = OSXUtilClassName; } if( null != clazzName ) { ReflectionUtil.callStaticMethod(clazzName, "initSingleton", diff --git a/src/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java b/src/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java index 9c29bbd52..d0152ce4e 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java +++ b/src/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java @@ -40,6 +40,7 @@ package jogamp.nativewindow.jawt.macosx; +import java.awt.Component; import java.security.AccessController; import java.security.PrivilegedAction; @@ -53,6 +54,7 @@ import jogamp.nativewindow.jawt.JAWTFactory; import jogamp.nativewindow.jawt.JAWTWindow; import jogamp.nativewindow.jawt.JAWT_DrawingSurface; import jogamp.nativewindow.jawt.JAWT_DrawingSurfaceInfo; +import jogamp.nativewindow.macosx.OSXUtil; public class MacOSXJAWTWindow extends JAWTWindow { @@ -86,7 +88,7 @@ public class MacOSXJAWTWindow extends JAWTWindow { ret = NativeWindow.LOCK_SURFACE_CHANGED; } if (firstLock) { - AccessController.doPrivileged(new PrivilegedAction() { + AccessController.doPrivileged(new PrivilegedAction() { public Object run() { dsi = ds.GetDrawingSurfaceInfo(); return null; @@ -132,7 +134,14 @@ public class MacOSXJAWTWindow extends JAWTWindow { } protected Point getLocationOnScreenImpl(int x, int y) { - return null; // FIXME + Component c = component; + while(null != c) { + x += c.getX(); + y += c.getY(); + c = c.getParent(); + } + // return OSXUtil.GetLocationOnScreen(getWindowHandle(), x, y); + return new Point(x, y); } // Variables for lockSurface/unlockSurface diff --git a/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java new file mode 100644 index 000000000..ffd23fef7 --- /dev/null +++ b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java @@ -0,0 +1,39 @@ +package jogamp.nativewindow.macosx; + +import javax.media.nativewindow.NativeWindowException; +import javax.media.nativewindow.util.Point; + +import jogamp.nativewindow.Debug; +import jogamp.nativewindow.NWJNILibLoader; + +public class OSXUtil { + private static boolean isInit = false; + private static final boolean DEBUG = Debug.debug("OSXUtil"); + + public static synchronized void initSingleton(boolean firstX11ActionOnProcess) { + if(!isInit) { + NWJNILibLoader.loadNativeWindow("macosx"); + + if( !initIDs0() ) { + throw new NativeWindowException("MacOSX: Could not initialized native stub"); + } + + if(DEBUG) { + System.out.println("OSX.isFirstX11ActionOnProcess: "+firstX11ActionOnProcess); + } + + isInit = true; + } + } + + public static boolean requiresToolkitLock() { + return false; + } + + public static Point GetLocationOnScreen(long windowOrView, int src_x, int src_y) { + return (Point) GetLocationOnScreen0(windowOrView, src_x, src_y); + } + + private static native boolean initIDs0(); + private static native Object GetLocationOnScreen0(long windowOrView, int src_x, int src_y); +} -- cgit v1.2.3