cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

SDL_naclevents.c (22534B)


      1/*
      2  Simple DirectMedia Layer
      3  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
      4
      5  This software is provided 'as-is', without any express or implied
      6  warranty.  In no event will the authors be held liable for any damages
      7  arising from the use of this software.
      8
      9  Permission is granted to anyone to use this software for any purpose,
     10  including commercial applications, and to alter it and redistribute it
     11  freely, subject to the following restrictions:
     12
     13 1. The origin of this software must not be misrepresented; you must not
     14     claim that you wrote the original software. If you use this software
     15     in a product, an acknowledgment in the product documentation would be
     16     appreciated but is not required.
     17 2. Altered source versions must be plainly marked as such, and must not be
     18     misrepresented as being the original software.
     19 3. This notice may not be removed or altered from any source distribution.
     20*/
     21#include "../../SDL_internal.h"
     22
     23#include "SDL.h"
     24#include "../../events/SDL_sysevents.h"
     25#include "../../events/SDL_events_c.h"
     26#include "SDL_naclevents_c.h"
     27#include "SDL_naclvideo.h"
     28#include "ppapi_simple/ps_event.h"
     29
     30/* Ref: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent */
     31
     32static SDL_Scancode NACL_Keycodes[] = {
     33    SDL_SCANCODE_UNKNOWN,               /* 0 */
     34    SDL_SCANCODE_UNKNOWN,               /* 1 */
     35    SDL_SCANCODE_UNKNOWN,               /* 2 */
     36    SDL_SCANCODE_CANCEL,                /* DOM_VK_CANCEL 3 */
     37    SDL_SCANCODE_UNKNOWN,               /* 4 */
     38    SDL_SCANCODE_UNKNOWN,               /* 5 */
     39    SDL_SCANCODE_HELP,                  /* DOM_VK_HELP 6 */
     40    SDL_SCANCODE_UNKNOWN,               /* 7 */
     41    SDL_SCANCODE_BACKSPACE,             /* DOM_VK_BACK_SPACE 8 */
     42    SDL_SCANCODE_TAB,                   /* DOM_VK_TAB 9 */
     43    SDL_SCANCODE_UNKNOWN,               /* 10 */
     44    SDL_SCANCODE_UNKNOWN,               /* 11 */
     45    SDL_SCANCODE_CLEAR,                 /* DOM_VK_CLEAR 12 */
     46    SDL_SCANCODE_RETURN,                /* DOM_VK_RETURN 13 */
     47    SDL_SCANCODE_RETURN,                /* DOM_VK_ENTER 14 */
     48    SDL_SCANCODE_UNKNOWN,               /* 15 */
     49    SDL_SCANCODE_LSHIFT,                /* DOM_VK_SHIFT 16 */
     50    SDL_SCANCODE_LCTRL,                 /* DOM_VK_CONTROL 17 */
     51    SDL_SCANCODE_LALT,                  /* DOM_VK_ALT 18 */
     52    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_PAUSE 19 */
     53    SDL_SCANCODE_CAPSLOCK,              /* DOM_VK_CAPS_LOCK 20 */
     54    SDL_SCANCODE_LANG1,                 /* DOM_VK_KANA  DOM_VK_HANGUL 21 */
     55    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_EISU 22 */
     56    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_JUNJA 23 */
     57    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_FINAL 24 */
     58    SDL_SCANCODE_LANG2,                 /* DOM_VK_HANJA  DOM_VK_KANJI 25 */
     59    SDL_SCANCODE_UNKNOWN,               /* 26 */
     60    SDL_SCANCODE_ESCAPE,                /* DOM_VK_ESCAPE 27 */
     61    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_CONVERT 28 */
     62    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_NONCONVERT 29 */
     63    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_ACCEPT 30 */
     64    SDL_SCANCODE_MODE,                  /* DOM_VK_MODECHANGE 31 */
     65    SDL_SCANCODE_SPACE,                 /* DOM_VK_SPACE 32 */
     66    SDL_SCANCODE_PAGEUP,                /* DOM_VK_PAGE_UP 33 */
     67    SDL_SCANCODE_PAGEDOWN,              /* DOM_VK_PAGE_DOWN 34 */
     68    SDL_SCANCODE_END,                   /* DOM_VK_END 35 */
     69    SDL_SCANCODE_HOME,                  /* DOM_VK_HOME 36 */
     70    SDL_SCANCODE_LEFT,                  /* DOM_VK_LEFT 37 */
     71    SDL_SCANCODE_UP,                    /* DOM_VK_UP 38 */
     72    SDL_SCANCODE_RIGHT,                 /* DOM_VK_RIGHT 39 */
     73    SDL_SCANCODE_DOWN,                  /* DOM_VK_DOWN 40 */
     74    SDL_SCANCODE_SELECT,                /* DOM_VK_SELECT 41 */
     75    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_PRINT 42 */
     76    SDL_SCANCODE_EXECUTE,               /* DOM_VK_EXECUTE 43 */
     77    SDL_SCANCODE_PRINTSCREEN,           /* DOM_VK_PRINTSCREEN 44 */
     78    SDL_SCANCODE_INSERT,                /* DOM_VK_INSERT 45 */
     79    SDL_SCANCODE_DELETE,                /* DOM_VK_DELETE 46 */
     80    SDL_SCANCODE_UNKNOWN,               /* 47 */
     81    SDL_SCANCODE_0,                     /* DOM_VK_0 48 */
     82    SDL_SCANCODE_1,                     /* DOM_VK_1 49 */
     83    SDL_SCANCODE_2,                     /* DOM_VK_2 50 */
     84    SDL_SCANCODE_3,                     /* DOM_VK_3 51 */
     85    SDL_SCANCODE_4,                     /* DOM_VK_4 52 */
     86    SDL_SCANCODE_5,                     /* DOM_VK_5 53 */
     87    SDL_SCANCODE_6,                     /* DOM_VK_6 54 */
     88    SDL_SCANCODE_7,                     /* DOM_VK_7 55 */
     89    SDL_SCANCODE_8,                     /* DOM_VK_8 56 */
     90    SDL_SCANCODE_9,                     /* DOM_VK_9 57 */
     91    SDL_SCANCODE_KP_COLON,              /* DOM_VK_COLON 58 */
     92    SDL_SCANCODE_SEMICOLON,             /* DOM_VK_SEMICOLON 59 */
     93    SDL_SCANCODE_KP_LESS,               /* DOM_VK_LESS_THAN 60 */
     94    SDL_SCANCODE_EQUALS,                /* DOM_VK_EQUALS 61 */
     95    SDL_SCANCODE_KP_GREATER,            /* DOM_VK_GREATER_THAN 62 */
     96    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_QUESTION_MARK 63 */
     97    SDL_SCANCODE_KP_AT,                 /* DOM_VK_AT 64 */
     98    SDL_SCANCODE_A,                     /* DOM_VK_A 65 */
     99    SDL_SCANCODE_B,                     /* DOM_VK_B 66 */
    100    SDL_SCANCODE_C,                     /* DOM_VK_C 67 */
    101    SDL_SCANCODE_D,                     /* DOM_VK_D 68 */
    102    SDL_SCANCODE_E,                     /* DOM_VK_E 69 */
    103    SDL_SCANCODE_F,                     /* DOM_VK_F 70 */
    104    SDL_SCANCODE_G,                     /* DOM_VK_G 71 */
    105    SDL_SCANCODE_H,                     /* DOM_VK_H 72 */
    106    SDL_SCANCODE_I,                     /* DOM_VK_I 73 */
    107    SDL_SCANCODE_J,                     /* DOM_VK_J 74 */
    108    SDL_SCANCODE_K,                     /* DOM_VK_K 75 */
    109    SDL_SCANCODE_L,                     /* DOM_VK_L 76 */
    110    SDL_SCANCODE_M,                     /* DOM_VK_M 77 */
    111    SDL_SCANCODE_N,                     /* DOM_VK_N 78 */
    112    SDL_SCANCODE_O,                     /* DOM_VK_O 79 */
    113    SDL_SCANCODE_P,                     /* DOM_VK_P 80 */
    114    SDL_SCANCODE_Q,                     /* DOM_VK_Q 81 */
    115    SDL_SCANCODE_R,                     /* DOM_VK_R 82 */
    116    SDL_SCANCODE_S,                     /* DOM_VK_S 83 */
    117    SDL_SCANCODE_T,                     /* DOM_VK_T 84 */
    118    SDL_SCANCODE_U,                     /* DOM_VK_U 85 */
    119    SDL_SCANCODE_V,                     /* DOM_VK_V 86 */
    120    SDL_SCANCODE_W,                     /* DOM_VK_W 87 */
    121    SDL_SCANCODE_X,                     /* DOM_VK_X 88 */
    122    SDL_SCANCODE_Y,                     /* DOM_VK_Y 89 */
    123    SDL_SCANCODE_Z,                     /* DOM_VK_Z 90 */
    124    SDL_SCANCODE_LGUI,                  /* DOM_VK_WIN 91 */
    125    SDL_SCANCODE_UNKNOWN,               /* 92 */
    126    SDL_SCANCODE_APPLICATION,           /* DOM_VK_CONTEXT_MENU 93 */
    127    SDL_SCANCODE_UNKNOWN,               /* 94 */
    128    SDL_SCANCODE_SLEEP,                 /* DOM_VK_SLEEP 95 */
    129    SDL_SCANCODE_KP_0,                  /* DOM_VK_NUMPAD0 96 */
    130    SDL_SCANCODE_KP_1,                  /* DOM_VK_NUMPAD1 97 */
    131    SDL_SCANCODE_KP_2,                  /* DOM_VK_NUMPAD2 98 */
    132    SDL_SCANCODE_KP_3,                  /* DOM_VK_NUMPAD3 99 */
    133    SDL_SCANCODE_KP_4,                  /* DOM_VK_NUMPAD4 100 */
    134    SDL_SCANCODE_KP_5,                  /* DOM_VK_NUMPAD5 101 */
    135    SDL_SCANCODE_KP_6,                  /* DOM_VK_NUMPAD6 102 */
    136    SDL_SCANCODE_KP_7,                  /* DOM_VK_NUMPAD7 103 */
    137    SDL_SCANCODE_KP_8,                  /* DOM_VK_NUMPAD8 104 */
    138    SDL_SCANCODE_KP_9,                  /* DOM_VK_NUMPAD9 105 */
    139    SDL_SCANCODE_KP_MULTIPLY,           /* DOM_VK_MULTIPLY 106 */
    140    SDL_SCANCODE_KP_PLUS,               /* DOM_VK_ADD 107 */
    141    SDL_SCANCODE_KP_COMMA,              /* DOM_VK_SEPARATOR 108 */
    142    SDL_SCANCODE_KP_MINUS,              /* DOM_VK_SUBTRACT 109 */
    143    SDL_SCANCODE_KP_PERIOD,             /* DOM_VK_DECIMAL 110 */
    144    SDL_SCANCODE_KP_DIVIDE,             /* DOM_VK_DIVIDE 111 */
    145    SDL_SCANCODE_F1,                    /* DOM_VK_F1 112 */
    146    SDL_SCANCODE_F2,                    /* DOM_VK_F2 113 */
    147    SDL_SCANCODE_F3,                    /* DOM_VK_F3 114 */
    148    SDL_SCANCODE_F4,                    /* DOM_VK_F4 115 */
    149    SDL_SCANCODE_F5,                    /* DOM_VK_F5 116 */
    150    SDL_SCANCODE_F6,                    /* DOM_VK_F6 117 */
    151    SDL_SCANCODE_F7,                    /* DOM_VK_F7 118 */
    152    SDL_SCANCODE_F8,                    /* DOM_VK_F8 119 */
    153    SDL_SCANCODE_F9,                    /* DOM_VK_F9 120 */
    154    SDL_SCANCODE_F10,                   /* DOM_VK_F10 121 */
    155    SDL_SCANCODE_F11,                   /* DOM_VK_F11 122 */
    156    SDL_SCANCODE_F12,                   /* DOM_VK_F12 123 */
    157    SDL_SCANCODE_F13,                   /* DOM_VK_F13 124 */
    158    SDL_SCANCODE_F14,                   /* DOM_VK_F14 125 */
    159    SDL_SCANCODE_F15,                   /* DOM_VK_F15 126 */
    160    SDL_SCANCODE_F16,                   /* DOM_VK_F16 127 */
    161    SDL_SCANCODE_F17,                   /* DOM_VK_F17 128 */
    162    SDL_SCANCODE_F18,                   /* DOM_VK_F18 129 */
    163    SDL_SCANCODE_F19,                   /* DOM_VK_F19 130 */
    164    SDL_SCANCODE_F20,                   /* DOM_VK_F20 131 */
    165    SDL_SCANCODE_F21,                   /* DOM_VK_F21 132 */
    166    SDL_SCANCODE_F22,                   /* DOM_VK_F22 133 */
    167    SDL_SCANCODE_F23,                   /* DOM_VK_F23 134 */
    168    SDL_SCANCODE_F24,                   /* DOM_VK_F24 135 */
    169    SDL_SCANCODE_UNKNOWN,               /* 136 */
    170    SDL_SCANCODE_UNKNOWN,               /* 137 */
    171    SDL_SCANCODE_UNKNOWN,               /* 138 */
    172    SDL_SCANCODE_UNKNOWN,               /* 139 */
    173    SDL_SCANCODE_UNKNOWN,               /* 140 */
    174    SDL_SCANCODE_UNKNOWN,               /* 141 */
    175    SDL_SCANCODE_UNKNOWN,               /* 142 */
    176    SDL_SCANCODE_UNKNOWN,               /* 143 */
    177    SDL_SCANCODE_NUMLOCKCLEAR,          /* DOM_VK_NUM_LOCK 144 */
    178    SDL_SCANCODE_SCROLLLOCK,            /* DOM_VK_SCROLL_LOCK 145 */
    179    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FJ_JISHO 146 */
    180    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FJ_MASSHOU 147 */
    181    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FJ_TOUROKU 148 */
    182    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FJ_LOYA 149 */
    183    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FJ_ROYA 150 */
    184    SDL_SCANCODE_UNKNOWN,               /* 151 */
    185    SDL_SCANCODE_UNKNOWN,               /* 152 */
    186    SDL_SCANCODE_UNKNOWN,               /* 153 */
    187    SDL_SCANCODE_UNKNOWN,               /* 154 */
    188    SDL_SCANCODE_UNKNOWN,               /* 155 */
    189    SDL_SCANCODE_UNKNOWN,               /* 156 */
    190    SDL_SCANCODE_UNKNOWN,               /* 157 */
    191    SDL_SCANCODE_UNKNOWN,               /* 158 */
    192    SDL_SCANCODE_UNKNOWN,               /* 159 */
    193    SDL_SCANCODE_GRAVE,                 /* DOM_VK_CIRCUMFLEX 160 */
    194    SDL_SCANCODE_KP_EXCLAM,             /* DOM_VK_EXCLAMATION 161 */
    195    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_DOUBLE_QUOTE 162 */
    196    SDL_SCANCODE_KP_HASH,               /* DOM_VK_HASH 163 */
    197    SDL_SCANCODE_CURRENCYUNIT,          /* DOM_VK_DOLLAR 164 */
    198    SDL_SCANCODE_KP_PERCENT,            /* DOM_VK_PERCENT 165 */
    199    SDL_SCANCODE_KP_AMPERSAND,          /* DOM_VK_AMPERSAND 166 */
    200    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_UNDERSCORE 167 */
    201    SDL_SCANCODE_KP_LEFTPAREN,          /* DOM_VK_OPEN_PAREN 168 */
    202    SDL_SCANCODE_KP_RIGHTPAREN,         /* DOM_VK_CLOSE_PAREN 169 */
    203    SDL_SCANCODE_KP_MULTIPLY,           /* DOM_VK_ASTERISK 170 */
    204    SDL_SCANCODE_KP_PLUS,               /* DOM_VK_PLUS 171 */
    205    SDL_SCANCODE_KP_PLUS,               /* DOM_VK_PIPE 172 */
    206    SDL_SCANCODE_MINUS,                 /* DOM_VK_HYPHEN_MINUS 173 */
    207    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_OPEN_CURLY_BRACKET 174 */
    208    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_CLOSE_CURLY_BRACKET 175 */
    209    SDL_SCANCODE_NONUSBACKSLASH,        /* DOM_VK_TILDE 176 */
    210    SDL_SCANCODE_UNKNOWN,               /* 177 */
    211    SDL_SCANCODE_UNKNOWN,               /* 178 */
    212    SDL_SCANCODE_UNKNOWN,               /* 179 */
    213    SDL_SCANCODE_UNKNOWN,               /* 180 */
    214    SDL_SCANCODE_MUTE,                  /* DOM_VK_VOLUME_MUTE 181 */
    215    SDL_SCANCODE_VOLUMEDOWN,            /* DOM_VK_VOLUME_DOWN 182 */
    216    SDL_SCANCODE_VOLUMEUP,              /* DOM_VK_VOLUME_UP 183 */
    217    SDL_SCANCODE_UNKNOWN,               /* 184 */
    218    SDL_SCANCODE_UNKNOWN,               /* 185 */
    219    SDL_SCANCODE_UNKNOWN,               /* 186 */
    220    SDL_SCANCODE_UNKNOWN,               /* 187 */
    221    SDL_SCANCODE_COMMA,                 /* DOM_VK_COMMA 188 */
    222    SDL_SCANCODE_UNKNOWN,               /* 189 */
    223    SDL_SCANCODE_PERIOD,                /* DOM_VK_PERIOD 190 */
    224    SDL_SCANCODE_SLASH,                 /* DOM_VK_SLASH 191 */
    225    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_BACK_QUOTE 192 */
    226    SDL_SCANCODE_UNKNOWN,               /* 193 */
    227    SDL_SCANCODE_UNKNOWN,               /* 194 */
    228    SDL_SCANCODE_UNKNOWN,               /* 195 */
    229    SDL_SCANCODE_UNKNOWN,               /* 196 */
    230    SDL_SCANCODE_UNKNOWN,               /* 197 */
    231    SDL_SCANCODE_UNKNOWN,               /* 198 */
    232    SDL_SCANCODE_UNKNOWN,               /* 199 */
    233    SDL_SCANCODE_UNKNOWN,               /* 200 */
    234    SDL_SCANCODE_UNKNOWN,               /* 201 */
    235    SDL_SCANCODE_UNKNOWN,               /* 202 */
    236    SDL_SCANCODE_UNKNOWN,               /* 203 */
    237    SDL_SCANCODE_UNKNOWN,               /* 204 */
    238    SDL_SCANCODE_UNKNOWN,               /* 205 */
    239    SDL_SCANCODE_UNKNOWN,               /* 206 */
    240    SDL_SCANCODE_UNKNOWN,               /* 207 */
    241    SDL_SCANCODE_UNKNOWN,               /* 208 */
    242    SDL_SCANCODE_UNKNOWN,               /* 209 */
    243    SDL_SCANCODE_UNKNOWN,               /* 210 */
    244    SDL_SCANCODE_UNKNOWN,               /* 211 */
    245    SDL_SCANCODE_UNKNOWN,               /* 212 */
    246    SDL_SCANCODE_UNKNOWN,               /* 213 */
    247    SDL_SCANCODE_UNKNOWN,               /* 214 */
    248    SDL_SCANCODE_UNKNOWN,               /* 215 */
    249    SDL_SCANCODE_UNKNOWN,               /* 216 */
    250    SDL_SCANCODE_UNKNOWN,               /* 217 */
    251    SDL_SCANCODE_UNKNOWN,               /* 218 */
    252    SDL_SCANCODE_LEFTBRACKET,           /* DOM_VK_OPEN_BRACKET 219 */
    253    SDL_SCANCODE_BACKSLASH,             /* DOM_VK_BACK_SLASH 220 */
    254    SDL_SCANCODE_RIGHTBRACKET,          /* DOM_VK_CLOSE_BRACKET 221 */
    255    SDL_SCANCODE_APOSTROPHE,            /* DOM_VK_QUOTE 222 */
    256    SDL_SCANCODE_UNKNOWN,               /* 223 */
    257    SDL_SCANCODE_RGUI,                  /* DOM_VK_META 224 */
    258    SDL_SCANCODE_RALT,                  /* DOM_VK_ALTGR 225 */
    259    SDL_SCANCODE_UNKNOWN,               /* 226 */
    260    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_ICO_HELP 227 */
    261    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_ICO_00 228 */
    262    SDL_SCANCODE_UNKNOWN,               /* 229 */
    263    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_ICO_CLEAR 230 */
    264    SDL_SCANCODE_UNKNOWN,               /* 231 */
    265    SDL_SCANCODE_UNKNOWN,               /* 232 */
    266    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_RESET 233 */
    267    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_JUMP 234 */
    268    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_PA1 235 */
    269    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_PA2 236 */
    270    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_PA3 237 */
    271    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_WSCTRL 238 */
    272    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_CUSEL 239 */
    273    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_ATTN 240 */
    274    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_FINISH 241 */
    275    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_COPY 242 */
    276    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_AUTO 243 */
    277    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_ENLW 244 */
    278    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_BACKTAB 245 */
    279    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_ATTN 246 */
    280    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_CRSEL 247 */
    281    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_EXSEL 248 */
    282    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_EREOF 249 */
    283    SDL_SCANCODE_AUDIOPLAY,             /* DOM_VK_PLAY 250 */
    284    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_ZOOM 251 */
    285    SDL_SCANCODE_UNKNOWN,               /* 252 */
    286    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_PA1 253 */
    287    SDL_SCANCODE_UNKNOWN,               /* DOM_VK_WIN_OEM_CLEAR 254 */
    288    SDL_SCANCODE_UNKNOWN,               /* 255 */
    289};
    290
    291static Uint8 SDL_NACL_translate_mouse_button(int32_t button) {
    292    switch (button) {
    293        case PP_INPUTEVENT_MOUSEBUTTON_LEFT:
    294            return SDL_BUTTON_LEFT;
    295        case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE:
    296            return SDL_BUTTON_MIDDLE;
    297        case PP_INPUTEVENT_MOUSEBUTTON_RIGHT:
    298            return SDL_BUTTON_RIGHT;
    299            
    300        case PP_INPUTEVENT_MOUSEBUTTON_NONE:
    301        default:
    302            return 0;
    303    }
    304}
    305
    306static SDL_Scancode
    307SDL_NACL_translate_keycode(int keycode)
    308{
    309    SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN;
    310
    311    if (keycode < SDL_arraysize(NACL_Keycodes)) {
    312        scancode = NACL_Keycodes[keycode];
    313    }
    314    if (scancode == SDL_SCANCODE_UNKNOWN) {
    315        SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL mailing list <sdl@libsdl.org> NACL KeyCode %d \n", keycode);
    316    }
    317    return scancode;
    318}
    319
    320void NACL_PumpEvents(_THIS) {
    321  PSEvent* ps_event;
    322  PP_Resource event;  
    323  PP_InputEvent_Type type;
    324  PP_InputEvent_Modifier modifiers;
    325  struct PP_Rect rect;
    326  struct PP_FloatPoint fp;
    327  struct PP_Point location;
    328  struct PP_Var var;
    329  const char *str;
    330  char text[64];
    331  Uint32 str_len;
    332  SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata;
    333  SDL_Mouse *mouse = SDL_GetMouse();
    334  
    335  if (driverdata->window) {
    336    while ((ps_event = PSEventTryAcquire()) != NULL) {
    337        event = ps_event->as_resource;
    338        switch(ps_event->type) {
    339            /* From DidChangeView, contains a view resource */
    340            case PSE_INSTANCE_DIDCHANGEVIEW:
    341                driverdata->ppb_view->GetRect(event, &rect);
    342                NACL_SetScreenResolution(rect.size.width, rect.size.height, SDL_PIXELFORMAT_UNKNOWN);
    343                // FIXME: Rebuild context? See life.c UpdateContext
    344                break;
    345            
    346            /* From HandleInputEvent, contains an input resource. */
    347            case PSE_INSTANCE_HANDLEINPUT: 
    348                type = driverdata->ppb_input_event->GetType(event);
    349                modifiers = driverdata->ppb_input_event->GetModifiers(event);
    350                switch(type) {
    351                    case PP_INPUTEVENT_TYPE_MOUSEDOWN:
    352                        SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event)));
    353                        break;
    354                    case PP_INPUTEVENT_TYPE_MOUSEUP:
    355                        SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event)));
    356                        break;
    357                    case PP_INPUTEVENT_TYPE_WHEEL:
    358                        /* FIXME: GetTicks provides high resolution scroll events */
    359                        fp = driverdata->ppb_wheel_input_event->GetDelta(event);
    360                        SDL_SendMouseWheel(mouse->focus, mouse->mouseID, (int) fp.x, (int) fp.y);
    361                        break;
    362                        
    363                    case PP_INPUTEVENT_TYPE_MOUSEENTER:
    364                    case PP_INPUTEVENT_TYPE_MOUSELEAVE:
    365                        /* FIXME: Mouse Focus */
    366                        break;
    367                        
    368                        
    369                    case PP_INPUTEVENT_TYPE_MOUSEMOVE: 
    370                        location = driverdata->ppb_mouse_input_event->GetPosition(event);
    371                        SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_FALSE, location.x, location.y);
    372                        break;
    373                  
    374                    case PP_INPUTEVENT_TYPE_TOUCHSTART:
    375                    case PP_INPUTEVENT_TYPE_TOUCHMOVE:
    376                    case PP_INPUTEVENT_TYPE_TOUCHEND:
    377                    case PP_INPUTEVENT_TYPE_TOUCHCANCEL:
    378                        /* FIXME: Touch events */
    379                        break;
    380                      
    381                    case PP_INPUTEVENT_TYPE_KEYDOWN:
    382                        SDL_SendKeyboardKey(SDL_PRESSED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event)));
    383                        break;
    384                        
    385                    case PP_INPUTEVENT_TYPE_KEYUP:
    386                        SDL_SendKeyboardKey(SDL_RELEASED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event)));
    387                        break;
    388                        
    389                    case PP_INPUTEVENT_TYPE_CHAR:
    390                        var = driverdata->ppb_keyboard_input_event->GetCharacterText(event);
    391                        str = driverdata->ppb_var->VarToUtf8(var, &str_len);
    392                        /* str is not null terminated! */
    393                        if ( str_len >= SDL_arraysize(text) ) {
    394                            str_len = SDL_arraysize(text) - 1;
    395                        }
    396                        SDL_strlcpy(text, str, str_len );
    397                        text[str_len] = '\0';
    398                        
    399                        SDL_SendKeyboardText(text);
    400                        /* FIXME: Do we have to handle ref counting? driverdata->ppb_var->Release(var);*/
    401                        break;
    402                        
    403                    default:
    404                        break;
    405                }
    406                break;
    407                
    408        
    409            /* From HandleMessage, contains a PP_Var. */
    410            case PSE_INSTANCE_HANDLEMESSAGE:
    411                break;
    412
    413            /* From DidChangeFocus, contains a PP_Bool with the current focus state. */
    414            case PSE_INSTANCE_DIDCHANGEFOCUS:
    415                break;
    416
    417            /* When the 3D context is lost, no resource. */
    418            case PSE_GRAPHICS3D_GRAPHICS3DCONTEXTLOST:
    419                break;
    420                
    421            /* When the mouse lock is lost. */
    422            case PSE_MOUSELOCK_MOUSELOCKLOST:
    423                break;
    424
    425            default:
    426                break;
    427        }
    428        
    429        PSEventRelease(ps_event);
    430    }
    431  }
    432}