| | |
| | | /* 9 */ SDL_SCANCODE_TAB, |
| | | /* 10 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 11 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 12 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 12 */ SDL_SCANCODE_KP_5, |
| | | /* 13 */ SDL_SCANCODE_RETURN, |
| | | /* 14 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 15 */ SDL_SCANCODE_UNKNOWN, |
| | |
| | | /* 57 */ SDL_SCANCODE_9, |
| | | /* 58 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 59 */ SDL_SCANCODE_SEMICOLON, |
| | | /* 60 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 60 */ SDL_SCANCODE_NONUSBACKSLASH, |
| | | /* 61 */ SDL_SCANCODE_EQUALS, |
| | | /* 62 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 63 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 63 */ SDL_SCANCODE_MINUS, |
| | | /* 64 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 65 */ SDL_SCANCODE_A, |
| | | /* 66 */ SDL_SCANCODE_B, |
| | |
| | | /* 157 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 158 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 159 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 160 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 160 */ SDL_SCANCODE_GRAVE, |
| | | /* 161 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 162 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 163 */ SDL_SCANCODE_KP_HASH, /*KaiOS phone keypad*/ |
| | |
| | | /* 168 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 169 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 170 */ SDL_SCANCODE_KP_MULTIPLY, /*KaiOS phone keypad*/ |
| | | /* 171 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 171 */ SDL_SCANCODE_RIGHTBRACKET, |
| | | /* 172 */ SDL_SCANCODE_UNKNOWN, |
| | | /* 173 */ SDL_SCANCODE_MINUS, /*FX*/ |
| | | /* 174 */ SDL_SCANCODE_VOLUMEDOWN, /*IE, Chrome*/ |
| | |
| | | |
| | | if (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN) { |
| | | if (SDL_GetMouse()->relative_mode && !window_data->has_pointer_lock) { |
| | | emscripten_request_pointerlock(NULL, 0); /* try to regrab lost pointer lock. */ |
| | | emscripten_request_pointerlock(window_data->canvas_id, 0); /* try to regrab lost pointer lock. */ |
| | | } |
| | | sdl_button_state = SDL_PRESSED; |
| | | sdl_event_type = SDL_MOUSEBUTTONDOWN; |
| | |
| | | if (keyEvent->keyCode < SDL_arraysize(emscripten_scancode_table)) { |
| | | scancode = emscripten_scancode_table[keyEvent->keyCode]; |
| | | |
| | | if (keyEvent->keyCode == 0) { |
| | | /* 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) { |
| | | scancode = SDL_SCANCODE_AC_FORWARD; |
| | | } |
| | | if (SDL_strncmp(keyEvent->key, "SoftRight", 10) == 0) { |
| | | scancode = SDL_SCANCODE_AC_BACK; |
| | | } |
| | | } |
| | | |
| | | if (scancode != SDL_SCANCODE_UNKNOWN) { |
| | | |
| | | if (keyEvent->location == DOM_KEY_LOCATION_RIGHT) { |
| | |
| | | break; |
| | | case SDL_SCANCODE_LGUI: |
| | | scancode = SDL_SCANCODE_RGUI; |
| | | break; |
| | | } |
| | | } |
| | | else if (keyEvent->location == DOM_KEY_LOCATION_NUMPAD) { |
| | | switch (scancode) { |
| | | case SDL_SCANCODE_0: |
| | | case SDL_SCANCODE_INSERT: |
| | | scancode = SDL_SCANCODE_KP_0; |
| | | break; |
| | | case SDL_SCANCODE_1: |
| | | case SDL_SCANCODE_END: |
| | | scancode = SDL_SCANCODE_KP_1; |
| | | break; |
| | | case SDL_SCANCODE_2: |
| | | case SDL_SCANCODE_DOWN: |
| | | scancode = SDL_SCANCODE_KP_2; |
| | | break; |
| | | case SDL_SCANCODE_3: |
| | | case SDL_SCANCODE_PAGEDOWN: |
| | | scancode = SDL_SCANCODE_KP_3; |
| | | break; |
| | | case SDL_SCANCODE_4: |
| | | case SDL_SCANCODE_LEFT: |
| | | scancode = SDL_SCANCODE_KP_4; |
| | | break; |
| | | case SDL_SCANCODE_5: |
| | | scancode = SDL_SCANCODE_KP_5; |
| | | break; |
| | | case SDL_SCANCODE_6: |
| | | case SDL_SCANCODE_RIGHT: |
| | | scancode = SDL_SCANCODE_KP_6; |
| | | break; |
| | | case SDL_SCANCODE_7: |
| | | case SDL_SCANCODE_HOME: |
| | | scancode = SDL_SCANCODE_KP_7; |
| | | break; |
| | | case SDL_SCANCODE_8: |
| | | case SDL_SCANCODE_UP: |
| | | scancode = SDL_SCANCODE_KP_8; |
| | | break; |
| | | case SDL_SCANCODE_9: |
| | | case SDL_SCANCODE_PAGEUP: |
| | | scancode = SDL_SCANCODE_KP_9; |
| | | break; |
| | | case SDL_SCANCODE_RETURN: |
| | | scancode = SDL_SCANCODE_KP_ENTER; |
| | | break; |
| | | case SDL_SCANCODE_DELETE: |
| | | scancode = SDL_SCANCODE_KP_PERIOD; |
| | | break; |
| | | } |
| | | } |
| | |
| | | window_data->requested_fullscreen_mode = 0; |
| | | |
| | | if(!window_data->requested_fullscreen_mode) |
| | | window_data->window->flags |= SDL_WINDOW_FULLSCREEN; /*we didn't reqest fullscreen*/ |
| | | window_data->window->flags |= SDL_WINDOW_FULLSCREEN; /*we didn't request fullscreen*/ |
| | | } |
| | | else |
| | | { |
| | |
| | | return 0; |
| | | } |
| | | |
| | | static const char* |
| | | Emscripten_HandleBeforeUnload(int eventType, const void *reserved, void *userData) |
| | | { |
| | | /* This event will need to be handled synchronously, e.g. using |
| | | SDL_AddEventWatch, as the page is being closed *now*. */ |
| | | /* No need to send a SDL_QUIT, the app won't get control again. */ |
| | | SDL_SendAppEvent(SDL_APP_TERMINATING); |
| | | return ""; /* don't trigger confirmation dialog */ |
| | | } |
| | | |
| | | void |
| | | Emscripten_RegisterEventHandlers(SDL_WindowData *data) |
| | | { |
| | |
| | | emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, data, 0, Emscripten_HandleResize); |
| | | |
| | | emscripten_set_visibilitychange_callback(data, 0, Emscripten_HandleVisibilityChange); |
| | | |
| | | emscripten_set_beforeunload_callback(data, Emscripten_HandleBeforeUnload); |
| | | } |
| | | |
| | | void |
| | |
| | | emscripten_set_resize_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, NULL, 0, NULL); |
| | | |
| | | emscripten_set_visibilitychange_callback(NULL, 0, NULL); |
| | | |
| | | emscripten_set_beforeunload_callback(NULL, NULL); |
| | | } |
| | | |
| | | #endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */ |