(Lakka) Responsive menu

This commit is contained in:
Jean-André Santoni 2014-08-01 15:11:23 +02:00
parent 828edc3ec6
commit 0b52bd86f0
3 changed files with 185 additions and 60 deletions

View File

@ -84,9 +84,9 @@ static void lakka_switch_items(void)
ia = (j == active_category->active_item) ? 1.0 : 0.5; ia = (j == active_category->active_item) ? 1.0 : 0.5;
iz = (j == active_category->active_item) ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM; iz = (j == active_category->active_item) ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM;
iy = (j == active_category->active_item) ? VSPACING*2.4 : iy = (j == active_category->active_item) ? VSPACING*ACTIVE_ITEM_FACTOR :
(j < active_category->active_item) ? VSPACING*(j - active_category->active_item - 1) : (j < active_category->active_item) ? VSPACING*(j - active_category->active_item + ABOVE_ITEM_OFFSET) :
VSPACING*(j - active_category->active_item + 3); VSPACING*(j - active_category->active_item + UNDER_ITEM_OFFSET);
add_tween(DELAY, ia, &active_item->alpha, &inOutQuad, NULL); add_tween(DELAY, ia, &active_item->alpha, &inOutQuad, NULL);
add_tween(DELAY, iz, &active_item->zoom, &inOutQuad, NULL); add_tween(DELAY, iz, &active_item->zoom, &inOutQuad, NULL);
@ -111,21 +111,21 @@ static void lakka_switch_subitems(void)
{ {
// Above items // Above items
add_tween(DELAY, 0.5, &subitem->alpha, &inOutQuad, NULL); add_tween(DELAY, 0.5, &subitem->alpha, &inOutQuad, NULL);
add_tween(DELAY, VSPACING*(k - item->active_subitem + 2), &subitem->y, &inOutQuad, NULL); add_tween(DELAY, VSPACING*(k - item->active_subitem + ABOVE_SUBITEM_OFFSET), &subitem->y, &inOutQuad, NULL);
add_tween(DELAY, I_PASSIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL); add_tween(DELAY, I_PASSIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL);
} }
else if (k == item->active_subitem) else if (k == item->active_subitem)
{ {
// Active item // Active item
add_tween(DELAY, 1.0, &subitem->alpha, &inOutQuad, NULL); add_tween(DELAY, 1.0, &subitem->alpha, &inOutQuad, NULL);
add_tween(DELAY, VSPACING*2.4, &subitem->y, &inOutQuad, NULL); add_tween(DELAY, VSPACING*ACTIVE_ITEM_FACTOR, &subitem->y, &inOutQuad, NULL);
add_tween(DELAY, I_ACTIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL); add_tween(DELAY, I_ACTIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL);
} }
else if (k > item->active_subitem) else if (k > item->active_subitem)
{ {
// Under items // Under items
add_tween(DELAY, 0.5, &subitem->alpha, &inOutQuad, NULL); add_tween(DELAY, 0.5, &subitem->alpha, &inOutQuad, NULL);
add_tween(DELAY, VSPACING*(k - item->active_subitem + 3), &subitem->y, &inOutQuad, NULL); add_tween(DELAY, VSPACING*(k - item->active_subitem + UNDER_ITEM_OFFSET), &subitem->y, &inOutQuad, NULL);
add_tween(DELAY, I_PASSIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL); add_tween(DELAY, I_PASSIVE_ZOOM, &subitem->zoom, &inOutQuad, NULL);
} }
} }
@ -162,7 +162,7 @@ static void lakka_reset_submenu(void)
subitem->alpha = 0; subitem->alpha = 0;
subitem->zoom = k == category->items[j].active_subitem ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM; subitem->zoom = k == category->items[j].active_subitem ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM;
subitem->y = k == 0 ? VSPACING * 2.4 : VSPACING * (3+k); subitem->y = k == 0 ? VSPACING * ACTIVE_ITEM_FACTOR : VSPACING * (3+k);
} }
} }
} }

View File

