(Input) Add Analog To Digital Type options

This commit is contained in:
twinaphex 2014-10-23 06:24:02 +02:00
parent 6979b62bdc
commit a06201d73b
2 changed files with 74 additions and 61 deletions

View File

@ -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))

View File

@ -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],