From 1c1194cdca36f2ad548873f941f4c94cf958a3f6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Sep 2014 22:12:22 +0200 Subject: [PATCH] (Menu) Refactor two input settings --- frontend/menu/backend/menu_common_backend.c | 195 +++++++++----------- frontend/menu/menu_common.h | 2 - frontend/menu/menu_entries.c | 6 +- settings_data.c | 120 ++++++------ 4 files changed, 152 insertions(+), 171 deletions(-) diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 7ab2f3d1d0..aaa0dd8b72 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -90,32 +90,7 @@ static int menu_info_screen_iterate(unsigned action) strlcpy(needle, label, sizeof(needle)); } - - if (needle[0] == '\0' || setting_data_get_description(needle, msg, sizeof(msg)) == -1) - { - switch (info_type) - { - case MENU_SETTINGS_BIND_DEVICE: - snprintf(msg, sizeof(msg), - " -- Input Device. \n" - " \n" - "Picks which gamepad to use for player N. \n" - "The name of the pad is available." - ); - break; - case MENU_SETTINGS_BIND_DEVICE_TYPE: - snprintf(msg, sizeof(msg), - " -- Input Device Type. \n" - " \n" - "Picks which device type to use. This is \n" - "relevant for the libretro core itself." - ); - break; - default: - snprintf(msg, sizeof(msg), - "-- No info on this item available. --\n"); - } - } + setting_data_get_description(needle, msg, sizeof(msg)); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render_messagebox) @@ -613,6 +588,89 @@ static int menu_setting_set(unsigned id, const char *label, if (driver.menu->need_refresh) gfx_shader_resolve_parameters(NULL, driver.menu->shader); #endif + } + else if (!strcmp(label, "input_bind_device_id")) + { + int *p = &g_settings.input.joypad_map[port]; + if (action == MENU_ACTION_START) + *p = port; + else if (action == MENU_ACTION_LEFT) + (*p)--; + else if (action == MENU_ACTION_RIGHT) + (*p)++; + + if (*p < -1) + *p = -1; + else if (*p >= MAX_PLAYERS) + *p = MAX_PLAYERS - 1; + } + else if (!strcmp(label, "input_bind_device_type")) + { + unsigned current_device, current_index, i, devices[128]; + const struct retro_controller_info *desc; + unsigned types = 0; + + devices[types++] = RETRO_DEVICE_NONE; + devices[types++] = RETRO_DEVICE_JOYPAD; + + /* Only push RETRO_DEVICE_ANALOG as default if we use an + * older core which doesn't use SET_CONTROLLER_INFO. */ + if (!g_extern.system.num_ports) + devices[types++] = RETRO_DEVICE_ANALOG; + + desc = port < g_extern.system.num_ports ? + &g_extern.system.ports[port] : NULL; + if (desc) + { + for (i = 0; i < desc->num_types; i++) + { + unsigned id = desc->types[i].id; + if (types < ARRAY_SIZE(devices) && + id != RETRO_DEVICE_NONE && + id != RETRO_DEVICE_JOYPAD) + devices[types++] = id; + } + } + + current_device = g_settings.input.libretro_device[port]; + current_index = 0; + for (i = 0; i < types; i++) + { + if (current_device == devices[i]) + { + current_index = i; + break; + } + } + + bool updated = true; + switch (action) + { + case MENU_ACTION_START: + current_device = RETRO_DEVICE_JOYPAD; + break; + + case MENU_ACTION_LEFT: + current_device = devices + [(current_index + types - 1) % types]; + break; + + case MENU_ACTION_RIGHT: + case MENU_ACTION_OK: + current_device = devices + [(current_index + 1) % types]; + break; + + default: + updated = false; + } + + if (updated) + { + g_settings.input.libretro_device[port] = current_device; + pretro_set_controller_port_device(port, current_device); + } + } else { @@ -635,22 +693,6 @@ static int menu_setting_set(unsigned id, const char *label, driver.menu->need_refresh = true; port = driver.menu->current_pad; break; - case MENU_SETTINGS_BIND_DEVICE: - { - int *p = &g_settings.input.joypad_map[port]; - if (action == MENU_ACTION_START) - *p = port; - else if (action == MENU_ACTION_LEFT) - (*p)--; - else if (action == MENU_ACTION_RIGHT) - (*p)++; - - if (*p < -1) - *p = -1; - else if (*p >= MAX_PLAYERS) - *p = MAX_PLAYERS - 1; - } - break; case MENU_SETTINGS_BIND_ANALOG_MODE: switch (action) { @@ -675,75 +717,6 @@ static int menu_setting_set(unsigned id, const char *label, break; } break; - case MENU_SETTINGS_BIND_DEVICE_TYPE: - { - unsigned current_device, current_index, i, devices[128]; - const struct retro_controller_info *desc; - unsigned types = 0; - - devices[types++] = RETRO_DEVICE_NONE; - devices[types++] = RETRO_DEVICE_JOYPAD; - - /* Only push RETRO_DEVICE_ANALOG as default if we use an - * older core which doesn't use SET_CONTROLLER_INFO. */ - if (!g_extern.system.num_ports) - devices[types++] = RETRO_DEVICE_ANALOG; - - desc = port < g_extern.system.num_ports ? - &g_extern.system.ports[port] : NULL; - if (desc) - { - for (i = 0; i < desc->num_types; i++) - { - unsigned id = desc->types[i].id; - if (types < ARRAY_SIZE(devices) && - id != RETRO_DEVICE_NONE && - id != RETRO_DEVICE_JOYPAD) - devices[types++] = id; - } - } - - current_device = g_settings.input.libretro_device[port]; - current_index = 0; - for (i = 0; i < types; i++) - { - if (current_device == devices[i]) - { - current_index = i; - break; - } - } - - bool updated = true; - switch (action) - { - case MENU_ACTION_START: - current_device = RETRO_DEVICE_JOYPAD; - break; - - case MENU_ACTION_LEFT: - current_device = devices - [(current_index + types - 1) % types]; - break; - - case MENU_ACTION_RIGHT: - case MENU_ACTION_OK: - current_device = devices - [(current_index + 1) % types]; - break; - - default: - updated = false; - } - - if (updated) - { - g_settings.input.libretro_device[port] = current_device; - pretro_set_controller_port_device(port, current_device); - } - - break; - } case MENU_SETTINGS_CUSTOM_BIND_MODE: if (action == MENU_ACTION_LEFT || action == MENU_ACTION_RIGHT) driver.menu->bind_mode_keyboard = diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index c5f22a1cf2..273c2d3def 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -104,8 +104,6 @@ typedef enum MENU_SETTINGS_SHADER_PASS_SCALE_LAST = MENU_SETTINGS_SHADER_PASS_SCALE_0 + (GFX_MAX_SHADERS - 1), MENU_SETTINGS_BIND_PLAYER, - MENU_SETTINGS_BIND_DEVICE, - MENU_SETTINGS_BIND_DEVICE_TYPE, MENU_SETTINGS_BIND_ANALOG_MODE, // Match up with libretro order for simplicity. diff --git a/frontend/menu/menu_entries.c b/frontend/menu/menu_entries.c index 063539397f..e090219e96 100644 --- a/frontend/menu/menu_entries.c +++ b/frontend/menu/menu_entries.c @@ -442,10 +442,8 @@ int menu_entries_push_list(menu_handle_t *menu, file_list_clear(list); file_list_push(list, "Player", "", MENU_SETTINGS_BIND_PLAYER, 0); - file_list_push(list, "Device", "", - MENU_SETTINGS_BIND_DEVICE, 0); - file_list_push(list, "Device Type", "", - MENU_SETTINGS_BIND_DEVICE_TYPE, 0); + file_list_push(list, "Device", "input_bind_device_id", 0, 0); + file_list_push(list, "Device Type", "input_bind_device_type", 0, 0); file_list_push(list, "Analog D-pad Mode", "", MENU_SETTINGS_BIND_ANALOG_MODE, 0); add_setting_entry(menu,list,"input_axis_threshold", 0, setting_data); diff --git a/settings_data.c b/settings_data.c index 6dc7b18add..8e70f86003 100644 --- a/settings_data.c +++ b/settings_data.c @@ -1507,6 +1507,20 @@ int setting_data_get_description(const char *label, char *msg, else if (!strcmp(label, "menu_toggle")) snprintf(msg, sizeof_msg, " -- Toggles menu."); + else if (!strcmp(label, "input_bind_device_id")) + snprintf(msg, sizeof_msg, + " -- Input Device. \n" + " \n" + "Picks which gamepad to use for player N. \n" + "The name of the pad is available." + ); + else if (!strcmp(label, "input_bind_device_type")) + snprintf(msg, sizeof_msg, + " -- Input Device Type. \n" + " \n" + "Picks which device type to use. This is \n" + "relevant for the libretro core itself." + ); else snprintf(msg, sizeof_msg, "-- No info on this item is available. --\n"); @@ -1732,6 +1746,58 @@ void setting_data_get_label(char *type_str, driver.menu->shader, type_str, type_str_size, menu_label, label, type); } + else if (!strcmp(label, "input_bind_device_id")) + { + int map = g_settings.input.joypad_map + [driver.menu->current_pad]; + if (map >= 0 && map < MAX_PLAYERS) + { + const char *device_name = + g_settings.input.device_names[map]; + + if (*device_name) + strlcpy(type_str, device_name, type_str_size); + else + snprintf(type_str, type_str_size, + "N/A (port #%d)", map); + } + else + strlcpy(type_str, "Disabled", type_str_size); + } + else if (!strcmp(label, "input_bind_device_type")) + { + const struct retro_controller_description *desc = NULL; + if (driver.menu->current_pad < g_extern.system.num_ports) + desc = libretro_find_controller_description( + &g_extern.system.ports[driver.menu->current_pad], + g_settings.input.libretro_device + [driver.menu->current_pad]); + + const char *name = desc ? desc->desc : NULL; + if (!name) + { + /* Find generic name. */ + + switch (g_settings.input.libretro_device + [driver.menu->current_pad]) + { + case RETRO_DEVICE_NONE: + name = "None"; + break; + case RETRO_DEVICE_JOYPAD: + name = "RetroPad"; + break; + case RETRO_DEVICE_ANALOG: + name = "RetroPad w/ Analog"; + break; + default: + name = "Unknown"; + break; + } + } + + strlcpy(type_str, name, type_str_size); + } else if (type >= MENU_SETTINGS_PERF_COUNTERS_BEGIN && type <= MENU_SETTINGS_PERF_COUNTERS_END) menu_common_setting_set_label_perf(type_str, type_str_size, w, type, @@ -1806,25 +1872,6 @@ void setting_data_get_label(char *type_str, snprintf(type_str, type_str_size, "#%u", driver.menu->current_pad + 1); break; - case MENU_SETTINGS_BIND_DEVICE: - { - int map = g_settings.input.joypad_map - [driver.menu->current_pad]; - if (map >= 0 && map < MAX_PLAYERS) - { - const char *device_name = - g_settings.input.device_names[map]; - - if (*device_name) - strlcpy(type_str, device_name, type_str_size); - else - snprintf(type_str, type_str_size, - "N/A (port #%d)", map); - } - else - strlcpy(type_str, "Disabled", type_str_size); - } - break; case MENU_SETTINGS_BIND_ANALOG_MODE: { static const char *modes[] = { @@ -1839,41 +1886,6 @@ void setting_data_get_label(char *type_str, type_str_size); } break; - case MENU_SETTINGS_BIND_DEVICE_TYPE: - { - const struct retro_controller_description *desc = NULL; - if (driver.menu->current_pad < g_extern.system.num_ports) - desc = libretro_find_controller_description( - &g_extern.system.ports[driver.menu->current_pad], - g_settings.input.libretro_device - [driver.menu->current_pad]); - - const char *name = desc ? desc->desc : NULL; - if (!name) - { - /* Find generic name. */ - - switch (g_settings.input.libretro_device - [driver.menu->current_pad]) - { - case RETRO_DEVICE_NONE: - name = "None"; - break; - case RETRO_DEVICE_JOYPAD: - name = "RetroPad"; - break; - case RETRO_DEVICE_ANALOG: - name = "RetroPad w/ Analog"; - break; - default: - name = "Unknown"; - break; - } - } - - strlcpy(type_str, name, type_str_size); - } - break; case MENU_SETTINGS_CUSTOM_BIND_MODE: strlcpy(type_str, driver.menu->bind_mode_keyboard ? "RetroKeyboard" : "RetroPad", type_str_size);