static void events(void) { SDL_Event event; static const int button_map[] = { [SDL_BUTTON_LEFT] = 1, [SDL_BUTTON_RIGHT] = 2, [SDL_BUTTON_MIDDLE] = 3, // SDL2 Additional buttons [SDL_BUTTON_X1] = 4, [SDL_BUTTON_X2] = 5, }; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT : loop_run = 0; break; case SDL_KEYDOWN : event_key(event.key.keysym.sym&511, 1); break; case SDL_KEYUP : event_key(event.key.keysym.sym&511, 0); break; case SDL_MOUSEMOTION : event_mouse(0, 0, event.motion.x, event.motion.y, event.motion.xrel, event.motion.yrel); break; case SDL_MOUSEBUTTONUP : case SDL_MOUSEBUTTONDOWN : event_mouse(button_map[event.button.button], event.button.type == SDL_MOUSEBUTTONDOWN ? 1:0, event.button.x, event.button.y, 0, 0); break; break; } } }
int event_parse(SDL_Event ev) { switch(ev.type) { case SDL_KEYDOWN: return event_key(ev.key, EVENT_PRESS); case SDL_KEYUP: return event_key(ev.key, EVENT_RELEASE); case SDL_MOUSEMOTION: return event_mouse(ev.motion); case SDL_MOUSEBUTTONDOWN: return event_button(ev.button, EVENT_PRESS); case SDL_MOUSEBUTTONUP: return event_button(ev.button, EVENT_RELEASE); case SDL_JOYAXISMOTION: return event_joystick(ev.jaxis); case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: return event_fire(ev.jbutton); case SDL_WINDOWEVENT: if(ev.window.windowID == screen_window_id) { if(ev.window.event == SDL_WINDOWEVENT_RESIZED) { if((ev.window.data1 % 512) == 0 && (ev.window.data2 % 314) == 0) screen_make_texture(SDL_SCALING_NEAREST); else screen_make_texture(SDL_SCALING_LINEAR); } } break; case SDL_QUIT: if(debugger) return EVENT_DEBUG; else { SDL_Quit(); exit(0); } } return EVENT_NONE; }
BOOL gamecore_proc(void) { int event; #ifndef DISABLE_DIALOG if (gamecore.gamecfg.enablepopup) { int x, y; UINT btn; UINT key; BOOL r; btn = inputmng_getmouse(&x, &y); key = inputmng_getkey(); if (btn & RBUTTON_DOWNBIT) { r = sysmenu_menuopen(TRUE, x, y); } else if (key & KEY_MENU) { r = sysmenu_menuopen(TRUE, 0, 0); } else { r = FAILURE; } if (r == SUCCESS) { inputmng_resetmouse(0); inputmng_resetkey(0); menubase_modalproc(); event = gamecore.event; if ((event >= GAMEEV_SUCCESS) && (event < GAMEEV_FADEIN)) { vramdraw_setrect(mainvram, NULL); vramdraw_draw(); } } } if (menuvram != NULL) { menubase_proc(); } #endif event = gamecore.event; if ((event >= GAMEEV_SUCCESS) && (event < GAMEEV_FADEIN)) { anime_exec(); } switch(event) { case GAMEEV_SUCCESS: event = script_dispatch(); break; case GAMEEV_TEXTOUT: event = textdisp_exec(); break; case GAMEEV_WAITMOUSE: event = event_mouse(); break; case GAMEEV_CMDWIN: event = event_cmdwin(); break; case GAMEEV_WAITPCMEND: event = event_waitpcmend(); break; case GAMEEV_MSGCLK: event = event_msgclk(); break; case GAMEEV_IRCLK: event = event_irclk(); break; case GAMEEV_WAIT: event = event_wait(); break; case GAMEEV_FADEIN: event = effect_fadeinexec(); break; case GAMEEV_FADEOUT: event = effect_fadeoutexec(); break; case GAMEEV_EFFECT: event = effect_exec(); break; case GAMEEV_GRAYSCALE: event = effect_grayscale(); break; case GAMEEV_SCROLL: event = effect_scroll(); break; case GAMEEV_QUAKE: event = effect_quake(); break; case GAMEEV_FORCE: event = GAMEEV_SUCCESS; break; case GAMEEV_EXIT: return(FAILURE); } gamecore.event = event; if (event < 0) { const char *e; e = gamecore_seterrorevent(event); #ifndef DISABLE_DIALOG if (e) { menumbox(e, gamecore.suf.key, MBOX_ICONSTOP | MBOX_OK); return(FAILURE); } #endif TRACEOUT(("error: %d", event)); TRACEOUT(("system terminate.")); } return(SUCCESS); }