Updated SDL3 scancode list

This adds more app editing and audio control keys and removes keys that launch applications

Work in progress on https://github.com/libsdl-org/SDL/issues/6390
This commit is contained in:
Sam Lantinga
2024-06-18 07:22:39 -07:00
parent 00ab4a8eba
commit 9d816c72ef
12 changed files with 412 additions and 242 deletions

View File

@@ -215,12 +215,12 @@ static const SDL_Keycode emscripten_keycode_table[] = {
/* 173 */ SDLK_MINUS, /*FX*/
/* 174 */ SDLK_VOLUMEDOWN, /*IE, Chrome*/
/* 175 */ SDLK_VOLUMEUP, /*IE, Chrome*/
/* 176 */ SDLK_AUDIONEXT, /*IE, Chrome*/
/* 177 */ SDLK_AUDIOPREV, /*IE, Chrome*/
/* 176 */ SDLK_MEDIA_NEXT_TRACK, /*IE, Chrome*/
/* 177 */ SDLK_MEDIA_PREVIOUS_TRACK, /*IE, Chrome*/
/* 178 */ SDLK_UNKNOWN,
/* 179 */ SDLK_AUDIOPLAY, /*IE, Chrome*/
/* 179 */ SDLK_MEDIA_PLAY, /*IE, Chrome*/
/* 180 */ SDLK_UNKNOWN,
/* 181 */ SDLK_AUDIOMUTE, /*FX*/
/* 181 */ SDLK_UNKNOWN,
/* 182 */ SDLK_VOLUMEDOWN, /*FX*/
/* 183 */ SDLK_VOLUMEUP, /*FX*/
/* 184 */ SDLK_UNKNOWN,
@@ -410,27 +410,25 @@ static SDL_Scancode Emscripten_MapScanCode(const char *code)
case DOM_PK_PASTE:
return SDL_SCANCODE_PASTE;
case DOM_PK_MEDIA_TRACK_PREVIOUS:
return SDL_SCANCODE_AUDIOPREV;
return SDL_SCANCODE_MEDIA_PREVIOUS_TRACK;
case DOM_PK_CUT:
return SDL_SCANCODE_CUT;
case DOM_PK_COPY:
return SDL_SCANCODE_COPY;
case DOM_PK_MEDIA_TRACK_NEXT:
return SDL_SCANCODE_AUDIONEXT;
return SDL_SCANCODE_MEDIA_NEXT_TRACK;
case DOM_PK_NUMPAD_ENTER:
return SDL_SCANCODE_KP_ENTER;
case DOM_PK_CONTROL_RIGHT:
return SDL_SCANCODE_RCTRL;
case DOM_PK_AUDIO_VOLUME_MUTE:
return SDL_SCANCODE_AUDIOMUTE;
case DOM_PK_LAUNCH_APP_2:
return SDL_SCANCODE_CALCULATOR;
return SDL_SCANCODE_MUTE;
case DOM_PK_MEDIA_PLAY_PAUSE:
return SDL_SCANCODE_AUDIOPLAY;
return SDL_SCANCODE_MEDIA_PLAY_PAUSE;
case DOM_PK_MEDIA_STOP:
return SDL_SCANCODE_AUDIOSTOP;
return SDL_SCANCODE_MEDIA_STOP;
case DOM_PK_EJECT:
return SDL_SCANCODE_EJECT;
return SDL_SCANCODE_MEDIA_EJECT;
case DOM_PK_AUDIO_VOLUME_DOWN:
return SDL_SCANCODE_VOLUMEDOWN;
case DOM_PK_AUDIO_VOLUME_UP:
@@ -485,12 +483,8 @@ static SDL_Scancode Emscripten_MapScanCode(const char *code)
return SDL_SCANCODE_AC_FORWARD;
case DOM_PK_BROWSER_BACK:
return SDL_SCANCODE_AC_BACK;
case DOM_PK_LAUNCH_APP_1:
return SDL_SCANCODE_COMPUTER;
case DOM_PK_LAUNCH_MAIL:
return SDL_SCANCODE_MAIL;
case DOM_PK_MEDIA_SELECT:
return SDL_SCANCODE_MEDIASELECT;
return SDL_SCANCODE_MEDIA_SELECT;
}
return SDL_SCANCODE_UNKNOWN;
@@ -801,11 +795,43 @@ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent
SDL_bool prevent_default = SDL_TRUE;
SDL_bool is_nav_key = SDL_FALSE;
if (scancode == SDL_SCANCODE_UNKNOWN) {
if (SDL_strcmp(keyEvent->key, "Sleep") == 0) {
scancode = SDL_SCANCODE_SLEEP;
} else if (SDL_strcmp(keyEvent->key, "ChannelUp") == 0) {
scancode = SDL_SCANCODE_CHANNEL_INCREMENT;
} else if (SDL_strcmp(keyEvent->key, "ChannelDown") == 0) {
scancode = SDL_SCANCODE_CHANNEL_DECREMENT;
} else if (SDL_strcmp(keyEvent->key, "MediaPlay") == 0) {
scancode = SDL_SCANCODE_MEDIA_PLAY;
} else if (SDL_strcmp(keyEvent->key, "MediaPause") == 0) {
scancode = SDL_SCANCODE_MEDIA_PAUSE;
} else if (SDL_strcmp(keyEvent->key, "MediaRecord") == 0) {
scancode = SDL_SCANCODE_MEDIA_RECORD;
} else if (SDL_strcmp(keyEvent->key, "MediaFastForward") == 0) {
scancode = SDL_SCANCODE_MEDIA_FAST_FORWARD;
} else if (SDL_strcmp(keyEvent->key, "MediaRewind") == 0) {
scancode = SDL_SCANCODE_MEDIA_REWIND;
} else if (SDL_strcmp(keyEvent->key, "Close") == 0) {
scancode = SDL_SCANCODE_AC_CLOSE;
} else if (SDL_strcmp(keyEvent->key, "New") == 0) {
scancode = SDL_SCANCODE_AC_NEW;
} else if (SDL_strcmp(keyEvent->key, "Open") == 0) {
scancode = SDL_SCANCODE_AC_OPEN;
} else if (SDL_strcmp(keyEvent->key, "Print") == 0) {
scancode = SDL_SCANCODE_AC_PRINT;
} else if (SDL_strcmp(keyEvent->key, "Save") == 0) {
scancode = SDL_SCANCODE_AC_SAVE;
} else if (SDL_strcmp(keyEvent->key, "Props") == 0) {
scancode = SDL_SCANCODE_AC_PROPERTIES;
}
}
if (scancode == SDL_SCANCODE_UNKNOWN) {
/* KaiOS Left Soft Key and Right Soft Key, they act as OK/Next/Menu and Cancel/Back/Clear */
if (SDL_strncmp(keyEvent->key, "SoftLeft", 9) == 0) {
if (SDL_strcmp(keyEvent->key, "SoftLeft") == 0) {
scancode = SDL_SCANCODE_AC_FORWARD;
} else if (SDL_strncmp(keyEvent->key, "SoftRight", 10) == 0) {
} else if (SDL_strcmp(keyEvent->key, "SoftRight") == 0) {
scancode = SDL_SCANCODE_AC_BACK;
}
}