From 66181d14864f376b2ea44ded1a6008949d6e4392 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 18 Jan 2005 20:23:05 +0000 Subject: [PATCH] Delegate Sys platform dependent methods into SysImplementation instances --- build.xml | 3 +- ...ter.java => DefaultSysImplementation.java} | 66 ++++------ .../org/lwjgl/LinuxSysImplementation.java} | 105 ++++++--------- .../org/lwjgl/MacOSXSysImplementation.java | 55 ++++++++ src/java/org/lwjgl/Sys.java | 102 +++++++-------- ...ormAdapter.java => SysImplementation.java} | 35 ++--- .../org/lwjgl/Win32SysImplementation.java | 50 ++++++++ .../lwjgl/opengl/DisplayImplementation.java | 2 - src/java/org/lwjgl/opengl/LinuxDisplay.java | 20 --- src/java/org/lwjgl/opengl/MacOSXDisplay.java | 12 -- src/java/org/lwjgl/opengl/Win32Display.java | 7 - src/native/common/common_tools.c | 13 +- src/native/linux/org_lwjgl_Sys.c | 120 ------------------ src/native/win32/org_lwjgl_Sys.c | 28 ++-- 14 files changed, 253 insertions(+), 365 deletions(-) rename src/java/org/lwjgl/{SwingAdapter.java => DefaultSysImplementation.java} (67%) rename src/{native/macosx/org_lwjgl_Sys.c => java/org/lwjgl/LinuxSysImplementation.java} (51%) create mode 100644 src/java/org/lwjgl/MacOSXSysImplementation.java rename src/java/org/lwjgl/{PlatformAdapter.java => SysImplementation.java} (72%) create mode 100644 src/java/org/lwjgl/Win32SysImplementation.java delete mode 100644 src/native/linux/org_lwjgl_Sys.c diff --git a/build.xml b/build.xml index 7db365a5..5d3b4d09 100644 --- a/build.xml +++ b/build.xml @@ -385,13 +385,14 @@ + - + diff --git a/src/java/org/lwjgl/SwingAdapter.java b/src/java/org/lwjgl/DefaultSysImplementation.java similarity index 67% rename from src/java/org/lwjgl/SwingAdapter.java rename to src/java/org/lwjgl/DefaultSysImplementation.java index 3ba47bac..29fd535f 100644 --- a/src/java/org/lwjgl/SwingAdapter.java +++ b/src/java/org/lwjgl/DefaultSysImplementation.java @@ -1,64 +1,58 @@ -/* +/* * Copyright (c) 2002-2004 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * 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. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "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 THE COPYRIGHT OWNER 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 + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 + * 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. */ package org.lwjgl; +import java.lang.reflect.Method; import javax.swing.JOptionPane; import javax.swing.UIManager; /** * $Id$ - *

- * A Swing adapter for using Swing to take care of things on platforms where we - * know Swing is present. - *

Note To compile LWJGL applications with Excelsior JET that use JetPerfect - * and that have no dependencies on Swing, do not include this class in your - * JET project. - * - * @author cix_foo + * + * @author elias_naur * @version $Revision$ */ -final class SwingAdapter implements PlatformAdapter { - /** - * Constructs a new SwingAdapter - */ - SwingAdapter() { +abstract class DefaultSysImplementation implements SysImplementation { + public native String getNativeLibraryVersion(); + public native void setDebug(boolean debug); + + public long getTimerResolution() { + return 1000; + } + + public long getTime() { + return System.currentTimeMillis(); } - /** - * Spawn a "modal" dialog in the centre of the screen with a message in it - * and an OK button. This method blocks until the dialog is dismissed. - * @param title Title of alert - * @param message Message to show in alert - */ public void alert(String title, String message) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -66,13 +60,7 @@ final class SwingAdapter implements PlatformAdapter { } JOptionPane.showMessageDialog(null, message, title, JOptionPane.WARNING_MESSAGE); } - - /** - * Get the contents of the system clipboard. The system might not have a clipboard - * (particularly if it doesn't even have a keyboard) in which case we return null. - * Otherwise we return a String, which may be the empty string "". - * @return a String, or null if there is no system clipboard. - */ + public String getClipboard() { try { java.awt.datatransfer.Clipboard clipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); diff --git a/src/native/macosx/org_lwjgl_Sys.c b/src/java/org/lwjgl/LinuxSysImplementation.java similarity index 51% rename from src/native/macosx/org_lwjgl_Sys.c rename to src/java/org/lwjgl/LinuxSysImplementation.java index 7d977c90..e9dee1e1 100644 --- a/src/native/macosx/org_lwjgl_Sys.c +++ b/src/java/org/lwjgl/LinuxSysImplementation.java @@ -1,96 +1,65 @@ -/* +/* * Copyright (c) 2002-2004 LWJGL Project * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are + * modification, are permitted provided that the following conditions are * met: - * - * * Redistributions of source code must retain the above copyright + * + * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * 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. * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "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 THE COPYRIGHT OWNER 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 + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 + * 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. */ +package org.lwjgl; + +import javax.swing.JOptionPane; +import javax.swing.UIManager; + +import java.io.IOException; /** -* $Id$ - * - * Linux system library. + * $Id$ * * @author elias_naur * @version $Revision$ */ +class LinuxSysImplementation extends DefaultSysImplementation { + public boolean openURL(String url) { + // Linux may as well resort to pure Java hackery, as there's no Linux native way of doing it + // right anyway. -#include -#include -#include -#include -#include "org_lwjgl_Sys.h" -#include "common_tools.h" + String[] browsers = {"mozilla", "opera", "konqueror", "nautilus", "galeon", "netscape"}; -static long int hires_timer; // Hires timer current time + for (int i = 0; i < browsers.length; i ++) { + try { + Runtime.getRuntime().exec(new String[] { browsers[i], url }); + return true; + } catch (IOException e) { + // Ignore + e.printStackTrace(System.err); + } + } -/* - * Class: org_lwjgl_Sys - * Method: getTimerResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_getTimerResolution -(JNIEnv * env, jclass clazz) -{ - // Constant on MacOS - return 1000000; -} - -static long queryTime(void) { - struct timeval tv; - if (gettimeofday(&tv, NULL) == -1) { - printfDebug("Could not read current time\n"); - } - long result = tv.tv_sec * 1000000l + tv.tv_usec; - - return result; -} - -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_setDebug(JNIEnv *env, jclass clazz, jboolean enabled) { - setDebugEnabled(enabled == JNI_TRUE ? true : false); -} - -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_ngetTime -(JNIEnv * env, jclass clazz) -{ - hires_timer = queryTime(); - return (jlong) hires_timer; -} - -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_getNativeLibraryVersion(JNIEnv *env, jclass clazz) { - return getVersionString(env); -} - -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert(JNIEnv * env, jclass clazz, jstring title, jstring message) -{ -} - -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_nGetClipboard - (JNIEnv * env, jclass clazz) -{ - return NULL; + // Seems to have failed + return false; + } } diff --git a/src/java/org/lwjgl/MacOSXSysImplementation.java b/src/java/org/lwjgl/MacOSXSysImplementation.java new file mode 100644 index 00000000..4d4dd530 --- /dev/null +++ b/src/java/org/lwjgl/MacOSXSysImplementation.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2002-2004 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 THE COPYRIGHT OWNER 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. + */ +package org.lwjgl; + +import java.lang.reflect.Method; +import javax.swing.JOptionPane; +import javax.swing.UIManager; + +/** + * $Id$ + * + * @author elias_naur + * @version $Revision$ + */ +class MacOSXSysImplementation extends DefaultSysImplementation { + public boolean openURL(String url) { + try { + Class com_apple_eio_FileManager = Class.forName("com.apple.eio.FileManager"); + Method openURL_method = com_apple_eio_FileManager.getMethod("openURL", new Class[]{String.class}); + openURL_method.invoke(null, new Object[]{url}); + return true; + } catch (Exception e) { + return false; + } + } +} diff --git a/src/java/org/lwjgl/Sys.java b/src/java/org/lwjgl/Sys.java index 883609af..d41dd1cd 100644 --- a/src/java/org/lwjgl/Sys.java +++ b/src/java/org/lwjgl/Sys.java @@ -51,27 +51,54 @@ public final class Sys { public static final String VERSION = "0.94"; /** The native library name */ - private static String LIBRARY_NAME = "lwjgl"; + private static final String LIBRARY_NAME = "lwjgl"; /** The platform adapter class name */ - private static String PLATFORM; + private static final String PLATFORM; /** * Debug flag. */ public static final boolean DEBUG = Boolean.getBoolean("org.lwjgl.Sys.debug"); - private static boolean initialized; + /** + * The implementation instance to delegate platform specific behavior to + */ + private final static SysImplementation implementation; static { - initialize(); + System.loadLibrary(LIBRARY_NAME); + implementation = createImplementation(); + String native_version = implementation.getNativeLibraryVersion(); + if (!native_version.equals(VERSION)) + throw new LinkageError("Version mismatch: jar version is '" + VERSION + + "', native libary version is '" + native_version + "'"); + implementation.setDebug(DEBUG); + + PLATFORM = System.getProperty("org.lwjgl.Sys.platform", "org.lwjgl.SwingAdapter"); } - /** - * @return the name of the native library to load - */ - private static String getLibraryName() { - return LIBRARY_NAME; + private static SysImplementation createImplementation() { + String class_name; + String os_name = System.getProperty("os.name"); + if (os_name.startsWith("Linux")) { + class_name = "org.lwjgl.LinuxSysImplementation"; + } else if (os_name.startsWith("Windows")) { + class_name = "org.lwjgl.Win32SysImplementation"; + } else if (os_name.startsWith("Mac")) { + class_name = "org.lwjgl.MacOSXSysImplementation"; + } else + throw new IllegalStateException("The platform " + os_name + " is not supported"); + try { + Class impl_class = Class.forName(class_name); + return (SysImplementation)impl_class.newInstance(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } } /** @@ -91,39 +118,19 @@ public final class Sys { } /** - * Initialization. + * Initialization. This is just a dummy method to trigger the static constructor. */ public static void initialize() { - if (initialized) - return; - initialized = true; - System.loadLibrary(LIBRARY_NAME); - String native_version = getNativeLibraryVersion(); - if (!native_version.equals(VERSION)) - throw new LinkageError("Version mismatch: jar version is '" + VERSION + - "', native libary version is '" + native_version + "'"); - setDebug(DEBUG); - - PLATFORM = System.getProperty("org.lwjgl.Sys.platform", "org.lwjgl.SwingAdapter"); - } - /** - * Return the version of the native library - */ - private static native String getNativeLibraryVersion(); - - /** - * Set the debug level of the native library - */ - private static native void setDebug(boolean debug); - /** * Obtains the number of ticks that the hires timer does in a second. * * @return timer resolution in ticks per second or 0 if no timer is present. */ - public static native long getTimerResolution(); + public static long getTimerResolution() { + return implementation.getTimerResolution(); + } /** * Gets the current value of the hires timer, in ticks. When the Sys class is first loaded @@ -133,9 +140,8 @@ public final class Sys { * @return the current hires time, in ticks (always >= 0) */ public static long getTime() { - return ngetTime() & 0x7FFFFFFFFFFFFFFFL; + return implementation.getTime() & 0x7FFFFFFFFFFFFFFFL; } - private static native long ngetTime(); /** * Attempt to display a modal alert to the user. This method should be used @@ -165,23 +171,12 @@ public final class Sys { if (message == null) message = ""; String osName = System.getProperty("os.name"); - if (osName.startsWith("Windows")) { - nAlert(title, message); - } else { - try { - PlatformAdapter adapter = (PlatformAdapter) Class.forName(PLATFORM).newInstance(); // This avoids a Jet error message - adapter.alert(title, message); - } catch (Exception e) { - Sys.log("Unable to display alert using: " + PLATFORM); - } - } + implementation.alert(title, message); if (grabbed) { Mouse.setGrabbed(true); } } - private static native void nAlert(String title, String message); - /** * Open the system web browser and point it at the specified URL. It is recommended * that this not be called whilst your game is running, but on application exit in @@ -212,7 +207,7 @@ public final class Sys { return false; } } catch (Exception ue) { - return Display.getImplementation().openURL(url); + return implementation.openURL(url); } } @@ -225,15 +220,6 @@ public final class Sys { * @return a String, or null if there is no system clipboard. */ public static String getClipboard() { - try { - PlatformAdapter adapter = (PlatformAdapter) Class.forName(PLATFORM).newInstance(); // This avoids a Jet error message - return adapter.getClipboard(); - } catch (Throwable e) { - Sys.log("Unable to get clipboard contents: " + e); - // ignore exception and use native implementation - return nGetClipboard(); - } + return implementation.getClipboard(); } - - private static native String nGetClipboard(); } diff --git a/src/java/org/lwjgl/PlatformAdapter.java b/src/java/org/lwjgl/SysImplementation.java similarity index 72% rename from src/java/org/lwjgl/PlatformAdapter.java rename to src/java/org/lwjgl/SysImplementation.java index d14ff275..4299c4b4 100644 --- a/src/java/org/lwjgl/PlatformAdapter.java +++ b/src/java/org/lwjgl/SysImplementation.java @@ -31,30 +31,35 @@ */ package org.lwjgl; - /** * $Id$ * - * Interface for adapting to window environments. + * System class platform specific method interface * * @author cix_foo + * @author elias_naur * @version $Revision$ */ -public interface PlatformAdapter { +interface SysImplementation { + /** + * Return the version of the native library + */ + public String getNativeLibraryVersion(); + + public void setDebug(boolean debug); /** - * Spawn a "modal" dialog in the centre of the screen with a message in it - * and an OK button. This method blocks until the dialog is dismissed. - * @param title - * @param message + * Obtains the number of ticks that the hires timer does in a second. + * + * @return timer resolution in ticks per second or 0 if no timer is present. */ - void alert(String title, String message); + public long getTimerResolution(); - /** - * Get the contents of the system clipboard. The system might not have a clipboard - * (particularly if it doesn't even have a keyboard) in which case we return null. - * Otherwise we return a String, which may be the empty string "". - * @return a String, or null if there is no system clipboard. - */ - String getClipboard(); + public long getTime(); + + public void alert(String title, String message); + + boolean openURL(String url); + + public String getClipboard(); } diff --git a/src/java/org/lwjgl/Win32SysImplementation.java b/src/java/org/lwjgl/Win32SysImplementation.java new file mode 100644 index 00000000..864b82a8 --- /dev/null +++ b/src/java/org/lwjgl/Win32SysImplementation.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2002-2004 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 THE COPYRIGHT OWNER 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. + */ +package org.lwjgl; + +/** + * $Id$ + * + * @author elias_naur + * @version $Revision$ + */ +class Win32SysImplementation extends DefaultSysImplementation { + public native long getTimerResolution(); + + public native long getTime(); + + public native void alert(String title, String message); + + public native boolean openURL(String url); + + public native String getClipboard(); +} diff --git a/src/java/org/lwjgl/opengl/DisplayImplementation.java b/src/java/org/lwjgl/opengl/DisplayImplementation.java index a90cdeae..f9077d18 100644 --- a/src/java/org/lwjgl/opengl/DisplayImplementation.java +++ b/src/java/org/lwjgl/opengl/DisplayImplementation.java @@ -248,6 +248,4 @@ public interface DisplayImplementation { public void bindTexImageToPbuffer(ByteBuffer handle, int buffer); public void releaseTexImageFromPbuffer(ByteBuffer handle, int buffer); - - boolean openURL(String url); } diff --git a/src/java/org/lwjgl/opengl/LinuxDisplay.java b/src/java/org/lwjgl/opengl/LinuxDisplay.java index 996b6614..513a995a 100644 --- a/src/java/org/lwjgl/opengl/LinuxDisplay.java +++ b/src/java/org/lwjgl/opengl/LinuxDisplay.java @@ -393,24 +393,4 @@ final class LinuxDisplay implements DisplayImplementation { public void releaseTexImageFromPbuffer(ByteBuffer handle, int buffer) { throw new UnsupportedOperationException(); } - - public boolean openURL(String url) { - // Linux may as well resort to pure Java hackery, as there's no Linux native way of doing it - // right anyway. - - String[] browsers = {"mozilla", "opera", "konqueror", "nautilus", "galeon", "netscape"}; - - for (int i = 0; i < browsers.length; i ++) { - try { - Runtime.getRuntime().exec(new String[] { browsers[i], url }); - return true; - } catch (IOException e) { - // Ignore - e.printStackTrace(System.err); - } - } - - // Seems to have failed - return false; - } } diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplay.java b/src/java/org/lwjgl/opengl/MacOSXDisplay.java index cd3fcb6b..b493eadd 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplay.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplay.java @@ -368,18 +368,6 @@ final class MacOSXDisplay implements DisplayImplementation { return GL11.glGetString(GL11.GL_EXTENSIONS).indexOf("GL_APPLE_pixel_buffer") != -1 ? Pbuffer.PBUFFER_SUPPORTED : 0; } - /* Use the com.apple.eio.FileManager Mac OS X extension to show the given URL */ - public boolean openURL(String url) { - try { - Class com_apple_eio_FileManager = Class.forName("com.apple.eio.FileManager"); - Method openURL_method = com_apple_eio_FileManager.getMethod("openURL", new Class[]{String.class}); - openURL_method.invoke(null, new Object[]{url}); - return true; - } catch (Exception e) { - return false; - } - } - /** * This class captures com.apple.eawt.ApplicationEvents through reflection * to enable compilation on other platforms than Mac OS X diff --git a/src/java/org/lwjgl/opengl/Win32Display.java b/src/java/org/lwjgl/opengl/Win32Display.java index f737198d..cc5ea27a 100644 --- a/src/java/org/lwjgl/opengl/Win32Display.java +++ b/src/java/org/lwjgl/opengl/Win32Display.java @@ -126,11 +126,4 @@ final class Win32Display implements DisplayImplementation { public native void setPbufferAttrib(ByteBuffer handle, int attrib, int value); public native void bindTexImageToPbuffer(ByteBuffer handle, int buffer); public native void releaseTexImageFromPbuffer(ByteBuffer handle, int buffer); - - public boolean openURL(String url) { - nOpenURL(url); - return true; - } - - private native void nOpenURL(String url); } diff --git a/src/native/common/common_tools.c b/src/native/common/common_tools.c index 39953bba..5d3e86c4 100644 --- a/src/native/common/common_tools.c +++ b/src/native/common/common_tools.c @@ -45,6 +45,7 @@ #endif #include "common_tools.h" +#include "org_lwjgl_DefaultSysImplementation.h" static bool debug = false; static const char* VERSION = "0.94"; @@ -63,18 +64,20 @@ void putAttrib(attrib_list_t *list, int attrib) { list->current_index++; } -jstring getVersionString(JNIEnv *env) { +JNIEXPORT jstring JNICALL Java_org_lwjgl_DefaultSysImplementation_getNativeLibraryVersion + (JNIEnv *env, jobject ignored) { return NewStringNative(env, VERSION); } +JNIEXPORT void JNICALL Java_org_lwjgl_DefaultSysImplementation_setDebug + (JNIEnv *env, jobject ignored, jboolean enable) { + debug = enable == JNI_TRUE ? true : false; +} + bool isDebugEnabled(void) { return debug; } -void setDebugEnabled(bool enable) { - debug = enable; -} - void printfDebugJava(JNIEnv *env, const char *format, ...) { #define BUFFER_SIZE 4000 static char buffer[BUFFER_SIZE]; diff --git a/src/native/linux/org_lwjgl_Sys.c b/src/native/linux/org_lwjgl_Sys.c deleted file mode 100644 index 04524d2b..00000000 --- a/src/native/linux/org_lwjgl_Sys.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2002-2004 LWJGL Project - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * 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. - * - * * Neither the name of 'LWJGL' nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "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 THE COPYRIGHT OWNER 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. - */ - -/** - * $Id$ - * - * Linux system library. - * - * @author elias_naur - * @version $Revision$ - */ - -#include -#include -#include "org_lwjgl_Sys.h" -#include "common_tools.h" - -static long int hires_timer; // Hires timer current time - -/* - * Class: org_lwjgl_Sys - * Method: getTimerResolution - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_getTimerResolution - (JNIEnv * env, jclass clazz) -{ - // Constant on linux - return 1000000; -} - -static long queryTime(JNIEnv *env) { - struct timeval tv; - if (gettimeofday(&tv, NULL) == -1) { - printfDebugJava(env, "Could not read current time"); - } - long result = tv.tv_sec * 1000000l + tv.tv_usec; - - return result; -} - -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_setDebug(JNIEnv *env, jclass clazz, jboolean enabled) { - setDebugEnabled(enabled == JNI_TRUE ? true : false); -} - -/* - * Class: org_lwjgl_Sys - * Method: ngetTime - * Signature: ()J - */ -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_ngetTime - (JNIEnv * env, jclass clazz) -{ - hires_timer = queryTime(env); - return (jlong) hires_timer; -} - -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert(JNIEnv * env, jclass clazz, jstring title, jstring message) -{ - char * eMessageText = GetStringNativeChars(env, message); - char * cTitleBarText = GetStringNativeChars(env, title); - - printfDebugJava(env, "*** Alert ***%s\n%s\n", cTitleBarText, eMessageText); - - free(eMessageText); - free(cTitleBarText); -} - -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_getNativeLibraryVersion(JNIEnv *env, jclass clazz) { - return getVersionString(env); -} - -/* - * Class: org_lwjgl_Sys - * Method: openURL - * Signature: (Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nOpenURL - (JNIEnv * env, jclass clazz, jstring url) -{ - char * urlString = GetStringNativeChars(env, url); - printf("*** Please visit %s\n", urlString); - free(urlString); -} - - -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_nGetClipboard - (JNIEnv * env, jclass clazz) -{ - return NULL; -} diff --git a/src/native/win32/org_lwjgl_Sys.c b/src/native/win32/org_lwjgl_Sys.c index b78fc82e..78785dd8 100644 --- a/src/native/win32/org_lwjgl_Sys.c +++ b/src/native/win32/org_lwjgl_Sys.c @@ -53,28 +53,20 @@ unsigned __int64 hires_timer = 0; // Hires timer current time * Method: getTimerResolution * Signature: ()J */ -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_getTimerResolution - (JNIEnv * env, jclass clazz) +JNIEXPORT jlong JNICALL Java_org_lwjgl_Win32SysImplementation_getTimerResolution + (JNIEnv * env, jobject ignored) { QueryPerformanceFrequency((LARGE_INTEGER*) &hires_timer_freq); return (jlong) hires_timer_freq; } -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_setDebug(JNIEnv *env, jclass clazz, jboolean enabled) { - setDebugEnabled(enabled == JNI_TRUE ? true : false); -} - -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_getNativeLibraryVersion(JNIEnv *env, jclass clazz) { - return getVersionString(env); -} - /* * Class: org_lwjgl_Sys * Method: ngetTime * Signature: ()J */ -JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_ngetTime - (JNIEnv * env, jclass clazz) +JNIEXPORT jlong JNICALL Java_org_lwjgl_Win32SysImplementation_getTime + (JNIEnv * env, jobject ignored) { QueryPerformanceCounter((LARGE_INTEGER*) &hires_timer); return (jlong) hires_timer; @@ -85,8 +77,8 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_Sys_ngetTime * Method: alert * Signature: (Ljava/lang/String;Ljava/lang/String;)V */ -JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert - (JNIEnv * env, jclass clazz, jstring title, jstring message) +JNIEXPORT void JNICALL Java_org_lwjgl_Win32SysImplementation_alert + (JNIEnv * env, jobject ignored, jstring title, jstring message) { char * eMessageText = GetStringNativeChars(env, message); char * cTitleBarText = GetStringNativeChars(env, title); @@ -103,8 +95,8 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Sys_nAlert * Method: openURL * Signature: (Ljava/lang/String;)V */ -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_nOpenURL - (JNIEnv * env, jobject self, jstring url) +JNIEXPORT void JNICALL Java_org_lwjgl_Win32SysImplementation_openURL + (JNIEnv * env, jobject ignored, jstring url) { STARTUPINFO si; PROCESS_INFORMATION pi; @@ -169,8 +161,8 @@ const void * getClipboard(int type) } -JNIEXPORT jstring JNICALL Java_org_lwjgl_Sys_nGetClipboard - (JNIEnv * env, jclass clazz) +JNIEXPORT jstring JNICALL Java_org_lwjgl_Win32SysImplementation_getClipboard + (JNIEnv * env, jobject ignored) { // Check to see if there's text available in the clipboard BOOL textAvailable = IsClipboardFormatAvailable(CF_TEXT);