From: <eli...@us...> - 2007-05-31 08:52:56
|
Revision: 2834 http://svn.sourceforge.net/java-game-lib/?rev=2834&view=rev Author: elias_naur Date: 2007-05-31 01:52:55 -0700 (Thu, 31 May 2007) Log Message: ----------- Windows: Fix repeated character codes Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2007-05-30 20:33:40 UTC (rev 2833) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2007-05-31 08:52:55 UTC (rev 2834) @@ -599,10 +599,9 @@ private void handleChar(long wParam, long lParam, long millis) { byte previous_state = (byte)((lParam >>> 30) & 0x1); byte state = (byte)(1 - ((lParam >>> 31) & 0x1)); - if (state == previous_state) - return; // Auto-repeat message + boolean repeat = state == previous_state; if (keyboard != null) - keyboard.handleChar((int)(wParam & 0xFF), millis); + keyboard.handleChar((int)(wParam & 0xFF), millis, repeat); } private void handleKeyButton(long wParam, long lParam, long millis) { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java 2007-05-30 20:33:40 UTC (rev 2833) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java 2007-05-31 08:52:55 UTC (rev 2834) @@ -161,12 +161,13 @@ retained_millis = millis; retained_char = 0; retained_repeat = repeat; -// translate(virt_key, event_state, millis*1000000); } - public void handleChar(int event_char, long millis) { + public void handleChar(int event_char, long millis, boolean repeat) { + if (has_retained_event && retained_char != 0) + flushRetained(); if (!has_retained_event) { - putEvent(0, (byte)0, event_char, millis, false); + putEvent(0, (byte)0, event_char, millis, repeat); } else retained_char = event_char; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2007-07-29 19:43:39
|
Revision: 2862 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2862&view=rev Author: elias_naur Date: 2007-07-29 12:43:36 -0700 (Sun, 29 Jul 2007) Log Message: ----------- Windows: Mapped VK_SNAPSHOT to KEY_SYSRQ and added workaround to a windows bug where WM_KEYDOWN is never generated for VK_SNAPSHOT Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeycodes.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2007-07-29 19:24:17 UTC (rev 2861) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2007-07-29 19:43:36 UTC (rev 2862) @@ -706,7 +706,17 @@ return true; case WM_SYSKEYDOWN: /* Fall through */ case WM_SYSKEYUP: /* Fall through */ - case WM_KEYUP: /* Fall through */ + case WM_KEYUP: + // SysRq apparently only generates WM_KEYUP, so we'll fake a WM_KEYDOWN + if (wParam == WindowsKeycodes.VK_SNAPSHOT && keyboard != null && + !keyboard.isKeyDown(org.lwjgl.input.Keyboard.KEY_SYSRQ)) { + // Set key state to pressed + long fake_lparam = lParam & ~(1 << 31); + // Set key previous state to released + fake_lparam = fake_lparam & ~(1 << 30); + handleKeyButton(wParam, fake_lparam, millis); + } + /* Fall through */ case WM_KEYDOWN: handleKeyButton(wParam, lParam, millis); return false; Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java 2007-07-29 19:24:17 UTC (rev 2861) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeyboard.java 2007-07-29 19:43:36 UTC (rev 2862) @@ -74,6 +74,10 @@ public void destroy() { } + boolean isKeyDown(int lwjgl_keycode) { + return key_down_buffer[lwjgl_keycode] == 1; + } + public void grab(boolean grab) { if(grab) { if (!grabbed) { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeycodes.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeycodes.java 2007-07-29 19:24:17 UTC (rev 2861) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsKeycodes.java 2007-07-29 19:43:36 UTC (rev 2862) @@ -534,7 +534,7 @@ return Keyboard.KEY_NUMPADCOMMA; case VK_DIVIDE: return Keyboard.KEY_DIVIDE; - case VK_PRINT: + case VK_SNAPSHOT: return Keyboard.KEY_SYSRQ; case VK_RMENU: return Keyboard.KEY_RMENU; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-01-19 08:49:13
|
Revision: 2932 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2932&view=rev Author: elias_naur Date: 2008-01-19 00:49:10 -0800 (Sat, 19 Jan 2008) Log Message: ----------- Removed OS message polls from mouse and keyboard poll() and read(), since they can be quite expensive Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2008-01-18 10:29:01 UTC (rev 2931) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxDisplay.java 2008-01-19 08:49:10 UTC (rev 2932) @@ -693,7 +693,6 @@ } public void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons) { - update(); lockAWT(); try { mouse.poll(grab, coord_buffer, buttons); @@ -703,7 +702,6 @@ } public void readMouse(ByteBuffer buffer) { - update(); lockAWT(); try { mouse.read(buffer); @@ -865,7 +863,6 @@ } public void pollKeyboard(ByteBuffer keyDownBuffer) { - update(); lockAWT(); try { keyboard.poll(keyDownBuffer); @@ -875,7 +872,6 @@ } public void readKeyboard(ByteBuffer buffer) { - update(); lockAWT(); try { keyboard.read(buffer); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-01-18 10:29:01 UTC (rev 2931) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-01-19 08:49:10 UTC (rev 2932) @@ -354,7 +354,7 @@ /** * WORKAROUND: * Making the context current (redundantly) when the window - * is maximized helps some gfx recover from fullscreen + * is maximized helps some gfx cards recover from fullscreen */ try { if (Display.getDrawable().getContext() != null && Display.getDrawable().getContext().isCurrent()) @@ -393,12 +393,10 @@ } public void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons) { - update(); mouse.poll(coord_buffer, buttons); } public void readMouse(ByteBuffer buffer) { - update(); mouse.read(buffer); } @@ -481,12 +479,10 @@ } public void pollKeyboard(ByteBuffer keyDownBuffer) { - update(); keyboard.poll(keyDownBuffer); } public void readKeyboard(ByteBuffer buffer) { - update(); keyboard.read(buffer); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-01-21 20:28:55
|
Revision: 2938 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2938&view=rev Author: elias_naur Date: 2008-01-21 12:28:53 -0800 (Mon, 21 Jan 2008) Log Message: ----------- Moved translation of ogl error codes from GLU to Util, to prepare for glu to be moved to lwjgl_utils Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/Util.java trunk/LWJGL/src/java/org/lwjgl/opengl/glu/GLU.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/Util.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/Util.java 2008-01-21 20:21:21 UTC (rev 2937) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/Util.java 2008-01-21 20:28:53 UTC (rev 2938) @@ -43,11 +43,43 @@ /** No c'tor */ private Util() { } - - public static void checkGLError() { + + /** + * Throws OpenGLException if GL11.glGetError() returns anything else than GL11.GL_NO_ERROR + * + */ + public static void checkGLError() throws OpenGLException { int err = GL11.glGetError(); if ( err != GL11.GL_NO_ERROR ) { throw new OpenGLException(err); } } + + /** + * Translate a GL error code to a String describing the error + */ + public static String translateGLErrorString(int error_code) { + switch (error_code) { + case GL11.GL_NO_ERROR: + return "No error"; + case GL11.GL_INVALID_ENUM: + return "Invalid enum"; + case GL11.GL_INVALID_VALUE: + return "Invalid value"; + case GL11.GL_INVALID_OPERATION: + return "Invalid operation"; + case GL11.GL_STACK_OVERFLOW: + return "Stack overflow"; + case GL11.GL_STACK_UNDERFLOW: + return "Stack underflow"; + case GL11.GL_OUT_OF_MEMORY: + return "Out of memory"; + case ARBImaging.GL_TABLE_TOO_LARGE: + return "Table too large"; + case EXTFramebufferObject.GL_INVALID_FRAMEBUFFER_OPERATION_EXT: + return "Invalid framebuffer operation"; + default: + return null; + } + } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/glu/GLU.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/glu/GLU.java 2008-01-21 20:21:21 UTC (rev 2937) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/glu/GLU.java 2008-01-21 20:28:53 UTC (rev 2938) @@ -36,6 +36,7 @@ import org.lwjgl.opengl.ARBImaging; import org.lwjgl.opengl.EXTFramebufferObject; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.Util; /** * GLU.java @@ -411,24 +412,6 @@ public static String gluErrorString(int error_code) { switch (error_code) { - case GL11.GL_NO_ERROR: - return "No error"; - case GL11.GL_INVALID_ENUM: - return "Invalid enum"; - case GL11.GL_INVALID_VALUE: - return "Invalid value"; - case GL11.GL_INVALID_OPERATION: - return "Invalid operation"; - case GL11.GL_STACK_OVERFLOW: - return "Stack overflow"; - case GL11.GL_STACK_UNDERFLOW: - return "Stack underflow"; - case GL11.GL_OUT_OF_MEMORY: - return "Out of memory"; - case ARBImaging.GL_TABLE_TOO_LARGE: - return "Table too large"; - case EXTFramebufferObject.GL_INVALID_FRAMEBUFFER_OPERATION_EXT: - return "Invalid framebuffer operation"; case GLU.GLU_INVALID_ENUM: return "Invalid enum (glu)"; case GLU.GLU_INVALID_VALUE: @@ -436,7 +419,7 @@ case GLU.GLU_OUT_OF_MEMORY: return "Out of memory (glu)"; default: - return null; + return Util.translateGLErrorString(error_code); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-04-06 14:39:35
|
Revision: 2968 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2968&view=rev Author: elias_naur Date: 2008-04-06 07:39:32 -0700 (Sun, 06 Apr 2008) Log Message: ----------- Let otherwise generic AWT utilities classes take a Component instead of the more specific AWTGLCanvas Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java trunk/LWJGL/src/java/org/lwjgl/opengl/AWTSurfaceLock.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTGLCanvasPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AWTCanvasImplementation.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -33,6 +33,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; +import java.awt.Component; import org.lwjgl.LWJGLException; @@ -46,7 +47,7 @@ /** * Return an opaque handle to the canvas peer information required to create a context from it. */ - PeerInfo createPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format) throws LWJGLException; + PeerInfo createPeerInfo(Component component, PixelFormat pixel_format) throws LWJGLException; /** * Find a proper GraphicsConfiguration from the given GraphicsDevice and PixelFormat. Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AWTGLCanvas.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -89,7 +89,7 @@ implementation = createImplementation(); } - private static AWTCanvasImplementation createImplementation() { + static AWTCanvasImplementation createImplementation() { switch (LWJGLUtil.getPlatform()) { case LWJGLUtil.PLATFORM_LINUX: return new LinuxCanvasImplementation(); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/AWTSurfaceLock.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/AWTSurfaceLock.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/AWTSurfaceLock.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -31,7 +31,7 @@ */ package org.lwjgl.opengl; -import java.awt.Canvas; +import java.awt.Component; import java.nio.ByteBuffer; import java.security.AccessController; import java.security.PrivilegedActionException; @@ -60,8 +60,8 @@ private static native ByteBuffer createHandle(); - public ByteBuffer lockAndGetHandle(Canvas canvas) throws LWJGLException { - while (!privilegedLockAndInitHandle(canvas)) { + public ByteBuffer lockAndGetHandle(Component component) throws LWJGLException { + while (!privilegedLockAndInitHandle(component)) { LWJGLUtil.log("Could not get drawing surface info, retrying..."); try { Thread.sleep(WAIT_DELAY_MILLIS); @@ -73,20 +73,20 @@ return lock_buffer; } - private boolean privilegedLockAndInitHandle(final Canvas canvas) throws LWJGLException { + private boolean privilegedLockAndInitHandle(final Component component) throws LWJGLException { // Workaround for Sun JDK bug 4796548 which still exists in java for OS X // We need to elevate privileges because of an AWT bug. Please see // http://192.18.37.44/forums/index.php?topic=10572 for a discussion. // It is only needed on first call, so we avoid it on all subsequent calls // due to performance. if (firstLockSucceeded) - return lockAndInitHandle(lock_buffer, canvas); + return lockAndInitHandle(lock_buffer, component); else try { final Object result = AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws LWJGLException { - return Boolean.valueOf(lockAndInitHandle(lock_buffer, canvas)); + return Boolean.valueOf(lockAndInitHandle(lock_buffer, component)); } }); firstLockSucceeded = ((Boolean) result).booleanValue(); @@ -96,7 +96,7 @@ } } - private static native boolean lockAndInitHandle(ByteBuffer lock_buffer, Canvas canvas) throws LWJGLException; + private static native boolean lockAndInitHandle(ByteBuffer lock_buffer, Component component) throws LWJGLException; protected void unlock() throws LWJGLException { nUnlock(lock_buffer); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTGLCanvasPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTGLCanvasPeerInfo.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxAWTGLCanvasPeerInfo.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -35,6 +35,7 @@ import org.lwjgl.LWJGLException; import org.lwjgl.LWJGLUtil; +import java.awt.Component; /** * @@ -43,16 +44,16 @@ * $Id$ */ final class LinuxAWTGLCanvasPeerInfo extends LinuxPeerInfo { - private final AWTGLCanvas canvas; + private final Component component; private final AWTSurfaceLock awt_surface = new AWTSurfaceLock(); private int screen = -1; - public LinuxAWTGLCanvasPeerInfo(AWTGLCanvas canvas) { - this.canvas = canvas; + public LinuxAWTGLCanvasPeerInfo(Component component) { + this.component = component; } protected void doLockAndInitHandle() throws LWJGLException { - ByteBuffer surface_handle = awt_surface.lockAndGetHandle(canvas); + ByteBuffer surface_handle = awt_surface.lockAndGetHandle(component); if (screen == -1) { try { screen = getScreenFromSurfaceInfo(surface_handle); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/LinuxCanvasImplementation.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -33,6 +33,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; +import java.awt.Component; import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedExceptionAction; @@ -75,8 +76,8 @@ } } - public PeerInfo createPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format) throws LWJGLException { - return new LinuxAWTGLCanvasPeerInfo(canvas); + public PeerInfo createPeerInfo(Component component, PixelFormat pixel_format) throws LWJGLException { + return new LinuxAWTGLCanvasPeerInfo(component); } /** Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXAWTGLCanvasPeerInfo.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -33,6 +33,8 @@ import org.lwjgl.LWJGLException; +import java.awt.Component; + /** * * @author elias_naur <eli...@us...> @@ -40,14 +42,14 @@ * $Id$ */ final class MacOSXAWTGLCanvasPeerInfo extends MacOSXCanvasPeerInfo { - private final AWTGLCanvas canvas; + private final Component component; - public MacOSXAWTGLCanvasPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format, boolean support_pbuffer) throws LWJGLException { + public MacOSXAWTGLCanvasPeerInfo(Component component, PixelFormat pixel_format, boolean support_pbuffer) throws LWJGLException { super(pixel_format, support_pbuffer); - this.canvas = canvas; + this.component = component; } protected void doLockAndInitHandle() throws LWJGLException { - initHandle(canvas); + initHandle(component); } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -33,6 +33,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; +import java.awt.Component; import org.lwjgl.LWJGLException; @@ -43,11 +44,11 @@ * $Id$ */ final class MacOSXCanvasImplementation implements AWTCanvasImplementation { - public PeerInfo createPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format) throws LWJGLException { + public PeerInfo createPeerInfo(Component component, PixelFormat pixel_format) throws LWJGLException { try { - return new MacOSXAWTGLCanvasPeerInfo(canvas, pixel_format, true); + return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, true); } catch (LWJGLException e) { - return new MacOSXAWTGLCanvasPeerInfo(canvas, pixel_format, false); + return new MacOSXAWTGLCanvasPeerInfo(component, pixel_format, false); } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasPeerInfo.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -31,7 +31,7 @@ */ package org.lwjgl.opengl; -import java.awt.Canvas; +import java.awt.Component; import java.nio.ByteBuffer; import org.lwjgl.LWJGLException; @@ -49,8 +49,8 @@ super(pixel_format, true, true, support_pbuffer, true); } - protected void initHandle(Canvas canvas) throws LWJGLException { - nInitHandle(awt_surface.lockAndGetHandle(canvas), getHandle()); + protected void initHandle(Component component) throws LWJGLException { + nInitHandle(awt_surface.lockAndGetHandle(component), getHandle()); } private static native void nInitHandle(ByteBuffer surface_buffer, ByteBuffer peer_info_handle) throws LWJGLException; Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -35,6 +35,8 @@ import org.lwjgl.LWJGLException; +import java.awt.Component; + /** * * @author elias_naur <eli...@us...> @@ -42,21 +44,21 @@ * $Id$ */ final class WindowsAWTGLCanvasPeerInfo extends WindowsPeerInfo { - private final AWTGLCanvas canvas; + private final Component component; private final AWTSurfaceLock awt_surface = new AWTSurfaceLock(); private final PixelFormat pixel_format; private boolean has_pixel_format= false; - public WindowsAWTGLCanvasPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format) { - this.canvas = canvas; + public WindowsAWTGLCanvasPeerInfo(Component component, PixelFormat pixel_format) { + this.component = component; this.pixel_format = pixel_format; } protected void doLockAndInitHandle() throws LWJGLException { - nInitHandle(awt_surface.lockAndGetHandle(canvas), getHandle()); - if (!has_pixel_format) { + nInitHandle(awt_surface.lockAndGetHandle(component), getHandle()); + if (!has_pixel_format && pixel_format != null) { // If we haven't applied a pixel format yet, do it now - choosePixelFormat(canvas.getX(), canvas.getY(), pixel_format, null, true, true, false, true); + choosePixelFormat(component.getX(), component.getY(), pixel_format, null, true, true, false, true); has_pixel_format = true; } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java 2008-04-01 20:45:24 UTC (rev 2967) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsCanvasImplementation.java 2008-04-06 14:39:32 UTC (rev 2968) @@ -34,6 +34,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.Toolkit; +import java.awt.Component; import java.security.PrivilegedAction; import java.security.AccessController; @@ -69,8 +70,8 @@ return new WindowsAWTInput(canvas); } - public PeerInfo createPeerInfo(AWTGLCanvas canvas, PixelFormat pixel_format) throws LWJGLException { - return new WindowsAWTGLCanvasPeerInfo(canvas, pixel_format); + public PeerInfo createPeerInfo(Component component, PixelFormat pixel_format) throws LWJGLException { + return new WindowsAWTGLCanvasPeerInfo(component, pixel_format); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-04-07 13:34:22
|
Revision: 2977 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=2977&view=rev Author: elias_naur Date: 2008-04-07 06:34:20 -0700 (Mon, 07 Apr 2008) Log Message: ----------- Mac OS X: Split canvas listener from MacOSXGLCanvas Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXFrame.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java Added Paths: ----------- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java Added: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java (rev 0) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java 2008-04-07 13:34:20 UTC (rev 2977) @@ -0,0 +1,116 @@ +/* + * 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.opengl; + +/** + * The AWT compatible Canvas for Mac OS X. + * @author elias_naur + */ + +import java.awt.Canvas; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.awt.event.HierarchyEvent; +import java.awt.event.HierarchyListener; + +final class MacOSXCanvasListener implements ComponentListener, HierarchyListener { + private final Canvas canvas; + private int width; + private int height; + private boolean context_update; + + public MacOSXCanvasListener(Canvas canvas) { + this.canvas = canvas; +// ((MacOSXDisplay)Display.getImplementation()).setView(this); + } + + public void enableListeners() { + canvas.addComponentListener(this); + canvas.addHierarchyListener(this); + setUpdate(); + } + + public void disableListeners() { + canvas.removeComponentListener(this); + canvas.removeHierarchyListener(this); + } + + public boolean syncShouldUpdateContext() { + boolean should_update; + synchronized ( this ) { + should_update = context_update; + context_update = false; + } + return should_update; + } + + private synchronized void setUpdate() { + synchronized ( this ) { + width = canvas.getWidth(); + height = canvas.getHeight(); + context_update = true; + } + } + + public int syncGetWidth() { + synchronized ( this ) { + return width; + } + } + + public int syncGetHeight() { + synchronized ( this ) { + return height; + } + } + + public void componentShown(ComponentEvent e) { + } + + public void componentHidden(ComponentEvent e) { + } + + public void componentResized(ComponentEvent e) { + setUpdate(); + } + + public void componentMoved(ComponentEvent e) { + setUpdate(); + } + + public void hierarchyChanged(HierarchyEvent e) { + setUpdate(); + } +} Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-07 13:01:52 UTC (rev 2976) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-07 13:34:20 UTC (rev 2977) @@ -61,6 +61,7 @@ private static final int PBUFFER_HANDLE_SIZE = 24; private static final int GAMMA_LENGTH = 256; + private MacOSXCanvasListener canvas_listener; private MacOSXFrame frame; private Robot robot; private MacOSXMouseEventQueue mouse_queue; @@ -79,6 +80,8 @@ close_requested = false; try { frame = new MacOSXFrame(mode, requested_mode, fullscreen, x, y); + canvas_listener = new MacOSXCanvasListener(frame.getCanvas()); + canvas_listener.enableListeners(); robot = AWTUtil.createRobot(frame); } catch (LWJGLException e) { destroyWindow(); @@ -93,6 +96,10 @@ } public void destroyWindow() { + if (canvas_listener != null) { + canvas_listener.disableListeners(); + canvas_listener = null; + } if (frame != null) { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { @@ -216,7 +223,7 @@ private final static IntBuffer current_viewport = BufferUtils.createIntBuffer(16); public void update() { - boolean should_update = frame.getCanvas().syncShouldUpdateContext(); + boolean should_update = canvas_listener.syncShouldUpdateContext(); /* * Workaround for the "white screen in fullscreen mode" problem * Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXFrame.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXFrame.java 2008-04-07 13:01:52 UTC (rev 2976) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXFrame.java 2008-04-07 13:34:20 UTC (rev 2977) @@ -101,7 +101,6 @@ setVisible(true); requestFocus(); canvas.requestFocus(); - canvas.initializeCanvas(); updateBounds(); } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java 2008-04-07 13:01:52 UTC (rev 2976) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXGLCanvas.java 2008-04-07 13:34:20 UTC (rev 2977) @@ -45,13 +45,10 @@ import java.awt.event.HierarchyEvent; import java.awt.event.HierarchyListener; -final class MacOSXGLCanvas extends Canvas implements ComponentListener, HierarchyListener { +final class MacOSXGLCanvas extends Canvas { private static final long serialVersionUID = 6916664741667434870L; - private int width; - private int height; - private boolean context_update; private boolean canvas_painted; private boolean dirty; @@ -71,12 +68,6 @@ */ public void initializeCanvas() { setFocusTraversalKeysEnabled(false); - /* Input methods are not enabled in fullscreen anyway, so disable always */ - enableInputMethods(false); - addComponentListener(this); - addHierarchyListener(this); -// ((MacOSXDisplay)Display.getImplementation()).setView(this); - setUpdate(); } public boolean syncCanvasPainted() { @@ -96,76 +87,4 @@ } return result; } - - public boolean syncShouldUpdateContext() { - boolean should_update; - synchronized ( this ) { - should_update = context_update; - context_update = false; - } - return should_update; - } - - private synchronized void setUpdate() { - synchronized ( this ) { - width = getWidth(); - height = getHeight(); - context_update = true; - } - } - - public int syncGetWidth() { - synchronized ( this ) { - return width; - } - } - - public int syncGetHeight() { - synchronized ( this ) { - return height; - } - } - - public void componentShown(ComponentEvent e) { - } - - public void componentHidden(ComponentEvent e) { - } - - public void componentResized(ComponentEvent e) { - setUpdate(); - } - - public void componentMoved(ComponentEvent e) { - setUpdate(); - } - - public void setLocation(int x, int y) { - super.setLocation(x, y); - setUpdate(); - } - - public void setLocation(Point p) { - super.setLocation(p); - setUpdate(); - } - - public void setSize(Dimension d) { - super.setSize(d); - setUpdate(); - } - - public void setSize(int width, int height) { - super.setSize(width, height); - setUpdate(); - } - - public void setBounds(int x, int y, int width, int height) { - super.setBounds(x, y, width, height); - setUpdate(); - } - - public void hierarchyChanged(HierarchyEvent e) { - setUpdate(); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-04-30 13:21:18
|
Revision: 3052 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3052&view=rev Author: elias_naur Date: 2008-04-30 06:16:53 -0700 (Wed, 30 Apr 2008) Log Message: ----------- Mac OS X: Fixed a hang on Display.destroy in applets Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXMouseEventQueue.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-30 12:46:54 UTC (rev 3051) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-30 13:16:53 UTC (rev 3052) @@ -327,7 +327,7 @@ public void destroyMouse() { if (mouse_queue != null) { - mouse_queue.setGrabbed(false); + MacOSXMouseEventQueue.nGrabMouse(false); mouse_queue.unregister(); } this.mouse_queue = null; Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXMouseEventQueue.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXMouseEventQueue.java 2008-04-30 12:46:54 UTC (rev 3051) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXMouseEventQueue.java 2008-04-30 13:16:53 UTC (rev 3052) @@ -107,5 +107,5 @@ private static native void nWarpCursor(int x, int y); - private static native void nGrabMouse(boolean grab); + static native void nGrabMouse(boolean grab); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-04-30 13:47:29
|
Revision: 3053 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3053&view=rev Author: elias_naur Date: 2008-04-30 06:47:26 -0700 (Wed, 30 Apr 2008) Log Message: ----------- Mac OS X: Worked around another Display.destroy hang when parented to an applet Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java 2008-04-30 13:16:53 UTC (rev 3052) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXCanvasListener.java 2008-04-30 13:47:26 UTC (rev 3053) @@ -53,18 +53,19 @@ public MacOSXCanvasListener(Canvas canvas) { this.canvas = canvas; -// ((MacOSXDisplay)Display.getImplementation()).setView(this); - } - - public void enableListeners() { canvas.addComponentListener(this); canvas.addHierarchyListener(this); setUpdate(); } public void disableListeners() { - canvas.removeComponentListener(this); - canvas.removeHierarchyListener(this); + // Mac OS X applets will hang in Display.destroy() when parented when removing the listeners directly + java.awt.EventQueue.invokeLater(new Runnable() { + public final void run() { + canvas.removeComponentListener(MacOSXCanvasListener.this); + canvas.removeHierarchyListener(MacOSXCanvasListener.this); + } + }); } public boolean syncShouldUpdateContext() { Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-30 13:16:53 UTC (rev 3052) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/MacOSXDisplay.java 2008-04-30 13:47:26 UTC (rev 3053) @@ -107,7 +107,6 @@ canvas = parent; } canvas_listener = new MacOSXCanvasListener(canvas); - canvas_listener.enableListeners(); robot = AWTUtil.createRobot(canvas); } catch (LWJGLException e) { destroyWindow(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-05-01 09:44:22
|
Revision: 3062 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3062&view=rev Author: elias_naur Date: 2008-05-01 02:44:19 -0700 (Thu, 01 May 2008) Log Message: ----------- Windows: Made WindowsPeerInfo.choosePixelFormat static and let WindowsPeerInfo.setPixelFormat be called seperately Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsPeerInfo.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java 2008-05-01 09:37:21 UTC (rev 3061) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsAWTGLCanvasPeerInfo.java 2008-05-01 09:44:19 UTC (rev 3062) @@ -58,7 +58,8 @@ nInitHandle(awt_surface.lockAndGetHandle(component), getHandle()); if (!has_pixel_format && pixel_format != null) { // If we haven't applied a pixel format yet, do it now - choosePixelFormat(component.getX(), component.getY(), pixel_format, null, true, true, false, true); + int format = choosePixelFormat(getHdc(), component.getX(), component.getY(), pixel_format, null, true, true, false, true); + setPixelFormat(getHdc(), format); has_pixel_format = true; } } Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java 2008-05-01 09:37:21 UTC (rev 3061) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java 2008-05-01 09:44:19 UTC (rev 3062) @@ -51,7 +51,8 @@ void initDC(long hwnd, long hdc) throws LWJGLException { nInitDC(getHandle(), hwnd, hdc); - choosePixelFormat(0, 0, pixel_format, null, true, true, false, true); + int format = choosePixelFormat(hdc, 0, 0, pixel_format, null, true, true, false, true); + setPixelFormat(hdc, format); } private static native void nInitDC(ByteBuffer peer_info_handle, long hwnd, long hdc); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsPeerInfo.java 2008-05-01 09:37:21 UTC (rev 3061) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsPeerInfo.java 2008-05-01 09:44:19 UTC (rev 3062) @@ -48,12 +48,11 @@ } private static native ByteBuffer createHandle(); - protected void choosePixelFormat(int origin_x, int origin_y, PixelFormat pixel_format, IntBuffer pixel_format_caps, boolean use_hdc_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { - int pixel_format_id = nChoosePixelFormat(getHdc(), origin_x, origin_y, pixel_format, pixel_format_caps, use_hdc_bpp, support_window, support_pbuffer, double_buffered); - setPixelFormat(getHdc(), pixel_format_id); + protected static int choosePixelFormat(long hdc, int origin_x, int origin_y, PixelFormat pixel_format, IntBuffer pixel_format_caps, boolean use_hdc_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException { + return nChoosePixelFormat(hdc, origin_x, origin_y, pixel_format, pixel_format_caps, use_hdc_bpp, support_window, support_pbuffer, double_buffered); } private static native int nChoosePixelFormat(long hdc, int origin_x, int origin_y, PixelFormat pixel_format, IntBuffer pixel_format_caps, boolean use_hdc_bpp, boolean support_window, boolean support_pbuffer, boolean double_buffered) throws LWJGLException; - private static native void setPixelFormat(long hdc, int pixel_format) throws LWJGLException; + protected static native void setPixelFormat(long hdc, int pixel_format) throws LWJGLException; public final long getHdc() { return nGetHdc(getHandle()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <eli...@us...> - 2008-05-01 09:56:01
|
Revision: 3063 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3063&view=rev Author: elias_naur Date: 2008-05-01 02:55:54 -0700 (Thu, 01 May 2008) Log Message: ----------- Windows: Moved pixel format logic from WindowsDisplayPeerInfo.initDC to WindowsDisplay.createWindow Modified Paths: -------------- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-05-01 09:44:19 UTC (rev 3062) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplay.java 2008-05-01 09:55:54 UTC (rev 3063) @@ -174,6 +174,8 @@ throw new LWJGLException("Failed to get dc"); } peer_info.initDC(getHwnd(), getHdc()); + int format = WindowsPeerInfo.choosePixelFormat(getHdc(), 0, 0, peer_info.getPixelFormat(), null, true, true, false, true); + WindowsPeerInfo.setPixelFormat(getHdc(), format); showWindow(getHwnd(), SW_SHOWDEFAULT); if (parent == null) { setForegroundWindow(getHwnd()); Modified: trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java =================================================================== --- trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java 2008-05-01 09:44:19 UTC (rev 3062) +++ trunk/LWJGL/src/java/org/lwjgl/opengl/WindowsDisplayPeerInfo.java 2008-05-01 09:55:54 UTC (rev 3063) @@ -49,10 +49,12 @@ GLContext.loadOpenGLLibrary(); } + final PixelFormat getPixelFormat() { + return pixel_format; + } + void initDC(long hwnd, long hdc) throws LWJGLException { nInitDC(getHandle(), hwnd, hdc); - int format = choosePixelFormat(hdc, 0, 0, pixel_format, null, true, true, false, true); - setPixelFormat(hdc, format); } private static native void nInitDC(ByteBuffer peer_info_handle, long hwnd, long hdc); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |