Create init_lists in menu display driver
This commit is contained in:
parent
8cb7620f0c
commit
3ba45d3eae
6
driver.c
6
driver.c
|
@ -869,7 +869,11 @@ static void init_menu(void)
|
|||
rarch_fail(1, "init_menu()");
|
||||
}
|
||||
|
||||
menu_init_list(driver.menu);
|
||||
if (!(menu_init_list(driver.menu)))
|
||||
{
|
||||
RARCH_ERR("Cannot initialize menu lists.\n");
|
||||
rarch_fail(1, "init_menu()");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -398,6 +398,7 @@ menu_ctx_driver_t menu_ctx_glui = {
|
|||
NULL,
|
||||
glui_frame,
|
||||
glui_init,
|
||||
NULL,
|
||||
glui_free,
|
||||
glui_context_reset,
|
||||
NULL,
|
||||
|
|
|
@ -799,11 +799,15 @@ static void lakka_context_destroy(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
void lakka_init_settings(void)
|
||||
static bool lakka_init_settings(menu_handle_t *menu)
|
||||
{
|
||||
rarch_setting_t *setting_data = (rarch_setting_t*)driver.menu->list_settings;
|
||||
int j, k, jj = 0, kk;
|
||||
rarch_setting_t *setting_data = (rarch_setting_t*)menu->list_settings;
|
||||
menu_category_t *category = (menu_category_t*)&categories[0];
|
||||
|
||||
if (!setting_data || !category)
|
||||
return false;
|
||||
|
||||
strlcpy(category->name, "Settings", sizeof(category->name));
|
||||
category->alpha = c_active_alpha;
|
||||
category->zoom = c_active_zoom;
|
||||
|
@ -812,57 +816,63 @@ void lakka_init_settings(void)
|
|||
category->items = (menu_item_t*)
|
||||
calloc(category->num_items, sizeof(menu_item_t));
|
||||
|
||||
int j, k, jj, kk;
|
||||
jj = 0;
|
||||
for (j = 0; j <= 512; j++)
|
||||
{
|
||||
rarch_setting_t *group = (rarch_setting_t*)&setting_data[j];
|
||||
|
||||
if (group && group->type == ST_GROUP)
|
||||
if (!group)
|
||||
continue;
|
||||
if (group->type != ST_GROUP)
|
||||
continue;
|
||||
|
||||
category->num_items++;
|
||||
category->items = (menu_item_t*)
|
||||
realloc(category->items, category->num_items * sizeof(menu_item_t));
|
||||
|
||||
if (!category->items)
|
||||
return false;
|
||||
|
||||
menu_item_t *item = (menu_item_t*)&category->items[jj];
|
||||
|
||||
if (!item)
|
||||
return false;
|
||||
|
||||
strlcpy(item->name, group->name, sizeof(item->name));
|
||||
item->alpha = jj ? i_passive_alpha : i_active_alpha;
|
||||
item->zoom = jj ? i_passive_zoom : i_active_zoom;
|
||||
item->y = jj ?
|
||||
vspacing*(under_item_offset+jj) : vspacing * active_item_factor;
|
||||
item->active_subitem = 0;
|
||||
item->num_subitems = 0;
|
||||
item->subitems = NULL;
|
||||
|
||||
kk = 0;
|
||||
for (k = 0; k <= 512; k++)
|
||||
{
|
||||
category->num_items++;
|
||||
category->items = (menu_item_t*)
|
||||
realloc(category->items, category->num_items * sizeof(menu_item_t));
|
||||
rarch_setting_t *setting = (rarch_setting_t*)&setting_data[k];
|
||||
|
||||
menu_item_t *item = (menu_item_t*)&category->items[jj];
|
||||
|
||||
strlcpy(item->name, group->name, sizeof(item->name));
|
||||
item->alpha = jj ? i_passive_alpha : i_active_alpha;
|
||||
item->zoom = jj ? i_passive_zoom : i_active_zoom;
|
||||
item->y = jj ?
|
||||
vspacing*(under_item_offset+jj) : vspacing * active_item_factor;
|
||||
item->active_subitem = 0;
|
||||
item->num_subitems = 0;
|
||||
item->subitems = NULL;
|
||||
|
||||
kk = 0;
|
||||
for (k = 0; k <= 512; k++)
|
||||
if (setting
|
||||
&& setting->type != ST_SUB_GROUP
|
||||
&& setting->group == group->name)
|
||||
{
|
||||
rarch_setting_t *setting = (rarch_setting_t*)&setting_data[k];
|
||||
item->num_subitems++;
|
||||
|
||||
if (setting
|
||||
&& setting->type != ST_SUB_GROUP
|
||||
&& setting->group == group->name)
|
||||
{
|
||||
item->num_subitems++;
|
||||
|
||||
item->subitems = (menu_subitem_t*)
|
||||
realloc(item->subitems,
|
||||
item->subitems = (menu_subitem_t*)
|
||||
realloc(item->subitems,
|
||||
item->num_subitems * sizeof(menu_subitem_t));
|
||||
|
||||
menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[kk];
|
||||
menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[kk];
|
||||
|
||||
strlcpy(subitem->name, setting->short_description,
|
||||
sizeof(subitem->name));
|
||||
subitem->alpha = 0.0;
|
||||
subitem->zoom = kk ? i_passive_zoom : i_active_zoom;
|
||||
subitem->y = kk ? vspacing * (kk + under_item_offset)
|
||||
: vspacing * active_item_factor;
|
||||
strlcpy(subitem->name, setting->short_description,
|
||||
sizeof(subitem->name));
|
||||
subitem->alpha = 0.0;
|
||||
subitem->zoom = kk ? i_passive_zoom : i_active_zoom;
|
||||
subitem->y = kk ? vspacing * (kk + under_item_offset)
|
||||
: vspacing * active_item_factor;
|
||||
|
||||
subitem->setting = (rarch_setting_t*)&setting_data[k];
|
||||
subitem->setting = (rarch_setting_t*)&setting_data[k];
|
||||
|
||||
kk++;
|
||||
}
|
||||
kk++;
|
||||
}
|
||||
|
||||
jj++;
|
||||
|
@ -875,6 +885,9 @@ void lakka_init_settings(void)
|
|||
|
||||
menu_item_t *itemq = (menu_item_t*)&category->items[jj];
|
||||
|
||||
if (!itemq)
|
||||
return false;
|
||||
|
||||
strlcpy(itemq->name, "Quit RetroArch", sizeof(itemq->name));
|
||||
itemq->alpha = jj ? i_passive_alpha : i_active_alpha;
|
||||
itemq->zoom = jj ? i_passive_zoom : i_active_zoom;
|
||||
|
@ -882,9 +895,11 @@ void lakka_init_settings(void)
|
|||
vspacing * active_item_factor;
|
||||
itemq->active_subitem = 0;
|
||||
itemq->num_subitems = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void lakka_settings_context_reset(void)
|
||||
static void lakka_settings_context_reset(void)
|
||||
{
|
||||
menu_item_t *item;
|
||||
int j, k;
|
||||
|
@ -1157,18 +1172,12 @@ static void lakka_init_core_info(void *data)
|
|||
core_info_list_free(g_extern.core_info);
|
||||
g_extern.core_info = NULL;
|
||||
if (*g_settings.libretro_directory)
|
||||
{
|
||||
g_extern.core_info = core_info_list_new(g_settings.libretro_directory);
|
||||
}
|
||||
|
||||
if (g_extern.core_info)
|
||||
{
|
||||
num_categories = g_extern.core_info->count + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
num_categories = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void *lakka_init(void)
|
||||
|
@ -1201,25 +1210,31 @@ static void *lakka_init(void)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
lakka_init_settings();
|
||||
return menu;
|
||||
}
|
||||
|
||||
static bool lakka_init_lists(void *data)
|
||||
{
|
||||
int i;
|
||||
menu_handle_t *menu = (menu_handle_t*)data;
|
||||
|
||||
if (!menu)
|
||||
return false;
|
||||
|
||||
if (!lakka_init_settings(menu))
|
||||
return false;
|
||||
|
||||
for (i = 1; i < num_categories; i++)
|
||||
{
|
||||
core_info_t *info;
|
||||
core_info_list_t *info_list;
|
||||
core_info_t *info = NULL;
|
||||
menu_category_t *category = (menu_category_t*)&categories[i];
|
||||
|
||||
info_list = (core_info_list_t*)g_extern.core_info;
|
||||
info = NULL;
|
||||
core_info_list_t *info_list = (core_info_list_t*)g_extern.core_info;
|
||||
|
||||
if (info_list)
|
||||
info = (core_info_t*)&info_list->list[i-1];
|
||||
|
||||
if (info == NULL)
|
||||
{
|
||||
free(menu);
|
||||
return NULL;
|
||||
}
|
||||
if (!info)
|
||||
return false;
|
||||
|
||||
strlcpy(category->name, info->display_name, sizeof(category->name));
|
||||
strlcpy(category->libretro, info->path, sizeof(category->libretro));
|
||||
|
@ -1237,7 +1252,7 @@ static void *lakka_init(void)
|
|||
info->display_name);
|
||||
}
|
||||
|
||||
return menu;
|
||||
return true;
|
||||
}
|
||||
|
||||
menu_ctx_driver_t menu_ctx_lakka = {
|
||||
|
@ -1246,6 +1261,7 @@ menu_ctx_driver_t menu_ctx_lakka = {
|
|||
NULL,
|
||||
lakka_frame,
|
||||
lakka_init,
|
||||
lakka_init_lists,
|
||||
lakka_free,
|
||||
lakka_context_reset,
|
||||
lakka_context_destroy,
|
||||
|
|
|
@ -12,6 +12,7 @@ typedef struct menu_ctx_driver
|
|||
void (*render)(void);
|
||||
void (*frame)(void);
|
||||
void* (*init)(void);
|
||||
bool (*init_lists)(void*);
|
||||
void (*free)(void*);
|
||||
void (*context_reset)(void*);
|
||||
void (*context_destroy)(void*);
|
||||
|
|
|
@ -462,6 +462,7 @@ menu_ctx_driver_t menu_ctx_rgui = {
|
|||
rgui_render,
|
||||
NULL,
|
||||
rgui_init,
|
||||
NULL,
|
||||
rgui_free,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
|
@ -324,6 +324,7 @@ menu_ctx_driver_t menu_ctx_rmenu = {
|
|||
rmenu_render,
|
||||
NULL,
|
||||
rmenu_init,
|
||||
NULL,
|
||||
rmenu_free,
|
||||
rmenu_context_reset,
|
||||
rmenu_context_destroy,
|
||||
|
|
|
@ -519,6 +519,7 @@ menu_ctx_driver_t menu_ctx_rmenu_xui = {
|
|||
rmenu_xui_render,
|
||||
rmenu_xui_frame,
|
||||
rmenu_xui_init,
|
||||
NULL,
|
||||
rmenu_xui_free,
|
||||
NULL,
|
||||
NULL,
|
||||
|
|
|
@ -179,16 +179,25 @@ void menu_free_list(void *data)
|
|||
settings_list_free(menu->list_settings);
|
||||
}
|
||||
|
||||
void menu_init_list(void *data)
|
||||
bool menu_init_list(void *data)
|
||||
{
|
||||
menu_handle_t *menu = (menu_handle_t*)data;
|
||||
if (!menu)
|
||||
return;
|
||||
return false;
|
||||
|
||||
menu->list_mainmenu = setting_data_get_list(SL_FLAG_MAIN_MENU);
|
||||
menu->list_settings = setting_data_get_list(SL_FLAG_ALL_SETTINGS);
|
||||
|
||||
file_list_push(menu->menu_stack, "", "mainmenu", MENU_SETTINGS, 0);
|
||||
menu_clear_navigation(menu);
|
||||
menu_entries_push_list(menu, menu->selection_buf,
|
||||
"", "mainmenu", 0);
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->init_lists)
|
||||
if (!(driver.menu_ctx->init_lists(menu)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void menu_free(void *data)
|
||||
|
|
|
@ -139,7 +139,7 @@ void *menu_init(const void *data);
|
|||
|
||||
void menu_free_list(void *data);
|
||||
|
||||
void menu_init_list(void *data);
|
||||
bool menu_init_list(void *data);
|
||||
|
||||
int menu_iterate(retro_input_t input,
|
||||
retro_input_t old_input, retro_input_t trigger_input);
|
||||
|
|
Loading…
Reference in New Issue