#ifndef __GTK_CONTROL_H #define __GTK_CONTROL_H #include #include "gtk_binding.h" #ifdef USE_JOYSTICK #include "SDL.h" #endif const int NUM_JOYPADS = 10; enum { JOY_MODE_GLOBAL = 0, JOY_MODE_INDIVIDUAL = 1, JOY_MODE_CALIBRATE = 2 }; enum { JOY_RELEASED = 0, JOY_PRESSED = 1 }; enum { PORT_COMMAND_FULLSCREEN = 1, PORT_COMMAND_SAVE_SPC = 2, PORT_OPEN_ROM = 3, PORT_PAUSE = 4, PORT_SEEK_TO_FRAME = 5, PORT_QUIT = 6, PORT_SWAP_CONTROLLERS = 7, PORT_REWIND = 8, PORT_QUICKLOAD0 = 9, PORT_QUICKLOAD1 = 10, PORT_QUICKLOAD2 = 11, PORT_QUICKLOAD3 = 12, PORT_QUICKLOAD4 = 13, PORT_QUICKLOAD5 = 14, PORT_QUICKLOAD6 = 15, PORT_QUICKLOAD7 = 16, PORT_QUICKLOAD8 = 17, PORT_QUICKLOAD9 = 18 }; typedef struct BindingLink { const char *button_name; const char *snes9x_name; } BindingLink; extern const BindingLink b_links[]; extern const int b_breaks[]; const int NUM_JOYPAD_LINKS = 24; const int NUM_EMU_LINKS = 55; typedef struct JoypadBinding { Binding data[NUM_JOYPAD_LINKS]; /* Avoid packing issues */ } JoypadBinding; #ifdef USE_JOYSTICK bool S9xGrabJoysticks (); void S9xReleaseJoysticks (); typedef struct JoyEvent { unsigned int parameter; unsigned int state; } JoyEvent; typedef struct Calibration { int min; int max; int center; } Calibration; class JoyDevice { public: JoyDevice (unsigned int device_num); ~JoyDevice (); int get_event (JoyEvent *event); void flush (); void handle_event (SDL_Event *event); void register_centers (); SDL_Joystick *filedes; Calibration *calibration; std::queue queue; int mode; int joynum; int num_axes; int num_hats; int *axis; int *hat; bool enabled; private: void poll_events (void); void add_event (unsigned int parameter, unsigned int state); }; #endif void S9xDeinitInputDevices (); Binding S9xGetBindingByName (const char *name); bool S9xIsMousePluggedIn (); #endif /* __GTK_CONTROL_H*/