The keyboard now works in TIA emulation mode. Still TODO is get ASCII

characters working, so the UI can be used.

SDL Window events are now sent to the EventHandler core.  For now, only
the window expose event is handled (redraws window if it's been hidden).


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2872 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2014-03-09 19:22:04 +00:00
parent 0b3bf4b659
commit d0d04948c7
8 changed files with 536 additions and 381 deletions

View File

@ -57,11 +57,11 @@ void EventHandlerSDL2::pollEvent()
case SDL_KEYUP: case SDL_KEYUP:
case SDL_KEYDOWN: case SDL_KEYDOWN:
{ {
handleKeyEvent((StellaKey)event.key.keysym.sym, if(!event.key.repeat)
(StellaMod)event.key.keysym.mod, handleKeyEvent((StellaKey)event.key.keysym.scancode,
//FIXSDL event.key.keysym.unicode & 0x7f, (StellaMod)event.key.keysym.mod,
event.key.keysym.scancode, 'x', //FIXSDL event.key.keysym.scancode,
event.key.type == SDL_KEYDOWN); event.key.type == SDL_KEYDOWN);
break; break;
} }
@ -133,17 +133,49 @@ void EventHandlerSDL2::pollEvent()
handleEvent(Event::Quit, 1); handleEvent(Event::Quit, 1);
break; // SDL_QUIT break; // SDL_QUIT
#if 0 //FIXSDL case SDL_WINDOWEVENT:
case SDL_ACTIVEEVENT: switch(event.window.event)
if((event.active.state & SDL_APPACTIVE) && (event.active.gain == 0)) {
if(myState == S_EMULATE) enterMenuMode(S_MENU); case SDL_WINDOWEVENT_SHOWN:
break; // SDL_ACTIVEEVENT handleSystemEvent(EVENT_WINDOW_SHOWN);
break;
case SDL_VIDEOEXPOSE: case SDL_WINDOWEVENT_HIDDEN:
myOSystem->frameBuffer().refresh(); handleSystemEvent(EVENT_WINDOW_HIDDEN);
break; // SDL_VIDEOEXPOSE break;
#endif case SDL_WINDOWEVENT_EXPOSED:
handleSystemEvent(EVENT_WINDOW_EXPOSED);
break;
case SDL_WINDOWEVENT_MOVED:
handleSystemEvent(EVENT_WINDOW_MOVED,
event.window.data1, event.window.data1);
break;
case SDL_WINDOWEVENT_RESIZED:
handleSystemEvent(EVENT_WINDOW_RESIZED,
event.window.data1, event.window.data1);
break;
case SDL_WINDOWEVENT_MINIMIZED:
handleSystemEvent(EVENT_WINDOW_MINIMIZED);
break;
case SDL_WINDOWEVENT_MAXIMIZED:
handleSystemEvent(EVENT_WINDOW_MAXIMIZED);
break;
case SDL_WINDOWEVENT_RESTORED:
handleSystemEvent(EVENT_WINDOW_RESTORED);
break;
case SDL_WINDOWEVENT_ENTER:
handleSystemEvent(EVENT_WINDOW_ENTER);
break;
case SDL_WINDOWEVENT_LEAVE:
handleSystemEvent(EVENT_WINDOW_LEAVE);
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
handleSystemEvent(EVENT_WINDOW_FOCUS_GAINED);
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
handleSystemEvent(EVENT_WINDOW_FOCUS_LOST);
break;
}
break;
} }
} }
} }

View File

