static void lakka_frame(void) { struct font_output_list *msg; gl_t *gl = (gl_t*)driver.video_data; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item; if (!driver.menu || !gl || !active_category) return; active_item = (menu_item_t*)&active_category->items[active_category->active_item]; update_tweens(0.002); glViewport(0, 0, gl->win_width, gl->win_height); lakka_draw_background(); lakka_draw_categories(); if (depth == 0 && active_category) lakka_draw_text(active_category->name, title_margin_left, title_margin_top, 1, 1.0); else if (active_item) lakka_draw_text(active_item->name, title_margin_left, title_margin_top, 1, 1.0); lakka_draw_icon(textures[TEXTURE_ARROW].id, margin_left + hspacing*(menu_active_category+1) + all_categories_x + icon_size/2.0, margin_top + vspacing*active_item_factor + icon_size/2.0, arrow_alpha, 0, i_active_zoom); gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); }
static void lakka_frame(void) { menu_item_t *active_item = NULL; menu_category_t *active_category = NULL; lakka_handle_t *lakka = NULL; gl_t *gl = (gl_t*)driver_video_resolve(NULL); if (!gl) return; if (!driver.menu) return; lakka = (lakka_handle_t*)driver.menu->userdata; if (!lakka) return; active_category = (menu_category_t*) &lakka->categories[lakka->menu_active_category]; if (!active_category) return; active_item = (menu_item_t*) &active_category->items[active_category->active_item]; update_tweens(0.002); #if defined(HAVE_FBO) && defined(LAKKA_EFFECTS) glBindFramebuffer(GL_FRAMEBUFFER, fbo); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); lakka_draw_categories(lakka); lakka_draw_arrow(lakka); glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, gl->win_width, gl->win_height); lakka_draw_background(); lakka_draw_fbo(); #else glViewport(0, 0, gl->win_width, gl->win_height); lakka_draw_background(); lakka_draw_categories(lakka); lakka_draw_arrow(lakka); #endif if (lakka->depth == 0) lakka_draw_text(lakka, active_category->name, lakka->title_margin_left, lakka->title_margin_top, 1, 1.0); else if (active_item) lakka_draw_text(lakka, active_item->name, lakka->title_margin_left, lakka->title_margin_top, 1, 1.0); gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); glDisable(GL_BLEND); }
static void lakka_draw_subitems(int i, int j) { int k; menu_category_t *category = (menu_category_t*)&categories[i]; menu_item_t *item = (menu_item_t*)&category->items[j]; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item = (menu_item_t*)&active_category->items[active_category->active_item]; for(k = 0; k < item->num_subitems; k++) { menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[k]; if (!subitem) continue; if (k == 0 && g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, &active_item->rom) == 0) { lakka_draw_icon(textures[TEXTURE_RESUME].id, 156 + HSPACING*(i+2) + all_categories_x - dim/2.0, 300 + subitem->y + dim/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text(&resume_label, 156 + HSPACING*(i+2) + all_categories_x + dim/2.0, 300 + subitem->y + 15, 1, subitem->alpha); } else if(k == 0 || menu_active_category == 0 || (g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, &active_item->rom) == 0)) { lakka_draw_icon(subitem->icon, 156 + HSPACING*(i+2) + all_categories_x - dim/2.0, 300 + subitem->y + dim/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text(&subitem->out, 156 + HSPACING * (i+2) + all_categories_x + dim/2.0, 300 + subitem->y + 15, 1, subitem->alpha); } } }
static void lakka_draw_subitems(int i, int j) { int k; menu_category_t *category = (menu_category_t*)&categories[i]; menu_item_t *item = (menu_item_t*)&category->items[j]; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item = (menu_item_t*)&active_category->items[active_category->active_item]; for(k = 0; k < item->num_subitems; k++) { menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[k]; if (!subitem) continue; if (k == 0 && g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, &active_item->rom) == 0) { lakka_draw_icon(textures[TEXTURE_RESUME].id, margin_left + hspacing*(i+2.25) + all_categories_x - icon_size/2.0, margin_top + subitem->y + icon_size/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text("Resume", margin_left + hspacing*(i+2.25) + all_categories_x + label_margin_left, margin_top + subitem->y + label_margin_top, 1, subitem->alpha); } else if(k == 0 || menu_active_category == 0 || (g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, &active_item->rom) == 0)) { lakka_draw_icon(subitem->icon, margin_left + hspacing*(i+2.25) + all_categories_x - icon_size/2.0, margin_top + subitem->y + icon_size/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text(subitem->name, margin_left + hspacing * (i+2.25) + all_categories_x + label_margin_left, margin_top + subitem->y + label_margin_top, 1, subitem->alpha); } } }
static void lakka_frame(void) { struct font_output_list *msg; gl_t *gl = (gl_t*)driver.video_data; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item; if (!driver.menu || !gl || !active_category) return; active_item = (menu_item_t*)&active_category->items[active_category->active_item]; update_tweens(0.002); glViewport(0, 0, gl->win_width, gl->win_height); lakka_draw_background(); lakka_draw_categories(); if (depth == 0) { if (active_category) lakka_draw_text(&active_category->out, 15.0, 40.0, 1, 1.0); } else { if (active_item) lakka_draw_text(&active_item->out, 15.0, 40.0, 1, 1.0); lakka_draw_icon(textures[TEXTURE_ARROW].id, 156 + HSPACING*(menu_active_category+1) + all_categories_x + 150 +-dim/2.0, 300 + VSPACING*2.4 + (dim/2.0), 1, 0, I_ACTIVE_ZOOM); } gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); }
static void lakka_draw_items(lakka_handle_t *lakka, int i) { int j; menu_category_t *category = (menu_category_t*)&lakka->categories[i]; menu_category_t *active_category = (menu_category_t*) &lakka->categories[lakka->menu_active_category]; menu_item_t *active_item = (menu_item_t*) &active_category->items[active_category->active_item]; (void)active_item; if (!lakka) return; for(j = 0; j < category->num_items; j++) { menu_item_t *item = (menu_item_t*)&category->items[j]; if (!item) continue; if ((i >= (lakka->menu_active_category - 1)) && (i <= (lakka->menu_active_category + 1))) /* performance improvement */ { lakka_draw_icon(lakka, category->item_icon, lakka->margin_left + lakka->hspacing * (i+1) + lakka->all_categories_x - lakka->icon_size / 2.0, lakka->margin_top + item->y + lakka->icon_size / 2.0, item->alpha, 0, item->zoom); if (lakka->depth == 0) lakka_draw_text(lakka, item->name, lakka->margin_left + lakka->hspacing * (i+1) + lakka->all_categories_x + lakka->label_margin_left, lakka->margin_top + item->y + lakka->label_margin_top, 1, item->alpha); } /* performance improvement */ if (i == lakka->menu_active_category && j == category->active_item) lakka_draw_subitems(lakka, i, j); } }
static void lakka_draw_items(int i) { int j; menu_category_t *category = (menu_category_t*)&categories[i]; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item = (menu_item_t*)&active_category->items[active_category->active_item]; for(j = 0; j < category->num_items; j++) { menu_item_t *item = (menu_item_t*)&category->items[j]; if (!item) continue; if (i == menu_active_category && j > active_category->active_item - 4 && j < active_category->active_item + 10) // performance improvement { lakka_draw_icon(category->item_icon, 156 + HSPACING*(i+1) + all_categories_x - dim/2.0, 300 + item->y + dim/2.0, item->alpha, 0, item->zoom); if (depth == 0) lakka_draw_text(&item->out, 156 + HSPACING * (i+1) + all_categories_x + dim/2.0, 300 + item->y + 15, 1, item->alpha); } if (i == menu_active_category && j == category->active_item && depth == 1) // performance improvement lakka_draw_subitems(i, j); } }
static void lakka_draw_items(int i) { int j; menu_category_t *category = (menu_category_t*)&categories[i]; menu_category_t *active_category = (menu_category_t*)&categories[menu_active_category]; menu_item_t *active_item = (menu_item_t*)&active_category->items[active_category->active_item]; for(j = 0; j < category->num_items; j++) { menu_item_t *item = (menu_item_t*)&category->items[j]; if (!item) continue; if (i >= menu_active_category - 1 && i <= menu_active_category + 1) // performance improvement { lakka_draw_icon(category->item_icon, margin_left + hspacing*(i+1) + all_categories_x - icon_size/2.0, margin_top + item->y + icon_size/2.0, item->alpha, 0, item->zoom); if (depth == 0) lakka_draw_text(item->name, margin_left + hspacing * (i+1) + all_categories_x + label_margin_left, margin_top + item->y + label_margin_top, 1, item->alpha); } if (i == menu_active_category && j == category->active_item && depth == 1) // performance improvement lakka_draw_subitems(i, j); } }
static void lakka_draw_subitems(lakka_handle_t *lakka, int i, int j) { int k; 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*) &lakka->categories[lakka->menu_active_category]; menu_item_t *active_item = (menu_item_t*) &active_category->items[active_category->active_item]; for(k = 0; k < item->num_subitems; k++) { menu_subitem_t *subitem = (menu_subitem_t*)&item->subitems[k]; if (!subitem) continue; if (i && k == 0 && g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, active_item->rom) == 0) { lakka_draw_icon(lakka, lakka->textures[TEXTURE_RESUME].id, lakka->margin_left + lakka->hspacing * (i+1) + lakka->icon_size * 2 + lakka->all_categories_x - lakka->icon_size / 2.0, lakka->margin_top + subitem->y + lakka->icon_size/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text(lakka, "Resume", lakka->margin_left + lakka->hspacing * (i+2.25) + lakka->all_categories_x + lakka->label_margin_left, lakka->margin_top + subitem->y + lakka->label_margin_top, 1, subitem->alpha); } else if (k == 0 || lakka->menu_active_category == 0 || (g_extern.main_is_init && !g_extern.libretro_dummy && strcmp(g_extern.fullpath, active_item->rom) == 0)) { lakka_draw_icon(lakka, subitem->icon, lakka->margin_left + lakka->hspacing * (i+1) + lakka->icon_size * 2 + lakka->all_categories_x - lakka->icon_size/2.0, lakka->margin_top + subitem->y + lakka->icon_size/2.0, subitem->alpha, 0, subitem->zoom); lakka_draw_text(lakka, subitem->name, lakka->margin_left + lakka->hspacing * (i+2.25) + lakka->all_categories_x + lakka->label_margin_left, lakka->margin_top + subitem->y + lakka->label_margin_top, 1, subitem->alpha); if (i && (k == 1 || k == 2)) { char slot[PATH_MAX]; if (g_settings.state_slot == -1) snprintf(slot, sizeof(slot), "%d (auto)", g_settings.state_slot); else snprintf(slot, sizeof(slot), "%d", g_settings.state_slot); lakka_draw_text(lakka, slot, lakka->margin_left + lakka->hspacing * (i+2.25) + lakka->all_categories_x + lakka->label_margin_left + lakka->setting_margin_left, lakka->margin_top + subitem->y + lakka->label_margin_top, 1, subitem->alpha); } } if (subitem->setting) { char val[PATH_MAX]; setting_data_get_string_representation(subitem->setting, val, sizeof(val)); lakka_draw_text(lakka, val, lakka->margin_left + lakka->hspacing * (i+2.25) + lakka->all_categories_x + lakka->label_margin_left + lakka->setting_margin_left, lakka->margin_top + subitem->y + lakka->label_margin_top, 1, subitem->alpha); } } }