diff --git a/src/macosx.cpp b/src/macosx.cpp index d60a984..8d6e8c5 100644 --- a/src/macosx.cpp +++ b/src/macosx.cpp @@ -545,346 +545,6 @@ int main(int argc, char** argv) exit(0); } -//This should probably be moved into oa_input -unsigned char TranslateKey(int keyCode) -{ - switch (keyCode) - { - case XK_BackSpace: - return OpenArena::KEY_BACK; - case XK_Tab: - return OpenArena::KEY_TAB; - case XK_Return: - return OpenArena::KEY_RETURN; - case XK_Escape: - return OpenArena::KEY_ESCAPE; - case XK_Left: - return OpenArena::KEY_LEFT; - case XK_Right: - return OpenArena::KEY_RIGHT; - case XK_Up: - return OpenArena::KEY_UP; - case XK_Down: - return OpenArena::KEY_DOWN; - case XK_Home: - return OpenArena::KEY_HOME; - case XK_End: - return OpenArena::KEY_END; - case XK_Prior: - return OpenArena::KEY_PRIOR; - case XK_Next: - return OpenArena::KEY_NEXT; - case XK_Num_Lock: - return OpenArena::KEY_NUMLOCK; - case XK_KP_Enter: - return OpenArena::KEY_RETURN; - case XK_KP_Home: - return OpenArena::KEY_HOME; - case XK_KP_End: - return OpenArena::KEY_END; - case XK_KP_Prior: - return OpenArena::KEY_PRIOR; - case XK_KP_Next: - return OpenArena::KEY_NEXT; - case XK_KP_0: - return OpenArena::KEY_NUMPAD0; - case XK_KP_1: - return OpenArena::KEY_NUMPAD1; - case XK_KP_2: - return OpenArena::KEY_NUMPAD2; - case XK_KP_3: - return OpenArena::KEY_NUMPAD3; - case XK_KP_4: - return OpenArena::KEY_NUMPAD4; - case XK_KP_5: - return OpenArena::KEY_NUMPAD5; - case XK_KP_6: - return OpenArena::KEY_NUMPAD6; - case XK_KP_7: - return OpenArena::KEY_NUMPAD7; - case XK_KP_8: - return OpenArena::KEY_NUMPAD8; - case XK_KP_9: - return OpenArena::KEY_NUMPAD9; - case XK_KP_Multiply: - return OpenArena::KEY_MULTIPLY; - case XK_KP_Add: - return OpenArena::KEY_ADD; - case XK_KP_Subtract: - return OpenArena::KEY_SUBTRACT; - case XK_KP_Divide: - return OpenArena::KEY_DIVIDE; - case XK_F1: - return OpenArena::KEY_F1; - case XK_F2: - return OpenArena::KEY_F2; - case XK_F3: - return OpenArena::KEY_F3; - case XK_F4: - return OpenArena::KEY_F4; - case XK_F5: - return OpenArena::KEY_F5; - case XK_F6: - return OpenArena::KEY_F6; - case XK_F7: - return OpenArena::KEY_F7; - case XK_F8: - return OpenArena::KEY_F8; - case XK_F9: - return OpenArena::KEY_F9; - case XK_F10: - return OpenArena::KEY_F10; - case XK_F11: - return OpenArena::KEY_F11; - case XK_F12: - return OpenArena::KEY_F12; - case XK_Shift_L: - return OpenArena::KEY_SHIFT; - case XK_Shift_R: - return OpenArena::KEY_SHIFT; - case XK_Control_L: - return OpenArena::KEY_CONTROL; - case XK_Control_R: - return OpenArena::KEY_CONTROL; - case XK_Caps_Lock: - return OpenArena::KEY_CAPITAL; - case XK_Pause: - return OpenArena::KEY_PAUSE; - case XK_KP_Space: - case XK_space: - return OpenArena::KEY_SPACE; - case XK_Insert: - return OpenArena::KEY_INSERT; - case XK_Delete: - return OpenArena::KEY_DELETE; - case XK_KP_Separator: - return OpenArena::KEY_SEPARATOR; - case XK_Scroll_Lock: - return OpenArena::KEY_SCROLL; - case XK_period: - return OpenArena::KEY_OEM_PERIOD; - case XK_plus: - return OpenArena::KEY_OEM_PLUS; - case XK_minus: - return OpenArena::KEY_OEM_MINUS; - case XK_comma: - return OpenArena::KEY_OEM_COMMA; - case XK_0: - return OpenArena::KEY_0; - case XK_1: - return OpenArena::KEY_1; - case XK_2: - return OpenArena::KEY_2; - case XK_3: - return OpenArena::KEY_3; - case XK_4: - return OpenArena::KEY_4; - case XK_5: - return OpenArena::KEY_5; - case XK_6: - return OpenArena::KEY_6; - case XK_7: - return OpenArena::KEY_7; - case XK_8: - return OpenArena::KEY_8; - case XK_9: - return OpenArena::KEY_9; - case XK_a: - case XK_A: - return OpenArena::KEY_A; - case XK_b: - case XK_B: - return OpenArena::KEY_B; - case XK_c: - case XK_C: - return OpenArena::KEY_C; - case XK_d: - case XK_D: - return OpenArena::KEY_D; - case XK_e: - case XK_E: - return OpenArena::KEY_E; - case XK_f: - case XK_F: - return OpenArena::KEY_F; - case XK_g: - case XK_G: - return OpenArena::KEY_G; - case XK_h: - case XK_H: - return OpenArena::KEY_H; - case XK_i: - case XK_I: - return OpenArena::KEY_I; - case XK_j: - case XK_J: - return OpenArena::KEY_J; - case XK_k: - case XK_K: - return OpenArena::KEY_K; - case XK_l: - case XK_L: - return OpenArena::KEY_L; - case XK_m: - case XK_M: - return OpenArena::KEY_M; - case XK_n: - case XK_N: - return OpenArena::KEY_N; - case XK_o: - case XK_O: - return OpenArena::KEY_O; - case XK_p: - case XK_P: - return OpenArena::KEY_P; - case XK_q: - case XK_Q: - return OpenArena::KEY_Q; - case XK_r: - case XK_R: - return OpenArena::KEY_R; - case XK_s: - case XK_S: - return OpenArena::KEY_S; - case XK_t: - case XK_T: - return OpenArena::KEY_T; - case XK_u: - case XK_U: - return OpenArena::KEY_U; - case XK_v: - case XK_V: - return OpenArena::KEY_V; - case XK_w: - case XK_W: - return OpenArena::KEY_W; - case XK_x: - case XK_X: - return OpenArena::KEY_X; - case XK_y: - case XK_Y: - return OpenArena::KEY_Y; - case XK_z: - case XK_Z: - return OpenArena::KEY_Z; - case XK_grave: - return OpenArena::KEY_OEM_3; - case XK_Super_L: - return OpenArena::KEY_LWIN; - case XK_Super_R: - return OpenArena::KEY_RWIN; - case XK_Menu: - return OpenArena::KEY_APPS; - case XK_bracketleft: - return OpenArena::KEY_OEM_4; - case XK_bracketright: - return OpenArena::KEY_OEM_6; - case XK_backslash: - return OpenArena::KEY_OEM_5; - case XK_semicolon: - return OpenArena::KEY_OEM_1; - case XK_apostrophe: - return OpenArena::KEY_OEM_7; - case XK_slash: - return OpenArena::KEY_OEM_2; - case XK_Alt_L: - return OpenArena::KEY_UNKNOWN; - case XK_Alt_R: - return OpenArena::KEY_UNKNOWN; - -/*These keys definately still need to be accounted for -` 96 -pause 65299 -win 65515 -apps 65383 -- 45 -= 61 -[ 91 -] 93 -\ 92 -; 59 -' 39 -' 47 -left alt 65513 -right alt 65514 - -#define KEY_LBUTTON 1 -#define KEY_RBUTTON 2 -#define KEY_MBUTTON 3 -#define KEY_LWIN 21 -#define KEY_RWIN 22 -#define KEY_APPS 23 -#define KEY_OEM_1 53 -#define KEY_OEM_2 54 -#define KEY_OEM_3 55 -#define KEY_OEM_4 56 -#define KEY_OEM_5 57 -#define KEY_OEM_6 58 -#define KEY_OEM_7 59 -*/ - default: - return OpenArena::KEY_UNKNOWN; - } -} - -unsigned char TranslateButton(int keyCode) -{ - switch(keyCode) - { - case Button1: - return OpenArena::KEY_BUTTON0; - case Button2: - return OpenArena::KEY_BUTTON2; - case Button3: - return OpenArena::KEY_BUTTON1; - case Button4: - return OpenArena::KEY_BUTTON3; - case Button5: - return OpenArena::KEY_BUTTON4; - } -} - -void HandleConsoleKeyPress(OpenArena::Keys key) -{ - //See if we need to hide the console - level.defaultPlayer[0].controls.toggleConsole.FirstPosition(); - if(key == level.defaultPlayer[0].controls.toggleConsole.Retrieve()) - { - level.showConsole = false; - } - else - { - while(level.defaultPlayer[0].controls.toggleConsole.NextPosition() && level.showConsole) - { - if(level.defaultPlayer[0].controls.toggleConsole.Retrieve() == key) - { - level.showConsole = false; - } - } - } - switch (key) - { - case OpenArena::KEY_SHIFT: - keys[OpenArena::KEY_SHIFT] = true; - break; - case OpenArena::KEY_RETURN: - level.UpdateConsole('\n'); - break; - case OpenArena::KEY_SPACE: - printf("hello"); - level.UpdateConsole(' '); - break; - case OpenArena::KEY_BACK: - level.UpdateConsole(OpenArena::KEY_BACK); - break; - default: - char ascii = OpenArena::KeyToASCII(key, keys[OpenArena::KEY_SHIFT]); - if(ascii != '\0') - { - level.UpdateConsole(ascii); - } - } -} #elif defined USE_AGL #error #elif defined USE_CGL diff --git a/src/x11.cpp b/src/x11.cpp index a8c492a..2b239db 100644 --- a/src/x11.cpp +++ b/src/x11.cpp @@ -56,63 +56,348 @@ unsigned char TranslateKey(int keyCode); void ResizeGLScene(GLsizei width, GLsizei height); void HandleConsoleKeyPress(OpenArena::Keys key); +//This should probably be moved into oa_input +unsigned char TranslateKey(int keyCode) +{ + switch (keyCode) + { + case XK_BackSpace: + return OpenArena::KEY_BACK; + case XK_Tab: + return OpenArena::KEY_TAB; + case XK_Return: + return OpenArena::KEY_RETURN; + case XK_Escape: + return OpenArena::KEY_ESCAPE; + case XK_Left: + return OpenArena::KEY_LEFT; + case XK_Right: + return OpenArena::KEY_RIGHT; + case XK_Up: + return OpenArena::KEY_UP; + case XK_Down: + return OpenArena::KEY_DOWN; + case XK_Home: + return OpenArena::KEY_HOME; + case XK_End: + return OpenArena::KEY_END; + case XK_Prior: + return OpenArena::KEY_PRIOR; + case XK_Next: + return OpenArena::KEY_NEXT; + case XK_Num_Lock: + return OpenArena::KEY_NUMLOCK; + case XK_KP_Enter: + return OpenArena::KEY_RETURN; + case XK_KP_Home: + return OpenArena::KEY_HOME; + case XK_KP_End: + return OpenArena::KEY_END; + case XK_KP_Prior: + return OpenArena::KEY_PRIOR; + case XK_KP_Next: + return OpenArena::KEY_NEXT; + case XK_KP_0: + return OpenArena::KEY_NUMPAD0; + case XK_KP_1: + return OpenArena::KEY_NUMPAD1; + case XK_KP_2: + return OpenArena::KEY_NUMPAD2; + case XK_KP_3: + return OpenArena::KEY_NUMPAD3; + case XK_KP_4: + return OpenArena::KEY_NUMPAD4; + case XK_KP_5: + return OpenArena::KEY_NUMPAD5; + case XK_KP_6: + return OpenArena::KEY_NUMPAD6; + case XK_KP_7: + return OpenArena::KEY_NUMPAD7; + case XK_KP_8: + return OpenArena::KEY_NUMPAD8; + case XK_KP_9: + return OpenArena::KEY_NUMPAD9; + case XK_KP_Multiply: + return OpenArena::KEY_MULTIPLY; + case XK_KP_Add: + return OpenArena::KEY_ADD; + case XK_KP_Subtract: + return OpenArena::KEY_SUBTRACT; + case XK_KP_Divide: + return OpenArena::KEY_DIVIDE; + case XK_F1: + return OpenArena::KEY_F1; + case XK_F2: + return OpenArena::KEY_F2; + case XK_F3: + return OpenArena::KEY_F3; + case XK_F4: + return OpenArena::KEY_F4; + case XK_F5: + return OpenArena::KEY_F5; + case XK_F6: + return OpenArena::KEY_F6; + case XK_F7: + return OpenArena::KEY_F7; + case XK_F8: + return OpenArena::KEY_F8; + case XK_F9: + return OpenArena::KEY_F9; + case XK_F10: + return OpenArena::KEY_F10; + case XK_F11: + return OpenArena::KEY_F11; + case XK_F12: + return OpenArena::KEY_F12; + case XK_Shift_L: + return OpenArena::KEY_SHIFT; + case XK_Shift_R: + return OpenArena::KEY_SHIFT; + case XK_Control_L: + return OpenArena::KEY_CONTROL; + case XK_Control_R: + return OpenArena::KEY_CONTROL; + case XK_Caps_Lock: + return OpenArena::KEY_CAPITAL; + case XK_Pause: + return OpenArena::KEY_PAUSE; + case XK_KP_Space: + case XK_space: + return OpenArena::KEY_SPACE; + case XK_Insert: + return OpenArena::KEY_INSERT; + case XK_Delete: + return OpenArena::KEY_DELETE; + case XK_KP_Separator: + return OpenArena::KEY_SEPARATOR; + case XK_Scroll_Lock: + return OpenArena::KEY_SCROLL; + case XK_period: + return OpenArena::KEY_OEM_PERIOD; + case XK_plus: + return OpenArena::KEY_OEM_PLUS; + case XK_minus: + return OpenArena::KEY_OEM_MINUS; + case XK_comma: + return OpenArena::KEY_OEM_COMMA; + case XK_0: + return OpenArena::KEY_0; + case XK_1: + return OpenArena::KEY_1; + case XK_2: + return OpenArena::KEY_2; + case XK_3: + return OpenArena::KEY_3; + case XK_4: + return OpenArena::KEY_4; + case XK_5: + return OpenArena::KEY_5; + case XK_6: + return OpenArena::KEY_6; + case XK_7: + return OpenArena::KEY_7; + case XK_8: + return OpenArena::KEY_8; + case XK_9: + return OpenArena::KEY_9; + case XK_a: + case XK_A: + return OpenArena::KEY_A; + case XK_b: + case XK_B: + return OpenArena::KEY_B; + case XK_c: + case XK_C: + return OpenArena::KEY_C; + case XK_d: + case XK_D: + return OpenArena::KEY_D; + case XK_e: + case XK_E: + return OpenArena::KEY_E; + case XK_f: + case XK_F: + return OpenArena::KEY_F; + case XK_g: + case XK_G: + return OpenArena::KEY_G; + case XK_h: + case XK_H: + return OpenArena::KEY_H; + case XK_i: + case XK_I: + return OpenArena::KEY_I; + case XK_j: + case XK_J: + return OpenArena::KEY_J; + case XK_k: + case XK_K: + return OpenArena::KEY_K; + case XK_l: + case XK_L: + return OpenArena::KEY_L; + case XK_m: + case XK_M: + return OpenArena::KEY_M; + case XK_n: + case XK_N: + return OpenArena::KEY_N; + case XK_o: + case XK_O: + return OpenArena::KEY_O; + case XK_p: + case XK_P: + return OpenArena::KEY_P; + case XK_q: + case XK_Q: + return OpenArena::KEY_Q; + case XK_r: + case XK_R: + return OpenArena::KEY_R; + case XK_s: + case XK_S: + return OpenArena::KEY_S; + case XK_t: + case XK_T: + return OpenArena::KEY_T; + case XK_u: + case XK_U: + return OpenArena::KEY_U; + case XK_v: + case XK_V: + return OpenArena::KEY_V; + case XK_w: + case XK_W: + return OpenArena::KEY_W; + case XK_x: + case XK_X: + return OpenArena::KEY_X; + case XK_y: + case XK_Y: + return OpenArena::KEY_Y; + case XK_z: + case XK_Z: + return OpenArena::KEY_Z; + case XK_grave: + return OpenArena::KEY_OEM_3; + case XK_Super_L: + return OpenArena::KEY_LWIN; + case XK_Super_R: + return OpenArena::KEY_RWIN; + case XK_Menu: + return OpenArena::KEY_APPS; + case XK_bracketleft: + return OpenArena::KEY_OEM_4; + case XK_bracketright: + return OpenArena::KEY_OEM_6; + case XK_backslash: + return OpenArena::KEY_OEM_5; + case XK_semicolon: + return OpenArena::KEY_OEM_1; + case XK_apostrophe: + return OpenArena::KEY_OEM_7; + case XK_slash: + return OpenArena::KEY_OEM_2; + case XK_Alt_L: + return OpenArena::KEY_UNKNOWN; + case XK_Alt_R: + return OpenArena::KEY_UNKNOWN; + +/*These keys definately still need to be accounted for +` 96 +pause 65299 +win 65515 +apps 65383 +- 45 += 61 +[ 91 +] 93 +\ 92 +; 59 +' 39 +' 47 +left alt 65513 +right alt 65514 + +#define KEY_LBUTTON 1 +#define KEY_RBUTTON 2 +#define KEY_MBUTTON 3 +#define KEY_LWIN 21 +#define KEY_RWIN 22 +#define KEY_APPS 23 +#define KEY_OEM_1 53 +#define KEY_OEM_2 54 +#define KEY_OEM_3 55 +#define KEY_OEM_4 56 +#define KEY_OEM_5 57 +#define KEY_OEM_6 58 +#define KEY_OEM_7 59 +*/ + default: + return OpenArena::KEY_UNKNOWN; + } +} + +unsigned char TranslateButton(int keyCode) +{ + switch(keyCode) + { + case Button1: + return OpenArena::KEY_BUTTON0; + case Button2: + return OpenArena::KEY_BUTTON2; + case Button3: + return OpenArena::KEY_BUTTON1; + case Button4: + return OpenArena::KEY_BUTTON3; + case Button5: + return OpenArena::KEY_BUTTON4; + } +} + +void HandleConsoleKeyPress(OpenArena::Keys key) +{ + //See if we need to hide the console + level.defaultPlayer[0].controls.toggleConsole.FirstPosition(); + if(key == level.defaultPlayer[0].controls.toggleConsole.Retrieve()) + { + level.showConsole = false; + } + else + { + while(level.defaultPlayer[0].controls.toggleConsole.NextPosition() && level.showConsole) + { + if(level.defaultPlayer[0].controls.toggleConsole.Retrieve() == key) + { + level.showConsole = false; + } + } + } + switch (key) + { + case OpenArena::KEY_SHIFT: + keys[OpenArena::KEY_SHIFT] = true; + break; + case OpenArena::KEY_RETURN: + level.UpdateConsole('\n'); + break; + case OpenArena::KEY_SPACE: + printf("hello"); + level.UpdateConsole(' '); + break; + case OpenArena::KEY_BACK: + level.UpdateConsole(OpenArena::KEY_BACK); + break; + default: + char ascii = OpenArena::KeyToASCII(key, keys[OpenArena::KEY_SHIFT]); + if(ascii != '\0') + { + level.UpdateConsole(ascii); + } + } +} + bool RT() { - XEvent event; - bool done = false; - - while(XPending(g_Screen.GetDisplay()) > 0) - { - //Equivalent of WNDPROC - XNextEvent(g_Screen.GetDisplay(), &event); - switch(event.type) - { - case Expose: - if(event.xexpose.count != 0) - { - break; - } - DrawGLScene(); - break; - case ConfigureNotify: - if((event.xconfigure.width != g_Screen.GetWidth()) || (event.xconfigure.height != g_Screen.GetHeight())) - { - g_Screen.SetWidth(event.xconfigure.width); - g_Screen.SetHeight(event.xconfigure.height); - ResizeGLScene(event.xconfigure.width, event.xconfigure.height); - } - break; - case ButtonPress: - keys[TranslateButton(event.xbutton.button)] = true; - break; - case ButtonRelease: - keys[TranslateButton(event.xbutton.button)] = false; - keys2[TranslateButton(event.xbutton.button)] = false; - break; - case KeyPress: - if(level.showConsole) - { - HandleConsoleKeyPress((OpenArena::Keys)TranslateKey(XLookupKeysym(&event.xkey, 0))); - } - else - { - keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = true; - } - break; - case KeyRelease: - keys[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false; - keys2[TranslateKey(XLookupKeysym(&event.xkey, 0))] = false; - break; - case ClientMessage: - if(*XGetAtomName(g_Screen.GetDisplay(), event.xclient.message_type) == *"WM_PROTOCOLS") - { - printf("Exiting sanely...\n"); - done = true; - } - break; - default: - break; - } - } //End Equivalent of WNDPROC - return done; + }