@ -34,278 +34,362 @@
@author Stephen Anthony @author Stephen Anthony
*/ */
// This comes directly from SDL_keysym.h // This comes directly from SDL_scancode.h
typedef enum {
/** @name ASCII mapped keysyms
* The keyboard syms have been cleverly chosen to map to ASCII
*/
/*@{*/
KBDK_UNKNOWN = 0,
KBDK_FIRST = 0,
KBDK_BACKSPACE = 8,
KBDK_TAB = 9,
KBDK_CLEAR = 12,
KBDK_RETURN = 13,
KBDK_PAUSE = 19,
KBDK_ESCAPE = 27,
KBDK_SPACE = 32,
KBDK_EXCLAIM = 33,
KBDK_QUOTEDBL = 34,
KBDK_HASH = 35,
KBDK_DOLLAR = 36,
KBDK_AMPERSAND = 38,
KBDK_QUOTE = 39,
KBDK_LEFTPAREN = 40,
KBDK_RIGHTPAREN = 41,
KBDK_ASTERISK = 42,
KBDK_PLUS = 43,
KBDK_COMMA = 44,
KBDK_MINUS = 45,
KBDK_PERIOD = 46,
KBDK_SLASH = 47,
KBDK_0 = 48,
KBDK_1 = 49,
KBDK_2 = 50,
KBDK_3 = 51,
KBDK_4 = 52,
KBDK_5 = 53,
KBDK_6 = 54,
KBDK_7 = 55,
KBDK_8 = 56,
KBDK_9 = 57,
KBDK_COLON = 58,
KBDK_SEMICOLON = 59,
KBDK_LESS = 60,
KBDK_EQUALS = 61,
KBDK_GREATER = 62,
KBDK_QUESTION = 63,
KBDK_AT = 64,
/*
Skip uppercase letters
*/
KBDK_LEFTBRACKET = 91,
KBDK_BACKSLASH = 92,
KBDK_RIGHTBRACKET = 93,
KBDK_CARET = 94,
KBDK_UNDERSCORE = 95,
KBDK_BACKQUOTE = 96,
KBDK_a = 97,
KBDK_b = 98,
KBDK_c = 99,
KBDK_d = 100,
KBDK_e = 101,
KBDK_f = 102,
KBDK_g = 103,
KBDK_h = 104,
KBDK_i = 105,
KBDK_j = 106,
KBDK_k = 107,
KBDK_l = 108,
KBDK_m = 109,
KBDK_n = 110,
KBDK_o = 111,
KBDK_p = 112,
KBDK_q = 113,
KBDK_r = 114,
KBDK_s = 115,
KBDK_t = 116,
KBDK_u = 117,
KBDK_v = 118,
KBDK_w = 119,
KBDK_x = 120,
KBDK_y = 121,
KBDK_z = 122,
KBDK_DELETE = 127,
/* End of ASCII mapped keysyms */
/*@}*/
/** @name International keyboard syms */ typedef enum
/*@{*/ {
KBDK_WORLD_0 = 160, /* 0xA0 */ KBDK_UNKNOWN = 0,
KBDK_WORLD_1 = 161,
KBDK_WORLD_2 = 162,
KBDK_WORLD_3 = 163,
KBDK_WORLD_4 = 164,
KBDK_WORLD_5 = 165,
KBDK_WORLD_6 = 166,
KBDK_WORLD_7 = 167,
KBDK_WORLD_8 = 168,
KBDK_WORLD_9 = 169,
KBDK_WORLD_10 = 170,
KBDK_WORLD_11 = 171,
KBDK_WORLD_12 = 172,
KBDK_WORLD_13 = 173,
KBDK_WORLD_14 = 174,
KBDK_WORLD_15 = 175,
KBDK_WORLD_16 = 176,
KBDK_WORLD_17 = 177,
KBDK_WORLD_18 = 178,
KBDK_WORLD_19 = 179,
KBDK_WORLD_20 = 180,
KBDK_WORLD_21 = 181,
KBDK_WORLD_22 = 182,
KBDK_WORLD_23 = 183,
KBDK_WORLD_24 = 184,
KBDK_WORLD_25 = 185,
KBDK_WORLD_26 = 186,
KBDK_WORLD_27 = 187,
KBDK_WORLD_28 = 188,
KBDK_WORLD_29 = 189,
KBDK_WORLD_30 = 190,
KBDK_WORLD_31 = 191,
KBDK_WORLD_32 = 192,
KBDK_WORLD_33 = 193,
KBDK_WORLD_34 = 194,
KBDK_WORLD_35 = 195,
KBDK_WORLD_36 = 196,
KBDK_WORLD_37 = 197,
KBDK_WORLD_38 = 198,
KBDK_WORLD_39 = 199,
KBDK_WORLD_40 = 200,
KBDK_WORLD_41 = 201,
KBDK_WORLD_42 = 202,
KBDK_WORLD_43 = 203,
KBDK_WORLD_44 = 204,
KBDK_WORLD_45 = 205,
KBDK_WORLD_46 = 206,
KBDK_WORLD_47 = 207,
KBDK_WORLD_48 = 208,
KBDK_WORLD_49 = 209,
KBDK_WORLD_50 = 210,
KBDK_WORLD_51 = 211,
KBDK_WORLD_52 = 212,
KBDK_WORLD_53 = 213,
KBDK_WORLD_54 = 214,
KBDK_WORLD_55 = 215,
KBDK_WORLD_56 = 216,
KBDK_WORLD_57 = 217,
KBDK_WORLD_58 = 218,
KBDK_WORLD_59 = 219,
KBDK_WORLD_60 = 220,
KBDK_WORLD_61 = 221,
KBDK_WORLD_62 = 222,
KBDK_WORLD_63 = 223,
KBDK_WORLD_64 = 224,
KBDK_WORLD_65 = 225,
KBDK_WORLD_66 = 226,
KBDK_WORLD_67 = 227,
KBDK_WORLD_68 = 228,
KBDK_WORLD_69 = 229,
KBDK_WORLD_70 = 230,
KBDK_WORLD_71 = 231,
KBDK_WORLD_72 = 232,
KBDK_WORLD_73 = 233,
KBDK_WORLD_74 = 234,
KBDK_WORLD_75 = 235,
KBDK_WORLD_76 = 236,
KBDK_WORLD_77 = 237,
KBDK_WORLD_78 = 238,
KBDK_WORLD_79 = 239,
KBDK_WORLD_80 = 240,
KBDK_WORLD_81 = 241,
KBDK_WORLD_82 = 242,
KBDK_WORLD_83 = 243,
KBDK_WORLD_84 = 244,
KBDK_WORLD_85 = 245,
KBDK_WORLD_86 = 246,
KBDK_WORLD_87 = 247,
KBDK_WORLD_88 = 248,
KBDK_WORLD_89 = 249,
KBDK_WORLD_90 = 250,
KBDK_WORLD_91 = 251,
KBDK_WORLD_92 = 252,
KBDK_WORLD_93 = 253,
KBDK_WORLD_94 = 254,
KBDK_WORLD_95 = 255, /* 0xFF */
/*@}*/
/** @name Numeric keypad */ /**
/*@{*/ * \name Usage page 0x07
KBDK_KP0 = 256, *
KBDK_KP1 = 257, * These values are from usage page 0x07 (USB keyboard page).
KBDK_KP2 = 258, */
KBDK_KP3 = 259, /* @{ */
KBDK_KP4 = 260,
KBDK_KP5 = 261,
KBDK_KP6 = 262,
KBDK_KP7 = 263,
KBDK_KP8 = 264,
KBDK_KP9 = 265,
KBDK_KP_PERIOD = 266,
KBDK_KP_DIVIDE = 267,
KBDK_KP_MULTIPLY = 268,
KBDK_KP_MINUS = 269,
KBDK_KP_PLUS = 270,
KBDK_KP_ENTER = 271,
KBDK_KP_EQUALS = 272,
/*@}*/
/** @name Arrows + Home/End pad */ KBDK_A = 4,
/*@{*/ KBDK_B = 5,
KBDK_UP = 273, KBDK_C = 6,
KBDK_DOWN = 274, KBDK_D = 7,
KBDK_RIGHT = 275, KBDK_E = 8,
KBDK_LEFT = 276, KBDK_F = 9,
KBDK_INSERT = 277, KBDK_G = 10,
KBDK_HOME = 278, KBDK_H = 11,
KBDK_END = 279, KBDK_I = 12,
KBDK_PAGEUP = 280, KBDK_J = 13,
KBDK_PAGEDOWN = 281, KBDK_K = 14,
/*@}*/ KBDK_L = 15,
KBDK_M = 16,
KBDK_N = 17,
KBDK_O = 18,
KBDK_P = 19,
KBDK_Q = 20,
KBDK_R = 21,
KBDK_S = 22,
KBDK_T = 23,
KBDK_U = 24,
KBDK_V = 25,
KBDK_W = 26,
KBDK_X = 27,
KBDK_Y = 28,
KBDK_Z = 29,
/** @name Function keys */ KBDK_1 = 30,
/*@{*/ KBDK_2 = 31,
KBDK_F1 = 282, KBDK_3 = 32,
KBDK_F2 = 283, KBDK_4 = 33,
KBDK_F3 = 284, KBDK_5 = 34,
KBDK_F4 = 285, KBDK_6 = 35,
KBDK_F5 = 286, KBDK_7 = 36,
KBDK_F6 = 287, KBDK_8 = 37,
KBDK_F7 = 288, KBDK_9 = 38,
KBDK_F8 = 289, KBDK_0 = 39,
KBDK_F9 = 290,
KBDK_F10 = 291,
KBDK_F11 = 292,
KBDK_F12 = 293,
KBDK_F13 = 294,
KBDK_F14 = 295,
KBDK_F15 = 296,
/*@}*/
/** @name Key state modifier keys */ KBDK_RETURN = 40,
/*@{*/ KBDK_ESCAPE = 41,
KBDK_NUMLOCK = 300, KBDK_BACKSPACE = 42,
KBDK_CAPSLOCK = 301, KBDK_TAB = 43,
KBDK_SCROLLOCK = 302, KBDK_SPACE = 44,
KBDK_RSHIFT = 303,
KBDK_LSHIFT = 304,
KBDK_RCTRL = 305,
KBDK_LCTRL = 306,
KBDK_RALT = 307,
KBDK_LALT = 308,
KBDK_RMETA = 309,
KBDK_LMETA = 310,
KBDK_LSUPER = 311, /**< Left "Windows" key */
KBDK_RSUPER = 312, /**< Right "Windows" key */
KBDK_MODE = 313, /**< "Alt Gr" key */
KBDK_COMPOSE = 314, /**< Multi-key compose key */
/*@}*/
/** @name Miscellaneous function keys */ KBDK_MINUS = 45,
/*@{*/ KBDK_EQUALS = 46,
KBDK_HELP = 315, KBDK_LEFTBRACKET = 47,
KBDK_PRINT = 316, KBDK_RIGHTBRACKET = 48,
KBDK_SYSREQ = 317, KBDK_BACKSLASH = 49, /**< Located at the lower left of the return
KBDK_BREAK = 318, * key on ISO keyboards and at the right end
KBDK_MENU = 319, * of the QWERTY row on ANSI keyboards.
KBDK_POWER = 320, /**< Power Macintosh power key */ * Produces REVERSE SOLIDUS (backslash) and
KBDK_EURO = 321, /**< Some european keyboards */ * VERTICAL LINE in a US layout, REVERSE
KBDK_UNDO = 322, /**< Atari keyboard has Undo */ * SOLIDUS and VERTICAL LINE in a UK Mac
/*@}*/ * layout, NUMBER SIGN and TILDE in a UK
* Windows layout, DOLLAR SIGN and POUND SIGN
* in a Swiss German layout, NUMBER SIGN and
* APOSTROPHE in a German layout, GRAVE
* ACCENT and POUND SIGN in a French Mac
* layout, and ASTERISK and MICRO SIGN in a
* French Windows layout.
*/
KBDK_NONUSHASH = 50, /**< ISO USB keyboards actually use this code
* instead of 49 for the same key, but all
* OSes I've seen treat the two codes
* identically. So, as an implementor, unless
* your keyboard generates both of those
* codes and your OS treats them differently,
* you should generate KBDK_BACKSLASH
* instead of this code. As a user, you
* should not rely on this code because SDL
* will never generate it with most (all?)
* keyboards.
*/
KBDK_SEMICOLON = 51,
KBDK_APOSTROPHE = 52,
KBDK_GRAVE = 53, /**< Located in the top left corner (on both ANSI
* and ISO keyboards). Produces GRAVE ACCENT and
* TILDE in a US Windows layout and in US and UK
* Mac layouts on ANSI keyboards, GRAVE ACCENT
* and NOT SIGN in a UK Windows layout, SECTION
* SIGN and PLUS-MINUS SIGN in US and UK Mac
* layouts on ISO keyboards, SECTION SIGN and
* DEGREE SIGN in a Swiss German layout (Mac:
* only on ISO keyboards), CIRCUMFLEX ACCENT and
* DEGREE SIGN in a German layout (Mac: only on
* ISO keyboards), SUPERSCRIPT TWO and TILDE in a
* French Windows layout, COMMERCIAL AT and
* NUMBER SIGN in a French Mac layout on ISO
* keyboards, and LESS-THAN SIGN and GREATER-THAN
* SIGN in a Swiss German, German, or French Mac
* layout on ANSI keyboards.
*/
KBDK_COMMA = 54,
KBDK_PERIOD = 55,
KBDK_SLASH = 56,
/* Add any other keys here */ KBDK_CAPSLOCK = 57,
KBDK_LAST KBDK_F1 = 58,
KBDK_F2 = 59,
KBDK_F3 = 60,
KBDK_F4 = 61,
KBDK_F5 = 62,
KBDK_F6 = 63,
KBDK_F7 = 64,
KBDK_F8 = 65,
KBDK_F9 = 66,
KBDK_F10 = 67,
KBDK_F11 = 68,
KBDK_F12 = 69,
KBDK_PRINTSCREEN = 70,
KBDK_SCROLLLOCK = 71,
KBDK_PAUSE = 72,
KBDK_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but
does send code 73, not 117) */
KBDK_HOME = 74,
KBDK_PAGEUP = 75,
KBDK_DELETE = 76,
KBDK_END = 77,
KBDK_PAGEDOWN = 78,
KBDK_RIGHT = 79,
KBDK_LEFT = 80,
KBDK_DOWN = 81,
KBDK_UP = 82,
KBDK_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards
*/
KBDK_KP_DIVIDE = 84,
KBDK_KP_MULTIPLY = 85,
KBDK_KP_MINUS = 86,
KBDK_KP_PLUS = 87,
KBDK_KP_ENTER = 88,
KBDK_KP_1 = 89,
KBDK_KP_2 = 90,
KBDK_KP_3 = 91,
KBDK_KP_4 = 92,
KBDK_KP_5 = 93,
KBDK_KP_6 = 94,
KBDK_KP_7 = 95,
KBDK_KP_8 = 96,
KBDK_KP_9 = 97,
KBDK_KP_0 = 98,
KBDK_KP_PERIOD = 99,
KBDK_NONUSBACKSLASH = 100, /**< This is the additional key that ISO
* keyboards have over ANSI ones,
* located between left shift and Y.
* Produces GRAVE ACCENT and TILDE in a
* US or UK Mac layout, REVERSE SOLIDUS
* (backslash) and VERTICAL LINE in a
* US or UK Windows layout, and
* LESS-THAN SIGN and GREATER-THAN SIGN
* in a Swiss German, German, or French
* layout. */
KBDK_APPLICATION = 101, /**< windows contextual menu, compose */
KBDK_POWER = 102, /**< The USB document says this is a status flag,
* not a physical key - but some Mac keyboards
* do have a power key. */
KBDK_KP_EQUALS = 103,
KBDK_F13 = 104,
KBDK_F14 = 105,
KBDK_F15 = 106,
KBDK_F16 = 107,
KBDK_F17 = 108,
KBDK_F18 = 109,
KBDK_F19 = 110,
KBDK_F20 = 111,
KBDK_F21 = 112,
KBDK_F22 = 113,
KBDK_F23 = 114,
KBDK_F24 = 115,
KBDK_EXECUTE = 116,
KBDK_HELP = 117,
KBDK_MENU = 118,
KBDK_SELECT = 119,
KBDK_STOP = 120,
KBDK_AGAIN = 121, /**< redo */
KBDK_UNDO = 122,
KBDK_CUT = 123,
KBDK_COPY = 124,
KBDK_PASTE = 125,
KBDK_FIND = 126,
KBDK_MUTE = 127,
KBDK_VOLUMEUP = 128,
KBDK_VOLUMEDOWN = 129,
/* not sure whether there's a reason to enable these */
/* KBDK_LOCKINGCAPSLOCK = 130, */
/* KBDK_LOCKINGNUMLOCK = 131, */
/* KBDK_LOCKINGSCROLLLOCK = 132, */
KBDK_KP_COMMA = 133,
KBDK_KP_EQUALSAS400 = 134,
KBDK_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see
footnotes in USB doc */
KBDK_INTERNATIONAL2 = 136,
KBDK_INTERNATIONAL3 = 137, /**< Yen */
KBDK_INTERNATIONAL4 = 138,
KBDK_INTERNATIONAL5 = 139,
KBDK_INTERNATIONAL6 = 140,
KBDK_INTERNATIONAL7 = 141,
KBDK_INTERNATIONAL8 = 142,
KBDK_INTERNATIONAL9 = 143,
KBDK_LANG1 = 144, /**< Hangul/English toggle */
KBDK_LANG2 = 145, /**< Hanja conversion */
KBDK_LANG3 = 146, /**< Katakana */
KBDK_LANG4 = 147, /**< Hiragana */
KBDK_LANG5 = 148, /**< Zenkaku/Hankaku */
KBDK_LANG6 = 149, /**< reserved */
KBDK_LANG7 = 150, /**< reserved */
KBDK_LANG8 = 151, /**< reserved */
KBDK_LANG9 = 152, /**< reserved */
KBDK_ALTERASE = 153, /**< Erase-Eaze */
KBDK_SYSREQ = 154,
KBDK_CANCEL = 155,
KBDK_CLEAR = 156,
KBDK_PRIOR = 157,
KBDK_RETURN2 = 158,
KBDK_SEPARATOR = 159,
KBDK_OUT = 160,
KBDK_OPER = 161,
KBDK_CLEARAGAIN = 162,
KBDK_CRSEL = 163,
KBDK_EXSEL = 164,
KBDK_KP_00 = 176,
KBDK_KP_000 = 177,
KBDK_THOUSANDSSEPARATOR = 178,
KBDK_DECIMALSEPARATOR = 179,
KBDK_CURRENCYUNIT = 180,
KBDK_CURRENCYSUBUNIT = 181,
KBDK_KP_LEFTPAREN = 182,
KBDK_KP_RIGHTPAREN = 183,
KBDK_KP_LEFTBRACE = 184,
KBDK_KP_RIGHTBRACE = 185,
KBDK_KP_TAB = 186,
KBDK_KP_BACKSPACE = 187,
KBDK_KP_A = 188,
KBDK_KP_B = 189,
KBDK_KP_C = 190,
KBDK_KP_D = 191,
KBDK_KP_E = 192,
KBDK_KP_F = 193,
KBDK_KP_XOR = 194,
KBDK_KP_POWER = 195,
KBDK_KP_PERCENT = 196,
KBDK_KP_LESS = 197,
KBDK_KP_GREATER = 198,
KBDK_KP_AMPERSAND = 199,
KBDK_KP_DBLAMPERSAND = 200,
KBDK_KP_VERTICALBAR = 201,
KBDK_KP_DBLVERTICALBAR = 202,
KBDK_KP_COLON = 203,
KBDK_KP_HASH = 204,
KBDK_KP_SPACE = 205,
KBDK_KP_AT = 206,
KBDK_KP_EXCLAM = 207,
KBDK_KP_MEMSTORE = 208,
KBDK_KP_MEMRECALL = 209,
KBDK_KP_MEMCLEAR = 210,
KBDK_KP_MEMADD = 211,
KBDK_KP_MEMSUBTRACT = 212,
KBDK_KP_MEMMULTIPLY = 213,
KBDK_KP_MEMDIVIDE = 214,
KBDK_KP_PLUSMINUS = 215,
KBDK_KP_CLEAR = 216,
KBDK_KP_CLEARENTRY = 217,
KBDK_KP_BINARY = 218,
KBDK_KP_OCTAL = 219,
KBDK_KP_DECIMAL = 220,
KBDK_KP_HEXADECIMAL = 221,
KBDK_LCTRL = 224,
KBDK_LSHIFT = 225,
KBDK_LALT = 226, /**< alt, option */
KBDK_LGUI = 227, /**< windows, command (apple), meta */
KBDK_RCTRL = 228,
KBDK_RSHIFT = 229,
KBDK_RALT = 230, /**< alt gr, option */
KBDK_RGUI = 231, /**< windows, command (apple), meta */
KBDK_MODE = 257, /**< I'm not sure if this is really not covered
* by any of the above, but since there's a
* special KMOD_MODE for it I'm adding it here
*/
/* @} *//* Usage page 0x07 */
/**
* \name Usage page 0x0C
*
* These values are mapped from usage page 0x0C (USB consumer page).
*/
/* @{ */
KBDK_AUDIONEXT = 258,
KBDK_AUDIOPREV = 259,
KBDK_AUDIOSTOP = 260,
KBDK_AUDIOPLAY = 261,
KBDK_AUDIOMUTE = 262,
KBDK_MEDIASELECT = 263,
KBDK_WWW = 264,
KBDK_MAIL = 265,
KBDK_CALCULATOR = 266,
KBDK_COMPUTER = 267,
KBDK_AC_SEARCH = 268,
KBDK_AC_HOME = 269,
KBDK_AC_BACK = 270,
KBDK_AC_FORWARD = 271,
KBDK_AC_STOP = 272,
KBDK_AC_REFRESH = 273,
KBDK_AC_BOOKMARKS = 274,
/* @} *//* Usage page 0x0C */
/**
* \name Walther keys
*
* These are values that Christian Walther added (for mac keyboard?).
*/
/* @{ */
KBDK_BRIGHTNESSDOWN = 275,
KBDK_BRIGHTNESSUP = 276,
KBDK_DISPLAYSWITCH = 277, /**< display mirroring/dual display
switch, video mode switch */
KBDK_KBDILLUMTOGGLE = 278,
KBDK_KBDILLUMDOWN = 279,
KBDK_KBDILLUMUP = 280,
KBDK_EJECT = 281,
KBDK_SLEEP = 282,
KBDK_APP1 = 283,
KBDK_APP2 = 284,
/* @} *//* Walther keys */
/* Add any other keys here. */
KBDK_LAST = 512 /**< not a key, just marks the number of scancodes
for array bounds */
} StellaKey; } StellaKey;
// Just pass SDLMod directly as int (placeholder for now) // Just pass SDLMod directly as int (placeholder for now)

