aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--make/build-common.xml4
-rw-r--r--make/build-nativewindow.xml31
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java3
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/jawt/macosx/MacOSXJAWTWindow.java13
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java39
-rw-r--r--src/nativewindow/native/macosx/OSXmisc.c106
6 files changed, 191 insertions, 5 deletions
diff --git a/make/build-common.xml b/make/build-common.xml
index 114525855..58a829fc6 100644
--- a/make/build-common.xml
+++ b/make/build-common.xml
@@ -245,16 +245,20 @@
<property name="nativewindow.awt.jar" value="${build.nativewindow}/nativewindow.awt.jar" />
<property name="nativewindow.os.x11.jar" value="${build.nativewindow}/nativewindow.os.x11.jar" />
<property name="nativewindow.os.win.jar" value="${build.nativewindow}/nativewindow.os.win.jar" />
+ <property name="nativewindow.os.macosx.jar" value="${build.nativewindow}/nativewindow.os.macosx.jar" />
+
<path id="nativewindow_all_atoms.classpath">
<pathelement location="${nativewindow.core.jar}" />
<pathelement location="${nativewindow.awt.jar}" />
<pathelement location="${nativewindow.os.x11.jar}" />
<pathelement location="${nativewindow.os.win.jar}" />
+ <pathelement location="${nativewindow.os.macosx.jar}" />
</path>
<path id="nativewindow_all-noawt_atoms.classpath">
<pathelement location="${nativewindow.core.jar}" />
<pathelement location="${nativewindow.os.x11.jar}" />
<pathelement location="${nativewindow.os.win.jar}" />
+ <pathelement location="${nativewindow.os.macosx.jar}" />
</path>
<path id="nativewindow_core_atoms.classpath">
<pathelement location="${nativewindow.core.jar}" />
diff --git a/make/build-nativewindow.xml b/make/build-nativewindow.xml
index b13e9b0ff..244f61046 100644
--- a/make/build-nativewindow.xml
+++ b/make/build-nativewindow.xml
@@ -70,7 +70,7 @@
value="jogamp/nativewindow/swt/**"/>
<property name="java.part.core"
- value="javax/media/nativewindow/* javax/media/nativewindow/util/* javax/media/nativewindow/egl/* javax/media/nativewindow/macosx/* javax/media/nativewindow/windows/* com/jogamp/nativewindow/* jogamp/nativewindow/* jogamp/nativewindow/jvm/* ${java.part.swt}"/>
+ value="javax/media/nativewindow/* javax/media/nativewindow/util/* javax/media/nativewindow/egl/* com/jogamp/nativewindow/* jogamp/nativewindow/* jogamp/nativewindow/jvm/* ${java.part.swt}"/>
<property name="java.part.awt"
value="javax/media/nativewindow/awt/* jogamp/nativewindow/jawt/** jogamp/nativewindow/**/awt/**"/>
@@ -81,6 +81,9 @@
<property name="java.part.windows"
value="jogamp/nativewindow/windows/** javax/media/nativewindow/windows/*" />
+ <property name="java.part.macosx"
+ value="jogamp/nativewindow/macosx/** javax/media/nativewindow/macosx/*" />
+
<!-- condition excludes -->
<condition property="java.excludes.awt"
@@ -582,6 +585,11 @@
<include name="${rootrel.src.c}/NativewindowCommon.c"/>
</patternset>
+ <patternset id="c.src.files.macosx">
+ <include name="${rootrel.src.c}/macosx/OSXmisc.c"/>
+ <include name="${rootrel.src.c}/NativewindowCommon.c"/>
+ </patternset>
+
<echo message="Compiling @{output.lib.name}" />
<!-- have to wrap cc task with outofdate, because otherwise cc links a new library
@@ -694,7 +702,17 @@
compiler.cfg.id="${compiler.cfg.id}"
linker.cfg.id="${linker.cfg.id.oswin}"/>
</target>
- <target name="c.build.nativewindow.windowlib" depends="c.build.nativewindow.windowlib.x11, c.build.nativewindow.windowlib.windows"/>
+
+ <target name="c.build.nativewindow.windowlib.macosx" if="isOSX">
+ <javah destdir="${src.generated.c}/MacOSX" classpath="${javah.classpath}" class="jogamp.nativewindow.macosx.OSXUtil" />
+
+ <c.build c.compiler.src.files="c.src.files.macosx"
+ output.lib.name="nativewindow_macosx"
+ compiler.cfg.id="${compiler.cfg.id}"
+ linker.cfg.id="${linker.cfg.id.oswin}"/>
+ </target>
+
+ <target name="c.build.nativewindow.windowlib" depends="c.build.nativewindow.windowlib.x11, c.build.nativewindow.windowlib.windows, c.build.nativewindow.windowlib.macosx"/>
<target name="c.manifest" if="isVC8Family">
<!-- exec mt, the Microsoft Manifest Tool, to include DLL manifests in order to resolve the location of msvcr80.dll -->
@@ -749,7 +767,14 @@
</jar>
</target>
- <target name="build-jars-javase" depends="setup-manifestfile,build-jars-awt,build-jars-x11,build-jars-windows">
+ <target name="build-jars-macosx" depends="setup-manifestfile">
+ <jar manifest="${build.nativewindow}/manifest.mf" destfile="${nativewindow.os.macosx.jar}" filesonly="true">
+ <fileset dir="${classes}"
+ includes="${java.part.macosx}" />
+ </jar>
+ </target>
+
+ <target name="build-jars-javase" depends="setup-manifestfile,build-jars-awt,build-jars-x11,build-jars-windows,build-jars-macosx">
<jar manifest="${build.nativewindow}/manifest.mf" destfile="${nativewindow.core.jar}" filesonly="true">
<fileset dir="${classes}"
includes="${java.part.core}"
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<Object>() {
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);
+}
diff --git a/src/nativewindow/native/macosx/OSXmisc.c b/src/nativewindow/native/macosx/OSXmisc.c
new file mode 100644
index 000000000..24cb8d48f
--- /dev/null
+++ b/src/nativewindow/native/macosx/OSXmisc.c
@@ -0,0 +1,106 @@
+/**
+ * Copyright 2011 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <unistd.h>
+#include <AppKit/AppKit.h>
+
+#include "NativewindowCommon.h"
+#include "jogamp_nativewindow_macosx_OSXUtil.h"
+
+static const char * const ClazzNamePoint = "javax/media/nativewindow/util/Point";
+static const char * const ClazzAnyCstrName = "<init>";
+static const char * const ClazzNamePointCstrSignature = "(II)V";
+static jclass pointClz = NULL;
+static jmethodID pointCstr = NULL;
+
+static int _initialized=0;
+
+JNIEXPORT jboolean JNICALL
+Java_jogamp_nativewindow_macosx_OSXUtil_initIDs0(JNIEnv *env, jclass _unused) {
+ if(0==_initialized) {
+ jclass c;
+ c = (*env)->FindClass(env, ClazzNamePoint);
+ if(NULL==c) {
+ NativewindowCommon_FatalError(env, "FatalError Java_jogamp_newt_driver_macosx_MacWindow_initIDs0: can't find %s", ClazzNamePoint);
+ }
+ pointClz = (jclass)(*env)->NewGlobalRef(env, c);
+ (*env)->DeleteLocalRef(env, c);
+ if(NULL==pointClz) {
+ NativewindowCommon_FatalError(env, "FatalError Java_jogamp_newt_driver_macosx_MacWindow_initIDs0: can't use %s", ClazzNamePoint);
+ }
+ pointCstr = (*env)->GetMethodID(env, pointClz, ClazzAnyCstrName, ClazzNamePointCstrSignature);
+ if(NULL==pointCstr) {
+ NativewindowCommon_FatalError(env, "FatalError Java_jogamp_newt_driver_macosx_MacWindow_initIDs0: can't fetch %s.%s %s",
+ ClazzNamePoint, ClazzAnyCstrName, ClazzNamePointCstrSignature);
+ }
+
+ _initialized=1;
+ }
+ return JNI_TRUE;
+}
+
+/*
+ * Class: jogamp_newt_driver_macosx_MacWindow
+ * Method: getLocationOnScreenImpl0
+ * Signature: (JII)Ljavax/media/nativewindow/util/Point;
+ */
+JNIEXPORT jobject JNICALL Java_jogamp_nativewindow_macosx_OSXUtil_GetLocationOnScreen0
+ (JNIEnv *env, jclass unused, jlong winOrView, jint src_x, jint src_y)
+{
+ NSRect r;
+ int dest_x=-1;
+ int dest_y=-1;
+
+ NSObject *nsObj = (NSObject*) ((intptr_t) winOrView);
+ NSWindow* win = NULL;
+
+ if( [nsObj isKindOfClass:[NSWindow class]] ) {
+ win = (NSWindow*) nsObj;
+ } else if( nsObj != NULL && [nsObj isKindOfClass:[NSView class]] ) {
+ NSView* view = (NSView*) nsObj;
+ win = [view window];
+ } else {
+ NativewindowCommon_throwNewRuntimeException(env, "neither win not view %p\n", nsObj);
+ }
+
+ r.origin.x = src_x;
+ r.origin.y = src_x;
+ r.size.width = 0;
+ r.size.height = 0;
+ // NSRect rS = [win convertRectToScreen: r]; // 10.7
+ NSPoint oS = [win convertBaseToScreen: r.origin];
+ dest_x = (int) oS.x;
+ dest_y = (int) oS.y;
+
+ return (*env)->NewObject(env, pointClz, pointCstr, (jint)dest_x, (jint)dest_y);
+}
+