Mac OS X: Moved registering and unregistering of AWT listeners from MacOSXDisplay to the input handlers
This commit is contained in:
parent
9e1254f6d1
commit
fe1693a3c9
|
@ -39,6 +39,7 @@ package org.lwjgl.opengl;
|
||||||
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.KeyListener;
|
import java.awt.event.KeyListener;
|
||||||
|
import java.awt.Component;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.lwjgl.input.Keyboard;
|
import org.lwjgl.input.Keyboard;
|
||||||
|
@ -51,6 +52,8 @@ final class KeyboardEventQueue extends EventQueue implements KeyListener {
|
||||||
/** Event scratch array */
|
/** Event scratch array */
|
||||||
private final ByteBuffer event = ByteBuffer.allocate(Keyboard.EVENT_SIZE);
|
private final ByteBuffer event = ByteBuffer.allocate(Keyboard.EVENT_SIZE);
|
||||||
|
|
||||||
|
private final Component component;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
KEY_MAP[KeyEvent.VK_0] = Keyboard.KEY_0;
|
KEY_MAP[KeyEvent.VK_0] = Keyboard.KEY_0;
|
||||||
KEY_MAP[KeyEvent.VK_1] = Keyboard.KEY_1;
|
KEY_MAP[KeyEvent.VK_1] = Keyboard.KEY_1;
|
||||||
|
@ -238,8 +241,21 @@ final class KeyboardEventQueue extends EventQueue implements KeyListener {
|
||||||
KEY_MAP[KeyEvent.VK_Z] = Keyboard.KEY_Z;
|
KEY_MAP[KeyEvent.VK_Z] = Keyboard.KEY_Z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public KeyboardEventQueue() {
|
public KeyboardEventQueue(Component component) {
|
||||||
super(Keyboard.EVENT_SIZE);
|
super(Keyboard.EVENT_SIZE);
|
||||||
|
this.component = component;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
component.addKeyListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
/*
|
||||||
|
* This line is commented out to work around AWT bug 4867453:
|
||||||
|
* http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867453
|
||||||
|
*/
|
||||||
|
//component.removeKeyListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putKeyboardEvent(int key_code, byte state, int character, long nanos) {
|
private void putKeyboardEvent(int key_code, byte state, int character, long nanos) {
|
||||||
|
|
|
@ -303,17 +303,13 @@ final class MacOSXDisplay implements DisplayImplementation {
|
||||||
|
|
||||||
public void createMouse() throws LWJGLException {
|
public void createMouse() throws LWJGLException {
|
||||||
MacOSXGLCanvas canvas = frame.getCanvas();
|
MacOSXGLCanvas canvas = frame.getCanvas();
|
||||||
this.mouse_queue = new MouseEventQueue(canvas.getWidth(), canvas.getHeight());
|
this.mouse_queue = new MouseEventQueue(canvas);
|
||||||
canvas.addMouseListener(mouse_queue);
|
mouse_queue.register();
|
||||||
canvas.addMouseMotionListener(mouse_queue);
|
|
||||||
canvas.addMouseWheelListener(mouse_queue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroyMouse() {
|
public void destroyMouse() {
|
||||||
MacOSXGLCanvas canvas = frame.getCanvas();
|
if (mouse_queue != null)
|
||||||
canvas.removeMouseListener(mouse_queue);
|
mouse_queue.unregister();
|
||||||
canvas.removeMouseWheelListener(mouse_queue);
|
|
||||||
canvas.removeMouseMotionListener(mouse_queue);
|
|
||||||
this.mouse_queue = null;
|
this.mouse_queue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,17 +355,13 @@ final class MacOSXDisplay implements DisplayImplementation {
|
||||||
/* Keyboard */
|
/* Keyboard */
|
||||||
public void createKeyboard() throws LWJGLException {
|
public void createKeyboard() throws LWJGLException {
|
||||||
MacOSXGLCanvas canvas = frame.getCanvas();
|
MacOSXGLCanvas canvas = frame.getCanvas();
|
||||||
this.keyboard_queue = new KeyboardEventQueue();
|
this.keyboard_queue = new KeyboardEventQueue(canvas);
|
||||||
canvas.addKeyListener(keyboard_queue);
|
keyboard_queue.register();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void destroyKeyboard() {
|
public void destroyKeyboard() {
|
||||||
/*
|
if (keyboard_queue != null)
|
||||||
* This line is commented out to work around AWT bug 4867453:
|
keyboard_queue.unregister();
|
||||||
* http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867453
|
|
||||||
*/
|
|
||||||
// frame.getCanvas().removeKeyListener(keyboard_queue);
|
|
||||||
|
|
||||||
this.keyboard_queue = null;
|
this.keyboard_queue = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,7 @@
|
||||||
package org.lwjgl.opengl;
|
package org.lwjgl.opengl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A java implementation of a LWJGL compatible Mouse event queue.
|
* An AWT implementation of a LWJGL compatible Mouse event queue.
|
||||||
* Currently only used by the Mac OS X implementation.
|
|
||||||
* @author elias_naur
|
* @author elias_naur
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -42,6 +41,7 @@ import java.awt.event.MouseListener;
|
||||||
import java.awt.event.MouseMotionListener;
|
import java.awt.event.MouseMotionListener;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
import java.awt.event.MouseWheelListener;
|
import java.awt.event.MouseWheelListener;
|
||||||
|
import java.awt.Component;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.IntBuffer;
|
import java.nio.IntBuffer;
|
||||||
|
|
||||||
|
@ -52,8 +52,7 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
|
||||||
private static final int WHEEL_SCALE = 120;
|
private static final int WHEEL_SCALE = 120;
|
||||||
public static final int NUM_BUTTONS = 3;
|
public static final int NUM_BUTTONS = 3;
|
||||||
|
|
||||||
private final int width;
|
private final Component component;
|
||||||
private final int height;
|
|
||||||
|
|
||||||
private boolean grabbed;
|
private boolean grabbed;
|
||||||
|
|
||||||
|
@ -77,13 +76,24 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
|
||||||
/** Buttons array */
|
/** Buttons array */
|
||||||
private final byte[] buttons = new byte[NUM_BUTTONS];
|
private final byte[] buttons = new byte[NUM_BUTTONS];
|
||||||
|
|
||||||
MouseEventQueue(int width, int height) {
|
MouseEventQueue(Component component) {
|
||||||
super(Mouse.EVENT_SIZE);
|
super(Mouse.EVENT_SIZE);
|
||||||
this.width = width;
|
this.component = component;
|
||||||
this.height = height;
|
|
||||||
resetCursorToCenter();
|
resetCursorToCenter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
component.addMouseListener(this);
|
||||||
|
component.addMouseMotionListener(this);
|
||||||
|
component.addMouseWheelListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
component.removeMouseListener(this);
|
||||||
|
component.removeMouseMotionListener(this);
|
||||||
|
component.removeMouseWheelListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
public synchronized void setGrabbed(boolean grabbed) {
|
public synchronized void setGrabbed(boolean grabbed) {
|
||||||
this.grabbed = grabbed;
|
this.grabbed = grabbed;
|
||||||
resetCursorToCenter();
|
resetCursorToCenter();
|
||||||
|
@ -94,7 +104,7 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
|
||||||
}
|
}
|
||||||
|
|
||||||
private int transformY(int y) {
|
private int transformY(int y) {
|
||||||
return height - 1 - y;
|
return component.getHeight() - 1 - y;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetCursorToCenter() {
|
private void resetCursorToCenter() {
|
||||||
|
|
Loading…
Reference in New Issue