View File

@ -404,7 +404,7 @@ bool DataGridWidget::handleKeyDown(StellaKey key, StellaMod mod, char ascii)
} }
break; break;
case KBDK_n: // negate case KBDK_N: // negate
if(_editable) if(_editable)
negateCell(); negateCell();
break; break;

View File

@ -90,9 +90,9 @@ void CompuMate::update()
{ {
case 0: case 0:
if (myKeyTable[KBDK_7]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_7]) lp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_u]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_U]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_j]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_J]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_m]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_M]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 1: case 1:
if (myKeyTable[KBDK_6]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_6]) lp.myDigitalPinState[Controller::Six] = false;
@ -102,9 +102,9 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_y]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_Y]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_h]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_H]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_n]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_N]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 2: case 2:
if (myKeyTable[KBDK_8]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_8]) lp.myDigitalPinState[Controller::Six] = false;
@ -114,8 +114,8 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_i]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_I]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_k]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_K]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_COMMA]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_COMMA]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 3: case 3:
@ -126,25 +126,25 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_w]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_W]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_s]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_S]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_x]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_X]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 4: case 4:
if (myKeyTable[KBDK_3]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_3]) lp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_e]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_E]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_d]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_D]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_c]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_C]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 5: case 5:
if (myKeyTable[KBDK_0]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_0]) lp.myDigitalPinState[Controller::Six] = false;
// Emulate the quote character (Shift-0) with the actual quote key // Emulate the quote character (Shift-0) with the actual quote key
if (myKeyTable[KBDK_QUOTE] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_APOSTROPHE] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_p]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_P]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_RETURN] || myKeyTable[KBDK_KP_ENTER]) if (myKeyTable[KBDK_RETURN] || myKeyTable[KBDK_KP_ENTER])
rp.myDigitalPinState[Controller::Six] = false; rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_SPACE]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_SPACE]) rp.myDigitalPinState[Controller::Four] = false;
@ -163,8 +163,8 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_o]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_O]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_l]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_L]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_PERIOD]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_PERIOD]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 7: case 7:
@ -175,9 +175,9 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_t]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_T]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_g]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_G]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_b]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_B]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 8: case 8:
if (myKeyTable[KBDK_1]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_1]) lp.myDigitalPinState[Controller::Six] = false;
@ -187,9 +187,9 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_q]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_Q]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_a]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_A]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_z]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_Z]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
case 9: case 9:
if (myKeyTable[KBDK_4]) lp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_4]) lp.myDigitalPinState[Controller::Six] = false;
@ -199,9 +199,9 @@ void CompuMate::update()
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_r]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_R]) rp.myDigitalPinState[Controller::Three] = false;
if (myKeyTable[KBDK_f]) rp.myDigitalPinState[Controller::Six] = false; if (myKeyTable[KBDK_F]) rp.myDigitalPinState[Controller::Six] = false;
if (myKeyTable[KBDK_v]) rp.myDigitalPinState[Controller::Four] = false; if (myKeyTable[KBDK_V]) rp.myDigitalPinState[Controller::Four] = false;
break; break;
default: default:
break; break;

