+static void process_event(SDL_Event *ev)
+{
+ switch(ev->type) {
+ case SDL_QUIT:
+ quit = true;
+ break;
+
+ case SDL_KEYDOWN:
+ case SDL_KEYUP:
+ proc_modkeys();
+ app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ case SDL_MOUSEBUTTONUP:
+ proc_modkeys();
+ app_mouse_button(ev->button.button - SDL_BUTTON_LEFT, ev->button.state == SDL_PRESSED,
+ ev->button.x * scale_factor, ev->button.y * scale_factor);
+ break;
+
+ case SDL_MOUSEMOTION:
+ if(mouse_grabbed) {
+ app_mouse_delta(ev->motion.xrel, ev->motion.yrel);
+ } else {
+ app_mouse_motion(ev->motion.x * scale_factor, ev->motion.y * scale_factor);
+ }
+ break;
+
+ case SDL_WINDOWEVENT:
+ if(ev->window.event == SDL_WINDOWEVENT_RESIZED) {
+ SDL_GL_GetDrawableSize(win, &win_width, &win_height);
+ win_aspect = (float)win_width / (float)win_height;
+ scale_factor = win_width / ev->window.data1;
+ app_reshape(win_width, win_height);
+ }
+ break;
+ }
+}
+
+static void proc_modkeys()
+{
+ modkeys = 0;
+ SDL_Keymod sdlmod = SDL_GetModState();
+ if(sdlmod & KMOD_SHIFT) {
+ modkeys |= MOD_SHIFT;
+ }
+ if(sdlmod & KMOD_ALT) {
+ modkeys |= MOD_ALT;