*** empty log message ***

This commit is contained in:
Elias Naur 2003-10-06 15:28:12 +00:00
parent a55e3b2ade
commit e62178a8df
2 changed files with 92 additions and 93 deletions

View File

@ -47,6 +47,29 @@
#define KEYBOARD_SIZE 256
#define KEY_EVENT_BACKLOG 40
static unsigned char key_buf[KEYBOARD_SIZE];
static unsigned char key_map[KEYBOARD_SIZE];
static void handleKey(UInt32 key_code, unsigned char state) {
if (key_code >= KEYBOARD_SIZE) {
#ifdef _DEBUG
printf("Key code too large %x\n", (unsigned int)key_code);
#endif
return;
}
lock();
unsigned char mapped_code = key_map[key_code];
unsigned char old_state = key_buf[mapped_code];
if (old_state != state) {
if (state == 1)
printf("key down, key %x\n", key_code);
else
printf("key up, key %x\n", key_code);
key_buf[mapped_code] = state;
}
unlock();
}
static pascal OSStatus doKeyDown(EventHandlerCallRef next_handler, EventRef event, void *user_data) {
UInt32 key_code;
OSStatus err = GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(key_code), NULL, &key_code);
@ -56,7 +79,7 @@ static pascal OSStatus doKeyDown(EventHandlerCallRef next_handler, EventRef even
#endif
return eventNotHandledErr;
}
printf("key down, key %d\n", key_code);
handleKey(key_code, 1);
return noErr;
}
@ -69,109 +92,85 @@ static pascal OSStatus doKeyUp(EventHandlerCallRef next_handler, EventRef event,
#endif
return eventNotHandledErr;
}
printf("key up, key %d\n", key_code);
handleKey(key_code, 0);
return noErr;
}
static void handleModifier(UInt32 modifier_bit_mask, UInt32 modifier_bit, unsigned char key_code) {
bool key_down = (modifier_bit_mask & modifier_bit) == modifier_bit;
unsigned char key_state = key_down ? 1 : 0;
handleKey(key_code, key_state);
}
static pascal OSStatus doKeyModifier(EventHandlerCallRef next_handler, EventRef event, void *user_data) {
UInt32 modifier_bits;
OSStatus err = GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, sizeof(modifier_bits), NULL, &modifier_bits);
if (err != noErr) {
#ifdef _DEBUG
printf("Could not get event key code\n");
#endif
return eventNotHandledErr;
}
handleModifier(modifier_bits, controlKey, 0x1d);
handleModifier(modifier_bits, rightControlKey, 0x9d);
handleModifier(modifier_bits, shiftKey, 0x2a);
handleModifier(modifier_bits, rightShiftKey, 0x36);
handleModifier(modifier_bits, optionKey, 0x38);
handleModifier(modifier_bits, rightOptionKey, 0xb8);
handleModifier(modifier_bits, cmdKey, 0xdb);
handleModifier(modifier_bits, alphaLock, 0x3a);
handleModifier(modifier_bits, kEventKeyModifierNumLockMask, 0x45);
//handleModifier(modifier_bits, rightCmdKey, 0xdc);
return noErr;
}
static bool registerHandler(JNIEnv* env, WindowRef win_ref, EventHandlerProcPtr func, UInt32 event_kind) {
EventTypeSpec event_type;
EventHandlerUPP handler_upp = NewEventHandlerUPP(func);
event_type.eventClass = kEventClassKeyboard;
event_type.eventKind = event_kind;
OSStatus err = InstallWindowEventHandler(win_ref, handler_upp, 1, &event_type, NULL, NULL);
DisposeEventHandlerUPP(handler_upp);
if (noErr != err) {
throwException(env, "Could not register window event handler");
return true;
}
return false;
}
bool registerKeyboardHandler(JNIEnv* env, WindowRef win_ref) {
EventTypeSpec event_types[1];
EventHandlerUPP handler_upp = NewEventHandlerUPP(doKeyUp);
event_types[0].eventClass = kEventClassKeyboard;
event_types[0].eventKind = kEventRawKeyUp;
OSStatus err = InstallWindowEventHandler(win_ref, handler_upp, 1, event_types, NULL, NULL);
DisposeEventHandlerUPP(handler_upp);
if (noErr != err) {
throwException(env, "Could not register window event handler");
return false;
}
handler_upp = NewEventHandlerUPP(doKeyDown);
event_types[0].eventClass = kEventClassKeyboard;
event_types[0].eventKind = kEventRawKeyDown;
err = InstallWindowEventHandler(win_ref, handler_upp, 1, event_types, NULL, NULL);
DisposeEventHandlerUPP(handler_upp);
if (noErr != err) {
throwException(env, "Could not register window event handler");
return false;
}
return true;
bool error = registerHandler(env, win_ref, doKeyUp, kEventRawKeyUp);
error = error || registerHandler(env, win_ref, doKeyDown, kEventRawKeyDown);
error = error || registerHandler(env, win_ref, doKeyModifier, kEventRawKeyModifiersChanged);
return !error;
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: initIDs
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs
(JNIEnv * env, jclass clazz)
{
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_initIDs(JNIEnv * env, jclass clazz) {
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nCreate
* Signature: ()Z
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate
(JNIEnv * env, jclass clazz)
{
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nCreate(JNIEnv * env, jclass clazz) {
memset(key_buf, 0, KEYBOARD_SIZE*sizeof(unsigned char));
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nDestroy
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy
(JNIEnv * env, jclass clazz)
{
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nDestroy(JNIEnv * env, jclass clazz) {
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nPoll
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nPoll
(JNIEnv * env, jclass clazz, jobject buffer)
{
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nPoll(JNIEnv * env, jclass clazz, jobject buffer) {
unsigned char *new_keyboard_buffer = (unsigned char *)env->GetDirectBufferAddress(buffer);
lock();
memcpy(new_keyboard_buffer, key_buf, KEYBOARD_SIZE*sizeof(unsigned char));
unlock();
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nRead
* Signature: (I)V
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead
(JNIEnv * env, jclass clazz)
{
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nRead(JNIEnv * env, jclass clazz) {
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nEnableTranslation
* Signature: ()I
*/
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation
(JNIEnv *env, jclass clazz)
{
JNIEXPORT void JNICALL Java_org_lwjgl_input_Keyboard_nEnableTranslation(JNIEnv *env, jclass clazz) {
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nEnableBuffer
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nEnableBuffer
(JNIEnv * env, jclass clazz)
{
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nEnableBuffer(JNIEnv * env, jclass clazz) {
}
/*
* Class: org_lwjgl_input_Keyboard
* Method: nisStateKeySet
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nisStateKeySet(JNIEnv *env, jclass clazz, jint key)
{
return org_lwjgl_input_Keyboard_STATE_UNKNOWN;
JNIEXPORT jint JNICALL Java_org_lwjgl_input_Keyboard_nisStateKeySet(JNIEnv *env, jclass clazz, jint key) {
return org_lwjgl_input_Keyboard_STATE_UNKNOWN;
}

View File

@ -107,7 +107,7 @@ static pascal OSStatus doQuit(EventHandlerCallRef next_handler, EventRef event,
return noErr;
}
static bool registerWindowHandler(JNIEnv* env, EventHandlerProcPtr func, UInt32 event_kind) {
static bool registerWindowHandler(JNIEnv* env, WindowRef win_ref, EventHandlerProcPtr func, UInt32 event_kind) {
EventTypeSpec event_type;
OSStatus err;
EventHandlerUPP handler_upp = NewEventHandlerUPP(func);
@ -124,11 +124,11 @@ static bool registerWindowHandler(JNIEnv* env, EventHandlerProcPtr func, UInt32
static bool registerEventHandlers(JNIEnv *env) {
bool error;
error = registerWindowHandler(env, doQuit, kEventWindowClose);
error = error || registerWindowHandler(env, doActivate, kEventWindowActivated);
error = error || registerWindowHandler(env, doDeactivate, kEventWindowDeactivated);
error = error || registerWindowHandler(env, doMiniaturized, kEventWindowCollapsed);
error = error || registerWindowHandler(env, doMaximize, kEventWindowExpanded);
error = registerWindowHandler(env, win_ref, doQuit, kEventWindowClose);
error = error || registerWindowHandler(env, win_ref, doActivate, kEventWindowActivated);
error = error || registerWindowHandler(env, win_ref, doDeactivate, kEventWindowDeactivated);
error = error || registerWindowHandler(env, win_ref, doMiniaturized, kEventWindowCollapsed);
error = error || registerWindowHandler(env, win_ref, doMaximize, kEventWindowExpanded);
if (error)
return false;
else
@ -143,11 +143,11 @@ static void destroyWindow(void) {
}
static void destroy(void) {
destroyLock();
aglSetCurrentContext(NULL);
aglDestroyContext(context);
destroyWindow();
extgl_Close();
destroyLock();
}
static bool createContext(JNIEnv *env, jint bpp, jint alpha, jint depth, jint stencil) {