int input_configure(int pnum, int type) { // Configure the input if (confrunning) { return 0; } SDL_Event event, eventbuf; int axis = 0, axisnoise = 0, counter = 0; confrunning = true; while (confrunning) { #ifdef _GTK while (gtk_events_pending()) { gtk_main_iteration_do(FALSE); } #endif while(SDL_PollEvent(&event)) { // Time to quit? switch (event.key.keysym.sym) { case SDLK_ESCAPE: confrunning = false; break; default: break; } // Process the event if (type == 0) { // Keyboard switch(event.type) { case SDL_KEYUP: input_set_item(event, type, pnum, counter); counter++; break; default: break; } } else if (type == 1) { // Joystick switch(event.type) { case SDL_JOYBUTTONDOWN: input_set_item(event, type, pnum, counter); counter++; break; case SDL_JOYHATMOTION: if (event.jhat.value != SDL_HAT_CENTERED) { input_set_item(event, type, pnum, counter); counter++; } break; case SDL_JOYAXISMOTION: if (abs(event.jaxis.value) >= DEADZONE) { eventbuf = event; axisnoise = 1; axis = event.jaxis.axis; } else if (abs(event.jaxis.value) < DEADZONE && axisnoise && event.jaxis.axis == axis) { input_set_item(eventbuf, type, pnum, counter); axisnoise = 0; counter++; } break; default: break; } } if (counter >= NUMBUTTONS) { confrunning = false; } } } return 1; }
int input_configure_item(int pnum, int bnum, int type) { // Configure an input item if (confrunning) { return 0; } SDL_Event event, eventbuf; int axis = 0, axisnoise = 0, counter = 0; // Enter and Space hack bool etoggle = true; if (kbactivate) { etoggle = false; } confrunning = true; bool confstop = false; while (confrunning) { #ifdef _GTK while (gtk_events_pending()) { gtk_main_iteration_do(FALSE); } #endif while(SDL_PollEvent(&event)) { // Time to quit? switch (event.key.keysym.sym) { case SDLK_ESCAPE: confrunning = false; break; default: break; } // Process the event if (type == 0) { // Keyboard switch(event.type) { case SDL_KEYUP: // Enter and Space need to be handled separately if (event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_SPACE) { if (etoggle) { input_set_item(event, type, pnum, bnum); } else { etoggle = true; break; } } else { input_set_item(event, type, pnum, bnum); } confstop = true; break; default: break; } } else if (type == 1) { // Joystick switch(event.type) { case SDL_JOYBUTTONDOWN: input_set_item(event, type, pnum, bnum); confstop = true; break; case SDL_JOYHATMOTION: if (event.jhat.value != SDL_HAT_CENTERED) { input_set_item(event, type, pnum, bnum); confstop = true; } break; case SDL_JOYAXISMOTION: if (abs(event.jaxis.value) >= DEADZONE) { eventbuf = event; axisnoise = 1; axis = event.jaxis.axis; } else if (abs(event.jaxis.value) < DEADZONE && axisnoise && event.jaxis.axis == axis) { input_set_item(eventbuf, type, pnum, bnum); axisnoise = 0; confstop = true; } break; default: break; } } } if (confstop) { confrunning = false; } } return 1; }