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.KeyListener;
import java.awt.Component;
import java.nio.ByteBuffer;
import org.lwjgl.input.Keyboard;
@ -51,6 +52,8 @@ final class KeyboardEventQueue extends EventQueue implements KeyListener {
/** Event scratch array */
private final ByteBuffer event = ByteBuffer.allocate(Keyboard.EVENT_SIZE);
private final Component component;
static {
KEY_MAP[KeyEvent.VK_0] = Keyboard.KEY_0;
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;
}
public KeyboardEventQueue() {
public KeyboardEventQueue(Component component) {
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) {

View File

@ -303,17 +303,13 @@ final class MacOSXDisplay implements DisplayImplementation {
public void createMouse() throws LWJGLException {
MacOSXGLCanvas canvas = frame.getCanvas();
this.mouse_queue = new MouseEventQueue(canvas.getWidth(), canvas.getHeight());
canvas.addMouseListener(mouse_queue);
canvas.addMouseMotionListener(mouse_queue);
canvas.addMouseWheelListener(mouse_queue);
this.mouse_queue = new MouseEventQueue(canvas);
mouse_queue.register();
}
public void destroyMouse() {
MacOSXGLCanvas canvas = frame.getCanvas();
canvas.removeMouseListener(mouse_queue);
canvas.removeMouseWheelListener(mouse_queue);
canvas.removeMouseMotionListener(mouse_queue);
if (mouse_queue != null)
mouse_queue.unregister();
this.mouse_queue = null;
}
@ -359,17 +355,13 @@ final class MacOSXDisplay implements DisplayImplementation {
/* Keyboard */
public void createKeyboard() throws LWJGLException {
MacOSXGLCanvas canvas = frame.getCanvas();
this.keyboard_queue = new KeyboardEventQueue();
canvas.addKeyListener(keyboard_queue);
this.keyboard_queue = new KeyboardEventQueue(canvas);
keyboard_queue.register();
}
public void destroyKeyboard() {
/*
* This line is commented out to work around AWT bug 4867453:
* http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4867453
*/
// frame.getCanvas().removeKeyListener(keyboard_queue);
if (keyboard_queue != null)
keyboard_queue.unregister();
this.keyboard_queue = null;
}

View File

@ -32,8 +32,7 @@
package org.lwjgl.opengl;
/**
* A java implementation of a LWJGL compatible Mouse event queue.
* Currently only used by the Mac OS X implementation.
* An AWT implementation of a LWJGL compatible Mouse event queue.
* @author elias_naur
*/
@ -42,6 +41,7 @@ import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.Component;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
@ -52,8 +52,7 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
private static final int WHEEL_SCALE = 120;
public static final int NUM_BUTTONS = 3;
private final int width;
private final int height;
private final Component component;
private boolean grabbed;
@ -77,13 +76,24 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
/** Buttons array */
private final byte[] buttons = new byte[NUM_BUTTONS];
MouseEventQueue(int width, int height) {
MouseEventQueue(Component component) {
super(Mouse.EVENT_SIZE);
this.width = width;
this.height = height;
this.component = component;
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) {
this.grabbed = grabbed;
resetCursorToCenter();
@ -94,7 +104,7 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo
}
private int transformY(int y) {
return height - 1 - y;
return component.getHeight() - 1 - y;
}
private void resetCursorToCenter() {