| /* |
| Simple DirectMedia Layer |
| Copyright (C) 1997-2021 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_NACL |
| |
| #include "SDL.h" |
| #include "../../events/SDL_sysevents.h" |
| #include "../../events/SDL_events_c.h" |
| #include "SDL_naclevents_c.h" |
| #include "SDL_naclvideo.h" |
| #include "ppapi_simple/ps_event.h" |
| |
| /* Ref: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent */ |
| |
| static SDL_Scancode NACL_Keycodes[] = { |
| SDL_SCANCODE_UNKNOWN, /* 0 */ |
| SDL_SCANCODE_UNKNOWN, /* 1 */ |
| SDL_SCANCODE_UNKNOWN, /* 2 */ |
| SDL_SCANCODE_CANCEL, /* DOM_VK_CANCEL 3 */ |
| SDL_SCANCODE_UNKNOWN, /* 4 */ |
| SDL_SCANCODE_UNKNOWN, /* 5 */ |
| SDL_SCANCODE_HELP, /* DOM_VK_HELP 6 */ |
| SDL_SCANCODE_UNKNOWN, /* 7 */ |
| SDL_SCANCODE_BACKSPACE, /* DOM_VK_BACK_SPACE 8 */ |
| SDL_SCANCODE_TAB, /* DOM_VK_TAB 9 */ |
| SDL_SCANCODE_UNKNOWN, /* 10 */ |
| SDL_SCANCODE_UNKNOWN, /* 11 */ |
| SDL_SCANCODE_CLEAR, /* DOM_VK_CLEAR 12 */ |
| SDL_SCANCODE_RETURN, /* DOM_VK_RETURN 13 */ |
| SDL_SCANCODE_RETURN, /* DOM_VK_ENTER 14 */ |
| SDL_SCANCODE_UNKNOWN, /* 15 */ |
| SDL_SCANCODE_LSHIFT, /* DOM_VK_SHIFT 16 */ |
| SDL_SCANCODE_LCTRL, /* DOM_VK_CONTROL 17 */ |
| SDL_SCANCODE_LALT, /* DOM_VK_ALT 18 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_PAUSE 19 */ |
| SDL_SCANCODE_CAPSLOCK, /* DOM_VK_CAPS_LOCK 20 */ |
| SDL_SCANCODE_LANG1, /* DOM_VK_KANA DOM_VK_HANGUL 21 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_EISU 22 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_JUNJA 23 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_FINAL 24 */ |
| SDL_SCANCODE_LANG2, /* DOM_VK_HANJA DOM_VK_KANJI 25 */ |
| SDL_SCANCODE_UNKNOWN, /* 26 */ |
| SDL_SCANCODE_ESCAPE, /* DOM_VK_ESCAPE 27 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_CONVERT 28 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_NONCONVERT 29 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_ACCEPT 30 */ |
| SDL_SCANCODE_MODE, /* DOM_VK_MODECHANGE 31 */ |
| SDL_SCANCODE_SPACE, /* DOM_VK_SPACE 32 */ |
| SDL_SCANCODE_PAGEUP, /* DOM_VK_PAGE_UP 33 */ |
| SDL_SCANCODE_PAGEDOWN, /* DOM_VK_PAGE_DOWN 34 */ |
| SDL_SCANCODE_END, /* DOM_VK_END 35 */ |
| SDL_SCANCODE_HOME, /* DOM_VK_HOME 36 */ |
| SDL_SCANCODE_LEFT, /* DOM_VK_LEFT 37 */ |
| SDL_SCANCODE_UP, /* DOM_VK_UP 38 */ |
| SDL_SCANCODE_RIGHT, /* DOM_VK_RIGHT 39 */ |
| SDL_SCANCODE_DOWN, /* DOM_VK_DOWN 40 */ |
| SDL_SCANCODE_SELECT, /* DOM_VK_SELECT 41 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_PRINT 42 */ |
| SDL_SCANCODE_EXECUTE, /* DOM_VK_EXECUTE 43 */ |
| SDL_SCANCODE_PRINTSCREEN, /* DOM_VK_PRINTSCREEN 44 */ |
| SDL_SCANCODE_INSERT, /* DOM_VK_INSERT 45 */ |
| SDL_SCANCODE_DELETE, /* DOM_VK_DELETE 46 */ |
| SDL_SCANCODE_UNKNOWN, /* 47 */ |
| SDL_SCANCODE_0, /* DOM_VK_0 48 */ |
| SDL_SCANCODE_1, /* DOM_VK_1 49 */ |
| SDL_SCANCODE_2, /* DOM_VK_2 50 */ |
| SDL_SCANCODE_3, /* DOM_VK_3 51 */ |
| SDL_SCANCODE_4, /* DOM_VK_4 52 */ |
| SDL_SCANCODE_5, /* DOM_VK_5 53 */ |
| SDL_SCANCODE_6, /* DOM_VK_6 54 */ |
| SDL_SCANCODE_7, /* DOM_VK_7 55 */ |
| SDL_SCANCODE_8, /* DOM_VK_8 56 */ |
| SDL_SCANCODE_9, /* DOM_VK_9 57 */ |
| SDL_SCANCODE_KP_COLON, /* DOM_VK_COLON 58 */ |
| SDL_SCANCODE_SEMICOLON, /* DOM_VK_SEMICOLON 59 */ |
| SDL_SCANCODE_KP_LESS, /* DOM_VK_LESS_THAN 60 */ |
| SDL_SCANCODE_EQUALS, /* DOM_VK_EQUALS 61 */ |
| SDL_SCANCODE_KP_GREATER, /* DOM_VK_GREATER_THAN 62 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_QUESTION_MARK 63 */ |
| SDL_SCANCODE_KP_AT, /* DOM_VK_AT 64 */ |
| SDL_SCANCODE_A, /* DOM_VK_A 65 */ |
| SDL_SCANCODE_B, /* DOM_VK_B 66 */ |
| SDL_SCANCODE_C, /* DOM_VK_C 67 */ |
| SDL_SCANCODE_D, /* DOM_VK_D 68 */ |
| SDL_SCANCODE_E, /* DOM_VK_E 69 */ |
| SDL_SCANCODE_F, /* DOM_VK_F 70 */ |
| SDL_SCANCODE_G, /* DOM_VK_G 71 */ |
| SDL_SCANCODE_H, /* DOM_VK_H 72 */ |
| SDL_SCANCODE_I, /* DOM_VK_I 73 */ |
| SDL_SCANCODE_J, /* DOM_VK_J 74 */ |
| SDL_SCANCODE_K, /* DOM_VK_K 75 */ |
| SDL_SCANCODE_L, /* DOM_VK_L 76 */ |
| SDL_SCANCODE_M, /* DOM_VK_M 77 */ |
| SDL_SCANCODE_N, /* DOM_VK_N 78 */ |
| SDL_SCANCODE_O, /* DOM_VK_O 79 */ |
| SDL_SCANCODE_P, /* DOM_VK_P 80 */ |
| SDL_SCANCODE_Q, /* DOM_VK_Q 81 */ |
| SDL_SCANCODE_R, /* DOM_VK_R 82 */ |
| SDL_SCANCODE_S, /* DOM_VK_S 83 */ |
| SDL_SCANCODE_T, /* DOM_VK_T 84 */ |
| SDL_SCANCODE_U, /* DOM_VK_U 85 */ |
| SDL_SCANCODE_V, /* DOM_VK_V 86 */ |
| SDL_SCANCODE_W, /* DOM_VK_W 87 */ |
| SDL_SCANCODE_X, /* DOM_VK_X 88 */ |
| SDL_SCANCODE_Y, /* DOM_VK_Y 89 */ |
| SDL_SCANCODE_Z, /* DOM_VK_Z 90 */ |
| SDL_SCANCODE_LGUI, /* DOM_VK_WIN 91 */ |
| SDL_SCANCODE_UNKNOWN, /* 92 */ |
| SDL_SCANCODE_APPLICATION, /* DOM_VK_CONTEXT_MENU 93 */ |
| SDL_SCANCODE_UNKNOWN, /* 94 */ |
| SDL_SCANCODE_SLEEP, /* DOM_VK_SLEEP 95 */ |
| SDL_SCANCODE_KP_0, /* DOM_VK_NUMPAD0 96 */ |
| SDL_SCANCODE_KP_1, /* DOM_VK_NUMPAD1 97 */ |
| SDL_SCANCODE_KP_2, /* DOM_VK_NUMPAD2 98 */ |
| SDL_SCANCODE_KP_3, /* DOM_VK_NUMPAD3 99 */ |
| SDL_SCANCODE_KP_4, /* DOM_VK_NUMPAD4 100 */ |
| SDL_SCANCODE_KP_5, /* DOM_VK_NUMPAD5 101 */ |
| SDL_SCANCODE_KP_6, /* DOM_VK_NUMPAD6 102 */ |
| SDL_SCANCODE_KP_7, /* DOM_VK_NUMPAD7 103 */ |
| SDL_SCANCODE_KP_8, /* DOM_VK_NUMPAD8 104 */ |
| SDL_SCANCODE_KP_9, /* DOM_VK_NUMPAD9 105 */ |
| SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_MULTIPLY 106 */ |
| SDL_SCANCODE_KP_PLUS, /* DOM_VK_ADD 107 */ |
| SDL_SCANCODE_KP_COMMA, /* DOM_VK_SEPARATOR 108 */ |
| SDL_SCANCODE_KP_MINUS, /* DOM_VK_SUBTRACT 109 */ |
| SDL_SCANCODE_KP_PERIOD, /* DOM_VK_DECIMAL 110 */ |
| SDL_SCANCODE_KP_DIVIDE, /* DOM_VK_DIVIDE 111 */ |
| SDL_SCANCODE_F1, /* DOM_VK_F1 112 */ |
| SDL_SCANCODE_F2, /* DOM_VK_F2 113 */ |
| SDL_SCANCODE_F3, /* DOM_VK_F3 114 */ |
| SDL_SCANCODE_F4, /* DOM_VK_F4 115 */ |
| SDL_SCANCODE_F5, /* DOM_VK_F5 116 */ |
| SDL_SCANCODE_F6, /* DOM_VK_F6 117 */ |
| SDL_SCANCODE_F7, /* DOM_VK_F7 118 */ |
| SDL_SCANCODE_F8, /* DOM_VK_F8 119 */ |
| SDL_SCANCODE_F9, /* DOM_VK_F9 120 */ |
| SDL_SCANCODE_F10, /* DOM_VK_F10 121 */ |
| SDL_SCANCODE_F11, /* DOM_VK_F11 122 */ |
| SDL_SCANCODE_F12, /* DOM_VK_F12 123 */ |
| SDL_SCANCODE_F13, /* DOM_VK_F13 124 */ |
| SDL_SCANCODE_F14, /* DOM_VK_F14 125 */ |
| SDL_SCANCODE_F15, /* DOM_VK_F15 126 */ |
| SDL_SCANCODE_F16, /* DOM_VK_F16 127 */ |
| SDL_SCANCODE_F17, /* DOM_VK_F17 128 */ |
| SDL_SCANCODE_F18, /* DOM_VK_F18 129 */ |
| SDL_SCANCODE_F19, /* DOM_VK_F19 130 */ |
| SDL_SCANCODE_F20, /* DOM_VK_F20 131 */ |
| SDL_SCANCODE_F21, /* DOM_VK_F21 132 */ |
| SDL_SCANCODE_F22, /* DOM_VK_F22 133 */ |
| SDL_SCANCODE_F23, /* DOM_VK_F23 134 */ |
| SDL_SCANCODE_F24, /* DOM_VK_F24 135 */ |
| SDL_SCANCODE_UNKNOWN, /* 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_NUMLOCKCLEAR, /* DOM_VK_NUM_LOCK 144 */ |
| SDL_SCANCODE_SCROLLLOCK, /* DOM_VK_SCROLL_LOCK 145 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_JISHO 146 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_MASSHOU 147 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_TOUROKU 148 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_LOYA 149 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_ROYA 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_GRAVE, /* DOM_VK_CIRCUMFLEX 160 */ |
| SDL_SCANCODE_KP_EXCLAM, /* DOM_VK_EXCLAMATION 161 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_DOUBLE_QUOTE 162 */ |
| SDL_SCANCODE_KP_HASH, /* DOM_VK_HASH 163 */ |
| SDL_SCANCODE_CURRENCYUNIT, /* DOM_VK_DOLLAR 164 */ |
| SDL_SCANCODE_KP_PERCENT, /* DOM_VK_PERCENT 165 */ |
| SDL_SCANCODE_KP_AMPERSAND, /* DOM_VK_AMPERSAND 166 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_UNDERSCORE 167 */ |
| SDL_SCANCODE_KP_LEFTPAREN, /* DOM_VK_OPEN_PAREN 168 */ |
| SDL_SCANCODE_KP_RIGHTPAREN, /* DOM_VK_CLOSE_PAREN 169 */ |
| SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_ASTERISK 170 */ |
| SDL_SCANCODE_KP_PLUS, /* DOM_VK_PLUS 171 */ |
| SDL_SCANCODE_KP_PLUS, /* DOM_VK_PIPE 172 */ |
| SDL_SCANCODE_MINUS, /* DOM_VK_HYPHEN_MINUS 173 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_OPEN_CURLY_BRACKET 174 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_CLOSE_CURLY_BRACKET 175 */ |
| SDL_SCANCODE_NONUSBACKSLASH, /* DOM_VK_TILDE 176 */ |
| SDL_SCANCODE_UNKNOWN, /* 177 */ |
| SDL_SCANCODE_UNKNOWN, /* 178 */ |
| SDL_SCANCODE_UNKNOWN, /* 179 */ |
| SDL_SCANCODE_UNKNOWN, /* 180 */ |
| SDL_SCANCODE_MUTE, /* DOM_VK_VOLUME_MUTE 181 */ |
| SDL_SCANCODE_VOLUMEDOWN, /* DOM_VK_VOLUME_DOWN 182 */ |
| SDL_SCANCODE_VOLUMEUP, /* DOM_VK_VOLUME_UP 183 */ |
| SDL_SCANCODE_UNKNOWN, /* 184 */ |
| SDL_SCANCODE_UNKNOWN, /* 185 */ |
| SDL_SCANCODE_UNKNOWN, /* 186 */ |
| SDL_SCANCODE_UNKNOWN, /* 187 */ |
| SDL_SCANCODE_COMMA, /* DOM_VK_COMMA 188 */ |
| SDL_SCANCODE_UNKNOWN, /* 189 */ |
| SDL_SCANCODE_PERIOD, /* DOM_VK_PERIOD 190 */ |
| SDL_SCANCODE_SLASH, /* DOM_VK_SLASH 191 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_BACK_QUOTE 192 */ |
| SDL_SCANCODE_UNKNOWN, /* 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_LEFTBRACKET, /* DOM_VK_OPEN_BRACKET 219 */ |
| SDL_SCANCODE_BACKSLASH, /* DOM_VK_BACK_SLASH 220 */ |
| SDL_SCANCODE_RIGHTBRACKET, /* DOM_VK_CLOSE_BRACKET 221 */ |
| SDL_SCANCODE_APOSTROPHE, /* DOM_VK_QUOTE 222 */ |
| SDL_SCANCODE_UNKNOWN, /* 223 */ |
| SDL_SCANCODE_RGUI, /* DOM_VK_META 224 */ |
| SDL_SCANCODE_RALT, /* DOM_VK_ALTGR 225 */ |
| SDL_SCANCODE_UNKNOWN, /* 226 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_HELP 227 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_00 228 */ |
| SDL_SCANCODE_UNKNOWN, /* 229 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_CLEAR 230 */ |
| SDL_SCANCODE_UNKNOWN, /* 231 */ |
| SDL_SCANCODE_UNKNOWN, /* 232 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_RESET 233 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_JUMP 234 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA1 235 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA2 236 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA3 237 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_WSCTRL 238 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CUSEL 239 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ATTN 240 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FINISH 241 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_COPY 242 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_AUTO 243 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ENLW 244 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_BACKTAB 245 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_ATTN 246 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_CRSEL 247 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_EXSEL 248 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_EREOF 249 */ |
| SDL_SCANCODE_AUDIOPLAY, /* DOM_VK_PLAY 250 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_ZOOM 251 */ |
| SDL_SCANCODE_UNKNOWN, /* 252 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_PA1 253 */ |
| SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CLEAR 254 */ |
| SDL_SCANCODE_UNKNOWN, /* 255 */ |
| }; |
| |
| static Uint8 SDL_NACL_translate_mouse_button(int32_t button) { |
| switch (button) { |
| case PP_INPUTEVENT_MOUSEBUTTON_LEFT: |
| return SDL_BUTTON_LEFT; |
| case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE: |
| return SDL_BUTTON_MIDDLE; |
| case PP_INPUTEVENT_MOUSEBUTTON_RIGHT: |
| return SDL_BUTTON_RIGHT; |
| |
| case PP_INPUTEVENT_MOUSEBUTTON_NONE: |
| default: |
| return 0; |
| } |
| } |
| |
| static SDL_Scancode |
| SDL_NACL_translate_keycode(int keycode) |
| { |
| SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; |
| |
| if (keycode < SDL_arraysize(NACL_Keycodes)) { |
| scancode = NACL_Keycodes[keycode]; |
| } |
| if (scancode == SDL_SCANCODE_UNKNOWN) { |
| SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL forums/mailing list <https://discourse.libsdl.org/> NACL KeyCode %d", keycode); |
| } |
| return scancode; |
| } |
| |
| void NACL_PumpEvents(_THIS) { |
| PSEvent* ps_event; |
| PP_Resource event; |
| PP_InputEvent_Type type; |
| PP_InputEvent_Modifier modifiers; |
| struct PP_Rect rect; |
| struct PP_FloatPoint fp; |
| struct PP_Point location; |
| struct PP_Var var; |
| const char *str; |
| char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; |
| Uint32 str_len; |
| SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; |
| SDL_Mouse *mouse = SDL_GetMouse(); |
| |
| if (driverdata->window) { |
| while ((ps_event = PSEventTryAcquire()) != NULL) { |
| event = ps_event->as_resource; |
| switch(ps_event->type) { |
| /* From DidChangeView, contains a view resource */ |
| case PSE_INSTANCE_DIDCHANGEVIEW: |
| driverdata->ppb_view->GetRect(event, &rect); |
| NACL_SetScreenResolution(rect.size.width, rect.size.height, SDL_PIXELFORMAT_UNKNOWN); |
| // FIXME: Rebuild context? See life.c UpdateContext |
| break; |
| |
| /* From HandleInputEvent, contains an input resource. */ |
| case PSE_INSTANCE_HANDLEINPUT: |
| type = driverdata->ppb_input_event->GetType(event); |
| modifiers = driverdata->ppb_input_event->GetModifiers(event); |
| switch(type) { |
| case PP_INPUTEVENT_TYPE_MOUSEDOWN: |
| SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event))); |
| break; |
| case PP_INPUTEVENT_TYPE_MOUSEUP: |
| SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event))); |
| break; |
| case PP_INPUTEVENT_TYPE_WHEEL: |
| /* FIXME: GetTicks provides high resolution scroll events */ |
| fp = driverdata->ppb_wheel_input_event->GetDelta(event); |
| SDL_SendMouseWheel(mouse->focus, mouse->mouseID, fp.x, fp.y, SDL_MOUSEWHEEL_NORMAL); |
| break; |
| |
| case PP_INPUTEVENT_TYPE_MOUSEENTER: |
| case PP_INPUTEVENT_TYPE_MOUSELEAVE: |
| /* FIXME: Mouse Focus */ |
| break; |
| |
| |
| case PP_INPUTEVENT_TYPE_MOUSEMOVE: |
| location = driverdata->ppb_mouse_input_event->GetPosition(event); |
| SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_FALSE, location.x, location.y); |
| break; |
| |
| case PP_INPUTEVENT_TYPE_TOUCHSTART: |
| case PP_INPUTEVENT_TYPE_TOUCHMOVE: |
| case PP_INPUTEVENT_TYPE_TOUCHEND: |
| case PP_INPUTEVENT_TYPE_TOUCHCANCEL: |
| /* FIXME: Touch events */ |
| break; |
| |
| case PP_INPUTEVENT_TYPE_KEYDOWN: |
| SDL_SendKeyboardKey(SDL_PRESSED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event))); |
| break; |
| |
| case PP_INPUTEVENT_TYPE_KEYUP: |
| SDL_SendKeyboardKey(SDL_RELEASED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event))); |
| break; |
| |
| case PP_INPUTEVENT_TYPE_CHAR: |
| var = driverdata->ppb_keyboard_input_event->GetCharacterText(event); |
| str = driverdata->ppb_var->VarToUtf8(var, &str_len); |
| /* str is not null terminated! */ |
| if ( str_len >= SDL_arraysize(text) ) { |
| str_len = SDL_arraysize(text) - 1; |
| } |
| SDL_strlcpy(text, str, str_len ); |
| text[str_len] = '\0'; |
| |
| SDL_SendKeyboardText(text); |
| /* FIXME: Do we have to handle ref counting? driverdata->ppb_var->Release(var);*/ |
| break; |
| |
| default: |
| break; |
| } |
| break; |
| |
| |
| /* From HandleMessage, contains a PP_Var. */ |
| case PSE_INSTANCE_HANDLEMESSAGE: |
| break; |
| |
| /* From DidChangeFocus, contains a PP_Bool with the current focus state. */ |
| case PSE_INSTANCE_DIDCHANGEFOCUS: |
| break; |
| |
| /* When the 3D context is lost, no resource. */ |
| case PSE_GRAPHICS3D_GRAPHICS3DCONTEXTLOST: |
| break; |
| |
| /* When the mouse lock is lost. */ |
| case PSE_MOUSELOCK_MOUSELOCKLOST: |
| break; |
| |
| default: |
| break; |
| } |
| |
| PSEventRelease(ps_event); |
| } |
| } |
| } |
| |
| #endif /* SDL_VIDEO_DRIVER_NACL */ |
| |
| /* vi: set ts=4 sw=4 expandtab: */ |