mirror of
https://github.com/libretro/RetroArch
synced 2025-02-08 15:40:14 +00:00
(GX/PS3) Reimplement menu binds
This commit is contained in:
parent
2bfcb8e4e8
commit
75a6db27b4
36
config.def.h
36
config.def.h
@ -695,24 +695,24 @@ static const struct retro_keybind retro_keybinds_1[] = {
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef HW_RVL
|
||||
#ifdef RARCH_CONSOLE
|
||||
static const struct retro_keybind retro_keybinds_menu[] = {
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_B, NULL, 0, GX_MENU_B, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_Y, NULL, 0, GX_MENU_Y, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_SELECT, NULL, 0, GX_MENU_SELECT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_START, NULL, 0, GX_MENU_START, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_UP, NULL, 0, GX_MENU_UP, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_DOWN, NULL, 0, GX_MENU_DOWN, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_LEFT, NULL, 0, GX_MENU_LEFT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_RIGHT, NULL, 0, GX_MENU_RIGHT, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_A, NULL, 0, GX_MENU_A, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_X, NULL, 0, GX_MENU_X, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L, NULL, 0, GX_MENU_L, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R, NULL, 0, GX_MENU_R, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L2, NULL, 0, GX_CLASSIC_ZL_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R2, NULL, 0, GX_CLASSIC_ZR_TRIGGER, 0 },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L3, RETRO_LBL_JOYPAD_L3, RETROK_UNKNOWN, RETRO_DEF_JOYPAD_L3, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R3, RETRO_LBL_JOYPAD_R3, RETROK_UNKNOWN, RETRO_DEF_JOYPAD_R3, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_B, RETRO_LBL_JOYPAD_B, RETROK_UNKNOWN, CONSOLE_MENU_B, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_Y, RETRO_LBL_JOYPAD_Y, RETROK_UNKNOWN, CONSOLE_MENU_Y, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_SELECT, RETRO_LBL_JOYPAD_SELECT, RETROK_UNKNOWN, CONSOLE_MENU_SELECT, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_START, RETRO_LBL_JOYPAD_START, RETROK_UNKNOWN, CONSOLE_MENU_START, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_UP, RETRO_LBL_JOYPAD_UP, RETROK_UNKNOWN, CONSOLE_MENU_UP, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_DOWN, RETRO_LBL_JOYPAD_DOWN, RETROK_UNKNOWN, CONSOLE_MENU_DOWN, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_LEFT, RETRO_LBL_JOYPAD_LEFT, RETROK_UNKNOWN, CONSOLE_MENU_LEFT, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_RIGHT, RETRO_LBL_JOYPAD_RIGHT, RETROK_UNKNOWN, CONSOLE_MENU_RIGHT, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_A, RETRO_LBL_JOYPAD_A, RETROK_UNKNOWN, CONSOLE_MENU_A, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_X, RETRO_LBL_JOYPAD_X, RETROK_UNKNOWN, CONSOLE_MENU_X, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L, RETRO_LBL_JOYPAD_L, RETROK_UNKNOWN, CONSOLE_MENU_L, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R, RETRO_LBL_JOYPAD_R, RETROK_UNKNOWN, CONSOLE_MENU_R, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L2, RETRO_LBL_JOYPAD_L2, RETROK_UNKNOWN, CONSOLE_MENU_L2, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R2, RETRO_LBL_JOYPAD_R2, RETROK_UNKNOWN, CONSOLE_MENU_R2, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_L3, RETRO_LBL_JOYPAD_L3, RETROK_UNKNOWN, CONSOLE_MENU_L3, 0, AXIS_NONE },
|
||||
{ true, RETRO_DEVICE_ID_JOYPAD_R3, RETRO_LBL_JOYPAD_R3, RETROK_UNKNOWN, CONSOLE_MENU_R3, 0, AXIS_NONE },
|
||||
{ true, RARCH_ANALOG_LEFT_X_PLUS, RETRO_LBL_ANALOG_LEFT_X_PLUS, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_ANALOG_LEFT_X_MINUS, RETRO_LBL_ANALOG_LEFT_X_MINUS, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_ANALOG_LEFT_Y_PLUS, RETRO_LBL_ANALOG_LEFT_Y_PLUS, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
@ -753,7 +753,7 @@ static const struct retro_keybind retro_keybinds_menu[] = {
|
||||
{ true, RARCH_DISK_EJECT_TOGGLE, RETRO_LBL_DISK_EJECT_TOGGLE, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_DISK_NEXT, RETRO_LBL_DISK_NEXT, RETROK_UNKNOWN, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_GRAB_MOUSE_TOGGLE, RETRO_LBL_GRAB_MOUSE_TOGGLE, RETROK_F11, NO_BTN, 0, AXIS_NONE },
|
||||
{ true, RARCH_MENU_TOGGLE, NULL, 0, GX_MENU_HOME, 0 },
|
||||
{ true, RARCH_MENU_TOGGLE, RETRO_LBL_MENU_TOGGLE, RETROK_UNKNOWN, CONSOLE_MENU_HOME, 0, AXIS_NONE },
|
||||
};
|
||||
#endif
|
||||
|
||||
|
25
driver.h
25
driver.h
@ -109,6 +109,31 @@ enum // RetroArch specific bind IDs.
|
||||
RARCH_BIND_LIST_END_NULL
|
||||
};
|
||||
|
||||
#ifdef RARCH_CONSOLE
|
||||
enum // Console specific menu bind IDs.
|
||||
{
|
||||
CONSOLE_MENU_FIRST = 61,
|
||||
CONSOLE_MENU_A = CONSOLE_MENU_FIRST,
|
||||
CONSOLE_MENU_B = 62,
|
||||
CONSOLE_MENU_X = 63,
|
||||
CONSOLE_MENU_Y = 64,
|
||||
CONSOLE_MENU_START = 65,
|
||||
CONSOLE_MENU_SELECT = 66,
|
||||
CONSOLE_MENU_UP = 67,
|
||||
CONSOLE_MENU_DOWN = 68,
|
||||
CONSOLE_MENU_LEFT = 69,
|
||||
CONSOLE_MENU_RIGHT = 70,
|
||||
CONSOLE_MENU_L = 71,
|
||||
CONSOLE_MENU_R = 72,
|
||||
CONSOLE_MENU_L2 = 73,
|
||||
CONSOLE_MENU_R2 = 74,
|
||||
CONSOLE_MENU_L3 = 75,
|
||||
CONSOLE_MENU_R3 = 76,
|
||||
CONSOLE_MENU_HOME = 77,
|
||||
CONSOLE_MENU_LAST = CONSOLE_MENU_HOME,
|
||||
};
|
||||
#endif
|
||||
|
||||
struct retro_keybind
|
||||
{
|
||||
bool valid;
|
||||
|
@ -475,7 +475,7 @@ static uint64_t menu_input(void)
|
||||
unsigned i;
|
||||
uint64_t input_state = 0;
|
||||
|
||||
#ifdef HW_RVL
|
||||
#ifdef RARCH_CONSOLE
|
||||
static const struct retro_keybind *binds[] = { g_settings.input.menu_binds };
|
||||
#else
|
||||
static const struct retro_keybind *binds[] = { g_settings.input.binds[0] };
|
||||
|
@ -231,7 +231,7 @@ struct settings
|
||||
char joypad_driver[32];
|
||||
char keyboard_layout[64];
|
||||
struct retro_keybind binds[MAX_PLAYERS][RARCH_BIND_LIST_END];
|
||||
#ifdef HW_RVL
|
||||
#ifdef RARCH_CONSOLE
|
||||
struct retro_keybind menu_binds[RARCH_BIND_LIST_END];
|
||||
#endif
|
||||
|
||||
|
@ -109,32 +109,36 @@ static bool gx_menu_input_state(uint64_t joykey, uint64_t state)
|
||||
{
|
||||
switch (joykey)
|
||||
{
|
||||
case GX_MENU_A:
|
||||
case CONSOLE_MENU_A:
|
||||
return state & ((1ULL << GX_GC_A) | (1ULL << GX_WIIMOTE_A) | (1ULL << GX_CLASSIC_A) | (1ULL << GX_WIIMOTE_2));
|
||||
case GX_MENU_B:
|
||||
case CONSOLE_MENU_B:
|
||||
return state & ((1ULL << GX_GC_B) | (1ULL << GX_WIIMOTE_B) | (1ULL << GX_CLASSIC_B) | (1ULL << GX_WIIMOTE_1));
|
||||
case GX_MENU_X:
|
||||
case CONSOLE_MENU_X:
|
||||
return state & ((1ULL << GX_GC_X) | (1ULL << GX_CLASSIC_X));
|
||||
case GX_MENU_Y:
|
||||
case CONSOLE_MENU_Y:
|
||||
return state & ((1ULL << GX_GC_Y) | (1ULL << GX_CLASSIC_Y));
|
||||
case GX_MENU_START:
|
||||
case CONSOLE_MENU_START:
|
||||
return state & ((1ULL << GX_GC_START) | (1ULL << GX_WIIMOTE_PLUS) | (1ULL << GX_CLASSIC_PLUS));
|
||||
case GX_MENU_SELECT:
|
||||
case CONSOLE_MENU_SELECT:
|
||||
return state & ((1ULL << GX_GC_Z_TRIGGER) | (1ULL << GX_WIIMOTE_MINUS) | (1ULL << GX_CLASSIC_MINUS));
|
||||
case GX_MENU_UP:
|
||||
case CONSOLE_MENU_UP:
|
||||
return state & ((1ULL << GX_GC_UP) | (1ULL << GX_WIIMOTE_UP) | (1ULL << GX_CLASSIC_UP) | (1ULL << GX_NUNCHUK_UP));
|
||||
case GX_MENU_DOWN:
|
||||
case CONSOLE_MENU_DOWN:
|
||||
return state & ((1ULL << GX_GC_DOWN) | (1ULL << GX_WIIMOTE_DOWN) | (1ULL << GX_CLASSIC_DOWN) | (1ULL << GX_NUNCHUK_DOWN));
|
||||
case GX_MENU_LEFT:
|
||||
case CONSOLE_MENU_LEFT:
|
||||
return state & ((1ULL << GX_GC_LEFT) | (1ULL << GX_WIIMOTE_LEFT) | (1ULL << GX_CLASSIC_LEFT) | (1ULL << GX_NUNCHUK_LEFT));
|
||||
case GX_MENU_RIGHT:
|
||||
case CONSOLE_MENU_RIGHT:
|
||||
return state & ((1ULL << GX_GC_RIGHT) | (1ULL << GX_WIIMOTE_RIGHT) | (1ULL << GX_CLASSIC_RIGHT) | (1ULL << GX_NUNCHUK_RIGHT));
|
||||
case GX_MENU_L:
|
||||
case CONSOLE_MENU_L:
|
||||
return state & ((1ULL << GX_GC_L_TRIGGER) | (1ULL << GX_CLASSIC_L_TRIGGER));
|
||||
case GX_MENU_R:
|
||||
case CONSOLE_MENU_R:
|
||||
return state & ((1ULL << GX_GC_R_TRIGGER) | (1ULL << GX_CLASSIC_R_TRIGGER));
|
||||
case GX_MENU_HOME:
|
||||
case CONSOLE_MENU_HOME:
|
||||
return state & ((1ULL << GX_WIIMOTE_HOME) | (1ULL << GX_CLASSIC_HOME));
|
||||
case CONSOLE_MENU_L2:
|
||||
return state & (1ULL << GX_CLASSIC_ZL_TRIGGER);
|
||||
case CONSOLE_MENU_R2:
|
||||
return state & (1ULL << GX_CLASSIC_ZR_TRIGGER);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@ -152,7 +156,7 @@ static int16_t gx_input_state(void *data, const struct retro_keybind **binds,
|
||||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
if (binds[port][id].joykey >= GX_MENU_FIRST && binds[port][id].joykey <= GX_MENU_LAST)
|
||||
if (binds[port][id].joykey >= CONSOLE_MENU_FIRST && binds[port][id].joykey <= CONSOLE_MENU_LAST)
|
||||
return gx_menu_input_state(binds[port][id].joykey, gx->pad_state[port]) ? 1 : 0;
|
||||
else
|
||||
return input_joypad_pressed(&gx_joypad, port, binds[port], id);;
|
||||
|
@ -68,24 +68,6 @@ enum
|
||||
#endif
|
||||
GX_WIIMOTE_HOME = 49, // needed on GameCube as "fake" menu button
|
||||
GX_QUIT_KEY = 60,
|
||||
|
||||
// special binds for the menu
|
||||
GX_MENU_A = 61,
|
||||
GX_MENU_B = 62,
|
||||
GX_MENU_X = 63,
|
||||
GX_MENU_Y = 64,
|
||||
GX_MENU_START = 65,
|
||||
GX_MENU_SELECT = 66,
|
||||
GX_MENU_UP = 67,
|
||||
GX_MENU_DOWN = 68,
|
||||
GX_MENU_LEFT = 69,
|
||||
GX_MENU_RIGHT = 70,
|
||||
GX_MENU_L = 71,
|
||||
GX_MENU_R = 72,
|
||||
GX_MENU_HOME = 73,
|
||||
|
||||
GX_MENU_FIRST = GX_MENU_A,
|
||||
GX_MENU_LAST = GX_MENU_HOME
|
||||
};
|
||||
|
||||
enum gx_device_id
|
||||
|
@ -190,6 +190,49 @@ static int16_t ps3_mouse_device_state(void *data, unsigned player, unsigned id)
|
||||
|
||||
#endif
|
||||
|
||||
static bool ps3_menu_input_state(uint64_t joykey, uint64_t state)
|
||||
{
|
||||
switch (joykey)
|
||||
{
|
||||
case CONSOLE_MENU_A:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_A);
|
||||
case CONSOLE_MENU_B:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_B);
|
||||
case CONSOLE_MENU_X:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_X);
|
||||
case CONSOLE_MENU_Y:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_Y);
|
||||
case CONSOLE_MENU_START:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_START);
|
||||
case CONSOLE_MENU_SELECT:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_SELECT);
|
||||
case CONSOLE_MENU_UP:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_UP);
|
||||
case CONSOLE_MENU_DOWN:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||
case CONSOLE_MENU_LEFT:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||
case CONSOLE_MENU_RIGHT:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||
case CONSOLE_MENU_L:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L);
|
||||
case CONSOLE_MENU_R:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R);
|
||||
case CONSOLE_MENU_HOME:
|
||||
return (state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L3)) && (state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R3));
|
||||
case CONSOLE_MENU_L2:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L2);
|
||||
case CONSOLE_MENU_R2:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R2);
|
||||
case CONSOLE_MENU_L3:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_L3);
|
||||
case CONSOLE_MENU_R3:
|
||||
return state & (1ULL << RETRO_DEVICE_ID_JOYPAD_R3);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int16_t ps3_input_state(void *data, const struct retro_keybind **binds,
|
||||
unsigned port, unsigned device,
|
||||
unsigned index, unsigned id)
|
||||
@ -202,6 +245,9 @@ static int16_t ps3_input_state(void *data, const struct retro_keybind **binds,
|
||||
switch (device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
if (binds[port][id].joykey >= CONSOLE_MENU_FIRST && binds[port][id].joykey <= CONSOLE_MENU_LAST)
|
||||
return ps3_menu_input_state(binds[port][id].joykey, ps3->pad_state[port]) ? 1 : 0;
|
||||
else
|
||||
return input_joypad_pressed(&ps3_joypad, port, binds[port], id);
|
||||
case RETRO_DEVICE_ANALOG:
|
||||
return input_joypad_analog(&ps3_joypad, port, index, id, binds[port]);
|
||||
|
@ -307,7 +307,7 @@ void config_set_defaults(void)
|
||||
rarch_assert(sizeof(g_settings.input.binds[0]) >= sizeof(retro_keybinds_1));
|
||||
rarch_assert(sizeof(g_settings.input.binds[1]) >= sizeof(retro_keybinds_rest));
|
||||
memcpy(g_settings.input.binds[0], retro_keybinds_1, sizeof(retro_keybinds_1));
|
||||
#ifdef HW_RVL
|
||||
#ifdef RARCH_CONSOLE
|
||||
memcpy(g_settings.input.menu_binds, retro_keybinds_menu, sizeof(retro_keybinds_menu));
|
||||
#endif
|
||||
for (i = 1; i < MAX_PLAYERS; i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user