Mac OS X: Moved registering and unregistering of AWT listeners from MacOSXDisplay to the input handlers

This commit is contained in:
Elias Naur 2006-10-26 15:03:47 +00:00
parent 9e1254f6d1
commit fe1693a3c9
3 changed files with 43 additions and 25 deletions

View File

@ -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) {

View File

@ -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;
} }

View File

@ -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() {