From 4669f13d05b24025e72789a56e86e565c5373f67 Mon Sep 17 00:00:00 2001 From: Alex Taber Date: Wed, 12 Jun 2024 11:04:52 -0400 Subject: [PATCH] Some changes to scroll algorithm --- source/badges.c | 4 +-- source/loading.c | 79 ++++++++++++++++++++++++------------------------ source/main.c | 20 +++++------- 3 files changed, 50 insertions(+), 53 deletions(-) diff --git a/source/badges.c b/source/badges.c index b190121..4aeb41c 100644 --- a/source/badges.c +++ b/source/badges.c @@ -264,7 +264,7 @@ int install_badge_dir(FS_DirectoryEntry set_dir, int *badge_count, int set_id) u32 total_count = 0xFFFF * badges_in_set; for (int i = 0; i < 16; ++i) { - FSFILE_Write(badgeDataHandle, NULL, set_index * 0x8A0 + i * 0x8A, set_dir.name, strulen(set_dir.name, 0x8A) * 2, 0); + FSFILE_Write(badgeDataHandle, NULL, set_index * 0x8A0 + i * 0x8A, set_dir.name, strulen(set_dir.name, 0x45) * 2, 0); } badgeMngBuffer[0x3D8 + set_index/8] |= 0 << (set_index % 8); @@ -523,7 +523,7 @@ Result install_badges(void) { u16 name[0x8A/2] = {0}; utf8_to_utf16(name, (u8 *) "Other Badges", 0x8A); - FSFILE_Write(badgeDataHandle, NULL, default_index * 0x8A0 + i * 0x8A, &name, strulen(name, 0x8A) * 2, 0); + FSFILE_Write(badgeDataHandle, NULL, default_index * 0x8A0 + i * 0x8A, &name, strulen(name, 0x45) * 2, 0); } badgeMngBuffer[0x3D8 + default_index/8] |= 1 << (default_index % 8); diff --git a/source/loading.c b/source/loading.c index 9b1c5aa..2e6879f 100644 --- a/source/loading.c +++ b/source/loading.c @@ -148,47 +148,48 @@ void handle_scrolling(Entry_List_s * list) //---------------------------------------------------------------- if(list->entries_count > list->entries_loaded) { - for(int i = 0; i < list->entries_count; i++) + int change = 0; + + if(list->entries_count > list->entries_loaded * 2 && list->previous_scroll < list->entries_loaded && list->selected_entry >= list->entries_count - list->entries_loaded) { - int change = 0; - - if(list->entries_count > list->entries_loaded * 2 && list->previous_scroll < list->entries_loaded && list->selected_entry >= list->entries_count - list->entries_loaded) - { - list->scroll = list->entries_count - list->entries_loaded; - } - else if(list->entries_count > list->entries_loaded * 2 && list->selected_entry < list->entries_loaded && list->previous_selected >= list->entries_count - list->entries_loaded) - { - list->scroll = 0; - } - else if(list->selected_entry == list->previous_selected+1 && list->selected_entry == list->scroll+list->entries_loaded) - { - change = 1; - } - else if(list->selected_entry == list->previous_selected-1 && list->selected_entry == list->scroll-1) - { - change = -1; - } - else if(list->selected_entry == list->previous_selected+list->entries_loaded || list->selected_entry >= list->scroll + list->entries_loaded) - { - change = list->entries_loaded; - } - else if(list->selected_entry == list->previous_selected-list->entries_loaded || list->selected_entry < list->scroll) - { - change = -list->entries_loaded; - } - - list->scroll += change; - - if(list->scroll < 0) - list->scroll = 0; - else if(list->scroll > list->entries_count - list->entries_loaded) - list->scroll = list->entries_count - list->entries_loaded; - - if(!change) - list->previous_selected = list->selected_entry; - else - list->previous_selected += change; + list->scroll = list->entries_count - list->entries_loaded; } + else if(list->entries_count > list->entries_loaded * 2 && list->selected_entry < list->entries_loaded && list->previous_selected >= list->entries_count - list->entries_loaded) + { + list->scroll = 0; + } + else if(list->selected_entry == list->previous_selected+1 && list->selected_entry == list->scroll+list->entries_loaded) + { + change = 1; + } + else if(list->selected_entry == list->previous_selected-1 && list->selected_entry == list->scroll-1) + { + change = -1; + } + else if(list->selected_entry == list->previous_selected+list->entries_loaded) + { + change = list->entries_loaded; + } + else if(list->selected_entry == list->previous_selected-list->entries_loaded) + { + change = -list->entries_loaded; + } + else if(list->selected_entry >= list->scroll + list->entries_loaded || list->selected_entry < list->scroll) + { + change = list->selected_entry - list->scroll; + } + + list->scroll += change; + + if(list->scroll < 0) + list->scroll = 0; + else if(list->scroll > list->entries_count - list->entries_loaded) + list->scroll = list->entries_count - list->entries_loaded; + + if(!change) + list->previous_selected = list->selected_entry; + else + list->previous_selected += change; } //---------------------------------------------------------------- } diff --git a/source/main.c b/source/main.c index a9d7e16..b6ba7a7 100644 --- a/source/main.c +++ b/source/main.c @@ -126,6 +126,13 @@ static void stop_install_check(void) } } +static inline void wait_scroll(void) +{ + released = true; + svcReleaseMutex(update_icons_mutex); + svcSleepThread(FASTSCROLL_WAIT); +} + static void exit_thread(void) { if(iconLoadingThread_arg.run_thread) @@ -327,11 +334,7 @@ static void jump_menu(Entry_List_s * list) if(button == SWKBD_BUTTON_CONFIRM) { list->selected_entry = atoi(numbuf) - 1; - list->scroll = list->selected_entry; - if(list->scroll >= list->entries_count - list->entries_loaded) - list->scroll = list->entries_count - list->entries_loaded - 1; - if (list->scroll < 0) - list->scroll = 0; + wait_scroll(); } } @@ -371,13 +374,6 @@ static void toggle_shuffle(Entry_List_s * list) } } -static inline void wait_scroll(void) -{ - released = true; - svcReleaseMutex(update_icons_mutex); - svcSleepThread(FASTSCROLL_WAIT); -} - int main(void) { srand(time(NULL));