Index: Event.cpp =================================================================== --- Event.cpp (revision 15969) +++ Event.cpp (working copy) @@ -4,32 +4,8 @@ namespace Upp { -dword fbKEYtoK(dword chr) { - if(chr == SDLK_TAB) - chr = K_TAB; - else - if(chr == SDLK_SPACE) - chr = K_SPACE; - else - if(chr == SDLK_RETURN) - chr = K_RETURN; - else { - extern Tuple SDL_key_map[]; - for(int i = 0; SDL_key_map[i].a; i++) - if(chr == SDL_key_map[i].b) { - chr = SDL_key_map[i].a; - break; - } - } - if(chr == K_ALT_KEY || chr == K_CTRL_KEY || chr == K_SHIFT_KEY) - return chr; - if(GetCtrl()) chr |= K_CTRL; - if(GetAlt()) chr |= K_ALT; - if(GetShift()) chr |= K_SHIFT; +extern dword fbKEYtoK(dword chr); - return chr; -} - dword lastbdowntime[8] = {0}; dword isdblclick[8] = {0}; @@ -73,9 +49,9 @@ case SDL_KEYDOWN: switch(event->key.keysym.sym) { case SDLK_LSHIFT: modkeys |= KM_LSHIFT; break; - case SDLK_RSHIFT: modkeys |= KM_RSHIFT; break; + case SDLK_RSHIFT: modkeys |= KM_RSHIFT; break; case SDLK_LCTRL: modkeys |= KM_LCTRL; break; - case SDLK_RCTRL: modkeys |= KM_RCTRL; break; + case SDLK_RCTRL: modkeys |= KM_RCTRL; break; case SDLK_LALT: modkeys |= KM_LALT; break; case SDLK_RALT: modkeys |= KM_RALT; break; } Index: Keys.cpp =================================================================== --- Keys.cpp (revision 15969) +++ Keys.cpp (working copy) @@ -2,132 +2,143 @@ namespace Upp { -Tuple SDL_key_map[] = { -#if 0 - { K_BACK, SDLK_BACKSPACE }, - { K_BACKSPACE, SDLK_BACKSPACE }, +const static VectorMap SDL_key_map = { +// { SDLK_BACKSPACE, K_BACK }, + { SDLK_BACKSPACE, K_BACKSPACE }, + { SDLK_TAB, K_TAB }, + { SDLK_SPACE, K_SPACE }, + { SDLK_RETURN, K_RETURN }, - //handled extra in fbKEYtoK - { K_TAB, SDLK_TAB }, - - { K_SPACE, SDLK_SPACE }, + { SDLK_LSHIFT, K_SHIFT_KEY }, + { SDLK_LCTRL, K_CTRL_KEY }, + { SDLK_LALT, K_ALT_KEY }, + { SDLK_CAPSLOCK, K_CAPSLOCK }, + { SDLK_ESCAPE, K_ESCAPE }, + { SDLK_PAGEUP, K_PAGEUP }, + { SDLK_PAGEDOWN, K_PAGEDOWN }, + { SDLK_END, K_END }, + { SDLK_HOME, K_HOME }, + { SDLK_LEFT, K_LEFT }, + { SDLK_UP, K_UP }, + { SDLK_RIGHT, K_RIGHT }, + { SDLK_DOWN, K_DOWN }, + { SDLK_INSERT, K_INSERT }, + { SDLK_DELETE, K_DELETE }, - { K_RETURN, SDLK_RETURN }, - { K_ENTER, K_RETURN }, -#endif + { SDLK_KP_0, K_NUMPAD0 }, + { SDLK_KP_1, K_NUMPAD1 }, + { SDLK_KP_2, K_NUMPAD2 }, + { SDLK_KP_3, K_NUMPAD3 }, + { SDLK_KP_4, K_NUMPAD4 }, + { SDLK_KP_5, K_NUMPAD5 }, + { SDLK_KP_6, K_NUMPAD6 }, + { SDLK_KP_7, K_NUMPAD7 }, + { SDLK_KP_8, K_NUMPAD8 }, + { SDLK_KP_9, K_NUMPAD9 }, + { SDLK_KP_MULTIPLY, K_MULTIPLY }, + { SDLK_KP_PLUS, K_ADD }, + { SDLK_KP_PERIOD, K_SEPARATOR }, + { SDLK_KP_MINUS, K_SUBTRACT }, + { SDLK_KP_PERIOD, K_DECIMAL }, + { SDLK_KP_DIVIDE, K_DIVIDE }, + { SDLK_SCROLLLOCK, K_SCROLL }, + { SDLK_KP_ENTER, K_ENTER }, + + { SDLK_F1, K_F1 }, + { SDLK_F2, K_F2 }, + { SDLK_F3, K_F3 }, + { SDLK_F4, K_F4 }, + { SDLK_F5, K_F5 }, + { SDLK_F6, K_F6 }, + { SDLK_F7, K_F7 }, + { SDLK_F8, K_F8 }, + { SDLK_F9, K_F9 }, + { SDLK_F10, K_F10 }, + { SDLK_F11, K_F11 }, + { SDLK_F12, K_F12 }, - { K_SHIFT_KEY, SDLK_LSHIFT }, - { K_CTRL_KEY, SDLK_LCTRL }, - { K_ALT_KEY, SDLK_LALT }, - { K_CAPSLOCK, SDLK_CAPSLOCK }, - { K_ESCAPE, SDLK_ESCAPE }, - { K_PAGEUP, SDLK_PAGEUP }, - { K_PAGEDOWN, SDLK_PAGEDOWN }, - { K_END, SDLK_END }, - { K_HOME, SDLK_HOME }, - { K_LEFT, SDLK_LEFT }, - { K_UP, SDLK_UP }, - { K_RIGHT, SDLK_RIGHT }, - { K_DOWN, SDLK_DOWN }, - { K_INSERT, SDLK_INSERT }, - { K_DELETE, SDLK_DELETE }, + { SDLK_a, K_A }, + { SDLK_b, K_B }, + { SDLK_c, K_C }, + { SDLK_d, K_D }, + { SDLK_e, K_E }, + { SDLK_f, K_F }, + { SDLK_g, K_G }, + { SDLK_h, K_H }, + { SDLK_i, K_I }, + { SDLK_j, K_J }, + { SDLK_k, K_K }, + { SDLK_l, K_L }, + { SDLK_m, K_M }, + { SDLK_n, K_N }, + { SDLK_o, K_O }, + { SDLK_p, K_P }, + { SDLK_q, K_Q }, + { SDLK_r, K_R }, + { SDLK_s, K_S }, + { SDLK_t, K_T }, + { SDLK_u, K_U }, + { SDLK_v, K_V }, + { SDLK_w, K_W }, + { SDLK_x, K_X }, + { SDLK_y, K_Y }, + { SDLK_z, K_Z }, + { SDLK_0, K_0 }, + { SDLK_1, K_1 }, + { SDLK_2, K_2 }, + { SDLK_3, K_3 }, + { SDLK_4, K_4 }, + { SDLK_5, K_5 }, + { SDLK_6, K_6 }, + { SDLK_7, K_7 }, + { SDLK_8, K_8 }, + { SDLK_9, K_9 }, - { K_NUMPAD0, SDLK_KP_0 }, - { K_NUMPAD1, SDLK_KP_1 }, - { K_NUMPAD2, SDLK_KP_2 }, - { K_NUMPAD3, SDLK_KP_3 }, - { K_NUMPAD4, SDLK_KP_4 }, - { K_NUMPAD5, SDLK_KP_5 }, - { K_NUMPAD6, SDLK_KP_6 }, - { K_NUMPAD7, SDLK_KP_7 }, - { K_NUMPAD8, SDLK_KP_8 }, - { K_NUMPAD9, SDLK_KP_9 }, - { K_MULTIPLY, SDLK_KP_MULTIPLY }, - { K_ADD, SDLK_KP_PLUS }, - { K_SEPARATOR, SDLK_KP_PERIOD }, - { K_SUBTRACT, SDLK_KP_MINUS }, - { K_DECIMAL, SDLK_KP_PERIOD }, - { K_DIVIDE, SDLK_KP_DIVIDE }, - { K_SCROLL, SDLK_SCROLLLOCK }, + { K_CTRL|219, K_CTRL_LBRACKET }, + { K_CTRL|221, K_CTRL_RBRACKET }, + { K_CTRL|0xbd, K_CTRL_MINUS }, + { K_CTRL|0xc0, K_CTRL_GRAVE }, + { K_CTRL|0xbf, K_CTRL_SLASH }, + { K_CTRL|0xdc, K_CTRL_BACKSLASH }, + { K_CTRL|0xbc, K_CTRL_COMMA }, + { K_CTRL|0xbe, K_CTRL_PERIOD }, + { K_CTRL|0xbe, K_CTRL_SEMICOLON }, + { K_CTRL|0xbb, K_CTRL_EQUAL }, + { K_CTRL|0xde, K_CTRL_APOSTROPHE }, - { K_F1, SDLK_F1 }, - { K_F2, SDLK_F2 }, - { K_F3, SDLK_F3 }, - { K_F4, SDLK_F4 }, - { K_F5, SDLK_F5 }, - { K_F6, SDLK_F6 }, - { K_F7, SDLK_F7 }, - { K_F8, SDLK_F8 }, - { K_F9, SDLK_F9 }, - { K_F10, SDLK_F10 }, - { K_F11, SDLK_F11 }, - { K_F12, SDLK_F12 }, + { SDLK_PAUSE, K_BREAK }, // Is it really? - { K_A, SDLK_a }, - { K_B, SDLK_b }, - { K_C, SDLK_c }, - { K_D, SDLK_d }, - { K_E, SDLK_e }, - { K_F, SDLK_f }, - { K_G, SDLK_g }, - { K_H, SDLK_h }, - { K_I, SDLK_i }, - { K_J, SDLK_j }, - { K_K, SDLK_k }, - { K_L, SDLK_l }, - { K_M, SDLK_m }, - { K_N, SDLK_n }, - { K_O, SDLK_o }, - { K_P, SDLK_p }, - { K_Q, SDLK_q }, - { K_R, SDLK_r }, - { K_S, SDLK_s }, - { K_T, SDLK_t }, - { K_U, SDLK_u }, - { K_V, SDLK_v }, - { K_W, SDLK_w }, - { K_X, SDLK_x }, - { K_Y, SDLK_y }, - { K_Z, SDLK_z }, - { K_0, SDLK_0 }, - { K_1, SDLK_1 }, - { K_2, SDLK_2 }, - { K_3, SDLK_3 }, - { K_4, SDLK_4 }, - { K_5, SDLK_5 }, - { K_6, SDLK_6 }, - { K_7, SDLK_7 }, - { K_8, SDLK_8 }, - { K_9, SDLK_9 }, + { SDLK_PLUS, K_PLUS }, + { SDLK_MINUS, K_MINUS }, + { SDLK_COMMA, K_COMMA }, + { SDLK_PERIOD, K_PERIOD }, + { SDLK_SEMICOLON, K_SEMICOLON }, - { K_CTRL_LBRACKET, K_CTRL|219 }, - { K_CTRL_RBRACKET, K_CTRL|221 }, - { K_CTRL_MINUS, K_CTRL|0xbd }, - { K_CTRL_GRAVE, K_CTRL|0xc0 }, - { K_CTRL_SLASH, K_CTRL|0xbf }, - { K_CTRL_BACKSLASH, K_CTRL|0xdc }, - { K_CTRL_COMMA, K_CTRL|0xbc }, - { K_CTRL_PERIOD, K_CTRL|0xbe }, - { K_CTRL_SEMICOLON, K_CTRL|0xbe }, - { K_CTRL_EQUAL, K_CTRL|0xbb }, - { K_CTRL_APOSTROPHE, K_CTRL|0xde }, + { SDLK_SLASH, K_SLASH }, + { SDLK_CARET, K_GRAVE }, + { SDLK_LEFTBRACKET, K_LBRACKET }, + { SDLK_BACKSLASH, K_BACKSLASH }, + { SDLK_RIGHTBRACKET, K_RBRACKET }, + { SDLK_QUOTEDBL, K_QUOTEDBL } +}; - { K_BREAK, SDLK_PAUSE }, // Is it really? +dword fbKEYtoK(dword chr) +{ + int i = SDL_key_map.Find(chr); - { K_PLUS, SDLK_PLUS }, - { K_MINUS, SDLK_MINUS }, - { K_COMMA, SDLK_COMMA }, - { K_PERIOD, SDLK_PERIOD }, - { K_SEMICOLON, SDLK_SEMICOLON }, + if(i >= 0) { + chr = SDL_key_map[i]; + if(findarg(chr, K_ALT_KEY, K_CTRL_KEY, K_SHIFT_KEY) >= 0) + return chr; + } + else + chr |= K_DELTA; - { K_SLASH, SDLK_SLASH }, - { K_GRAVE, SDLK_CARET }, - { K_LBRACKET, SDLK_LEFTBRACKET }, - { K_BACKSLASH, SDLK_BACKSLASH }, - { K_RBRACKET, SDLK_RIGHTBRACKET }, - { K_QUOTEDBL, SDLK_QUOTEDBL }, - - { 0, 0 }, -}; + if(GetCtrl()) chr |= K_CTRL; + if(GetAlt()) chr |= K_ALT; + if(GetShift()) chr |= K_SHIFT; + return chr; +} + } \ No newline at end of file