From 60e5b881b962b7edb9ece290230db1276fdebb07 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 10 Oct 2014 16:53:02 +0200 Subject: [PATCH] (Lakka) Move categories over to userdata too --- frontend/menu/backend/menu_lakka_backend.c | 62 +++++++------- frontend/menu/disp/lakka.c | 99 ++++++++++------------ frontend/menu/disp/lakka.h | 32 ++++++- 3 files changed, 108 insertions(+), 85 deletions(-) diff --git a/frontend/menu/backend/menu_lakka_backend.c b/frontend/menu/backend/menu_lakka_backend.c index 6eb021fe82..11793088e7 100644 --- a/frontend/menu/backend/menu_lakka_backend.c +++ b/frontend/menu/backend/menu_lakka_backend.c @@ -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; diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index 8e1998cd92..0812e7328a 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -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) diff --git a/frontend/menu/disp/lakka.h b/frontend/menu/disp/lakka.h index 3ca1b784a2..c4547252d3 100644 --- a/frontend/menu/disp/lakka.h +++ b/frontend/menu/disp/lakka.h @@ -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 */