Create init_lists in menu display driver

This commit is contained in:
twinaphex 2014-10-09 01:31:11 +02:00
parent 8cb7620f0c
commit 3ba45d3eae
9 changed files with 97 additions and 63 deletions

View File

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

View File

@ -398,6 +398,7 @@ menu_ctx_driver_t menu_ctx_glui = {
NULL,
glui_frame,
glui_init,
NULL,
glui_free,
glui_context_reset,
NULL,

View File

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

View File

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

View File

@ -462,6 +462,7 @@ menu_ctx_driver_t menu_ctx_rgui = {
rgui_render,
NULL,
rgui_init,
NULL,
rgui_free,
NULL,
NULL,

View File

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

View File

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

View File

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

View File

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