From a06201d73b3ef185a67995cecaa3b3a305c0d8e9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Thu, 23 Oct 2014 06:24:02 +0200 Subject: [PATCH] (Input) Add Analog To Digital Type options --- frontend/menu/menu_entries_cbs.c | 48 ------------------ settings_data.c | 87 +++++++++++++++++++++++++++----- 2 files changed, 74 insertions(+), 61 deletions(-) diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c index b9a41cac2e..8eaa7903b9 100644 --- a/frontend/menu/menu_entries_cbs.c +++ b/frontend/menu/menu_entries_cbs.c @@ -1006,49 +1006,6 @@ static int action_ok_shader_parameters(const char *path, return 0; } -static int action_start_input_bind_analog_dpad_mode(unsigned type, const char *label, - unsigned action) -{ - unsigned port = 0; - - if (!driver.menu) - return -1; - - port = driver.menu->current_pad; - - g_settings.input.analog_dpad_mode[port] = 0; - - return 0; -} - -static int action_toggle_input_bind_analog_dpad_mode(unsigned type, const char *label, - unsigned action) -{ - unsigned port = 0; - - if (!driver.menu) - return -1; - - port = driver.menu->current_pad; - - switch (action) - { - case MENU_ACTION_RIGHT: - g_settings.input.analog_dpad_mode[port] = - (g_settings.input.analog_dpad_mode[port] + 1) - % ANALOG_DPAD_LAST; - break; - - case MENU_ACTION_LEFT: - g_settings.input.analog_dpad_mode[port] = - (g_settings.input.analog_dpad_mode - [port] + ANALOG_DPAD_LAST - 1) % ANALOG_DPAD_LAST; - break; - } - - return 0; -} - static int action_ok_video_resolution(const char *path, const char *label, unsigned type, size_t idx) { @@ -1570,7 +1527,6 @@ static int deferred_push_input_options(void *data, void *userdata, driver.menu->list_settings = (rarch_setting_t *)setting_data_new(SL_FLAG_ALL_SETTINGS); menu_list_clear(list); - menu_list_push(list, "Analog D-pad Mode", "input_bind_analog_dpad_mode", 0, 0); menu_list_push(list, "Bind Mode", "", MENU_SETTINGS_CUSTOM_BIND_MODE, 0); menu_list_push(list, "Configure All (RetroPad)", "", @@ -2072,8 +2028,6 @@ static void menu_entries_cbs_init_bind_start(menu_file_list_cbs_t *cbs, cbs->action_start = action_start_shader_filter_pass; else if (!strcmp(label, "video_shader_num_passes")) cbs->action_start = action_start_shader_num_passes; - else if (!strcmp(label, "input_bind_analog_dpad_mode")) - cbs->action_start = action_start_input_bind_analog_dpad_mode; else if (type >= MENU_SETTINGS_BIND_BEGIN && type <= MENU_SETTINGS_BIND_ALL_LAST) cbs->action_start = action_start_bind; @@ -2165,8 +2119,6 @@ static void menu_entries_cbs_init_bind_toggle(menu_file_list_cbs_t *cbs, cbs->action_toggle = action_toggle_shader_num_passes; else if (!strcmp(label, "shader_apply_changes")) cbs->action_toggle = menu_action_setting_set; - else if (!strcmp(label, "input_bind_analog_dpad_mode")) - cbs->action_toggle = action_toggle_input_bind_analog_dpad_mode; else if (type == MENU_SETTINGS_VIDEO_RESOLUTION) cbs->action_toggle = action_toggle_video_resolution; else if ((type >= MENU_SETTINGS_CORE_OPTION_START)) diff --git a/settings_data.c b/settings_data.c index fa5607c5e9..c1ed24e7f4 100644 --- a/settings_data.c +++ b/settings_data.c @@ -553,6 +553,18 @@ static void menu_common_setting_set_label_st_uint(rarch_setting_t *setting, strlcpy(type_str, name, type_str_size); } + else if (strstr(setting->name, "analog_dpad_mode")) + { + static const char *modes[] = { + "None", + "Left Analog", + "Right Analog", + }; + + strlcpy(type_str, modes[g_settings.input.analog_dpad_mode + [setting->index_offset] % ANALOG_DPAD_LAST], + type_str_size); + } else if (!strcmp(setting->name, "autosave_interval")) { if (*setting->value.unsigned_integer) @@ -701,6 +713,34 @@ static int setting_data_bool_action_start_savestates(void *data) return 0; } +static int setting_data_uint_action_toggle_analog_dpad_mode(void *data, unsigned action) +{ + unsigned port = 0; + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + + port = setting->index_offset; + + switch (action) + { + case MENU_ACTION_RIGHT: + g_settings.input.analog_dpad_mode[port] = + (g_settings.input.analog_dpad_mode[port] + 1) + % ANALOG_DPAD_LAST; + break; + + case MENU_ACTION_LEFT: + g_settings.input.analog_dpad_mode[port] = + (g_settings.input.analog_dpad_mode + [port] + ANALOG_DPAD_LAST - 1) % ANALOG_DPAD_LAST; + break; + } + + return 0; +} + static int setting_data_uint_action_toggle_libretro_device_type(void *data, unsigned action) { unsigned current_device, current_idx, i, devices[128]; @@ -861,6 +901,18 @@ static int setting_data_bool_action_ok_default(void *data, unsigned action) return 0; } +static int setting_data_uint_action_start_analog_dpad_mode(void *data) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + + *setting->value.unsigned_integer = 0; + + return 0; +} + static int setting_data_uint_action_start_default(void *data) { rarch_setting_t *setting = (rarch_setting_t*)data; @@ -2411,18 +2463,6 @@ void setting_data_get_label(char *type_str, else strlcpy(type_str, "Disabled", type_str_size); } - else if (!strcmp(label, "input_bind_analog_dpad_mode")) - { - static const char *modes[] = { - "None", - "Left Analog", - "Right Analog", - }; - - strlcpy(type_str, modes[g_settings.input.analog_dpad_mode - [driver.menu->current_pad] % ANALOG_DPAD_LAST], - 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, @@ -4343,16 +4383,23 @@ static bool setting_data_append_list_input_options( /* FIXME/TODO - really need to clean up this mess in some way. */ static char key[MAX_PLAYERS][64]; static char type_key[MAX_PLAYERS][64]; + static char analog_key[MAX_PLAYERS][64]; static char label[MAX_PLAYERS][64]; static char type_label[MAX_PLAYERS][64]; + static char analog_label[MAX_PLAYERS][64]; snprintf(key[player], sizeof(key[player]), "input_player%d_joypad_index", player + 1); - snprintf(type_key[player], sizeof(key[player]), + snprintf(type_key[player], sizeof(type_key[player]), "input_libretro_device_p%u", player + 1); + snprintf(analog_key[player], sizeof(analog_key[player]), + "input_player%u_analog_dpad_mode", player + 1); snprintf(label[player], sizeof(label[player]), "User %d Device Index", player + 1); snprintf(type_label[player], sizeof(type_label[player]), "User %d Device Type", player + 1); + snprintf(analog_label[player], sizeof(analog_label[player]), + "User %d Analog To Digital Type", player + 1); + CONFIG_UINT( g_settings.input.libretro_device[player], type_key[player], @@ -4367,6 +4414,20 @@ static bool setting_data_append_list_input_options( (*list)[list_info->index - 1].action_toggle = &setting_data_uint_action_toggle_libretro_device_type; (*list)[list_info->index - 1].action_start = &setting_data_uint_action_start_libretro_device_type; + CONFIG_UINT( + g_settings.input.analog_dpad_mode[player], + analog_key[player], + analog_label[player], + player, + group_info.name, + subgroup_info.name, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].index = player + 1; + (*list)[list_info->index - 1].index_offset = player; + (*list)[list_info->index - 1].action_toggle = &setting_data_uint_action_toggle_analog_dpad_mode; + (*list)[list_info->index - 1].action_start = &setting_data_uint_action_start_analog_dpad_mode; + CONFIG_UINT( g_settings.input.joypad_map[player], key[player],