From fb18dce17769676f08d6c0e93da9b16815954b69 Mon Sep 17 00:00:00 2001 From: LiquidFenrir Date: Fri, 8 Dec 2017 18:11:52 +0100 Subject: [PATCH] fix overlapping icons if you have both themes and splashes (#105) --- include/loading.h | 2 ++ source/loading.c | 3 ++- source/main.c | 39 +++++++++++++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/include/loading.h b/include/loading.h index 7daf20b..e85c138 100644 --- a/include/loading.h +++ b/include/loading.h @@ -60,6 +60,8 @@ typedef struct { Entry_s * entries; int entries_count; + ssize_t icon_id_start; + int scroll; int selected_entry; diff --git a/source/loading.c b/source/loading.c index 05f8aab..ef56a56 100644 --- a/source/loading.c +++ b/source/loading.c @@ -134,7 +134,8 @@ Result load_entries(const char * loading_path, Entry_List_s * list) current_entry->is_zip = !strcmp(dir_entry.shortExt, "ZIP"); - ssize_t iconID = TEXTURE_ICON + list->entries_count; + ssize_t iconID = list->icon_id_start + list->entries_count - 1; + DEBUG("id: %u\n", iconID); parse_smdh(current_entry, iconID, dir_entry.name); } diff --git a/source/main.c b/source/main.c index fb4b2f2..7c81344 100644 --- a/source/main.c +++ b/source/main.c @@ -91,6 +91,34 @@ void change_selected(Entry_List_s * list, int change_value) list->selected_entry %= list->entries_count; } +void load_lists(Entry_List_s * lists) +{ + DEBUG("origin: %u\n", TEXTURE_ICON); + + ssize_t last_icon_id = TEXTURE_ICON; + for(int i = 0; i < MODE_AMOUNT; i++) + { + Entry_List_s * current_list = &lists[i]; + last_icon_id += current_list->entries_count; + free(current_list->entries); + memset(current_list, 0, sizeof(Entry_List_s)); + } + pp2d_free_texture(last_icon_id); + + DEBUG("max: %u\n", last_icon_id); + + ssize_t icon_id_start = TEXTURE_ICON; + for(int i = 0; i < MODE_AMOUNT; i++) + { + Entry_List_s * current_list = &lists[i]; + current_list->icon_id_start = icon_id_start; + load_entries(main_paths[i], current_list); + icon_id_start += current_list->entries_count; + } + + DEBUG("end: %u\n", icon_id_start); +} + int main(void) { srand(time(NULL)); @@ -98,9 +126,7 @@ int main(void) init_screens(); Entry_List_s lists[MODE_AMOUNT] = {0}; - - for(int i = 0; i < MODE_AMOUNT; i++) - load_entries(main_paths[i], &lists[i]); + load_lists(lists); EntryMode current_mode = MODE_THEMES; @@ -175,11 +201,7 @@ int main(void) CAMU_StartCapture(PORT_BOTH); if(!qr_mode) - { - free(current_list->entries); - memset(current_list, 0, sizeof(Entry_List_s)); - load_entries(main_paths[current_mode], current_list); - } + load_lists(lists); continue; } @@ -232,6 +254,7 @@ int main(void) case MODE_SPLASHES: draw_install(INSTALL_SPLASH_DELETE); splash_delete(); + break; default: break; }