Cleaned up Mouse and Keyboard now that buffering and translation are always enabled

This commit is contained in:
Elias Naur 2005-01-18 16:42:31 +00:00
parent 250a87767f
commit f4180a214d
11 changed files with 22 additions and 159 deletions

View File

@ -247,9 +247,6 @@ public class Keyboard {
*/ */
private static IntBuffer readBuffer; private static IntBuffer readBuffer;
/** True if translation is enabled */
private static boolean translationEnabled;
/** The current keyboard character being examined */ /** The current keyboard character being examined */
private static char eventCharacter; private static char eventCharacter;
@ -293,8 +290,8 @@ public class Keyboard {
return; return;
Display.getImplementation().createKeyboard(); Display.getImplementation().createKeyboard();
created = true; created = true;
enableBuffer(); readBuffer = BufferUtils.createIntBuffer(EVENT_SIZE*BUFFER_SIZE);
enableTranslation(); readBuffer.limit(0);
} }
/** /**
@ -337,8 +334,7 @@ public class Keyboard {
if (!created) if (!created)
throw new IllegalStateException("Keyboard must be created before you can poll the device"); throw new IllegalStateException("Keyboard must be created before you can poll the device");
Display.getImplementation().pollKeyboard(keyDownBuffer); Display.getImplementation().pollKeyboard(keyDownBuffer);
if (readBuffer != null) read();
read();
} }
private static void read() { private static void read() {
@ -348,30 +344,6 @@ public class Keyboard {
readBuffer.flip(); readBuffer.flip();
} }
/**
* Enable keyboard translation. Must be called after the keyboard is created,
* and keyboard buffering must be enabled.
*/
private static void enableTranslation() throws LWJGLException {
if (!created)
throw new IllegalStateException("Keyboard must be created before you can read events");
if (readBuffer == null)
throw new IllegalStateException("Event buffering must be enabled before you can read events");
Display.getImplementation().enableTranslation();
translationEnabled = true;
}
/**
* Enable keyboard buffering. Must be called after the keyboard is created.
*/
private static void enableBuffer() throws LWJGLException {
if (!created)
throw new IllegalStateException("Keyboard must be created before you can enable buffering");
readBuffer = BufferUtils.createIntBuffer(EVENT_SIZE*BUFFER_SIZE);
readBuffer.limit(0);
Display.getImplementation().enableKeyboardBuffer();
}
/** /**
* Checks to see if a key is down. * Checks to see if a key is down.
* @param key Keycode to check * @param key Keycode to check
@ -440,8 +412,6 @@ public class Keyboard {
public static boolean next() { public static boolean next() {
if (!created) if (!created)
throw new IllegalStateException("Keyboard must be created before you can read events"); throw new IllegalStateException("Keyboard must be created before you can read events");
if (readBuffer == null)
throw new IllegalStateException("Event buffering must be enabled before you can read events");
if (readBuffer.hasRemaining()) { if (readBuffer.hasRemaining()) {
eventKey = readBuffer.get() & 0xFF; eventKey = readBuffer.get() & 0xFF;

View File

@ -198,8 +198,7 @@ public class Mouse {
height = Display.getDisplayMode().getHeight(); height = Display.getDisplayMode().getHeight();
x = width / 2; x = width / 2;
y = height / 2; y = height / 2;
if (readBuffer != null) readBuffer.clear();
readBuffer.clear();
} }
/** /**
@ -225,8 +224,9 @@ public class Mouse {
coord_buffer = BufferUtils.createIntBuffer(3); coord_buffer = BufferUtils.createIntBuffer(3);
if (currentCursor != null) if (currentCursor != null)
setNativeCursor(currentCursor); setNativeCursor(currentCursor);
readBuffer = BufferUtils.createIntBuffer(EVENT_SIZE * BUFFER_SIZE);
readBuffer.limit(0);
setGrabbed(isGrabbed); setGrabbed(isGrabbed);
enableBuffer();
} }
/** /**
@ -291,8 +291,7 @@ public class Mouse {
x = Math.min(width - 1, Math.max(0, x)); x = Math.min(width - 1, Math.max(0, x));
y = Math.min(height - 1, Math.max(0, y)); y = Math.min(height - 1, Math.max(0, y));
dwheel += poll_dwheel; dwheel += poll_dwheel;
if (readBuffer != null) read();
read();
} }
private static void read() { private static void read() {
@ -340,16 +339,6 @@ public class Mouse {
return ret.intValue(); return ret.intValue();
} }
/**
* Enable mouse button buffering. Must be called after the mouse is created.
*/
private static void enableBuffer() throws LWJGLException {
if (!created) throw new IllegalStateException("Mouse must be created before you can enable buffering");
readBuffer = BufferUtils.createIntBuffer(EVENT_SIZE * BUFFER_SIZE);
readBuffer.limit(0);
Display.getImplementation().enableMouseBuffer();
}
/** /**
* Gets the next mouse event. You can query which button caused the event by using * Gets the next mouse event. You can query which button caused the event by using
* <code>getEventButton()</code> (if any). To get the state of that key, for that event, use * <code>getEventButton()</code> (if any). To get the state of that key, for that event, use
@ -361,9 +350,6 @@ public class Mouse {
*/ */
public static boolean next() { public static boolean next() {
if (!created) throw new IllegalStateException("Mouse must be created before you can read events"); if (!created) throw new IllegalStateException("Mouse must be created before you can read events");
if (readBuffer == null)
throw new IllegalStateException("Event buffering must be enabled before you can read events");
if (readBuffer.hasRemaining()) { if (readBuffer.hasRemaining()) {
eventButton = readBuffer.get(); eventButton = readBuffer.get();
eventState = readBuffer.get() != 0; eventState = readBuffer.get() != 0;

View File

@ -159,11 +159,6 @@ public interface DisplayImplementation {
*/ */
void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons); void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons);
/**
* Method to enable the buffer
*/
void enableMouseBuffer() throws LWJGLException;
/** /**
* Method to read the keyboard buffer * Method to read the keyboard buffer
* *
@ -216,16 +211,6 @@ public interface DisplayImplementation {
*/ */
int readKeyboard(IntBuffer buffer, int buffer_position); int readKeyboard(IntBuffer buffer, int buffer_position);
/**
* Method to enable the translation buffer
*/
void enableTranslation() throws LWJGLException;
/**
* Method to enable the buffer
*/
void enableKeyboardBuffer() throws LWJGLException;
int isStateKeySet(int key); int isStateKeySet(int key);
/** Native cursor handles */ /** Native cursor handles */

View File

@ -247,13 +247,6 @@ final class LinuxDisplay implements DisplayImplementation {
} }
public native void nPollMouse(IntBuffer coord_buffer, ByteBuffer buttons); public native void nPollMouse(IntBuffer coord_buffer, ByteBuffer buttons);
public void enableMouseBuffer() throws LWJGLException {
lockAWT();
nEnableMouseBuffer();
unlockAWT();
}
public native void nEnableMouseBuffer() throws LWJGLException;
public int readMouse(IntBuffer buffer, int buffer_position) { public int readMouse(IntBuffer buffer, int buffer_position) {
lockAWT(); lockAWT();
int count = nReadMouse(buffer, buffer_position); int count = nReadMouse(buffer, buffer_position);
@ -330,20 +323,6 @@ final class LinuxDisplay implements DisplayImplementation {
} }
public native int nReadKeyboard(IntBuffer buffer, int buffer_position); public native int nReadKeyboard(IntBuffer buffer, int buffer_position);
public void enableTranslation() throws LWJGLException {
lockAWT();
nEnableTranslation();
unlockAWT();
}
public native void nEnableTranslation() throws LWJGLException;
public void enableKeyboardBuffer() throws LWJGLException {
lockAWT();
nEnableKeyboardBuffer();
unlockAWT();
}
public native void nEnableKeyboardBuffer() throws LWJGLException;
public int isStateKeySet(int key) { public int isStateKeySet(int key) {
return Keyboard.STATE_UNKNOWN; return Keyboard.STATE_UNKNOWN;
} }

View File

@ -270,9 +270,6 @@ final class MacOSXDisplay implements DisplayImplementation {
mouse_queue.poll(coord_buffer, buttons_buffer); mouse_queue.poll(coord_buffer, buttons_buffer);
} }
public void enableMouseBuffer() throws LWJGLException {
}
public int readMouse(IntBuffer buffer, int buffer_position) { public int readMouse(IntBuffer buffer, int buffer_position) {
assert buffer_position == buffer.position(); assert buffer_position == buffer.position();
return mouse_queue.copyEvents(buffer); return mouse_queue.copyEvents(buffer);
@ -349,12 +346,6 @@ final class MacOSXDisplay implements DisplayImplementation {
return keyboard_queue.copyEvents(buffer); return keyboard_queue.copyEvents(buffer);
} }
public void enableTranslation() throws LWJGLException {
}
public void enableKeyboardBuffer() throws LWJGLException {
}
public int isStateKeySet(int key) { public int isStateKeySet(int key) {
return Keyboard.STATE_UNKNOWN; return Keyboard.STATE_UNKNOWN;
} }

View File

@ -79,7 +79,6 @@ final class Win32Display implements DisplayImplementation {
public native void createMouse(); public native void createMouse();
public native void destroyMouse(); public native void destroyMouse();
public native void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons); public native void pollMouse(IntBuffer coord_buffer, ByteBuffer buttons);
public native void enableMouseBuffer() throws LWJGLException;
public native int readMouse(IntBuffer buffer, int buffer_position); public native int readMouse(IntBuffer buffer, int buffer_position);
public native void grabMouse(boolean grab); public native void grabMouse(boolean grab);
public int getNativeCursorCapabilities() { public int getNativeCursorCapabilities() {
@ -95,8 +94,6 @@ final class Win32Display implements DisplayImplementation {
public native void destroyKeyboard(); public native void destroyKeyboard();
public native void pollKeyboard(ByteBuffer keyDownBuffer); public native void pollKeyboard(ByteBuffer keyDownBuffer);
public native int readKeyboard(IntBuffer buffer, int buffer_position); public native int readKeyboard(IntBuffer buffer, int buffer_position);
public native void enableTranslation() throws LWJGLException;
public native void enableKeyboardBuffer() throws LWJGLException;
public native int isStateKeySet(int key); public native int isStateKeySet(int key);
public native void nCreateCursor(ByteBuffer handle, int width, int height, int xHotspot, int yHotspot, int numImages, IntBuffer images, int images_offset, IntBuffer delays, int delays_offset) throws LWJGLException; public native void nCreateCursor(ByteBuffer handle, int width, int height, int xHotspot, int yHotspot, int numImages, IntBuffer images, int images_offset, IntBuffer delays, int delays_offset) throws LWJGLException;

View File

@ -61,8 +61,6 @@ static unsigned char key_map[KEYBOARD_SIZE];
static event_queue_t event_queue; static event_queue_t event_queue;
static bool keyboard_grabbed; static bool keyboard_grabbed;
static bool buffer_enabled;
static bool translation_enabled;
static bool created = false; static bool created = false;
// X input manager values // X input manager values
@ -151,8 +149,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nCreateKeyboard
memset(key_buf, 0, KEYBOARD_SIZE*sizeof(unsigned char)); memset(key_buf, 0, KEYBOARD_SIZE*sizeof(unsigned char));
created = true; created = true;
keyboard_grabbed = false; keyboard_grabbed = false;
translation_enabled = false;
buffer_enabled = false;
initEventQueue(&event_queue, 3); initEventQueue(&event_queue, 3);
updateKeyboardGrab(); updateKeyboardGrab();
@ -244,7 +240,7 @@ static void translateEvent(XKeyEvent *event, jint keycode, jint state) {
int num_chars, i; int num_chars, i;
jint ch; jint ch;
if (!translation_enabled || event->type == KeyRelease) { if (event->type == KeyRelease) {
putKeyboardEvent(keycode, state, 0); putKeyboardEvent(keycode, state, 0);
return; return;
} }
@ -281,8 +277,7 @@ void handleKeyEvent(XKeyEvent *event) {
unsigned char keycode = getKeycode(event); unsigned char keycode = getKeycode(event);
unsigned char state = eventState(event); unsigned char state = eventState(event);
key_buf[keycode] = state; key_buf[keycode] = state;
if (buffer_enabled) bufferEvent(event);
bufferEvent(event);
} }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nPollKeyboard(JNIEnv * env, jobject this, jobject buffer) { JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nPollKeyboard(JNIEnv * env, jobject this, jobject buffer) {
@ -297,11 +292,3 @@ JNIEXPORT int JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nReadKeyboard(JNIEnv *
int buffer_size = ((*env)->GetDirectBufferCapacity(env, buffer))/sizeof(jint) - buffer_position; int buffer_size = ((*env)->GetDirectBufferCapacity(env, buffer))/sizeof(jint) - buffer_position;
return copyEvents(&event_queue, buffer_ptr + buffer_position, buffer_size); return copyEvents(&event_queue, buffer_ptr + buffer_position, buffer_size);
} }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nEnableTranslation(JNIEnv *env, jobject this) {
translation_enabled = true;
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nEnableKeyboardBuffer(JNIEnv * env, jobject this) {
buffer_enabled = true;
}

View File

@ -69,7 +69,6 @@ static int last_x;
static int last_y; static int last_y;
static jbyte buttons[NUM_BUTTONS]; static jbyte buttons[NUM_BUTTONS];
static event_queue_t event_queue; static event_queue_t event_queue;
static bool buffer_enabled;
static Cursor blank_cursor; static Cursor blank_cursor;
static Cursor current_cursor; static Cursor current_cursor;
@ -228,7 +227,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nCreateMouse
current_cursor = None; current_cursor = None;
created = true; created = true;
pointer_grabbed = false; pointer_grabbed = false;
buffer_enabled = false;
updatePointerGrab(); updatePointerGrab();
initEventQueue(&event_queue, EVENT_SIZE); initEventQueue(&event_queue, EVENT_SIZE);
} }
@ -348,10 +346,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nPollMouse(JNIEnv * en
buttons_buffer[i] = buttons[i]; buttons_buffer[i] = buttons[i];
} }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nEnableMouseBuffer(JNIEnv *env, jobject this) {
buffer_enabled = true;
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nReadMouse(JNIEnv *env, jobject this, jobject buffer, jint buffer_position) { JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nReadMouse(JNIEnv *env, jobject this, jobject buffer, jint buffer_position) {
jint* buffer_ptr = (jint *)(*env)->GetDirectBufferAddress(env, buffer); jint* buffer_ptr = (jint *)(*env)->GetDirectBufferAddress(env, buffer);
int buffer_size = ((*env)->GetDirectBufferCapacity(env, buffer))/sizeof(jint) - buffer_position; int buffer_size = ((*env)->GetDirectBufferCapacity(env, buffer))/sizeof(jint) - buffer_position;

View File

@ -173,7 +173,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_nCreateCursor
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_destroyCursor JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_destroyCursor
(JNIEnv *env, jobject self, jobject handle_buffer) (JNIEnv *env, jobject self, jobject handle_buffer)
{ {
// HCURSOR cursor = (HCURSOR)cursor_handle; HCURSOR *cursor_handle = (HCURSOR *)(*env)->GetDirectBufferAddress(env, handle_buffer);
HCURSOR *cursor_handle = (HCURSOR *)(*env)->GetDirectBufferAddress(env, handle_buffer);
DestroyCursor(*cursor_handle); DestroyCursor(*cursor_handle);
} }

View File

@ -54,13 +54,13 @@ extern HINSTANCE dll_handle; // Handle to the LWJGL dll
static LPDIRECTINPUT lpdi = NULL; // DirectInput static LPDIRECTINPUT lpdi = NULL; // DirectInput
static LPDIRECTINPUTDEVICE lpdiKeyboard = NULL; static LPDIRECTINPUTDEVICE lpdiKeyboard = NULL;
static bool translationEnabled;
static bool useUnicode; static bool useUnicode;
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createKeyboard JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createKeyboard
(JNIEnv * env, jobject self) (JNIEnv * env, jobject self)
{ {
OSVERSIONINFO osvi;
DIPROPDWORD dipropdw; DIPROPDWORD dipropdw;
// Create input // Create input
HRESULT ret = DirectInputCreate(dll_handle, DIRECTINPUT_VERSION, &lpdi, NULL); HRESULT ret = DirectInputCreate(dll_handle, DIRECTINPUT_VERSION, &lpdi, NULL);
@ -69,7 +69,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createKeyboard
return; return;
} }
translationEnabled = false;
// Check to see if we're already initialized // Check to see if we're already initialized
if (lpdiKeyboard != NULL) { if (lpdiKeyboard != NULL) {
throwException(env, "Keyboard already created."); throwException(env, "Keyboard already created.");
@ -101,6 +100,16 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createKeyboard
if(FAILED(ret)) { if(FAILED(ret)) {
printfDebug("Failed to acquire keyboard\n"); printfDebug("Failed to acquire keyboard\n");
} }
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
useUnicode = true;
} else {
useUnicode = false;
}
}
} }
/* /*
@ -205,7 +214,7 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_readKeyboard
buf[index++] = (unsigned char) rgdod[current_di_event].dwOfs; buf[index++] = (unsigned char) rgdod[current_di_event].dwOfs;
buf[index++] = (unsigned char) rgdod[current_di_event].dwData; buf[index++] = (unsigned char) rgdod[current_di_event].dwData;
key_down = (rgdod[current_di_event].dwData & 0x80) != 0; key_down = (rgdod[current_di_event].dwData & 0x80) != 0;
if (translationEnabled && key_down) { if (key_down) {
scan_code = rgdod[current_di_event].dwOfs; scan_code = rgdod[current_di_event].dwOfs;
virt_key = MapVirtualKey(scan_code, 1); virt_key = MapVirtualKey(scan_code, 1);
if (virt_key != 0 && GetKeyboardState(state)) { if (virt_key != 0 && GetKeyboardState(state)) {
@ -270,34 +279,6 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_readKeyboard
return num_events; return num_events;
} }
/*
* Class: org_lwjgl_input_Keyboard
* Method: nEnableTranslation
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_enableTranslation
(JNIEnv *env, jobject self)
{
// We can't do translation on DOS boxes it seems so we'll have to throw a wobbler
// here:
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
useUnicode = true;
} else {
useUnicode = false;
}
translationEnabled = true;
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_enableKeyboardBuffer
(JNIEnv * env, jobject self)
{
}
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_isStateKeySet(JNIEnv *env, jobject self, jint key) JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Win32Display_isStateKeySet(JNIEnv *env, jobject self, jint key)
{ {
int state = org_lwjgl_input_Keyboard_STATE_UNKNOWN; int state = org_lwjgl_input_Keyboard_STATE_UNKNOWN;

View File

@ -72,7 +72,6 @@ static int last_x;
static int last_y; static int last_y;
static event_queue_t event_queue; static event_queue_t event_queue;
static bool buffer_enabled;
// Function prototypes (defined in the cpp file, since header file is generic across platforms // Function prototypes (defined in the cpp file, since header file is generic across platforms
BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef); BOOL CALLBACK EnumMouseObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef);
@ -178,7 +177,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createMouse(JNIEnv *en
initEventQueue(&event_queue, EVENT_SIZE); initEventQueue(&event_queue, EVENT_SIZE);
last_x = last_y = accum_dx = accum_dy = accum_dwheel = 0; last_x = last_y = accum_dx = accum_dy = accum_dwheel = 0;
buffer_enabled = false;
mouse_grabbed = false; mouse_grabbed = false;
// Create input // Create input
@ -209,10 +207,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_createMouse(JNIEnv *en
created = true; created = true;
} }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Win32Display_enableMouseBuffer(JNIEnv * env, jobject self) {
buffer_enabled = true;
}
void handleMouseScrolled(int event_dwheel) { void handleMouseScrolled(int event_dwheel) {
if(created) { if(created) {
accum_dwheel += event_dwheel; accum_dwheel += event_dwheel;