static bool init(int argc, char **argv);
static void process_event(SDL_Event *ev);
static void proc_modkeys();
+static int translate_keysym(SDL_Keycode sym);
static SDL_Window *win;
static SDL_GLContext ctx;
static void process_event(SDL_Event *ev)
{
+ int key;
+
switch(ev->type) {
case SDL_QUIT:
quit = true;
case SDL_KEYDOWN:
case SDL_KEYUP:
proc_modkeys();
- app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
+ if((key = translate_keysym(ev->key.keysym.sym)) != -1) {
+ app_keyboard(key, ev->key.state == SDL_PRESSED);
+ }
break;
case SDL_MOUSEBUTTONDOWN:
}
break;
+ case SDL_MOUSEWHEEL:
+ app_mouse_wheel(ev->wheel.y);
+ break;
+
case SDL_WINDOWEVENT:
if(ev->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
SDL_GL_GetDrawableSize(win, &win_width, &win_height);
modkeys |= MOD_CTRL;
}
}
+
+static int translate_keysym(SDL_Keycode sym)
+{
+ switch(sym) {
+ case SDLK_RETURN:
+ return '\n';
+ case SDLK_DELETE:
+ return KEY_DEL;
+ case SDLK_LEFT:
+ return KEY_LEFT;
+ case SDLK_RIGHT:
+ return KEY_RIGHT;
+ case SDLK_UP:
+ return KEY_UP;
+ case SDLK_DOWN:
+ return KEY_DOWN;
+ case SDLK_PAGEUP:
+ return KEY_PGUP;
+ case SDLK_PAGEDOWN:
+ return KEY_PGDOWN;
+ case SDLK_HOME:
+ return KEY_HOME;
+ case SDLK_END:
+ return KEY_END;
+ default:
+ break;
+ }
+
+ if(sym < 127) {
+ return sym;
+ }
+ if(sym >= SDLK_F1 && sym <= SDLK_F12) {
+ return KEY_F1 + sym - SDLK_F1;
+ }
+ return -1;
+}