@ -47,9 +47,27 @@ menu_category_t *categories;
int depth = 0; int depth = 0;
int num_categories = 0; int num_categories = 0;
int menu_active_category = 0; int menu_active_category = 0;
int dim = 192;
float all_categories_x = 0; float all_categories_x = 0;
float global_alpha = 0; float global_alpha = 0;
float HSPACING;
float VSPACING;
float C_ACTIVE_ZOOM;
float C_PASSIVE_ZOOM;
float I_ACTIVE_ZOOM;
float I_PASSIVE_ZOOM;
float FONT_SIZE;
float MARGIN_LEFT;
float MARGIN_TOP;
float TITLE_MARGIN_LEFT;
float TITLE_MARGIN_TOP;
float LABEL_MARGIN_LEFT;
float LABEL_MARGIN_TOP;
int ICON_SIZE;
char ICON_DIR[3];
int ABOVE_SUBITEM_OFFSET;
int ABOVE_ITEM_OFFSET;
float ACTIVE_ITEM_FACTOR;
int UNDER_ITEM_OFFSET;
// Font variables // Font variables
void *font; void *font;
@ -92,6 +110,105 @@ struct lakka_texture_item textures[TEXTURE_LAST];
static tween_t* tweens = NULL; static tween_t* tweens = NULL;
int numtweens = 0; int numtweens = 0;
static void lakka_responsive(void)
{
gl_t *gl = (gl_t*)driver.video_data;
if (!gl)
return;
if (gl->win_width >= 2560)
{
ICON_SIZE = 256;
HSPACING = 400;
VSPACING = 100;
C_ACTIVE_ZOOM = 1.0;
C_PASSIVE_ZOOM = 0.5;
I_ACTIVE_ZOOM = 0.75;
I_PASSIVE_ZOOM = 0.35;
FONT_SIZE = 42.0;
MARGIN_LEFT = 200.0;
MARGIN_TOP = 400.0;
TITLE_MARGIN_LEFT = 20.0;
TITLE_MARGIN_TOP = 50.0;
LABEL_MARGIN_LEFT = 128;
LABEL_MARGIN_TOP = 15;
strcpy(ICON_DIR, "256");
ABOVE_SUBITEM_OFFSET = 2;
ABOVE_ITEM_OFFSET = -1;
ACTIVE_ITEM_FACTOR = 2.4;
UNDER_ITEM_OFFSET = 3;
return;
}
if (gl->win_width >= 1920)
{
ICON_SIZE = 192;
HSPACING = 300;
VSPACING = 75;
C_ACTIVE_ZOOM = 1.0;
C_PASSIVE_ZOOM = 0.5;
I_ACTIVE_ZOOM = 0.75;
I_PASSIVE_ZOOM = 0.35;
FONT_SIZE = 32.0;
MARGIN_LEFT = 156.0;
MARGIN_TOP = 300.0;
TITLE_MARGIN_LEFT = 15.0;
TITLE_MARGIN_TOP = 40.0;
LABEL_MARGIN_LEFT = 96;
LABEL_MARGIN_TOP = 11;
strcpy(ICON_DIR, "192");
ABOVE_SUBITEM_OFFSET = 2;
ABOVE_ITEM_OFFSET = -1;
ACTIVE_ITEM_FACTOR = 2.4;
UNDER_ITEM_OFFSET = 3;
return;
}
if (gl->win_width <= 640)
{
ICON_SIZE = 64;
HSPACING = 100.0;
VSPACING = 32.0;
C_ACTIVE_ZOOM = 1.0;
C_PASSIVE_ZOOM = 0.5;
I_ACTIVE_ZOOM = 1.0;
I_PASSIVE_ZOOM = 0.5;
FONT_SIZE = 16;
MARGIN_LEFT = 60.0;
MARGIN_TOP = 100.0;
TITLE_MARGIN_LEFT = 10.0;
TITLE_MARGIN_TOP = 24.0;
LABEL_MARGIN_LEFT = 35.0;
LABEL_MARGIN_TOP = 6.0;
strcpy(ICON_DIR, "64");
ABOVE_SUBITEM_OFFSET = 2;
ABOVE_ITEM_OFFSET = -1;
ACTIVE_ITEM_FACTOR = 2.25;
UNDER_ITEM_OFFSET = 3;
return;
}
ICON_SIZE = 128;
HSPACING = 200.0;
VSPACING = 50.0;
C_ACTIVE_ZOOM = 1.0;
C_PASSIVE_ZOOM = 0.5;
I_ACTIVE_ZOOM = 0.75;
I_PASSIVE_ZOOM = 0.35;
FONT_SIZE = 24;
MARGIN_LEFT = 120.0;
MARGIN_TOP = 200.0;
TITLE_MARGIN_LEFT = 15.0;
TITLE_MARGIN_TOP = 35.0;
LABEL_MARGIN_LEFT = 70.0;
LABEL_MARGIN_TOP = 11.0;
strcpy(ICON_DIR, "128");
ABOVE_SUBITEM_OFFSET = 2;
ABOVE_ITEM_OFFSET = -1;
ACTIVE_ITEM_FACTOR = 2.4;
UNDER_ITEM_OFFSET = 3;
}
static char *str_replace (const char *string, const char *substr, const char *replacement) static char *str_replace (const char *string, const char *substr, const char *replacement)
{ {
char *tok, *newstr, *oldstr, *head; char *tok, *newstr, *oldstr, *head;
@ -281,7 +398,7 @@ void lakka_draw_icon(GLuint texture, float x, float y, float alpha, float rotati
if (!gl) if (!gl)
return; return;
glViewport(x, gl->win_height - y, dim, dim); glViewport(x, gl->win_height - y, ICON_SIZE, ICON_SIZE);
glEnable(GL_BLEND); glEnable(GL_BLEND);
@ -334,14 +451,14 @@ static void lakka_draw_subitems(int i, int j)
&& strcmp(g_extern.fullpath, &active_item->rom) == 0) && strcmp(g_extern.fullpath, &active_item->rom) == 0)
{ {
lakka_draw_icon(textures[TEXTURE_RESUME].id, lakka_draw_icon(textures[TEXTURE_RESUME].id,
156 + HSPACING*(i+2) + all_categories_x - dim/2.0, MARGIN_LEFT + HSPACING*(i+2) + all_categories_x - ICON_SIZE/2.0,
300 + subitem->y + dim/2.0, MARGIN_TOP + subitem->y + ICON_SIZE/2.0,
subitem->alpha, subitem->alpha,
0, 0,
subitem->zoom); subitem->zoom);
lakka_draw_text("Resume", lakka_draw_text("Resume",
156 + HSPACING*(i+2) + all_categories_x + dim/2.0, MARGIN_LEFT + HSPACING*(i+2) + all_categories_x + LABEL_MARGIN_LEFT,
300 + subitem->y + 11, MARGIN_TOP + subitem->y + LABEL_MARGIN_TOP,
1, 1,
subitem->alpha); subitem->alpha);
} }
@ -352,14 +469,14 @@ static void lakka_draw_subitems(int i, int j)
strcmp(g_extern.fullpath, &active_item->rom) == 0)) strcmp(g_extern.fullpath, &active_item->rom) == 0))
{ {
lakka_draw_icon(subitem->icon, lakka_draw_icon(subitem->icon,
156 + HSPACING*(i+2) + all_categories_x - dim/2.0, MARGIN_LEFT + HSPACING*(i+2) + all_categories_x - ICON_SIZE/2.0,
300 + subitem->y + dim/2.0, MARGIN_TOP + subitem->y + ICON_SIZE/2.0,
subitem->alpha, subitem->alpha,
0, 0,
subitem->zoom); subitem->zoom);
lakka_draw_text(subitem->name, lakka_draw_text(subitem->name,
156 + HSPACING * (i+2) + all_categories_x + dim/2.0, MARGIN_LEFT + HSPACING * (i+2) + all_categories_x + LABEL_MARGIN_LEFT,
300 + subitem->y + 11, MARGIN_TOP + subitem->y + LABEL_MARGIN_TOP,
1, 1,
subitem->alpha); subitem->alpha);
} }
@ -386,16 +503,16 @@ static void lakka_draw_items(int i)
j < active_category->active_item + 10) // performance improvement j < active_category->active_item + 10) // performance improvement
{ {
lakka_draw_icon(category->item_icon, lakka_draw_icon(category->item_icon,
156 + HSPACING*(i+1) + all_categories_x - dim/2.0, MARGIN_LEFT + HSPACING*(i+1) + all_categories_x - ICON_SIZE/2.0,
300 + item->y + dim/2.0, MARGIN_TOP + item->y + ICON_SIZE/2.0,
item->alpha, item->alpha,
0, 0,
item->zoom); item->zoom);
if (depth == 0) if (depth == 0)
lakka_draw_text(item->name, lakka_draw_text(item->name,
156 + HSPACING * (i+1) + all_categories_x + dim/2.0, MARGIN_LEFT + HSPACING * (i+1) + all_categories_x + LABEL_MARGIN_LEFT,
300 + item->y + 11, MARGIN_TOP + item->y + LABEL_MARGIN_TOP,
1, 1,
item->alpha); item->alpha);
} }
@ -421,8 +538,8 @@ static void lakka_draw_categories(void)
// draw category icon // draw category icon
lakka_draw_icon(category->icon, lakka_draw_icon(category->icon,
156 + (HSPACING*(i+1)) + all_categories_x - dim/2.0, MARGIN_LEFT + (HSPACING*(i+1)) + all_categories_x - ICON_SIZE/2.0,
300 + dim/2.0, MARGIN_TOP + ICON_SIZE/2.0,
category->alpha, category->alpha,
0, 0,
category->zoom); category->zoom);
@ -452,16 +569,16 @@ static void lakka_frame(void)
if (depth == 0) if (depth == 0)
{ {
if (active_category) if (active_category)
lakka_draw_text(active_category->name, 15.0, 40.0, 1, 1.0); lakka_draw_text(active_category->name, TITLE_MARGIN_LEFT, TITLE_MARGIN_TOP, 1, 1.0);
} }
else else
{ {
if (active_item) if (active_item)
lakka_draw_text(active_item->name, 15.0, 40.0, 1, 1.0); lakka_draw_text(active_item->name, TITLE_MARGIN_LEFT, TITLE_MARGIN_TOP, 1, 1.0);
lakka_draw_icon(textures[TEXTURE_ARROW].id, lakka_draw_icon(textures[TEXTURE_ARROW].id,
156 + HSPACING*(menu_active_category+1) + all_categories_x + 150 +-dim/2.0, MARGIN_LEFT + HSPACING*(menu_active_category+1) + all_categories_x + ICON_SIZE/2.0,
300 + VSPACING*2.4 + (dim/2.0), 1, 0, I_ACTIVE_ZOOM); MARGIN_TOP + VSPACING*ACTIVE_ITEM_FACTOR + ICON_SIZE/2.0, 1, 0, I_ACTIVE_ZOOM);
} }
gl_set_viewport(gl, gl->win_width, gl->win_height, false, false); gl_set_viewport(gl, gl->win_width, gl->win_height, false, false);
@ -691,7 +808,7 @@ void lakka_init_settings(void)
strlcpy(item0->name, "General Options", sizeof(item0->name)); strlcpy(item0->name, "General Options", sizeof(item0->name));
item0->alpha = j ? 0.5 : 1.0; item0->alpha = j ? 0.5 : 1.0;
item0->zoom = j ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM; item0->zoom = j ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM;
item0->y = j ? VSPACING*(3+j) : VSPACING*2.4; item0->y = j ? VSPACING*(UNDER_ITEM_OFFSET+j) : VSPACING * ACTIVE_ITEM_FACTOR;
item0->active_subitem = 0; item0->active_subitem = 0;
item0->num_subitems = 0; item0->num_subitems = 0;
@ -707,7 +824,7 @@ void lakka_init_settings(void)
strlcpy(subitem0->name, "Libretro Logging Level", sizeof(subitem0->name)); strlcpy(subitem0->name, "Libretro Logging Level", sizeof(subitem0->name));
subitem0->alpha = k ? 1.0 : 0.5; subitem0->alpha = k ? 1.0 : 0.5;
subitem0->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM; subitem0->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM;
subitem0->y = k ? VSPACING * (3+k) : VSPACING * 2.4; subitem0->y = k ? VSPACING * (3+k) : VSPACING * ACTIVE_ITEM_FACTOR;
k = 1; k = 1;
item0->num_subitems++; item0->num_subitems++;
@ -719,7 +836,7 @@ void lakka_init_settings(void)
strlcpy(subitem1->name, "Logging Verbosity", sizeof(subitem1->name)); strlcpy(subitem1->name, "Logging Verbosity", sizeof(subitem1->name));
subitem1->alpha = k ? 1.0 : 0.5; subitem1->alpha = k ? 1.0 : 0.5;
subitem1->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM; subitem1->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM;
subitem1->y = k ? VSPACING * (3+k) : VSPACING * 2.4; subitem1->y = k ? VSPACING * (3+k) : VSPACING * ACTIVE_ITEM_FACTOR;
k = 2; k = 2;
item0->num_subitems++; item0->num_subitems++;
@ -731,7 +848,7 @@ void lakka_init_settings(void)
strlcpy(subitem2->name, "Configuration Save On Exit", sizeof(subitem2->name)); strlcpy(subitem2->name, "Configuration Save On Exit", sizeof(subitem2->name));
subitem2->alpha = k ? 1.0 : 0.5; subitem2->alpha = k ? 1.0 : 0.5;
subitem2->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM; subitem2->zoom = k ? I_ACTIVE_ZOOM : I_PASSIVE_ZOOM;
subitem2->y = k ? VSPACING * (3+k) : VSPACING * 2.4; subitem2->y = k ? VSPACING * (3+k) : VSPACING * ACTIVE_ITEM_FACTOR;
// Quit item // Quit item
@ -744,7 +861,7 @@ void lakka_init_settings(void)
strlcpy(item1->name, "Quit RetroArch", sizeof(item1->name)); strlcpy(item1->name, "Quit RetroArch", sizeof(item1->name));
item1->alpha = j ? 0.5 : 1.0; item1->alpha = j ? 0.5 : 1.0;
item1->zoom = j ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM; item1->zoom = j ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM;
item1->y = j ? VSPACING*(3+j) : VSPACING*2.4; item1->y = j ? VSPACING*(UNDER_ITEM_OFFSET+j) : VSPACING * ACTIVE_ITEM_FACTOR;
item1->active_subitem = 0; item1->active_subitem = 0;
item1->num_subitems = 0; item1->num_subitems = 0;
} }
@ -781,7 +898,7 @@ void lakka_settings_context_reset(void)
static void lakka_context_reset(void *data) static void lakka_context_reset(void *data)
{ {
int i, j, k; int i, j, k;
char path[256], mediapath[256], themepath[256]; char path[256], mediapath[256], themepath[256], iconpath[256];
menu_handle_t *menu = (menu_handle_t*)data; menu_handle_t *menu = (menu_handle_t*)data;
gl_t *gl = (gl_t*)driver.video_data; gl_t *gl = (gl_t*)driver.video_data;
@ -790,26 +907,27 @@ static void lakka_context_reset(void *data)
fill_pathname_join(mediapath, g_settings.assets_directory, "lakka", sizeof(mediapath)); fill_pathname_join(mediapath, g_settings.assets_directory, "lakka", sizeof(mediapath));
fill_pathname_join(themepath, mediapath, THEME, sizeof(themepath)); fill_pathname_join(themepath, mediapath, THEME, sizeof(themepath));
fill_pathname_slash(themepath, sizeof(themepath)); fill_pathname_join(iconpath, themepath, ICON_DIR, sizeof(iconpath));
fill_pathname_slash(iconpath, sizeof(iconpath));
fill_pathname_join(font_path, themepath, "font.ttf", sizeof(font_path)); fill_pathname_join(font_path, themepath, "font.ttf", sizeof(font_path));
gl_font_init_first(&font_driver, &font, gl, font_path, 32); gl_font_init_first(&font_driver, &font, gl, font_path, FONT_SIZE);
fill_pathname_join(textures[TEXTURE_BG].path, themepath, "bg.png", sizeof(textures[TEXTURE_BG].path)); fill_pathname_join(textures[TEXTURE_BG].path, iconpath, "bg.png", sizeof(textures[TEXTURE_BG].path));
fill_pathname_join(textures[TEXTURE_SETTINGS].path, themepath, "settings.png", sizeof(textures[TEXTURE_SETTINGS].path)); fill_pathname_join(textures[TEXTURE_SETTINGS].path, iconpath, "settings.png", sizeof(textures[TEXTURE_SETTINGS].path));
fill_pathname_join(textures[TEXTURE_SETTING].path, themepath, "setting.png", sizeof(textures[TEXTURE_SETTING].path)); fill_pathname_join(textures[TEXTURE_SETTING].path, iconpath, "setting.png", sizeof(textures[TEXTURE_SETTING].path));
fill_pathname_join(textures[TEXTURE_SUBSETTING].path, themepath, "subsetting.png", sizeof(textures[TEXTURE_SUBSETTING].path)); fill_pathname_join(textures[TEXTURE_SUBSETTING].path, iconpath, "subsetting.png", sizeof(textures[TEXTURE_SUBSETTING].path));
fill_pathname_join(textures[TEXTURE_ARROW].path, themepath, "arrow.png", sizeof(textures[TEXTURE_ARROW].path)); fill_pathname_join(textures[TEXTURE_ARROW].path, iconpath, "arrow.png", sizeof(textures[TEXTURE_ARROW].path));
fill_pathname_join(textures[TEXTURE_RUN].path, themepath, "run.png", sizeof(textures[TEXTURE_RUN].path)); fill_pathname_join(textures[TEXTURE_RUN].path, iconpath, "run.png", sizeof(textures[TEXTURE_RUN].path));
fill_pathname_join(textures[TEXTURE_RESUME].path, themepath, "resume.png", sizeof(textures[TEXTURE_RESUME].path)); fill_pathname_join(textures[TEXTURE_RESUME].path, iconpath, "resume.png", sizeof(textures[TEXTURE_RESUME].path));
fill_pathname_join(textures[TEXTURE_SAVESTATE].path, themepath, "savestate.png", sizeof(textures[TEXTURE_SAVESTATE].path)); fill_pathname_join(textures[TEXTURE_SAVESTATE].path, iconpath, "savestate.png", sizeof(textures[TEXTURE_SAVESTATE].path));
fill_pathname_join(textures[TEXTURE_LOADSTATE].path, themepath, "loadstate.png", sizeof(textures[TEXTURE_LOADSTATE].path)); fill_pathname_join(textures[TEXTURE_LOADSTATE].path, iconpath, "loadstate.png", sizeof(textures[TEXTURE_LOADSTATE].path));
fill_pathname_join(textures[TEXTURE_SCREENSHOT].path, themepath, "screenshot.png", sizeof(textures[TEXTURE_SCREENSHOT].path)); fill_pathname_join(textures[TEXTURE_SCREENSHOT].path, iconpath, "screenshot.png", sizeof(textures[TEXTURE_SCREENSHOT].path));
fill_pathname_join(textures[TEXTURE_RELOAD].path, themepath, "reload.png", sizeof(textures[TEXTURE_RELOAD].path)); fill_pathname_join(textures[TEXTURE_RELOAD].path, iconpath, "reload.png", sizeof(textures[TEXTURE_RELOAD].path));
for (k = 0; k < TEXTURE_LAST; k++) for (k = 0; k < TEXTURE_LAST; k++)
textures[k].id = png_texture_load(textures[k].path, &dim, &dim); textures[k].id = png_texture_load(textures[k].path, &ICON_SIZE, &ICON_SIZE);
lakka_settings_context_reset(); lakka_settings_context_reset();
for (i = 1; i < num_categories; i++) for (i = 1; i < num_categories; i++)
@ -822,7 +940,8 @@ static void lakka_context_reset(void *data)
fill_pathname_join(mediapath, g_settings.assets_directory, "lakka", sizeof(mediapath)); fill_pathname_join(mediapath, g_settings.assets_directory, "lakka", sizeof(mediapath));
fill_pathname_join(themepath, mediapath, THEME, sizeof(themepath)); fill_pathname_join(themepath, mediapath, THEME, sizeof(themepath));
fill_pathname_slash(themepath, sizeof(themepath)); fill_pathname_join(iconpath, themepath, ICON_DIR, sizeof(iconpath));
fill_pathname_slash(iconpath, sizeof(iconpath));
info_list = (core_info_list_t*)menu->core_info; info_list = (core_info_list_t*)menu->core_info;
info = NULL; info = NULL;
@ -837,16 +956,16 @@ static void lakka_context_reset(void *data)
strlcpy(core_id, "default", sizeof(core_id)); strlcpy(core_id, "default", sizeof(core_id));
} }
strlcpy(texturepath, themepath, sizeof(texturepath)); strlcpy(texturepath, iconpath, sizeof(texturepath));
strlcat(texturepath, core_id, sizeof(texturepath)); strlcat(texturepath, core_id, sizeof(texturepath));
strlcat(texturepath, ".png", sizeof(texturepath)); strlcat(texturepath, ".png", sizeof(texturepath));
strlcpy(content_texturepath, themepath, sizeof(content_texturepath)); strlcpy(content_texturepath, iconpath, sizeof(content_texturepath));
strlcat(content_texturepath, core_id, sizeof(content_texturepath)); strlcat(content_texturepath, core_id, sizeof(content_texturepath));
strlcat(content_texturepath, "-content.png", sizeof(content_texturepath)); strlcat(content_texturepath, "-content.png", sizeof(content_texturepath));
category->icon = png_texture_load(texturepath, &dim, &dim); category->icon = png_texture_load(texturepath, &ICON_SIZE, &ICON_SIZE);
category->item_icon = png_texture_load(content_texturepath, &dim, &dim); category->item_icon = png_texture_load(content_texturepath, &ICON_SIZE, &ICON_SIZE);
for (j = 0; j < category->num_items; j++) for (j = 0; j < category->num_items; j++)
{ {
@ -906,7 +1025,7 @@ static void lakka_init_items(int i, menu_category_t *category, core_info_t *info
strlcpy(item->rom, list->elems[j].data, sizeof(item->rom)); strlcpy(item->rom, list->elems[j].data, sizeof(item->rom));
item->alpha = i != menu_active_category ? 0 : n ? 0.5 : 1; item->alpha = i != menu_active_category ? 0 : n ? 0.5 : 1;
item->zoom = n ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM; item->zoom = n ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM;
item->y = n ? VSPACING*(3+n) : VSPACING*2.4; item->y = n ? VSPACING*(UNDER_ITEM_OFFSET+n) : VSPACING*ACTIVE_ITEM_FACTOR;
item->active_subitem = 0; item->active_subitem = 0;
item->num_subitems = 5; item->num_subitems = 5;
item->subitems = (menu_subitem_t*)calloc(item->num_subitems, sizeof(menu_subitem_t)); item->subitems = (menu_subitem_t*)calloc(item->num_subitems, sizeof(menu_subitem_t));
@ -938,7 +1057,7 @@ static void lakka_init_items(int i, menu_category_t *category, core_info_t *info
} }
subitem->alpha = 0; subitem->alpha = 0;
subitem->zoom = k ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM; subitem->zoom = k ? I_PASSIVE_ZOOM : I_ACTIVE_ZOOM;
subitem->y = k ? VSPACING * (3+k) : VSPACING * 2.4; subitem->y = k ? VSPACING * (3+k) : VSPACING * ACTIVE_ITEM_FACTOR;
} }
} }
} }
@ -994,6 +1113,8 @@ static void *lakka_init(void)
if (!menu || !gl) if (!menu || !gl)
return NULL; return NULL;
lakka_responsive();
lakka_init_core_info(menu); lakka_init_core_info(menu);
categories = (menu_category_t*)calloc(num_categories, sizeof(menu_category_t)); categories = (menu_category_t*)calloc(num_categories, sizeof(menu_category_t));

View File

@ -23,18 +23,22 @@
#define THEME "flatui" // flatui or monochrome themes are available #define THEME "flatui" // flatui or monochrome themes are available
#define DELAY 0.02 #define DELAY 0.02
#define HSPACING 300
#define VSPACING 75
#define C_ACTIVE_ZOOM 1.0
#define C_PASSIVE_ZOOM 0.5
#define I_ACTIVE_ZOOM 0.75
#define I_PASSIVE_ZOOM 0.35
extern int depth; extern int depth;
extern int num_categories; extern int num_categories;
extern float all_categories_x; extern float all_categories_x;
extern int menu_active_category; extern int menu_active_category;
extern float global_alpha; extern float global_alpha;
extern float HSPACING;
extern float VSPACING;
extern float C_ACTIVE_ZOOM;
extern float C_PASSIVE_ZOOM;
extern float I_ACTIVE_ZOOM;
extern float I_PASSIVE_ZOOM;
extern int ABOVE_SUBITEM_OFFSET;
extern int ABOVE_ITEM_OFFSET;
extern float ACTIVE_ITEM_FACTOR;
extern int UNDER_ITEM_OFFSET;
typedef struct typedef struct
{ {