Add dropdown list for Netplay Latency Frame settings

This commit is contained in:
twinaphex 2018-09-23 14:34:51 +02:00
parent ff949328d2
commit 962680abb8
5 changed files with 88 additions and 51 deletions

View File

@ -1669,6 +1669,7 @@ static int menu_cbs_init_bind_get_string_representation_compare_type(
case 26: /* URL entries */
BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_entry_url);
break;
case MENU_SETTING_DROPDOWN_SETTING_INT_ITEM:
case MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM:
case MENU_SETTING_DROPDOWN_ITEM:
case MENU_SETTING_NO_ITEM:

View File

@ -4269,6 +4269,19 @@ int action_ok_push_filebrowser_list_file_select(const char *path,
entry_idx, ACTION_OK_DL_FILE_BROWSER_SELECT_DIR);
}
static int action_ok_push_dropdown_setting_int_item(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
enum msg_hash_enums enum_idx = (enum msg_hash_enums)atoi(label);
rarch_setting_t *setting = menu_setting_find_enum(enum_idx);
if (!setting)
return -1;
*setting->value.target.integer = idx + setting->offset_by;
return action_cancel_pop_default(NULL, NULL, 0, 0);
}
static int action_ok_push_dropdown_setting_uint_item(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@ -5344,6 +5357,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
{
switch (type)
{
case MENU_SETTING_DROPDOWN_SETTING_INT_ITEM:
BIND_ACTION_OK(cbs, action_ok_push_dropdown_setting_int_item);
break;
case MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM:
BIND_ACTION_OK(cbs, action_ok_push_dropdown_setting_uint_item);
break;

View File

@ -4230,6 +4230,62 @@ void menu_displaylist_info_init(menu_displaylist_info_t *info)
info->setting = NULL;
}
static void menu_displaylist_enumerate_range(menu_displaylist_info_t *info,
rarch_setting_t *setting, unsigned setting_type)
{
if (setting->enforce_minrange && setting->enforce_maxrange)
{
float i;
float step = setting->step;
double min = setting->min;
double max = setting->max;
if (setting->get_string_representation)
{
unsigned orig_value = *setting->value.target.unsigned_integer;
for (i = min; i <= max; i += step)
{
char val_s[256], val_d[256];
int val = (int)i;
/* TODO/FIXME -
* get_string_representation for aspect ratio index
* uses setting->value.target.unsigned_integer, so
* create this hack */
*setting->value.target.unsigned_integer = val;
setting->get_string_representation(setting,
val_s, sizeof(val_s));
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
menu_entries_append_enum(info->list,
val_s,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
setting_type, val, 0);
}
*setting->value.target.unsigned_integer = orig_value;
}
else
{
for (i = min; i <= max; i += step)
{
char val_s[16], val_d[16];
int val = (int)i;
snprintf(val_s, sizeof(val_s), "%d", val);
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
menu_entries_append_enum(info->list,
val_s,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
setting_type, val, 0);
}
}
}
}
bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
{
size_t i;
@ -7697,60 +7753,17 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
unsigned setting_type = 0;
switch (setting->type)
{
case ST_INT:
setting_type = MENU_SETTING_DROPDOWN_SETTING_INT_ITEM;
menu_displaylist_enumerate_range(info, setting, setting_type);
break;
case ST_UINT:
if (setting->enforce_minrange && setting->enforce_maxrange)
{
float i;
float step = setting->step;
double min = setting->min;
double max = setting->max;
if (setting->get_string_representation)
{
unsigned orig_value = *setting->value.target.unsigned_integer;
for (i = min; i <= max; i += step)
{
char val_s[256], val_d[256];
int val = (int)i;
/* TODO/FIXME -
* get_string_representation for aspect ratio index
* uses setting->value.target.unsigned_integer, so
* create this hack */
*setting->value.target.unsigned_integer = val;
setting->get_string_representation(setting,
val_s, sizeof(val_s));
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
menu_entries_append_enum(info->list,
val_s,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM, val, 0);
}
*setting->value.target.unsigned_integer = orig_value;
}
else
{
for (i = min; i <= max; i += step)
{
char val_s[16], val_d[16];
int val = (int)i;
snprintf(val_s, sizeof(val_s), "%d", val);
snprintf(val_d, sizeof(val_d), "%d", setting->enum_idx);
menu_entries_append_enum(info->list,
val_s,
val_d,
MENU_ENUM_LABEL_NO_ITEMS,
MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM, val, 0);
}
}
}
setting_type = MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM;
menu_displaylist_enumerate_range(info, setting, setting_type);
break;
default:
break;

View File

@ -148,6 +148,7 @@ enum menu_settings_type
MENU_ADD_TAB,
MENU_PLAYLISTS_TAB,
MENU_SETTING_DROPDOWN_ITEM,
MENU_SETTING_DROPDOWN_SETTING_INT_ITEM,
MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM,
MENU_SETTING_NO_ITEM,
MENU_SETTING_DRIVER,

View File

@ -4755,6 +4755,8 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
(*list)[list_info->index - 1].offset_by = 1;
menu_settings_list_current_add_range(list, list_info, 1, 100, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
}
@ -4913,6 +4915,8 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
(*list)[list_info->index - 1].offset_by = 1;
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_VIDEO_SET_BLOCKING_STATE);
menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
@ -8534,6 +8538,7 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true);
CONFIG_INT(
@ -8547,6 +8552,7 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 15, 1, true, true);
CONFIG_BOOL(