summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c')
-rw-r--r--3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c680
1 files changed, 0 insertions, 680 deletions
diff --git a/3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c b/3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c
deleted file mode 100644
index a4720e40224..00000000000
--- a/3rdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c
+++ /dev/null
@@ -1,680 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-
-
-#include "../../SDL_internal.h"
-
-#if SDL_VIDEO_DRIVER_EMSCRIPTEN
-
-#include <emscripten/html5.h>
-
-#include "../../events/SDL_events_c.h"
-#include "../../events/SDL_keyboard_c.h"
-#include "../../events/SDL_touch_c.h"
-
-#include "SDL_emscriptenevents.h"
-#include "SDL_emscriptenvideo.h"
-
-#include "SDL_hints.h"
-
-#define FULLSCREEN_MASK ( SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN )
-
-/*
-.keyCode to scancode
-https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
-https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
-*/
-static const SDL_Scancode emscripten_scancode_table[] = {
- /* 0 */ SDL_SCANCODE_UNKNOWN,
- /* 1 */ SDL_SCANCODE_UNKNOWN,
- /* 2 */ SDL_SCANCODE_UNKNOWN,
- /* 3 */ SDL_SCANCODE_CANCEL,
- /* 4 */ SDL_SCANCODE_UNKNOWN,
- /* 5 */ SDL_SCANCODE_UNKNOWN,
- /* 6 */ SDL_SCANCODE_HELP,
- /* 7 */ SDL_SCANCODE_UNKNOWN,
- /* 8 */ SDL_SCANCODE_BACKSPACE,
- /* 9 */ SDL_SCANCODE_TAB,
- /* 10 */ SDL_SCANCODE_UNKNOWN,
- /* 11 */ SDL_SCANCODE_UNKNOWN,
- /* 12 */ SDL_SCANCODE_UNKNOWN,
- /* 13 */ SDL_SCANCODE_RETURN,
- /* 14 */ SDL_SCANCODE_UNKNOWN,
- /* 15 */ SDL_SCANCODE_UNKNOWN,
- /* 16 */ SDL_SCANCODE_LSHIFT,
- /* 17 */ SDL_SCANCODE_LCTRL,
- /* 18 */ SDL_SCANCODE_LALT,
- /* 19 */ SDL_SCANCODE_PAUSE,
- /* 20 */ SDL_SCANCODE_CAPSLOCK,
- /* 21 */ SDL_SCANCODE_UNKNOWN,
- /* 22 */ SDL_SCANCODE_UNKNOWN,
- /* 23 */ SDL_SCANCODE_UNKNOWN,
- /* 24 */ SDL_SCANCODE_UNKNOWN,
- /* 25 */ SDL_SCANCODE_UNKNOWN,
- /* 26 */ SDL_SCANCODE_UNKNOWN,
- /* 27 */ SDL_SCANCODE_ESCAPE,
- /* 28 */ SDL_SCANCODE_UNKNOWN,
- /* 29 */ SDL_SCANCODE_UNKNOWN,
- /* 30 */ SDL_SCANCODE_UNKNOWN,
- /* 31 */ SDL_SCANCODE_UNKNOWN,
- /* 32 */ SDL_SCANCODE_SPACE,
- /* 33 */ SDL_SCANCODE_PAGEUP,
- /* 34 */ SDL_SCANCODE_PAGEDOWN,
- /* 35 */ SDL_SCANCODE_END,
- /* 36 */ SDL_SCANCODE_HOME,
- /* 37 */ SDL_SCANCODE_LEFT,
- /* 38 */ SDL_SCANCODE_UP,
- /* 39 */ SDL_SCANCODE_RIGHT,
- /* 40 */ SDL_SCANCODE_DOWN,
- /* 41 */ SDL_SCANCODE_UNKNOWN,
- /* 42 */ SDL_SCANCODE_UNKNOWN,
- /* 43 */ SDL_SCANCODE_UNKNOWN,
- /* 44 */ SDL_SCANCODE_UNKNOWN,
- /* 45 */ SDL_SCANCODE_INSERT,
- /* 46 */ SDL_SCANCODE_DELETE,
- /* 47 */ SDL_SCANCODE_UNKNOWN,
- /* 48 */ SDL_SCANCODE_0,
- /* 49 */ SDL_SCANCODE_1,
- /* 50 */ SDL_SCANCODE_2,
- /* 51 */ SDL_SCANCODE_3,
- /* 52 */ SDL_SCANCODE_4,
- /* 53 */ SDL_SCANCODE_5,
- /* 54 */ SDL_SCANCODE_6,
- /* 55 */ SDL_SCANCODE_7,
- /* 56 */ SDL_SCANCODE_8,
- /* 57 */ SDL_SCANCODE_9,
- /* 58 */ SDL_SCANCODE_UNKNOWN,
- /* 59 */ SDL_SCANCODE_SEMICOLON,
- /* 60 */ SDL_SCANCODE_UNKNOWN,
- /* 61 */ SDL_SCANCODE_EQUALS,
- /* 62 */ SDL_SCANCODE_UNKNOWN,
- /* 63 */ SDL_SCANCODE_UNKNOWN,
- /* 64 */ SDL_SCANCODE_UNKNOWN,
- /* 65 */ SDL_SCANCODE_A,
- /* 66 */ SDL_SCANCODE_B,
- /* 67 */ SDL_SCANCODE_C,
- /* 68 */ SDL_SCANCODE_D,
- /* 69 */ SDL_SCANCODE_E,
- /* 70 */ SDL_SCANCODE_F,
- /* 71 */ SDL_SCANCODE_G,
- /* 72 */ SDL_SCANCODE_H,
- /* 73 */ SDL_SCANCODE_I,
- /* 74 */ SDL_SCANCODE_J,
- /* 75 */ SDL_SCANCODE_K,
- /* 76 */ SDL_SCANCODE_L,
- /* 77 */ SDL_SCANCODE_M,
- /* 78 */ SDL_SCANCODE_N,
- /* 79 */ SDL_SCANCODE_O,
- /* 80 */ SDL_SCANCODE_P,
- /* 81 */ SDL_SCANCODE_Q,
- /* 82 */ SDL_SCANCODE_R,
- /* 83 */ SDL_SCANCODE_S,
- /* 84 */ SDL_SCANCODE_T,
- /* 85 */ SDL_SCANCODE_U,
- /* 86 */ SDL_SCANCODE_V,
- /* 87 */ SDL_SCANCODE_W,
- /* 88 */ SDL_SCANCODE_X,
- /* 89 */ SDL_SCANCODE_Y,
- /* 90 */ SDL_SCANCODE_Z,
- /* 91 */ SDL_SCANCODE_LGUI,
- /* 92 */ SDL_SCANCODE_UNKNOWN,
- /* 93 */ SDL_SCANCODE_APPLICATION,
- /* 94 */ SDL_SCANCODE_UNKNOWN,
- /* 95 */ SDL_SCANCODE_UNKNOWN,
- /* 96 */ SDL_SCANCODE_KP_0,
- /* 97 */ SDL_SCANCODE_KP_1,
- /* 98 */ SDL_SCANCODE_KP_2,
- /* 99 */ SDL_SCANCODE_KP_3,
- /* 100 */ SDL_SCANCODE_KP_4,
- /* 101 */ SDL_SCANCODE_KP_5,
- /* 102 */ SDL_SCANCODE_KP_6,
- /* 103 */ SDL_SCANCODE_KP_7,
- /* 104 */ SDL_SCANCODE_KP_8,
- /* 105 */ SDL_SCANCODE_KP_9,
- /* 106 */ SDL_SCANCODE_KP_MULTIPLY,
- /* 107 */ SDL_SCANCODE_KP_PLUS,
- /* 108 */ SDL_SCANCODE_UNKNOWN,
- /* 109 */ SDL_SCANCODE_KP_MINUS,
- /* 110 */ SDL_SCANCODE_KP_PERIOD,
- /* 111 */ SDL_SCANCODE_KP_DIVIDE,
- /* 112 */ SDL_SCANCODE_F1,
- /* 113 */ SDL_SCANCODE_F2,
- /* 114 */ SDL_SCANCODE_F3,
- /* 115 */ SDL_SCANCODE_F4,
- /* 116 */ SDL_SCANCODE_F5,
- /* 117 */ SDL_SCANCODE_F6,
- /* 118 */ SDL_SCANCODE_F7,
- /* 119 */ SDL_SCANCODE_F8,
- /* 120 */ SDL_SCANCODE_F9,
- /* 121 */ SDL_SCANCODE_F10,
- /* 122 */ SDL_SCANCODE_F11,
- /* 123 */ SDL_SCANCODE_F12,
- /* 124 */ SDL_SCANCODE_F13,
- /* 125 */ SDL_SCANCODE_F14,
- /* 126 */ SDL_SCANCODE_F15,
- /* 127 */ SDL_SCANCODE_F16,
- /* 128 */ SDL_SCANCODE_F17,
- /* 129 */ SDL_SCANCODE_F18,
- /* 130 */ SDL_SCANCODE_F19,
- /* 131 */ SDL_SCANCODE_F20,
- /* 132 */ SDL_SCANCODE_F21,
- /* 133 */ SDL_SCANCODE_F22,
- /* 134 */ SDL_SCANCODE_F23,
- /* 135 */ SDL_SCANCODE_F24,
- /* 136 */ SDL_SCANCODE_UNKNOWN,
- /* 137 */ SDL_SCANCODE_UNKNOWN,
- /* 138 */ SDL_SCANCODE_UNKNOWN,
- /* 139 */ SDL_SCANCODE_UNKNOWN,
- /* 140 */ SDL_SCANCODE_UNKNOWN,
- /* 141 */ SDL_SCANCODE_UNKNOWN,
- /* 142 */ SDL_SCANCODE_UNKNOWN,
- /* 143 */ SDL_SCANCODE_UNKNOWN,
- /* 144 */ SDL_SCANCODE_NUMLOCKCLEAR,
- /* 145 */ SDL_SCANCODE_SCROLLLOCK,
- /* 146 */ SDL_SCANCODE_UNKNOWN,
- /* 147 */ SDL_SCANCODE_UNKNOWN,
- /* 148 */ SDL_SCANCODE_UNKNOWN,
- /* 149 */ SDL_SCANCODE_UNKNOWN,
- /* 150 */ SDL_SCANCODE_UNKNOWN,
- /* 151 */ SDL_SCANCODE_UNKNOWN,
- /* 152 */ SDL_SCANCODE_UNKNOWN,
- /* 153 */ SDL_SCANCODE_UNKNOWN,
- /* 154 */ SDL_SCANCODE_UNKNOWN,
- /* 155 */ SDL_SCANCODE_UNKNOWN,
- /* 156 */ SDL_SCANCODE_UNKNOWN,
- /* 157 */ SDL_SCANCODE_UNKNOWN,
- /* 158 */ SDL_SCANCODE_UNKNOWN,
- /* 159 */ SDL_SCANCODE_UNKNOWN,
- /* 160 */ SDL_SCANCODE_UNKNOWN,
- /* 161 */ SDL_SCANCODE_UNKNOWN,
- /* 162 */ SDL_SCANCODE_UNKNOWN,
- /* 163 */ SDL_SCANCODE_UNKNOWN,
- /* 164 */ SDL_SCANCODE_UNKNOWN,
- /* 165 */ SDL_SCANCODE_UNKNOWN,
- /* 166 */ SDL_SCANCODE_UNKNOWN,
- /* 167 */ SDL_SCANCODE_UNKNOWN,
- /* 168 */ SDL_SCANCODE_UNKNOWN,
- /* 169 */ SDL_SCANCODE_UNKNOWN,
- /* 170 */ SDL_SCANCODE_UNKNOWN,
- /* 171 */ SDL_SCANCODE_UNKNOWN,
- /* 172 */ SDL_SCANCODE_UNKNOWN,
- /* 173 */ SDL_SCANCODE_MINUS, /*FX*/
- /* 174 */ SDL_SCANCODE_VOLUMEDOWN, /*IE, Chrome*/
- /* 175 */ SDL_SCANCODE_VOLUMEUP, /*IE, Chrome*/
- /* 176 */ SDL_SCANCODE_AUDIONEXT, /*IE, Chrome*/
- /* 177 */ SDL_SCANCODE_AUDIOPREV, /*IE, Chrome*/
- /* 178 */ SDL_SCANCODE_UNKNOWN,
- /* 179 */ SDL_SCANCODE_AUDIOPLAY, /*IE, Chrome*/
- /* 180 */ SDL_SCANCODE_UNKNOWN,
- /* 181 */ SDL_SCANCODE_AUDIOMUTE, /*FX*/
- /* 182 */ SDL_SCANCODE_VOLUMEDOWN, /*FX*/
- /* 183 */ SDL_SCANCODE_VOLUMEUP, /*FX*/
- /* 184 */ SDL_SCANCODE_UNKNOWN,
- /* 185 */ SDL_SCANCODE_UNKNOWN,
- /* 186 */ SDL_SCANCODE_SEMICOLON, /*IE, Chrome, D3E legacy*/
- /* 187 */ SDL_SCANCODE_EQUALS, /*IE, Chrome, D3E legacy*/
- /* 188 */ SDL_SCANCODE_COMMA,
- /* 189 */ SDL_SCANCODE_MINUS, /*IE, Chrome, D3E legacy*/
- /* 190 */ SDL_SCANCODE_PERIOD,
- /* 191 */ SDL_SCANCODE_SLASH,
- /* 192 */ SDL_SCANCODE_GRAVE, /*FX, D3E legacy (SDL_SCANCODE_APOSTROPHE in IE/Chrome)*/
- /* 193 */ SDL_SCANCODE_UNKNOWN,
- /* 194 */ SDL_SCANCODE_UNKNOWN,
- /* 195 */ SDL_SCANCODE_UNKNOWN,
- /* 196 */ SDL_SCANCODE_UNKNOWN,
- /* 197 */ SDL_SCANCODE_UNKNOWN,
- /* 198 */ SDL_SCANCODE_UNKNOWN,
- /* 199 */ SDL_SCANCODE_UNKNOWN,
- /* 200 */ SDL_SCANCODE_UNKNOWN,
- /* 201 */ SDL_SCANCODE_UNKNOWN,
- /* 202 */ SDL_SCANCODE_UNKNOWN,
- /* 203 */ SDL_SCANCODE_UNKNOWN,
- /* 204 */ SDL_SCANCODE_UNKNOWN,
- /* 205 */ SDL_SCANCODE_UNKNOWN,
- /* 206 */ SDL_SCANCODE_UNKNOWN,
- /* 207 */ SDL_SCANCODE_UNKNOWN,
- /* 208 */ SDL_SCANCODE_UNKNOWN,
- /* 209 */ SDL_SCANCODE_UNKNOWN,
- /* 210 */ SDL_SCANCODE_UNKNOWN,
- /* 211 */ SDL_SCANCODE_UNKNOWN,
- /* 212 */ SDL_SCANCODE_UNKNOWN,
- /* 213 */ SDL_SCANCODE_UNKNOWN,
- /* 214 */ SDL_SCANCODE_UNKNOWN,
- /* 215 */ SDL_SCANCODE_UNKNOWN,
- /* 216 */ SDL_SCANCODE_UNKNOWN,
- /* 217 */ SDL_SCANCODE_UNKNOWN,
- /* 218 */ SDL_SCANCODE_UNKNOWN,
- /* 219 */ SDL_SCANCODE_LEFTBRACKET,
- /* 220 */ SDL_SCANCODE_BACKSLASH,
- /* 221 */ SDL_SCANCODE_RIGHTBRACKET,
- /* 222 */ SDL_SCANCODE_APOSTROPHE, /*FX, D3E legacy*/
-};
-
-
-/* "borrowed" from SDL_windowsevents.c */
-int
-Emscripten_ConvertUTF32toUTF8(Uint32 codepoint, char * text)
-{
- if (codepoint <= 0x7F) {
- text[0] = (char) codepoint;
- text[1] = '\0';
- } else if (codepoint <= 0x7FF) {
- text[0] = 0xC0 | (char) ((codepoint >> 6) & 0x1F);
- text[1] = 0x80 | (char) (codepoint & 0x3F);
- text[2] = '\0';
- } else if (codepoint <= 0xFFFF) {
- text[0] = 0xE0 | (char) ((codepoint >> 12) & 0x0F);
- text[1] = 0x80 | (char) ((codepoint >> 6) & 0x3F);
- text[2] = 0x80 | (char) (codepoint & 0x3F);
- text[3] = '\0';
- } else if (codepoint <= 0x10FFFF) {
- text[0] = 0xF0 | (char) ((codepoint >> 18) & 0x0F);
- text[1] = 0x80 | (char) ((codepoint >> 12) & 0x3F);
- text[2] = 0x80 | (char) ((codepoint >> 6) & 0x3F);
- text[3] = 0x80 | (char) (codepoint & 0x3F);
- text[4] = '\0';
- } else {
- return SDL_FALSE;
- }
- return SDL_TRUE;
-}
-
-EM_BOOL
-Emscripten_HandleMouseMove(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- int mx, my;
- static double residualx = 0, residualy = 0;
- EmscriptenPointerlockChangeEvent pointerlock_status;
-
- /* rescale (in case canvas is being scaled)*/
- double client_w, client_h, xscale, yscale;
- emscripten_get_element_css_size(NULL, &client_w, &client_h);
- xscale = window_data->window->w / client_w;
- yscale = window_data->window->h / client_h;
-
- /* check for pointer lock */
- int isPointerLockSupported = emscripten_get_pointerlock_status(&pointerlock_status);
- int isPointerLocked = isPointerLockSupported == EMSCRIPTEN_RESULT_SUCCESS ? pointerlock_status.isActive : SDL_FALSE;
-
- if (isPointerLocked) {
- residualx += mouseEvent->movementX * xscale;
- residualy += mouseEvent->movementY * yscale;
- /* Let slow sub-pixel motion accumulate. Don't lose it. */
- mx = residualx;
- residualx -= mx;
- my = residualy;
- residualy -= my;
- } else {
- mx = mouseEvent->canvasX * xscale;
- my = mouseEvent->canvasY * yscale;
- }
-
- SDL_SendMouseMotion(window_data->window, 0, isPointerLocked, mx, my);
- return 0;
-}
-
-EM_BOOL
-Emscripten_HandleMouseButton(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- uint32_t sdl_button;
- switch (mouseEvent->button) {
- case 0:
- sdl_button = SDL_BUTTON_LEFT;
- break;
- case 1:
- sdl_button = SDL_BUTTON_MIDDLE;
- break;
- case 2:
- sdl_button = SDL_BUTTON_RIGHT;
- break;
- default:
- return 0;
- }
-
- SDL_EventType sdl_event_type = (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN ? SDL_PRESSED : SDL_RELEASED);
- SDL_SendMouseButton(window_data->window, 0, sdl_event_type, sdl_button);
- return SDL_GetEventState(sdl_event_type) == SDL_ENABLE;
-}
-
-EM_BOOL
-Emscripten_HandleMouseFocus(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
-
- int mx = mouseEvent->canvasX, my = mouseEvent->canvasY;
- EmscriptenPointerlockChangeEvent pointerlock_status;
-
- /* check for pointer lock */
- int isPointerLockSupported = emscripten_get_pointerlock_status(&pointerlock_status);
- int isPointerLocked = isPointerLockSupported == EMSCRIPTEN_RESULT_SUCCESS ? pointerlock_status.isActive : SDL_FALSE;
-
- if (!isPointerLocked) {
- /* rescale (in case canvas is being scaled)*/
- double client_w, client_h;
- emscripten_get_element_css_size(NULL, &client_w, &client_h);
-
- mx = mx * (window_data->window->w / client_w);
- my = my * (window_data->window->h / client_h);
- SDL_SendMouseMotion(window_data->window, 0, isPointerLocked, mx, my);
- }
-
- SDL_SetMouseFocus(eventType == EMSCRIPTEN_EVENT_MOUSEENTER ? window_data->window : NULL);
- return SDL_GetEventState(SDL_WINDOWEVENT) == SDL_ENABLE;
-}
-
-EM_BOOL
-Emscripten_HandleWheel(int eventType, const EmscriptenWheelEvent *wheelEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- SDL_SendMouseWheel(window_data->window, 0, wheelEvent->deltaX, -wheelEvent->deltaY, SDL_MOUSEWHEEL_NORMAL);
- return SDL_GetEventState(SDL_MOUSEWHEEL) == SDL_ENABLE;
-}
-
-EM_BOOL
-Emscripten_HandleFocus(int eventType, const EmscriptenFocusEvent *wheelEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- /* If the user switches away while keys are pressed (such as
- * via Alt+Tab), key release events won't be received. */
- if (eventType == EMSCRIPTEN_EVENT_BLUR) {
- SDL_ResetKeyboard();
- }
-
-
- SDL_SendWindowEvent(window_data->window, eventType == EMSCRIPTEN_EVENT_FOCUS ? SDL_WINDOWEVENT_FOCUS_GAINED : SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
- return SDL_GetEventState(SDL_WINDOWEVENT) == SDL_ENABLE;
-}
-
-EM_BOOL
-Emscripten_HandleTouch(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- int i;
- double client_w, client_h;
- int preventDefault = 0;
-
- SDL_TouchID deviceId = 1;
- if (SDL_AddTouch(deviceId, "") < 0) {
- return 0;
- }
-
- emscripten_get_element_css_size(NULL, &client_w, &client_h);
-
- for (i = 0; i < touchEvent->numTouches; i++) {
- SDL_FingerID id;
- float x, y;
-
- if (!touchEvent->touches[i].isChanged)
- continue;
-
- id = touchEvent->touches[i].identifier;
- x = touchEvent->touches[i].canvasX / client_w;
- y = touchEvent->touches[i].canvasY / client_h;
-
- if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) {
- if (!window_data->finger_touching) {
- window_data->finger_touching = SDL_TRUE;
- window_data->first_finger = id;
- SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y);
- SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
- }
- SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f);
-
- if (!preventDefault && SDL_GetEventState(SDL_FINGERDOWN) == SDL_ENABLE) {
- preventDefault = 1;
- }
- } else if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) {
- if ((window_data->finger_touching) && (window_data->first_finger == id)) {
- SDL_SendMouseMotion(window_data->window, SDL_TOUCH_MOUSEID, 0, x, y);
- }
- SDL_SendTouchMotion(deviceId, id, x, y, 1.0f);
-
- if (!preventDefault && SDL_GetEventState(SDL_FINGERMOTION) == SDL_ENABLE) {
- preventDefault = 1;
- }
- } else {
- if ((window_data->finger_touching) && (window_data->first_finger == id)) {
- SDL_SendMouseButton(window_data->window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
- window_data->finger_touching = SDL_FALSE;
- }
- SDL_SendTouch(deviceId, id, SDL_FALSE, x, y, 1.0f);
-
- if (!preventDefault && SDL_GetEventState(SDL_FINGERUP) == SDL_ENABLE) {
- preventDefault = 1;
- }
- }
- }
-
- return preventDefault;
-}
-
-EM_BOOL
-Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData)
-{
- Uint32 scancode;
-
- /* .keyCode is deprecated, but still the most reliable way to get keys */
- if (keyEvent->keyCode < SDL_arraysize(emscripten_scancode_table)) {
- scancode = emscripten_scancode_table[keyEvent->keyCode];
-
- if (scancode != SDL_SCANCODE_UNKNOWN) {
-
- if (keyEvent->location == DOM_KEY_LOCATION_RIGHT) {
- switch (scancode) {
- case SDL_SCANCODE_LSHIFT:
- scancode = SDL_SCANCODE_RSHIFT;
- break;
- case SDL_SCANCODE_LCTRL:
- scancode = SDL_SCANCODE_RCTRL;
- break;
- case SDL_SCANCODE_LALT:
- scancode = SDL_SCANCODE_RALT;
- break;
- case SDL_SCANCODE_LGUI:
- scancode = SDL_SCANCODE_RGUI;
- break;
- }
- }
- SDL_SendKeyboardKey(eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_PRESSED : SDL_RELEASED, scancode);
- }
- }
-
- SDL_bool prevent_default = SDL_GetEventState(eventType == EMSCRIPTEN_EVENT_KEYDOWN ? SDL_KEYDOWN : SDL_KEYUP) == SDL_ENABLE;
-
- /* if TEXTINPUT events are enabled we can't prevent keydown or we won't get keypress
- * we need to ALWAYS prevent backspace and tab otherwise chrome takes action and does bad navigation UX
- */
- if (eventType == EMSCRIPTEN_EVENT_KEYDOWN && SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE && keyEvent->keyCode != 8 /* backspace */ && keyEvent->keyCode != 9 /* tab */)
- prevent_default = SDL_FALSE;
-
- return prevent_default;
-}
-
-EM_BOOL
-Emscripten_HandleKeyPress(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData)
-{
- char text[5];
- if (Emscripten_ConvertUTF32toUTF8(keyEvent->charCode, text)) {
- SDL_SendKeyboardText(text);
- }
- return SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE;
-}
-
-EM_BOOL
-Emscripten_HandleFullscreenChange(int eventType, const EmscriptenFullscreenChangeEvent *fullscreenChangeEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- if(fullscreenChangeEvent->isFullscreen)
- {
- window_data->window->flags |= window_data->requested_fullscreen_mode;
-
- window_data->requested_fullscreen_mode = 0;
-
- if(!window_data->requested_fullscreen_mode)
- window_data->window->flags |= SDL_WINDOW_FULLSCREEN; /*we didn't reqest fullscreen*/
- }
- else
- {
- window_data->window->flags &= ~FULLSCREEN_MASK;
- }
-
- return 0;
-}
-
-EM_BOOL
-Emscripten_HandleResize(int eventType, const EmscriptenUiEvent *uiEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
-
- /* update pixel ratio */
- window_data->pixel_ratio = emscripten_get_device_pixel_ratio();
-
- if(!(window_data->window->flags & FULLSCREEN_MASK))
- {
- /* this will only work if the canvas size is set through css */
- if(window_data->window->flags & SDL_WINDOW_RESIZABLE)
- {
- double w = window_data->window->w;
- double h = window_data->window->h;
-
- if(window_data->external_size) {
- emscripten_get_element_css_size(NULL, &w, &h);
- }
-
- emscripten_set_canvas_size(w * window_data->pixel_ratio, h * window_data->pixel_ratio);
-
- /* set_canvas_size unsets this */
- if (!window_data->external_size && window_data->pixel_ratio != 1.0f) {
- emscripten_set_element_css_size(NULL, w, h);
- }
-
- SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, w, h);
- }
- }
-
- return 0;
-}
-
-EM_BOOL
-Emscripten_HandleCanvasResize(int eventType, const void *reserved, void *userData)
-{
- /*this is used during fullscreen changes*/
- SDL_WindowData *window_data = userData;
-
- if(window_data->fullscreen_resize)
- {
- double css_w, css_h;
- emscripten_get_element_css_size(NULL, &css_w, &css_h);
- SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, css_w, css_h);
- }
-
- return 0;
-}
-
-EM_BOOL
-Emscripten_HandleVisibilityChange(int eventType, const EmscriptenVisibilityChangeEvent *visEvent, void *userData)
-{
- SDL_WindowData *window_data = userData;
- SDL_SendWindowEvent(window_data->window, visEvent->hidden ? SDL_WINDOWEVENT_HIDDEN : SDL_WINDOWEVENT_SHOWN, 0, 0);
- return 0;
-}
-
-void
-Emscripten_RegisterEventHandlers(SDL_WindowData *data)
-{
- /* There is only one window and that window is the canvas */
- emscripten_set_mousemove_callback("#canvas", data, 0, Emscripten_HandleMouseMove);
-
- emscripten_set_mousedown_callback("#canvas", data, 0, Emscripten_HandleMouseButton);
- emscripten_set_mouseup_callback("#document", data, 0, Emscripten_HandleMouseButton);
-
- emscripten_set_mouseenter_callback("#canvas", data, 0, Emscripten_HandleMouseFocus);
- emscripten_set_mouseleave_callback("#canvas", data, 0, Emscripten_HandleMouseFocus);
-
- emscripten_set_wheel_callback("#canvas", data, 0, Emscripten_HandleWheel);
-
- emscripten_set_focus_callback("#window", data, 0, Emscripten_HandleFocus);
- emscripten_set_blur_callback("#window", data, 0, Emscripten_HandleFocus);
-
- emscripten_set_touchstart_callback("#canvas", data, 0, Emscripten_HandleTouch);
- emscripten_set_touchend_callback("#canvas", data, 0, Emscripten_HandleTouch);
- emscripten_set_touchmove_callback("#canvas", data, 0, Emscripten_HandleTouch);
- emscripten_set_touchcancel_callback("#canvas", data, 0, Emscripten_HandleTouch);
-
- /* Keyboard events are awkward */
- const char *keyElement = SDL_GetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT);
- if (!keyElement) keyElement = "#window";
-
- emscripten_set_keydown_callback(keyElement, data, 0, Emscripten_HandleKey);
- emscripten_set_keyup_callback(keyElement, data, 0, Emscripten_HandleKey);
- emscripten_set_keypress_callback(keyElement, data, 0, Emscripten_HandleKeyPress);
-
- emscripten_set_fullscreenchange_callback("#document", data, 0, Emscripten_HandleFullscreenChange);
-
- emscripten_set_resize_callback("#window", data, 0, Emscripten_HandleResize);
-
- emscripten_set_visibilitychange_callback(data, 0, Emscripten_HandleVisibilityChange);
-}
-
-void
-Emscripten_UnregisterEventHandlers(SDL_WindowData *data)
-{
- /* only works due to having one window */
- emscripten_set_mousemove_callback("#canvas", NULL, 0, NULL);
-
- emscripten_set_mousedown_callback("#canvas", NULL, 0, NULL);
- emscripten_set_mouseup_callback("#document", NULL, 0, NULL);
-
- emscripten_set_mouseenter_callback("#canvas", NULL, 0, NULL);
- emscripten_set_mouseleave_callback("#canvas", NULL, 0, NULL);
-
- emscripten_set_wheel_callback("#canvas", NULL, 0, NULL);
-
- emscripten_set_focus_callback("#window", NULL, 0, NULL);
- emscripten_set_blur_callback("#window", NULL, 0, NULL);
-
- emscripten_set_touchstart_callback("#canvas", NULL, 0, NULL);
- emscripten_set_touchend_callback("#canvas", NULL, 0, NULL);
- emscripten_set_touchmove_callback("#canvas", NULL, 0, NULL);
- emscripten_set_touchcancel_callback("#canvas", NULL, 0, NULL);
-
- const char *target = SDL_GetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT);
- if (!target) {
- target = "#window";
- }
-
- emscripten_set_keydown_callback(target, NULL, 0, NULL);
- emscripten_set_keyup_callback(target, NULL, 0, NULL);
-
- emscripten_set_keypress_callback(target, NULL, 0, NULL);
-
- emscripten_set_fullscreenchange_callback("#document", NULL, 0, NULL);
-
- emscripten_set_resize_callback("#window", NULL, 0, NULL);
-
- emscripten_set_visibilitychange_callback(NULL, 0, NULL);
-}
-
-#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */
-
-/* vi: set ts=4 sw=4 expandtab: */