View File

@ -351,7 +351,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
{ {
#ifdef BSPF_MAC_OSX #ifdef BSPF_MAC_OSX
// These keys work in all states // These keys work in all states
if(key == KBDK_q) if(key == KBDK_Q)
{ {
handleEvent(Event::Quit, 1); handleEvent(Event::Quit, 1);
} }
@ -449,49 +449,49 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
} }
break; break;
case KBDK_z: case KBDK_Z:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().toggleP0Collision(); myOSystem->console().toggleP0Collision();
else else
myOSystem->console().toggleP0Bit(); myOSystem->console().toggleP0Bit();
break; break;
case KBDK_x: case KBDK_X:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().toggleP1Collision(); myOSystem->console().toggleP1Collision();
else else
myOSystem->console().toggleP1Bit(); myOSystem->console().toggleP1Bit();
break; break;
case KBDK_c: case KBDK_C:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().toggleM0Collision(); myOSystem->console().toggleM0Collision();
else else
myOSystem->console().toggleM0Bit(); myOSystem->console().toggleM0Bit();
break; break;
case KBDK_v: case KBDK_V:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().toggleM1Collision(); myOSystem->console().toggleM1Collision();
else else
myOSystem->console().toggleM1Bit(); myOSystem->console().toggleM1Bit();
break; break;
case KBDK_b: case KBDK_B:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().toggleBLCollision(); myOSystem->console().toggleBLCollision();
else else
myOSystem->console().toggleBLBit(); myOSystem->console().toggleBLBit();
break; break;
case KBDK_n: case KBDK_N:
if(mod & KMOD_SHIFT) if(mod & KMOD_SHIFT)
myOSystem->console().togglePFCollision(); myOSystem->console().togglePFCollision();
else else
myOSystem->console().togglePFBit(); myOSystem->console().togglePFBit();
break; break;
case KBDK_m: case KBDK_M:
myOSystem->console().toggleHMOVE(); myOSystem->console().toggleHMOVE();
break; break;
@ -506,15 +506,15 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
myOSystem->console().toggleBits(); myOSystem->console().toggleBits();
break; break;
case KBDK_p: // Alt-p toggles phosphor effect case KBDK_P: // Alt-p toggles phosphor effect
myOSystem->console().togglePhosphor(); myOSystem->console().togglePhosphor();
break; break;
case KBDK_l: case KBDK_L:
myOSystem->frameBuffer().toggleFrameStats(); myOSystem->frameBuffer().toggleFrameStats();
break; break;
case KBDK_s: case KBDK_S:
if(myContSnapshotInterval == 0) if(myContSnapshotInterval == 0)
{ {
ostringstream buf; ostringstream buf;
@ -545,7 +545,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
else if(kbdControl(mod) && state && myUseCtrlKeyFlag) else if(kbdControl(mod) && state && myUseCtrlKeyFlag)
{ {
// These keys work in all states // These keys work in all states
if(key == KBDK_q) if(key == KBDK_Q)
{ {
handleEvent(Event::Quit, 1); handleEvent(Event::Quit, 1);
} }
@ -563,24 +563,24 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
toggleSAPortOrder(); toggleSAPortOrder();
break; break;
case KBDK_f: // (Shift) Ctrl-f toggles NTSC/PAL/SECAM mode case KBDK_F: // (Shift) Ctrl-f toggles NTSC/PAL/SECAM mode
myOSystem->console().toggleFormat(mod & KMOD_SHIFT ? -1 : 1); myOSystem->console().toggleFormat(mod & KMOD_SHIFT ? -1 : 1);
break; break;
case KBDK_g: // Ctrl-g (un)grabs mouse case KBDK_G: // Ctrl-g (un)grabs mouse
if(!myOSystem->frameBuffer().fullScreen()) if(!myOSystem->frameBuffer().fullScreen())
myOSystem->frameBuffer().toggleGrabMouse(); myOSystem->frameBuffer().toggleGrabMouse();
break; break;
case KBDK_l: // Ctrl-l toggles PAL color-loss effect case KBDK_L: // Ctrl-l toggles PAL color-loss effect
myOSystem->console().toggleColorLoss(); myOSystem->console().toggleColorLoss();
break; break;
case KBDK_p: // Ctrl-p toggles different palettes case KBDK_P: // Ctrl-p toggles different palettes
myOSystem->console().togglePalette(); myOSystem->console().togglePalette();
break; break;
case KBDK_r: // Ctrl-r reloads the currently loaded ROM case KBDK_R: // Ctrl-r reloads the currently loaded ROM
myOSystem->reloadConsole(); myOSystem->reloadConsole();
break; break;
@ -592,7 +592,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, char ascii, bool
myOSystem->console().changeHeight(-1); myOSystem->console().changeHeight(-1);
break; break;
case KBDK_s: // Ctrl-s saves properties to a file case KBDK_S: // Ctrl-s saves properties to a file
{ {
string filename = myOSystem->baseDir() + string filename = myOSystem->baseDir() +
myOSystem->console().properties().get(Cartridge_Name) + ".pro"; myOSystem->console().properties().get(Cartridge_Name) + ".pro";
@ -889,6 +889,26 @@ void EventHandler::handleJoyHatEvent(int stick, int hat, int value)
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::handleSystemEvent(SystemEvent e, int data1, int data2)
{
switch(e)
{
case EVENT_WINDOW_EXPOSED:
myOSystem->frameBuffer().refresh();
break;
default: // handle other events as testing requires
// cerr << "handleSystemEvent: " << e << endl;
break;
}
#if 0 //FIXSDL
case SDL_ACTIVEEVENT:
if((event.active.state & SDL_APPACTIVE) && (event.active.gain == 0))
if(myState == S_EMULATE) enterMenuMode(S_MENU);
break; // SDL_ACTIVEEVENT
#endif
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::handleEvent(Event::Type event, int state) void EventHandler::handleEvent(Event::Type event, int state)
{ {
@ -1505,24 +1525,24 @@ void EventHandler::setDefaultKeymap(Event::Type event, EventMode mode)
SET_DEFAULT_KEY(KBDK_1, mode, Event::KeyboardZero1, event); SET_DEFAULT_KEY(KBDK_1, mode, Event::KeyboardZero1, event);
SET_DEFAULT_KEY(KBDK_2, mode, Event::KeyboardZero2, event); SET_DEFAULT_KEY(KBDK_2, mode, Event::KeyboardZero2, event);
SET_DEFAULT_KEY(KBDK_3, mode, Event::KeyboardZero3, event); SET_DEFAULT_KEY(KBDK_3, mode, Event::KeyboardZero3, event);
SET_DEFAULT_KEY(KBDK_q, mode, Event::KeyboardZero4, event); SET_DEFAULT_KEY(KBDK_Q, mode, Event::KeyboardZero4, event);
SET_DEFAULT_KEY(KBDK_w, mode, Event::KeyboardZero5, event); SET_DEFAULT_KEY(KBDK_W, mode, Event::KeyboardZero5, event);
SET_DEFAULT_KEY(KBDK_e, mode, Event::KeyboardZero6, event); SET_DEFAULT_KEY(KBDK_E, mode, Event::KeyboardZero6, event);
SET_DEFAULT_KEY(KBDK_a, mode, Event::KeyboardZero7, event); SET_DEFAULT_KEY(KBDK_A, mode, Event::KeyboardZero7, event);
SET_DEFAULT_KEY(KBDK_s, mode, Event::KeyboardZero8, event); SET_DEFAULT_KEY(KBDK_S, mode, Event::KeyboardZero8, event);
SET_DEFAULT_KEY(KBDK_d, mode, Event::KeyboardZero9, event); SET_DEFAULT_KEY(KBDK_S, mode, Event::KeyboardZero9, event);
SET_DEFAULT_KEY(KBDK_z, mode, Event::KeyboardZeroStar, event); SET_DEFAULT_KEY(KBDK_Z, mode, Event::KeyboardZeroStar, event);
SET_DEFAULT_KEY(KBDK_x, mode, Event::KeyboardZero0, event); SET_DEFAULT_KEY(KBDK_X, mode, Event::KeyboardZero0, event);
SET_DEFAULT_KEY(KBDK_c, mode, Event::KeyboardZeroPound, event); SET_DEFAULT_KEY(KBDK_C, mode, Event::KeyboardZeroPound, event);
SET_DEFAULT_KEY(KBDK_8, mode, Event::KeyboardOne1, event); SET_DEFAULT_KEY(KBDK_8, mode, Event::KeyboardOne1, event);
SET_DEFAULT_KEY(KBDK_9, mode, Event::KeyboardOne2, event); SET_DEFAULT_KEY(KBDK_9, mode, Event::KeyboardOne2, event);
SET_DEFAULT_KEY(KBDK_0, mode, Event::KeyboardOne3, event); SET_DEFAULT_KEY(KBDK_0, mode, Event::KeyboardOne3, event);
SET_DEFAULT_KEY(KBDK_i, mode, Event::KeyboardOne4, event); SET_DEFAULT_KEY(KBDK_I, mode, Event::KeyboardOne4, event);
SET_DEFAULT_KEY(KBDK_o, mode, Event::KeyboardOne5, event); SET_DEFAULT_KEY(KBDK_O, mode, Event::KeyboardOne5, event);
SET_DEFAULT_KEY(KBDK_p, mode, Event::KeyboardOne6, event); SET_DEFAULT_KEY(KBDK_P, mode, Event::KeyboardOne6, event);
SET_DEFAULT_KEY(KBDK_k, mode, Event::KeyboardOne7, event); SET_DEFAULT_KEY(KBDK_K, mode, Event::KeyboardOne7, event);
SET_DEFAULT_KEY(KBDK_l, mode, Event::KeyboardOne8, event); SET_DEFAULT_KEY(KBDK_L, mode, Event::KeyboardOne8, event);
SET_DEFAULT_KEY(KBDK_SEMICOLON, mode, Event::KeyboardOne9, event); SET_DEFAULT_KEY(KBDK_SEMICOLON, mode, Event::KeyboardOne9, event);
SET_DEFAULT_KEY(KBDK_COMMA, mode, Event::KeyboardOneStar, event); SET_DEFAULT_KEY(KBDK_COMMA, mode, Event::KeyboardOneStar, event);
SET_DEFAULT_KEY(KBDK_PERIOD, mode, Event::KeyboardOne0, event); SET_DEFAULT_KEY(KBDK_PERIOD, mode, Event::KeyboardOne0, event);
@ -1537,11 +1557,11 @@ void EventHandler::setDefaultKeymap(Event::Type event, EventMode mode)
SET_DEFAULT_KEY(KBDK_4, mode, Event::JoystickZeroFire5, event); SET_DEFAULT_KEY(KBDK_4, mode, Event::JoystickZeroFire5, event);
SET_DEFAULT_KEY(KBDK_5, mode, Event::JoystickZeroFire9, event); SET_DEFAULT_KEY(KBDK_5, mode, Event::JoystickZeroFire9, event);
SET_DEFAULT_KEY(KBDK_y, mode, Event::JoystickOneUp, event); SET_DEFAULT_KEY(KBDK_Y, mode, Event::JoystickOneUp, event);
SET_DEFAULT_KEY(KBDK_h, mode, Event::JoystickOneDown, event); SET_DEFAULT_KEY(KBDK_H, mode, Event::JoystickOneDown, event);
SET_DEFAULT_KEY(KBDK_g, mode, Event::JoystickOneLeft, event); SET_DEFAULT_KEY(KBDK_G, mode, Event::JoystickOneLeft, event);
SET_DEFAULT_KEY(KBDK_j, mode, Event::JoystickOneRight, event); SET_DEFAULT_KEY(KBDK_J, mode, Event::JoystickOneRight, event);
SET_DEFAULT_KEY(KBDK_f, mode, Event::JoystickOneFire, event); SET_DEFAULT_KEY(KBDK_F, mode, Event::JoystickOneFire, event);
SET_DEFAULT_KEY(KBDK_6, mode, Event::JoystickOneFire5, event); SET_DEFAULT_KEY(KBDK_6, mode, Event::JoystickOneFire5, event);
SET_DEFAULT_KEY(KBDK_7, mode, Event::JoystickOneFire9, event); SET_DEFAULT_KEY(KBDK_7, mode, Event::JoystickOneFire9, event);
@ -1562,7 +1582,7 @@ void EventHandler::setDefaultKeymap(Event::Type event, EventMode mode)
SET_DEFAULT_KEY(KBDK_PAUSE, mode, Event::PauseMode, event); SET_DEFAULT_KEY(KBDK_PAUSE, mode, Event::PauseMode, event);
SET_DEFAULT_KEY(KBDK_TAB, mode, Event::MenuMode, event); SET_DEFAULT_KEY(KBDK_TAB, mode, Event::MenuMode, event);
SET_DEFAULT_KEY(KBDK_BACKSLASH, mode, Event::CmdMenuMode, event); SET_DEFAULT_KEY(KBDK_BACKSLASH, mode, Event::CmdMenuMode, event);
SET_DEFAULT_KEY(KBDK_BACKQUOTE, mode, Event::DebuggerMode, event); SET_DEFAULT_KEY(KBDK_GRAVE, mode, Event::DebuggerMode, event);
SET_DEFAULT_KEY(KBDK_ESCAPE, mode, Event::LauncherMode, event); SET_DEFAULT_KEY(KBDK_ESCAPE, mode, Event::LauncherMode, event);
break; break;
@ -2115,6 +2135,7 @@ uInt32 EventHandler::resetEventsCallback(uInt32 interval, void* param)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void EventHandler::setKeyNames() void EventHandler::setKeyNames()
{ {
#if 0//FIXSDL
ourKBDKNames[ KBDK_BACKSPACE ] = "BACKSPACE"; ourKBDKNames[ KBDK_BACKSPACE ] = "BACKSPACE";
ourKBDKNames[ KBDK_TAB ] = "TAB"; ourKBDKNames[ KBDK_TAB ] = "TAB";
ourKBDKNames[ KBDK_CLEAR ] = "CLEAR"; ourKBDKNames[ KBDK_CLEAR ] = "CLEAR";
@ -2159,32 +2180,32 @@ void EventHandler::setKeyNames()
ourKBDKNames[ KBDK_CARET ] = "^"; ourKBDKNames[ KBDK_CARET ] = "^";
ourKBDKNames[ KBDK_UNDERSCORE ] = "_"; ourKBDKNames[ KBDK_UNDERSCORE ] = "_";
ourKBDKNames[ KBDK_BACKQUOTE ] = "`"; ourKBDKNames[ KBDK_BACKQUOTE ] = "`";
ourKBDKNames[ KBDK_a ] = "A"; ourKBDKNames[ KBDK_A ] = "A";
ourKBDKNames[ KBDK_b ] = "B"; ourKBDKNames[ KBDK_B ] = "B";
ourKBDKNames[ KBDK_c ] = "C"; ourKBDKNames[ KBDK_C ] = "C";
ourKBDKNames[ KBDK_d ] = "D"; ourKBDKNames[ KBDK_D ] = "D";
ourKBDKNames[ KBDK_e ] = "E"; ourKBDKNames[ KBDK_E ] = "E";
ourKBDKNames[ KBDK_f ] = "F"; ourKBDKNames[ KBDK_F ] = "F";
ourKBDKNames[ KBDK_g ] = "G"; ourKBDKNames[ KBDK_G ] = "G";
ourKBDKNames[ KBDK_h ] = "H"; ourKBDKNames[ KBDK_H ] = "H";
ourKBDKNames[ KBDK_i ] = "I"; ourKBDKNames[ KBDK_I ] = "I";
ourKBDKNames[ KBDK_j ] = "J"; ourKBDKNames[ KBDK_J ] = "J";
ourKBDKNames[ KBDK_k ] = "K"; ourKBDKNames[ KBDK_K ] = "K";
ourKBDKNames[ KBDK_l ] = "L"; ourKBDKNames[ KBDK_L ] = "L";
ourKBDKNames[ KBDK_m ] = "M"; ourKBDKNames[ KBDK_M ] = "M";
ourKBDKNames[ KBDK_n ] = "N"; ourKBDKNames[ KBDK_N ] = "N";
ourKBDKNames[ KBDK_o ] = "O"; ourKBDKNames[ KBDK_O ] = "O";
ourKBDKNames[ KBDK_p ] = "P"; ourKBDKNames[ KBDK_P ] = "P";
ourKBDKNames[ KBDK_q ] = "Q"; ourKBDKNames[ KBDK_Q ] = "Q";
ourKBDKNames[ KBDK_r ] = "R"; ourKBDKNames[ KBDK_R ] = "R";
ourKBDKNames[ KBDK_s ] = "S"; ourKBDKNames[ KBDK_S ] = "S";
ourKBDKNames[ KBDK_t ] = "T"; ourKBDKNames[ KBDK_T ] = "T";
ourKBDKNames[ KBDK_u ] = "U"; ourKBDKNames[ KBDK_U ] = "U";
ourKBDKNames[ KBDK_v ] = "V"; ourKBDKNames[ KBDK_V ] = "V";
ourKBDKNames[ KBDK_w ] = "W"; ourKBDKNames[ KBDK_W ] = "W";
ourKBDKNames[ KBDK_x ] = "X"; ourKBDKNames[ KBDK_X ] = "X";
ourKBDKNames[ KBDK_y ] = "Y"; ourKBDKNames[ KBDK_Y ] = "Y";
ourKBDKNames[ KBDK_z ] = "Z"; ourKBDKNames[ KBDK_Z ] = "Z";
ourKBDKNames[ KBDK_DELETE ] = "DELETE"; ourKBDKNames[ KBDK_DELETE ] = "DELETE";
ourKBDKNames[ KBDK_WORLD_0 ] = "WORLD_0"; ourKBDKNames[ KBDK_WORLD_0 ] = "WORLD_0";
ourKBDKNames[ KBDK_WORLD_1 ] = "WORLD_1"; ourKBDKNames[ KBDK_WORLD_1 ] = "WORLD_1";
@ -2346,6 +2367,7 @@ void EventHandler::setKeyNames()
ourKBDKNames[ KBDK_POWER ] = "POWER"; ourKBDKNames[ KBDK_POWER ] = "POWER";
ourKBDKNames[ KBDK_EURO ] = "EURO"; ourKBDKNames[ KBDK_EURO ] = "EURO";
ourKBDKNames[ KBDK_UNDO ] = "UNDO"; ourKBDKNames[ KBDK_UNDO ] = "UNDO";
#endif
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -343,6 +343,23 @@ class EventHandler
*/ */
virtual void pollEvent() = 0; virtual void pollEvent() = 0;
// Other events that can be received from the underlying event handler
enum SystemEvent {
EVENT_WINDOW_SHOWN,
EVENT_WINDOW_HIDDEN,
EVENT_WINDOW_EXPOSED,
EVENT_WINDOW_MOVED,
EVENT_WINDOW_RESIZED,
EVENT_WINDOW_MINIMIZED,
EVENT_WINDOW_MAXIMIZED,
EVENT_WINDOW_RESTORED,
EVENT_WINDOW_ENTER,
EVENT_WINDOW_LEAVE,
EVENT_WINDOW_FOCUS_GAINED,
EVENT_WINDOW_FOCUS_LOST
};
void handleSystemEvent(SystemEvent e, int data1 = 0, int data2 = 0);
// An abstraction of joystick in Stella. // An abstraction of joystick in Stella.
// A StellaJoystick holds its own event mapping information, space for // A StellaJoystick holds its own event mapping information, space for
// which is dynamically allocated based on the actual number of buttons, // which is dynamically allocated based on the actual number of buttons,

View File

@ -256,40 +256,40 @@ bool EditableWidget::specialKeys(StellaKey key, char ascii)
switch (key) switch (key)
{ {
case KBDK_a: case KBDK_A:
setCaretPos(0); setCaretPos(0);
break; break;
case KBDK_c: case KBDK_C:
copySelectedText(); copySelectedText();
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;
case KBDK_e: case KBDK_E:
setCaretPos(_editString.size()); setCaretPos(_editString.size());
break; break;
case KBDK_d: case KBDK_D:
handled = killChar(+1); handled = killChar(+1);
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;
case KBDK_k: case KBDK_K:
handled = killLine(+1); handled = killLine(+1);
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;
case KBDK_u: case KBDK_U:
handled = killLine(-1); handled = killLine(-1);
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;
case KBDK_v: case KBDK_V:
pasteSelectedText(); pasteSelectedText();
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;
case KBDK_w: case KBDK_W:
handled = killLastWord(); handled = killLastWord();
if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id); if(handled) sendCommand(EditableWidget::kChangedCmd, ascii, _id);
break; break;

View File

@ -457,7 +457,7 @@ void LauncherDialog::handleKeyDown(StellaKey key, StellaMod mod, char ascii)
{ {
// Grab the key before passing it to the actual dialog and check for // Grab the key before passing it to the actual dialog and check for
// Control-R (reload ROM listing) // Control-R (reload ROM listing)
if(instance().eventHandler().kbdControl(mod) && key == KBDK_r) if(instance().eventHandler().kbdControl(mod) && key == KBDK_R)
updateListing(); updateListing();
else else
Dialog::handleKeyDown(key, mod, ascii); Dialog::handleKeyDown(key, mod, ascii);