(Lakka) Move categories over to userdata too

This commit is contained in:
twinaphex 2014-10-10 16:53:02 +02:00
parent c6a27e46ae
commit 60e5b881b9
3 changed files with 108 additions and 85 deletions

View File

@ -44,7 +44,7 @@
/* Move the categories left or right depending
* on the menu_active_category variable. */
static void lakka_switch_categories(void)
static void lakka_switch_categories(lakka_handle_t *lakka)
{
int i, j;
@ -57,7 +57,7 @@ static void lakka_switch_categories(void)
for (i = 0; i < num_categories; i++)
{
float ca, cz;
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
if (!category)
continue;
@ -84,11 +84,11 @@ static void lakka_switch_categories(void)
}
}
static void lakka_switch_items(void)
static void lakka_switch_items(lakka_handle_t *lakka)
{
int j;
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
for (j = 0; j < active_category->num_items; j++)
{
@ -117,11 +117,11 @@ static void lakka_switch_items(void)
}
}
static void lakka_switch_subitems(void)
static void lakka_switch_subitems(lakka_handle_t *lakka)
{
int k;
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
menu_item_t *item = (menu_item_t*)
&active_category->items[active_category->active_item];
@ -165,9 +165,9 @@ static void lakka_switch_subitems(void)
}
}
static void lakka_reset_submenu(int i, int j)
static void lakka_reset_submenu(lakka_handle_t *lakka, int i, int j)
{
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
if (!category)
return;
@ -192,10 +192,10 @@ static void lakka_reset_submenu(int i, int j)
}
}
static bool lakka_on_active_rom(void)
static bool lakka_on_active_rom(lakka_handle_t *lakka)
{
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
return !(g_extern.main_is_init
&& !g_extern.libretro_dummy
@ -204,7 +204,7 @@ static bool lakka_on_active_rom(void)
active_category->active_item].rom)));
}
static void lakka_open_submenu(void)
static void lakka_open_submenu(lakka_handle_t *lakka)
{
int i, j, k;
@ -213,14 +213,15 @@ static void lakka_open_submenu(void)
add_tween(LAKKA_DELAY, i_active_alpha, &arrow_alpha, &inOutQuad, NULL);
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
if (menu_active_category > 0 && lakka_on_active_rom())
lakka_reset_submenu(menu_active_category, active_category->active_item);
if (menu_active_category > 0 && lakka_on_active_rom(lakka))
lakka_reset_submenu(lakka, menu_active_category,
active_category->active_item);
for (i = 0; i < num_categories; i++)
{
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
if (!category)
continue;
@ -263,7 +264,7 @@ static void lakka_open_submenu(void)
}
}
static void lakka_close_submenu(void)
static void lakka_close_submenu(lakka_handle_t *lakka)
{
int i, j, k;
@ -274,7 +275,7 @@ static void lakka_close_submenu(void)
for (i = 0; i < num_categories; i++)
{
float ca, cz;
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
bool is_active_category = (i == menu_active_category);
if (!category)
@ -322,14 +323,17 @@ static int menu_lakka_iterate(unsigned action)
menu_category_t *active_category = NULL;
menu_item_t *active_item = NULL;
menu_subitem_t * active_subitem = NULL;
lakka_handle_t *lakka = NULL;
if (!driver.menu)
{
RARCH_ERR("Cannot iterate menu, menu handle is not initialized.\n");
return 0;
}
active_category = (menu_category_t*)&categories[menu_active_category];
lakka = (lakka_handle_t*)driver.menu->userdata;
if (!lakka)
return 0;
active_category = (menu_category_t*)&lakka->categories[menu_active_category];
if (active_category)
active_item = (menu_item_t*)
@ -388,7 +392,7 @@ static int menu_lakka_iterate(unsigned action)
if (depth == 0 && menu_active_category > 0)
{
menu_active_category--;
lakka_switch_categories();
lakka_switch_categories(lakka);
}
else if (depth == 1 && menu_active_category > 0
&& (active_item->active_subitem == 1
@ -403,7 +407,7 @@ static int menu_lakka_iterate(unsigned action)
if (depth == 0 && menu_active_category < num_categories-1)
{
menu_active_category++;
lakka_switch_categories();
lakka_switch_categories(lakka);
}
else if (depth == 1 && menu_active_category > 0
&& (active_item->active_subitem == 1
@ -420,7 +424,7 @@ static int menu_lakka_iterate(unsigned action)
(active_category->num_items - 1)))
{
active_category->active_item++;
lakka_switch_items();
lakka_switch_items(lakka);
}
/* If we are on subitems level, and we do not
@ -437,7 +441,7 @@ static int menu_lakka_iterate(unsigned action)
&& (!strcmp(g_extern.fullpath, active_item->rom)))))
{
active_item->active_subitem++;
lakka_switch_subitems();
lakka_switch_subitems(lakka);
}
break;
@ -445,12 +449,12 @@ static int menu_lakka_iterate(unsigned action)
if (depth == 0 && active_category->active_item > 0)
{
active_category->active_item--;
lakka_switch_items();
lakka_switch_items(lakka);
}
if (depth == 1 && active_item->active_subitem > 0)
{
active_item->active_subitem--;
lakka_switch_subitems();
lakka_switch_subitems(lakka);
}
break;
@ -499,7 +503,7 @@ static int menu_lakka_iterate(unsigned action)
}
else if (depth == 0 && active_item->num_subitems)
{
lakka_open_submenu();
lakka_open_submenu(lakka);
depth = 1;
}
else if (depth == 0 &&
@ -517,7 +521,7 @@ static int menu_lakka_iterate(unsigned action)
case MENU_ACTION_CANCEL:
if (depth == 1)
{
lakka_close_submenu();
lakka_close_submenu(lakka);
depth = 0;
}
break;

View File

@ -45,7 +45,6 @@
#include "tween.h"
// Category variables
menu_category_t *categories;
int depth = 0;
int num_categories = 0;
int menu_active_category = 0;
@ -94,36 +93,6 @@ static const GLfloat tex_coord[] = {
1, 0,
};
enum
{
TEXTURE_MAIN = 0,
TEXTURE_FONT,
TEXTURE_BG,
TEXTURE_SETTINGS,
TEXTURE_SETTING,
TEXTURE_SUBSETTING,
TEXTURE_ARROW,
TEXTURE_RUN,
TEXTURE_RESUME,
TEXTURE_SAVESTATE,
TEXTURE_LOADSTATE,
TEXTURE_SCREENSHOT,
TEXTURE_RELOAD,
TEXTURE_LAST
};
struct lakka_texture_item
{
GLuint id;
char path[PATH_MAX];
};
typedef struct lakka_handle
{
struct lakka_texture_item textures[TEXTURE_LAST];
} lakka_handle_t;
static void lakka_responsive(void)
{
gl_t *gl = (gl_t*)driver_video_resolve(NULL);
@ -305,6 +274,7 @@ void lakka_draw_background(void)
float alpha = 0.9f;
gl_t *gl = NULL;
lakka_handle_t *lakka = NULL;
GLfloat color[] = {
1.0f, 1.0f, 1.0f, global_alpha,
1.0f, 1.0f, 1.0f, global_alpha,
@ -423,16 +393,13 @@ static void lakka_draw_arrow(lakka_handle_t *lakka)
static void lakka_draw_subitems(lakka_handle_t *lakka, int i, int j)
{
int k;
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
menu_item_t *item = (menu_item_t*)&category->items[j];
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
menu_item_t *active_item = (menu_item_t*)
&active_category->items[active_category->active_item];
if (!lakka)
return;
for(k = 0; k < item->num_subitems; k++)
{
menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[k];
@ -513,9 +480,9 @@ static void lakka_draw_subitems(lakka_handle_t *lakka, int i, int j)
static void lakka_draw_items(lakka_handle_t *lakka, int i)
{
int j;
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
menu_category_t *active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
menu_item_t *active_item = (menu_item_t*)
&active_category->items[active_category->active_item];
@ -566,7 +533,7 @@ static void lakka_draw_categories(lakka_handle_t *lakka)
for(i = 0; i < num_categories; i++)
{
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
if (!category)
continue;
@ -700,7 +667,7 @@ static void lakka_frame(void)
return;
active_category = (menu_category_t*)
&categories[menu_active_category];
&lakka->categories[menu_active_category];
if (!active_category)
return;
@ -811,7 +778,7 @@ static void lakka_context_destroy(void *data)
for (i = 1; i < num_categories; i++)
{
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
if (!category)
continue;
@ -843,8 +810,16 @@ static void lakka_context_destroy(void *data)
static bool lakka_init_settings(menu_handle_t *menu)
{
int j, k, jj = 0, kk;
lakka_handle_t *lakka = NULL;
menu_category_t *category = NULL;
rarch_setting_t *setting_data = (rarch_setting_t*)menu->list_settings;
menu_category_t *category = (menu_category_t*)&categories[0];
lakka = (lakka_handle_t*)menu->userdata;
if (!lakka)
return false;
category = (menu_category_t*)&lakka->categories[0];
if (!setting_data || !category)
return false;
@ -954,7 +929,7 @@ static void lakka_settings_context_reset(void)
if (!lakka)
return;
category = (menu_category_t*)&categories[0];
category = (menu_category_t*)&lakka->categories[0];
if (!category)
return;
@ -1030,7 +1005,7 @@ static void lakka_context_reset(void *data)
lakka_settings_context_reset();
for (i = 1; i < num_categories; i++)
{
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
char core_id[256], texturepath[256], content_texturepath[256],
mediapath[256], themepath[256];
@ -1209,7 +1184,8 @@ static void lakka_free(void *data)
g_extern.core_info = NULL;
}
static int lakka_input_postprocess(retro_input_t state, retro_input_t old_state)
static int lakka_input_postprocess(retro_input_t state,
retro_input_t old_state)
{
if (global_alpha == 0.0f)
add_tween(LAKKA_DELAY, 1.0f, &global_alpha, &inOutQuad, NULL);
@ -1237,7 +1213,8 @@ static void lakka_init_core_info(void *data)
static void *lakka_init(void)
{
menu_handle_t *menu;
menu_handle_t *menu = NULL;
lakka_handle_t *lakka = NULL;
const video_driver_t *video_driver = NULL;
gl_t *gl = (gl_t*)driver_video_resolve(&video_driver);
@ -1255,20 +1232,26 @@ static void *lakka_init(void)
lakka_responsive();
lakka_init_core_info(menu);
categories = (menu_category_t*)
calloc(num_categories, sizeof(menu_category_t));
if (!categories)
{
free(menu);
return NULL;
}
menu->userdata = (lakka_handle_t*)calloc(1, sizeof(lakka_handle_t));
if (!menu->userdata)
return NULL;
lakka = (lakka_handle_t*)menu->userdata;
if (!lakka)
return NULL;
lakka->categories = (menu_category_t*)
calloc(num_categories, sizeof(menu_category_t));
if (!lakka->categories)
{
free(menu);
return NULL;
}
return menu;
}
@ -1276,17 +1259,23 @@ static bool lakka_init_lists(void *data)
{
int i;
menu_handle_t *menu = (menu_handle_t*)data;
lakka_handle_t *lakka = NULL;
if (!menu)
return false;
lakka = (lakka_handle_t*)menu->userdata;
if (!lakka)
return false;
if (!lakka_init_settings(menu))
return false;
for (i = 1; i < num_categories; i++)
{
core_info_t *info = NULL;
menu_category_t *category = (menu_category_t*)&categories[i];
menu_category_t *category = (menu_category_t*)&lakka->categories[i];
core_info_list_t *info_list = (core_info_list_t*)g_extern.core_info;
if (info_list)

View File

@ -27,6 +27,24 @@
#define LAKKA_DELAY 0.02
#endif
enum
{
TEXTURE_MAIN = 0,
TEXTURE_FONT,
TEXTURE_BG,
TEXTURE_SETTINGS,
TEXTURE_SETTING,
TEXTURE_SUBSETTING,
TEXTURE_ARROW,
TEXTURE_RUN,
TEXTURE_RESUME,
TEXTURE_SAVESTATE,
TEXTURE_LOADSTATE,
TEXTURE_SCREENSHOT,
TEXTURE_RELOAD,
TEXTURE_LAST
};
extern int depth;
extern int num_categories;
extern float all_categories_x;
@ -84,6 +102,18 @@ typedef struct
menu_item_t *items;
} menu_category_t;
extern menu_category_t *categories;
struct lakka_texture_item
{
GLuint id;
char path[PATH_MAX];
};
typedef struct lakka_handle
{
menu_category_t *categories;
struct lakka_texture_item textures[TEXTURE_LAST];
} lakka_handle_t;
#endif /* MENU_DISP_LAKKA_H */