ProcessInputEvent (const SDL_Event *Event)
{
if (!InputInitialized)
return;
ProcessMouseEvent (Event);
VControl_HandleEvent (Event);
if (Event->type == SDL_KEYDOWN || Event->type == SDL_KEYUP)
{ // process character input event, if any
SDLKey k = Event->key.keysym.sym;
wchar_t map_key = Event->key.keysym.unicode;
if (k < 0 || k > num_keys)
k = num_keys; // for unknown keys
if (Event->type == SDL_KEYDOWN)
{
int newtail;
// dont care about the non-printable, non-char
if (!map_key)
return;
kbdstate[k]++;
newtail = (kbdtail + 1) & (KBDBUFSIZE - 1);
// ignore the char if the buffer is full
if (newtail != kbdhead)
{
kbdbuf[kbdtail] = map_key;
kbdtail = newtail;
lastchar = map_key;
ImmediateInputState.menu[KEY_MENU_ANY]++;
}
}
else if (Event->type == SDL_KEYUP)
{
if (kbdstate[k] == 0)
{ // something is fishy -- better to reset the
// repeatable state to avoid big problems
ImmediateInputState.menu[KEY_MENU_ANY] = 0;
}
else
{
kbdstate[k]--;
if (ImmediateInputState.menu[KEY_MENU_ANY] > 0)
ImmediateInputState.menu[KEY_MENU_ANY]--;
}
}
}
}