diff options
Diffstat (limited to 'common/keyboard.h')
-rw-r--r-- | common/keyboard.h | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/common/keyboard.h b/common/keyboard.h new file mode 100644 index 0000000000..f526b8cb8e --- /dev/null +++ b/common/keyboard.h @@ -0,0 +1,259 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef COMMON_KEYBOARD_H +#define COMMON_KEYBOARD_H + +#include "common/scummsys.h" + +namespace Common { + +enum KeyCode { + KEYCODE_INVALID = 0, + + KEYCODE_BACKSPACE = 8, + KEYCODE_TAB = 9, + KEYCODE_CLEAR = 12, + KEYCODE_RETURN = 13, + KEYCODE_PAUSE = 19, + KEYCODE_ESCAPE = 27, + KEYCODE_SPACE = 32, + KEYCODE_EXCLAIM = 33, + KEYCODE_QUOTEDBL = 34, + KEYCODE_HASH = 35, + KEYCODE_DOLLAR = 36, + KEYCODE_AMPERSAND = 38, + KEYCODE_QUOTE = 39, + KEYCODE_LEFTPAREN = 40, + KEYCODE_RIGHTPAREN = 41, + KEYCODE_ASTERISK = 42, + KEYCODE_PLUS = 43, + KEYCODE_COMMA = 44, + KEYCODE_MINUS = 45, + KEYCODE_PERIOD = 46, + KEYCODE_SLASH = 47, + KEYCODE_0 = 48, + KEYCODE_1 = 49, + KEYCODE_2 = 50, + KEYCODE_3 = 51, + KEYCODE_4 = 52, + KEYCODE_5 = 53, + KEYCODE_6 = 54, + KEYCODE_7 = 55, + KEYCODE_8 = 56, + KEYCODE_9 = 57, + KEYCODE_COLON = 58, + KEYCODE_SEMICOLON = 59, + KEYCODE_LESS = 60, + KEYCODE_EQUALS = 61, + KEYCODE_GREATER = 62, + KEYCODE_QUESTION = 63, + KEYCODE_AT = 64, + + KEYCODE_LEFTBRACKET = 91, + KEYCODE_BACKSLASH = 92, + KEYCODE_RIGHTBRACKET= 93, + KEYCODE_CARET = 94, + KEYCODE_UNDERSCORE = 95, + KEYCODE_BACKQUOTE = 96, + KEYCODE_a = 97, + KEYCODE_b = 98, + KEYCODE_c = 99, + KEYCODE_d = 100, + KEYCODE_e = 101, + KEYCODE_f = 102, + KEYCODE_g = 103, + KEYCODE_h = 104, + KEYCODE_i = 105, + KEYCODE_j = 106, + KEYCODE_k = 107, + KEYCODE_l = 108, + KEYCODE_m = 109, + KEYCODE_n = 110, + KEYCODE_o = 111, + KEYCODE_p = 112, + KEYCODE_q = 113, + KEYCODE_r = 114, + KEYCODE_s = 115, + KEYCODE_t = 116, + KEYCODE_u = 117, + KEYCODE_v = 118, + KEYCODE_w = 119, + KEYCODE_x = 120, + KEYCODE_y = 121, + KEYCODE_z = 122, + KEYCODE_DELETE = 127, + + // Numeric keypad + KEYCODE_KP0 = 256, + KEYCODE_KP1 = 257, + KEYCODE_KP2 = 258, + KEYCODE_KP3 = 259, + KEYCODE_KP4 = 260, + KEYCODE_KP5 = 261, + KEYCODE_KP6 = 262, + KEYCODE_KP7 = 263, + KEYCODE_KP8 = 264, + KEYCODE_KP9 = 265, + KEYCODE_KP_PERIOD = 266, + KEYCODE_KP_DIVIDE = 267, + KEYCODE_KP_MULTIPLY = 268, + KEYCODE_KP_MINUS = 269, + KEYCODE_KP_PLUS = 270, + KEYCODE_KP_ENTER = 271, + KEYCODE_KP_EQUALS = 272, + + // Arrows + Home/End pad + KEYCODE_UP = 273, + KEYCODE_DOWN = 274, + KEYCODE_RIGHT = 275, + KEYCODE_LEFT = 276, + KEYCODE_INSERT = 277, + KEYCODE_HOME = 278, + KEYCODE_END = 279, + KEYCODE_PAGEUP = 280, + KEYCODE_PAGEDOWN = 281, + + // Function keys + KEYCODE_F1 = 282, + KEYCODE_F2 = 283, + KEYCODE_F3 = 284, + KEYCODE_F4 = 285, + KEYCODE_F5 = 286, + KEYCODE_F6 = 287, + KEYCODE_F7 = 288, + KEYCODE_F8 = 289, + KEYCODE_F9 = 290, + KEYCODE_F10 = 291, + KEYCODE_F11 = 292, + KEYCODE_F12 = 293, + KEYCODE_F13 = 294, + KEYCODE_F14 = 295, + KEYCODE_F15 = 296, + + // Key state modifier keys + KEYCODE_NUMLOCK = 300, + KEYCODE_CAPSLOCK = 301, + KEYCODE_SCROLLOCK = 302, + KEYCODE_RSHIFT = 303, + KEYCODE_LSHIFT = 304, + KEYCODE_RCTRL = 305, + KEYCODE_LCTRL = 306, + KEYCODE_RALT = 307, + KEYCODE_LALT = 308, + KEYCODE_RMETA = 309, + KEYCODE_LMETA = 310, + KEYCODE_LSUPER = 311, // Left "Windows" key + KEYCODE_RSUPER = 312, // Right "Windows" key + KEYCODE_MODE = 313, // "Alt Gr" key + KEYCODE_COMPOSE = 314, // Multi-key compose key + + // Miscellaneous function keys + KEYCODE_HELP = 315, + KEYCODE_PRINT = 316, + KEYCODE_SYSREQ = 317, + KEYCODE_BREAK = 318, + KEYCODE_MENU = 319, + KEYCODE_POWER = 320, // Power Macintosh power key + KEYCODE_EURO = 321, // Some european keyboards + KEYCODE_UNDO = 322 // Atari keyboard has Undo +}; + +/** + * List of certan special and some fake 'ascii' values used in keyboard events. + * The values for the function keys listed here are based on what certain SCUMM + * games expect in their scripts. + * @todo Get rid of the function key values, and instead enforce that engines use + * the keycode value to handle these. + */ +enum { + ASCII_BACKSPACE = 8, + ASCII_TAB = 9, + ASCII_RETURN = 13, + ASCII_ESCAPE = 27, + ASCII_SPACE = 32, + + ASCII_F1 = 315, + ASCII_F2 = 316, + ASCII_F3 = 317, + ASCII_F4 = 318, + ASCII_F5 = 319, + ASCII_F6 = 320, + ASCII_F7 = 321, + ASCII_F8 = 322, + ASCII_F9 = 323, + ASCII_F10 = 324, + ASCII_F11 = 325, + ASCII_F12 = 326 +}; + +/** + * Keyboard modifier flags, used for Event::kbd::flags. + */ +enum { + KBD_CTRL = 1 << 0, + KBD_ALT = 1 << 1, + KBD_SHIFT = 1 << 2 +}; + +/** + * Keyboard status, as used in the Event struct. + */ +struct KeyState { + /** + * Abstract key code (will be the same for any given key regardless + * of modifiers being held at the same time. + * For example, this is the same for both 'A' and Shift-'A'. + * @todo Document which values are to be used for non-ASCII keys + * like F1-F10. For now, let's just say that our primary backend + * is the SDL one, and it uses the values SDL uses... so until + * we fix this, your best bet is to get a copy of SDL_keysym.h + * and look at that, if you want to find out a key code. + */ + KeyCode keycode; + /** + * ASCII-value of the pressed key (if any). + * This depends on modifiers, i.e. pressing the 'A' key results in + * different values here depending on the status of shift, alt and + * caps lock. + */ + uint16 ascii; + /** + * Status of the modifier keys. Bits are set in this for each + * pressed modifier + * @see KBD_CTRL, KBD_ALT, KBD_SHIFT + */ + byte flags; + + KeyState() { reset(); } + void reset() { + keycode = KEYCODE_INVALID; + ascii = flags = 0; + } +}; + +} // End of namespace Common + +#endif |