void process_game_key( EventRecord *event, short key) { switch(get_game_state()) { case _game_in_progress: if ((event->modifiers&cmdKey) && event->what==keyDown) { long menu_key= MenuKey(key); short menuID, menuItem; menuID= menu_key>>16; menuItem= menu_key & 0x0000ffff; if(menuID) { assert(menuID==mGame); do_menu_item_command(menuID, menuItem, has_cheat_modifiers(event)); } else { handle_game_key(event, key); } } else {
static void process_game_key(const SDL_Event &event) { switch (get_game_state()) { case _game_in_progress: #if defined(__APPLE__) && defined(__MACH__) if ((event.key.keysym.mod & KMOD_GUI)) #else if ((event.key.keysym.mod & KMOD_ALT) || (event.key.keysym.mod & KMOD_GUI)) #endif { int item = -1; switch (event.key.keysym.sym) { case SDLK_p: item = iPause; break; case SDLK_s: item = iSave; break; case SDLK_r: item = iRevert; break; // ZZZ: Alt+F4 is also a quit gesture in Windows #ifdef __WIN32__ case SDLK_F4: #endif case SDLK_q: item = iQuitGame; break; case SDLK_RETURN: item = 0; toggle_fullscreen(); break; default: break; } if (item > 0) do_menu_item_command(mGame, item, event_has_cheat_modifiers(event)); else if (item != 0) handle_game_key(event); } else handle_game_key(event); break; case _display_intro_screens: case _display_chapter_heading: case _display_prologue: case _display_epilogue: case _display_credits: case _display_quit_screens: if (interface_fade_finished()) force_game_state_change(); else stop_interface_fade(); break; case _display_intro_screens_for_demo: stop_interface_fade(); display_main_menu(); break; case _quit_game: case _close_game: case _revert_game: case _switch_demo: case _change_level: case _begin_display_of_epilogue: case _displaying_network_game_dialogs: break; case _display_main_menu: { if (!interface_fade_finished()) stop_interface_fade(); int item = -1; switch (event.key.keysym.sym) { case SDLK_n: item = iNewGame; break; case SDLK_o: item = iLoadGame; break; case SDLK_g: item = iGatherGame; break; case SDLK_j: item = iJoinGame; break; case SDLK_p: item = iPreferences; break; case SDLK_r: item = iReplaySavedFilm; break; case SDLK_c: item = iCredits; break; // ZZZ: Alt+F4 is also a quit gesture in Windows #ifdef __WIN32__ case SDLK_F4: #endif case SDLK_q: item = iQuit; break; case SDLK_F9: dump_screen(); break; case SDLK_RETURN: #if defined(__APPLE__) && defined(__MACH__) if ((event.key.keysym.mod & KMOD_GUI)) #else if ((event.key.keysym.mod & KMOD_GUI) || (event.key.keysym.mod & KMOD_ALT)) #endif { toggle_fullscreen(); } break; case SDLK_a: item = iAbout; break; default: break; } if (item > 0) { draw_menu_button_for_command(item); do_menu_item_command(mInterface, item, event_has_cheat_modifiers(event)); } break; } } }