(menu_setting.c) Go through more wrapper functions

This commit is contained in:
twinaphex 2015-10-11 14:23:32 +02:00
parent 16f89fcd10
commit 2f12ddde32
4 changed files with 118 additions and 34 deletions

View File

@ -143,7 +143,10 @@ unsigned menu_entry_get_type_new(uint32_t i)
uint32_t menu_entry_get_bool_value(uint32_t i) uint32_t menu_entry_get_bool_value(uint32_t i)
{ {
rarch_setting_t *setting = menu_entry_get_setting(i); rarch_setting_t *setting = menu_entry_get_setting(i);
return *setting->value.boolean; bool *ptr = setting_get_ptr(setting);
if (!ptr)
return 0;
return *ptr;
} }
struct string_list *menu_entry_enum_values(uint32_t i) struct string_list *menu_entry_enum_values(uint32_t i)

View File

@ -353,9 +353,10 @@ void menu_input_st_hex_callback(void *userdata, const char *str)
if (setting) if (setting)
{ {
unsigned *ptr = setting_get_ptr(setting);
if (str[0] == '#') if (str[0] == '#')
str++; str++;
*setting->value.unsigned_integer = strtoul(str, NULL, 16); *ptr = strtoul(str, NULL, 16);
} }
} }
@ -594,6 +595,7 @@ static int menu_input_set_bind_mode_common(rarch_setting_t *setting,
enum menu_input_bind_mode type) enum menu_input_bind_mode type)
{ {
size_t selection; size_t selection;
unsigned index_offset, bind_type;
menu_displaylist_info_t info = {0}; menu_displaylist_info_t info = {0};
struct retro_keybind *keybind = NULL; struct retro_keybind *keybind = NULL;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -603,6 +605,8 @@ static int menu_input_set_bind_mode_common(rarch_setting_t *setting,
if (!setting) if (!setting)
return -1; return -1;
index_offset = setting_get_index_offset(setting);
menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection); menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection);
switch (type) switch (type)
@ -610,15 +614,17 @@ static int menu_input_set_bind_mode_common(rarch_setting_t *setting,
case MENU_INPUT_BIND_NONE: case MENU_INPUT_BIND_NONE:
return -1; return -1;
case MENU_INPUT_BIND_SINGLE: case MENU_INPUT_BIND_SINGLE:
keybind = (struct retro_keybind*)setting->value.keybind; keybind = (struct retro_keybind*)setting_get_ptr(setting);
if (!keybind) if (!keybind)
return -1; return -1;
menu_input->binds.begin = setting->bind_type; bind_type = menu_setting_get_bind_type(setting);
menu_input->binds.last = setting->bind_type;
menu_input->binds.begin = bind_type;
menu_input->binds.last = bind_type;
menu_input->binds.target = keybind; menu_input->binds.target = keybind;
menu_input->binds.user = setting->index_offset; menu_input->binds.user = index_offset;
info.list = menu_list->menu_stack; info.list = menu_list->menu_stack;
info.type = MENU_SETTINGS_CUSTOM_BIND_KEYBOARD; info.type = MENU_SETTINGS_CUSTOM_BIND_KEYBOARD;
@ -630,7 +636,7 @@ static int menu_input_set_bind_mode_common(rarch_setting_t *setting,
break; break;
case MENU_INPUT_BIND_ALL: case MENU_INPUT_BIND_ALL:
menu_input->binds.target = &settings->input.binds menu_input->binds.target = &settings->input.binds
[setting->index_offset][0]; [index_offset][0];
menu_input->binds.begin = MENU_SETTINGS_BIND_BEGIN; menu_input->binds.begin = MENU_SETTINGS_BIND_BEGIN;
menu_input->binds.last = MENU_SETTINGS_BIND_LAST; menu_input->binds.last = MENU_SETTINGS_BIND_LAST;
@ -674,14 +680,16 @@ int menu_input_set_keyboard_bind_mode(void *data,
int menu_input_set_input_device_bind_mode(void *data, int menu_input_set_input_device_bind_mode(void *data,
enum menu_input_bind_mode type) enum menu_input_bind_mode type)
{ {
unsigned index_offset;
menu_input_t *menu_input = menu_input_get_ptr(); menu_input_t *menu_input = menu_input_get_ptr();
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
rarch_setting_t *setting = (rarch_setting_t*)data;
if (!setting) if (!setting)
return -1; return -1;
bind_port = settings->input.joypad_map[setting->index_offset]; index_offset = setting_get_index_offset(setting);
bind_port = settings->input.joypad_map[index_offset];
if (menu_input_set_bind_mode_common(setting, type) == -1) if (menu_input_set_bind_mode_common(setting, type) == -1)
return -1; return -1;

View File

@ -383,6 +383,34 @@ int menu_setting_set(unsigned type, const char *label,
return ret; return ret;
} }
void *setting_get_ptr(rarch_setting_t *setting)
{
if (!setting)
return NULL;
switch (menu_setting_get_type(setting))
{
case ST_BOOL:
return setting->value.boolean;
case ST_INT:
return setting->value.integer;
case ST_UINT:
return setting->value.unsigned_integer;
case ST_FLOAT:
return setting->value.fraction;
case ST_BIND:
return setting->value.keybind;
case ST_STRING:
case ST_PATH:
case ST_DIR:
return setting->value.string;
default:
break;
}
return NULL;
}
/** /**
* setting_reset_setting: * setting_reset_setting:
* @setting : pointer to setting * @setting : pointer to setting
@ -423,6 +451,7 @@ static void setting_reset_setting(rarch_setting_t* setting)
setting->default_value.string, setting->size); setting->default_value.string, setting->size);
} }
break; break;
#if 0
/* TODO */ /* TODO */
case ST_ACTION: case ST_ACTION:
break; break;
@ -438,6 +467,9 @@ static void setting_reset_setting(rarch_setting_t* setting)
break; break;
case ST_NONE: case ST_NONE:
break; break;
#endif
default:
break;
} }
if (setting->change_handler) if (setting->change_handler)
@ -570,9 +602,12 @@ void setting_get_string_representation(void *data, char *s, size_t len)
setting->get_string_representation(setting, s, len); setting->get_string_representation(setting, s, len);
} }
/** uint32_t setting_get_index_offset(rarch_setting_t *setting)
******* ACTION START CALLBACK FUNCTIONS ******* {
**/ if (!setting)
return 0;
return setting->index_offset;
}
/** /**
* setting_action_start_savestates: * setting_action_start_savestates:
@ -585,16 +620,20 @@ void setting_get_string_representation(void *data, char *s, size_t len)
**/ **/
static int setting_action_start_bind_device(void *data) static int setting_action_start_bind_device(void *data)
{ {
uint32_t index_offset;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (!setting) if (!setting || !settings)
return -1; return -1;
settings->input.joypad_map[setting->index_offset] = setting->index_offset; index_offset = setting_get_index_offset(setting);
settings->input.joypad_map[index_offset] = index_offset;
return 0; return 0;
} }
static int setting_action_start_custom_viewport_width(void *data) static int setting_action_start_custom_viewport_width(void *data)
{ {
video_viewport_t vp; video_viewport_t vp;
@ -674,7 +713,8 @@ static int setting_action_start_analog_dpad_mode(void *data)
static int setting_action_start_libretro_device_type(void *data) static int setting_action_start_libretro_device_type(void *data)
{ {
unsigned current_device, devices[128], types = 0, port = 0; unsigned index_offset, current_device;
unsigned devices[128], types = 0, port = 0;
const struct retro_controller_info *desc = NULL; const struct retro_controller_info *desc = NULL;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -683,7 +723,8 @@ static int setting_action_start_libretro_device_type(void *data)
if (setting_generic_action_start_default(setting) != 0) if (setting_generic_action_start_default(setting) != 0)
return -1; return -1;
port = setting->index_offset; index_offset = setting_get_index_offset(setting);
port = index_offset;
devices[types++] = RETRO_DEVICE_NONE; devices[types++] = RETRO_DEVICE_NONE;
devices[types++] = RETRO_DEVICE_JOYPAD; devices[types++] = RETRO_DEVICE_JOYPAD;
@ -738,8 +779,16 @@ static int setting_string_action_start_generic(void *data)
return 0; return 0;
} }
unsigned menu_setting_get_bind_type(rarch_setting_t *setting)
{
if (!setting)
return 0;
return setting->bind_type;
}
static int setting_bind_action_start(void *data) static int setting_bind_action_start(void *data)
{ {
unsigned bind_type;
struct retro_keybind *keybind = NULL; struct retro_keybind *keybind = NULL;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
struct retro_keybind *def_binds = (struct retro_keybind *)retro_keybinds_1; struct retro_keybind *def_binds = (struct retro_keybind *)retro_keybinds_1;
@ -765,7 +814,8 @@ static int setting_bind_action_start(void *data)
if (!def_binds) if (!def_binds)
return -1; return -1;
keybind->key = def_binds[setting->bind_type - MENU_SETTINGS_BIND_BEGIN].key; bind_type = menu_setting_get_bind_type(setting);
keybind->key = def_binds[bind_type - MENU_SETTINGS_BIND_BEGIN].key;
return 0; return 0;
} }
@ -928,6 +978,7 @@ static int setting_action_right_libretro_device_type(
static int setting_action_left_bind_device(void *data, bool wraparound) static int setting_action_left_bind_device(void *data, bool wraparound)
{ {
unsigned index_offset;
unsigned *p = NULL; unsigned *p = NULL;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -935,7 +986,9 @@ static int setting_action_left_bind_device(void *data, bool wraparound)
if (!setting) if (!setting)
return -1; return -1;
p = &settings->input.joypad_map[setting->index_offset]; index_offset = setting_get_index_offset(setting);
p = &settings->input.joypad_map[index_offset];
if ((*p) >= settings->input.max_users) if ((*p) >= settings->input.max_users)
*p = settings->input.max_users - 1; *p = settings->input.max_users - 1;
@ -947,6 +1000,7 @@ static int setting_action_left_bind_device(void *data, bool wraparound)
static int setting_action_right_bind_device(void *data, bool wraparound) static int setting_action_right_bind_device(void *data, bool wraparound)
{ {
unsigned index_offset;
unsigned *p = NULL; unsigned *p = NULL;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -954,7 +1008,9 @@ static int setting_action_right_bind_device(void *data, bool wraparound)
if (!setting) if (!setting)
return -1; return -1;
p = &settings->input.joypad_map[setting->index_offset]; index_offset = setting_get_index_offset(setting);
p = &settings->input.joypad_map[index_offset];
if (*p < settings->input.max_users) if (*p < settings->input.max_users)
(*p)++; (*p)++;
@ -1289,6 +1345,7 @@ static int setting_action_ok_bind_all(void *data, bool wraparound)
static int setting_action_ok_bind_all_save_autoconfig(void *data, bool wraparound) static int setting_action_ok_bind_all_save_autoconfig(void *data, bool wraparound)
{ {
unsigned index_offset;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
@ -1297,7 +1354,9 @@ static int setting_action_ok_bind_all_save_autoconfig(void *data, bool wraparoun
if (!settings || !setting) if (!settings || !setting)
return -1; return -1;
if(config_save_autoconf_profile(settings->input.device_names[setting->index_offset], setting->index_offset)) index_offset = setting_get_index_offset(setting);
if(config_save_autoconf_profile(settings->input.device_names[index_offset], index_offset))
menu_display_msg_queue_push("Autoconf file saved successfully", 1, 100, true); menu_display_msg_queue_push("Autoconf file saved successfully", 1, 100, true);
else else
menu_display_msg_queue_push("Error saving autoconf file", 1, 100, true); menu_display_msg_queue_push("Error saving autoconf file", 1, 100, true);
@ -1533,6 +1592,7 @@ static void setting_get_string_representation_st_string(void *data,
static void setting_get_string_representation_st_bind(void *data, static void setting_get_string_representation_st_bind(void *data,
char *s, size_t len) char *s, size_t len)
{ {
unsigned index_offset;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
const struct retro_keybind* keybind = NULL; const struct retro_keybind* keybind = NULL;
const struct retro_keybind* auto_bind = NULL; const struct retro_keybind* auto_bind = NULL;
@ -1540,9 +1600,10 @@ static void setting_get_string_representation_st_bind(void *data,
if (!setting) if (!setting)
return; return;
keybind = (const struct retro_keybind*)setting->value.keybind; index_offset = setting_get_index_offset(setting);
auto_bind = (const struct retro_keybind*) keybind = (const struct retro_keybind*)setting->value.keybind;
input_get_auto_bind(setting->index_offset, keybind->id); auto_bind = (const struct retro_keybind*)
input_get_auto_bind(index_offset, keybind->id);
input_get_bind_string(s, keybind, auto_bind, len); input_get_bind_string(s, keybind, auto_bind, len);
} }
@ -1592,6 +1653,7 @@ static void setting_get_string_representation_uint_aspect_ratio_index(void *data
static void setting_get_string_representation_uint_libretro_device(void *data, static void setting_get_string_representation_uint_libretro_device(void *data,
char *s, size_t len) char *s, size_t len)
{ {
unsigned index_offset;
const struct retro_controller_description *desc = NULL; const struct retro_controller_description *desc = NULL;
const char *name = NULL; const char *name = NULL;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
@ -1601,11 +1663,13 @@ static void setting_get_string_representation_uint_libretro_device(void *data,
if (!setting) if (!setting)
return; return;
if (setting->index_offset < system->num_ports) index_offset = setting_get_index_offset(setting);
if (index_offset < system->num_ports)
desc = libretro_find_controller_description( desc = libretro_find_controller_description(
&system->ports[setting->index_offset], &system->ports[index_offset],
settings->input.libretro_device settings->input.libretro_device
[setting->index_offset]); [index_offset]);
if (desc) if (desc)
name = desc->desc; name = desc->desc;
@ -1614,8 +1678,7 @@ static void setting_get_string_representation_uint_libretro_device(void *data,
{ {
/* Find generic name. */ /* Find generic name. */
switch (settings->input.libretro_device switch (settings->input.libretro_device[index_offset])
[setting->index_offset])
{ {
case RETRO_DEVICE_NONE: case RETRO_DEVICE_NONE:
name = menu_hash_to_str(MENU_VALUE_NONE); name = menu_hash_to_str(MENU_VALUE_NONE);
@ -1646,10 +1709,13 @@ static void setting_get_string_representation_uint_analog_dpad_mode(void *data,
modes[1] = menu_hash_to_str(MENU_VALUE_LEFT_ANALOG); modes[1] = menu_hash_to_str(MENU_VALUE_LEFT_ANALOG);
modes[2] = menu_hash_to_str(MENU_VALUE_RIGHT_ANALOG); modes[2] = menu_hash_to_str(MENU_VALUE_RIGHT_ANALOG);
if (setting) if (setting)
{
unsigned index_offset = setting_get_index_offset(setting);
strlcpy(s, modes[settings->input.analog_dpad_mode strlcpy(s, modes[settings->input.analog_dpad_mode
[setting->index_offset] % ANALOG_DPAD_LAST], [index_offset] % ANALOG_DPAD_LAST], len);
len); }
} }
#ifdef HAVE_THREADS #ifdef HAVE_THREADS
@ -2210,14 +2276,15 @@ static rarch_setting_t setting_string_setting_options(enum setting_type type,
static void get_string_representation_bind_device(void * data, char *s, static void get_string_representation_bind_device(void * data, char *s,
size_t len) size_t len)
{ {
unsigned map = 0; unsigned index_offset, map = 0;
rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (!setting) if (!setting)
return; return;
map = settings->input.joypad_map[setting->index_offset]; index_offset = setting_get_index_offset(setting);
map = settings->input.joypad_map[index_offset];
if (map < settings->input.max_users) if (map < settings->input.max_users)
{ {

View File

@ -137,7 +137,7 @@ typedef struct rarch_setting
const char *values; const char *values;
uint32_t index; uint32_t index;
uint32_t index_offset; unsigned index_offset;
double min; double min;
double max; double max;
@ -300,8 +300,14 @@ double menu_setting_get_min(rarch_setting_t *setting);
double menu_setting_get_max(rarch_setting_t *setting); double menu_setting_get_max(rarch_setting_t *setting);
unsigned menu_setting_get_bind_type(rarch_setting_t *setting);
uint32_t menu_setting_get_index(rarch_setting_t *setting); uint32_t menu_setting_get_index(rarch_setting_t *setting);
unsigned setting_get_index_offset(rarch_setting_t *setting);
void *setting_get_ptr(rarch_setting_t *setting);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif