diff --git a/src/java/org/lwjgl/opengl/AbstractAWTInput.java b/src/java/org/lwjgl/opengl/AbstractAWTInput.java index 7df5adc3..69967c41 100644 --- a/src/java/org/lwjgl/opengl/AbstractAWTInput.java +++ b/src/java/org/lwjgl/opengl/AbstractAWTInput.java @@ -37,7 +37,6 @@ import java.nio.ByteBuffer; import org.lwjgl.LWJGLException; import org.lwjgl.LWJGLUtil; -import java.awt.event.FocusListener; import java.awt.Cursor; /** @@ -49,16 +48,18 @@ import java.awt.Cursor; abstract class AbstractAWTInput implements AWTCanvasInputImplementation { private AWTGLCanvas canvas; - private volatile int current_height; - private volatile int current_width; private KeyboardEventQueue keyboard_queue; private MouseEventQueue mouse_queue; private volatile boolean grab; - protected AbstractAWTInput(AWTGLCanvas canvas) throws LWJGLException { + protected AbstractAWTInput(AWTGLCanvas canvas) { this.canvas = canvas; } + protected synchronized MouseEventQueue getMouseEventQueue() { + return mouse_queue; + } + public synchronized void grabMouse(boolean grab) { this.grab = grab; if (mouse_queue != null) @@ -83,16 +84,11 @@ abstract class AbstractAWTInput implements AWTCanvasInputImplementation { } public final int getWidth() { - return current_width; + return canvas.getWidth(); } public final int getHeight() { - return current_height; - } - - public synchronized void processInput(PeerInfo peer_info) { - current_width = canvas.getWidth(); - current_height = canvas.getHeight(); + return canvas.getHeight(); } public boolean hasWheel() { @@ -104,10 +100,14 @@ abstract class AbstractAWTInput implements AWTCanvasInputImplementation { } public void createMouse() throws LWJGLException { - mouse_queue = new MouseEventQueue(canvas); + mouse_queue = createMouseQueue(); mouse_queue.register(); } + protected MouseEventQueue createMouseQueue() { + return new MouseEventQueue(getCanvas()); + } + public void destroyMouse() { mouse_queue.unregister(); } diff --git a/src/java/org/lwjgl/opengl/LinuxAWTInput.java b/src/java/org/lwjgl/opengl/LinuxAWTInput.java index 29492401..fe655802 100644 --- a/src/java/org/lwjgl/opengl/LinuxAWTInput.java +++ b/src/java/org/lwjgl/opengl/LinuxAWTInput.java @@ -113,7 +113,6 @@ final class LinuxAWTInput extends AbstractAWTInput { } public synchronized void processInput(PeerInfo peer_info) { - super.processInput(peer_info); LinuxDisplay.lockAWT(); try { LinuxPeerInfo linux_peer_info = (LinuxPeerInfo)peer_info; diff --git a/src/java/org/lwjgl/opengl/MacOSXAWTInput.java b/src/java/org/lwjgl/opengl/MacOSXAWTInput.java new file mode 100644 index 00000000..794bf765 --- /dev/null +++ b/src/java/org/lwjgl/opengl/MacOSXAWTInput.java @@ -0,0 +1,69 @@ +/* + * 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; + +import java.nio.IntBuffer; +import java.nio.ByteBuffer; + +import org.lwjgl.LWJGLException; +import org.lwjgl.LWJGLUtil; + +/** + * + * @author elias_naur + * @version $Revision: 2586 $ + * $Id: LinuxAWTGLCanvasPeerInfo.java 2586 2006-10-20 11:51:34Z elias_naur $ + */ +final class MacOSXAWTInput extends AbstractAWTInput { + private boolean had_focus; + + MacOSXAWTInput(AWTGLCanvas canvas) { + super(canvas); + } + + protected MouseEventQueue createMouseQueue() { + return new MacOSXMouseEventQueue(getCanvas()); + } + + public synchronized void processInput(PeerInfo peer_info) { + boolean has_focus = getCanvas().isFocusOwner(); + if (!had_focus && has_focus) + ((MacOSXMouseEventQueue)getMouseEventQueue()).warpCursor(); + had_focus = has_focus; + } + + public void destroy() { + } + + public void update() { + } +} diff --git a/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java b/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java index 657fb62b..32e4d7f3 100644 --- a/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java +++ b/src/java/org/lwjgl/opengl/MacOSXCanvasImplementation.java @@ -64,6 +64,6 @@ final class MacOSXCanvasImplementation implements AWTCanvasImplementation { } public AWTCanvasInputImplementation createInput(AWTGLCanvas canvas) throws LWJGLException { - throw new UnsupportedOperationException(); + return new MacOSXAWTInput(canvas); } }