@@ -65,6 +65,14 @@ MAEvent *getMotionEvent(int type, SDL_Event *event) {
6565 return result;
6666}
6767
68+ MAEvent *getKeyPressedEvent (int keycode, int nativeKey) {
69+ MAEvent *result = new MAEvent ();
70+ result->type = EVENT_TYPE_KEY_PRESSED;
71+ result->key = keycode;
72+ result->nativeKey = nativeKey;
73+ return result;
74+ }
75+
6876Runtime::Runtime (SDL_Window *window) :
6977 System(),
7078 _menuX(0 ),
@@ -450,19 +458,10 @@ void Runtime::pollEvents(bool blocking) {
450458 if (ev.text .text [0 ] < 0 ) {
451459 wchar_t keycode;
452460 mbstowcs (&keycode, ev.text .text , 1 );
453-
454- MAEvent *keyEvent = new MAEvent ();
455- keyEvent->type = EVENT_TYPE_KEY_PRESSED;
456- keyEvent->key = (int )keycode;
457- keyEvent->nativeKey = 0 ;
458- pushEvent (keyEvent);
461+ pushEvent (getKeyPressedEvent ((int )keycode, 0 ));
459462 } else {
460463 for (int i = 0 ; ev.text .text [i] != 0 ; i++) {
461- MAEvent *keyEvent = new MAEvent ();
462- keyEvent->type = EVENT_TYPE_KEY_PRESSED;
463- keyEvent->key = ev.text .text [i];
464- keyEvent->nativeKey = 0 ;
465- pushEvent (keyEvent);
464+ pushEvent (getKeyPressedEvent (ev.text .text [i], 0 ));
466465 }
467466 }
468467 }
@@ -502,12 +501,17 @@ void Runtime::pollEvents(bool blocking) {
502501 }
503502 } else {
504503 int lenMap = sizeof (keymap) / sizeof (keymap[0 ]);
504+ if (ev.key .keysym .sym == SDLK_KP_PERIOD) {
505+ if (ev.key .keysym .mod == KMOD_NUM) {
506+ // '.' character sent as SDL_TEXTINPUT
507+ } else {
508+ pushEvent (getKeyPressedEvent (SB_KEY_DELETE, 0 ));
509+ }
510+ lenMap = 0 ;
511+ }
505512 for (int i = 0 ; i < lenMap; i++) {
506513 if (ev.key .keysym .sym == keymap[i][0 ]) {
507- maEvent = new MAEvent ();
508- maEvent->type = EVENT_TYPE_KEY_PRESSED;
509- maEvent->key = keymap[i][1 ];
510- maEvent->nativeKey = ev.key .keysym .mod ;
514+ pushEvent (getKeyPressedEvent (keymap[i][1 ], ev.key .keysym .mod ));
511515 break ;
512516 }
513517 }
@@ -521,10 +525,7 @@ void Runtime::pollEvents(bool blocking) {
521525 ev.key .keysym .sym != SDLK_LCTRL &&
522526 ev.key .keysym .sym != SDLK_RCTRL) ||
523527 (ev.key .keysym .mod & KMOD_ALT))) {
524- maEvent = new MAEvent ();
525- maEvent->type = EVENT_TYPE_KEY_PRESSED;
526- maEvent->key = ev.key .keysym .sym ;
527- maEvent->nativeKey = ev.key .keysym .mod ;
528+ maEvent = getKeyPressedEvent (ev.key .keysym .sym , ev.key .keysym .mod );
528529 }
529530 }
530531 break ;
0 commit comments