mirror of
https://github.com/libretro/RetroArch.git
synced 2025-01-19 15:28:25 +00:00
Add ability to manually set default core option values when using the new v1 core options interface
This commit is contained in:
parent
4f3adb8d2c
commit
0476901ca5
@ -1142,7 +1142,7 @@ enum retro_mod
|
||||
* options must not change from the number in the initial call.
|
||||
*
|
||||
* 'data' points to an array of retro_core_option_definition structs
|
||||
* terminated by a { NULL, NULL, NULL, {{0}} } element.
|
||||
* terminated by a { NULL, NULL, NULL, {{0}}, NULL } element.
|
||||
* retro_core_option_definition::key should be namespaced to not collide
|
||||
* with other implementations' keys. e.g. A core called
|
||||
* 'foo' should use keys named as 'foo_option'.
|
||||
@ -1151,13 +1151,18 @@ enum retro_mod
|
||||
* retro_core_option_definition::info should contain any additional human
|
||||
* readable information text that a typical user may need to
|
||||
* understand the functionality of the option.
|
||||
* retro_variable::values is an array of retro_core_option_value
|
||||
* retro_core_option_definition::values is an array of retro_core_option_value
|
||||
* structs terminated by a { NULL, NULL } element.
|
||||
* > retro_variable::values[index].value is an expected option
|
||||
* > retro_core_option_definition::values[index].value is an expected option
|
||||
* value.
|
||||
* > retro_variable::values[index].label is a human readable
|
||||
* > retro_core_option_definition::values[index].label is a human readable
|
||||
* label used when displaying the value on screen. If NULL,
|
||||
* the value itself is used.
|
||||
* retro_core_option_definition::default_value is the default core option
|
||||
* setting. It must match one of the expected option values in the
|
||||
* retro_core_option_definition::values array. If it does not, or the
|
||||
* default value is NULL, the first entry in the
|
||||
* retro_core_option_definition::values array is treated as the default.
|
||||
*
|
||||
* The number of possible options should be very limited,
|
||||
* and must be less than RETRO_NUM_CORE_OPTION_VALUES_MAX.
|
||||
@ -1176,7 +1181,8 @@ enum retro_mod
|
||||
* { "true", NULL },
|
||||
* { "unstable", "Turbo (Unstable)" },
|
||||
* { NULL, NULL },
|
||||
* }
|
||||
* },
|
||||
* "false"
|
||||
* }
|
||||
*
|
||||
* Only strings are operated on. The possible values will
|
||||
@ -1216,6 +1222,10 @@ enum retro_mod
|
||||
* retro_core_options_intl::us is used by the frontend). Any items
|
||||
* missing from this array will be read from retro_core_options_intl::us
|
||||
* instead.
|
||||
*
|
||||
* NOTE: Default core option values are always taken from the
|
||||
* retro_core_options_intl::us array. Any default values in
|
||||
* retro_core_options_intl::local array will be ignored.
|
||||
*/
|
||||
|
||||
#define RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY 55
|
||||
@ -2521,6 +2531,11 @@ struct retro_core_option_definition
|
||||
|
||||
/* Array of retro_core_option_value structs, terminated by NULL */
|
||||
struct retro_core_option_value values[RETRO_NUM_CORE_OPTION_VALUES_MAX];
|
||||
|
||||
/* Default core option value. Must match one of the values
|
||||
* in the retro_core_option_value array, otherwise will be
|
||||
* ignored */
|
||||
const char *default_value;
|
||||
};
|
||||
|
||||
struct retro_core_options_intl
|
||||
|
@ -34,6 +34,7 @@ struct core_option
|
||||
char *key;
|
||||
struct string_list *vals;
|
||||
struct string_list *val_labels;
|
||||
size_t default_index;
|
||||
size_t index;
|
||||
bool visible;
|
||||
};
|
||||
|
24
retroarch.c
24
retroarch.c
@ -1725,6 +1725,11 @@ static bool core_option_manager_parse_variable(
|
||||
if (!option->val_labels)
|
||||
goto error;
|
||||
|
||||
/* Legacy core option interface always uses first
|
||||
* defined value as the default */
|
||||
option->default_index = 0;
|
||||
option->index = 0;
|
||||
|
||||
if (config_get_string(opt->conf, option->key, &config_val))
|
||||
{
|
||||
size_t i;
|
||||
@ -1793,6 +1798,10 @@ static bool core_option_manager_parse_option(
|
||||
if (!option->vals || !option->val_labels)
|
||||
return false;
|
||||
|
||||
/* Initialse default value */
|
||||
option->default_index = 0;
|
||||
option->index = 0;
|
||||
|
||||
/* Extract value/label pairs */
|
||||
for (i = 0; i < num_vals; i++)
|
||||
{
|
||||
@ -1804,6 +1813,16 @@ static bool core_option_manager_parse_option(
|
||||
string_list_append(option->val_labels, values[i].label, attr);
|
||||
else
|
||||
string_list_append(option->val_labels, values[i].value, attr);
|
||||
|
||||
/* Check whether this value is the default setting */
|
||||
if (!string_is_empty(option_def->default_value))
|
||||
{
|
||||
if (string_is_equal(option_def->default_value, values[i].value))
|
||||
{
|
||||
option->default_index = i;
|
||||
option->index = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Set current config value */
|
||||
@ -2189,7 +2208,7 @@ void core_option_manager_set_default(core_option_manager_t *opt, size_t idx)
|
||||
if (idx >= opt->size)
|
||||
return;
|
||||
|
||||
opt->opts[idx].index = 0;
|
||||
opt->opts[idx].index = opt->opts[idx].default_index;
|
||||
opt->updated = true;
|
||||
}
|
||||
|
||||
@ -2246,6 +2265,9 @@ static struct retro_core_option_definition *core_option_manager_get_definitions(
|
||||
/* Key is always taken from us english defs */
|
||||
option_defs[i].key = key;
|
||||
|
||||
/* Default value is always taken from us english defs */
|
||||
option_defs[i].default_value = option_defs_us[i].default_value;
|
||||
|
||||
/* Try to find corresponding entry in local defs array */
|
||||
if (option_defs_local)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user