diff --git a/include/common.hpp b/include/common.hpp index ff6cc8bb3..92b86f5c2 100644 --- a/include/common.hpp +++ b/include/common.hpp @@ -41,7 +41,7 @@ #define _UNISTORE_VERSION 4 inline std::unique_ptr config; -inline uint32_t hRepeat, hDown, hHeld; +inline uint32_t hRepeat, hUp, hDown, hHeld; inline touchPosition touch; inline C2D_Font font; diff --git a/include/screens/mainScreen.hpp b/include/screens/mainScreen.hpp index aa682f725..9111313ee 100644 --- a/include/screens/mainScreen.hpp +++ b/include/screens/mainScreen.hpp @@ -57,7 +57,7 @@ class MainScreen : public Screen { ascending = false, updateFilter = false, screenshotFetch = false, canDisplay = false, isAND = true; int storeMode = 0, marks = 0, markIndex = 0, sPage = 0, lMode = 0, sSelection = 0, - lastMode = 0, smallDelay = 0, sPos = 0, screenshotIndex = 0, sSize = 0, zoom = 0, scrollIndex = 0, queueIndex = 0; + lastMode = 0, smallDelay = 0, sPos = 0, screenshotIndex = 0, sSize = 0, zoom = 0, scrollOffset = 0, scrollDelta = 0, queueIndex = 0; SortType sorttype = SortType::LAST_UPDATED; diff --git a/include/store/storeUtils.hpp b/include/store/storeUtils.hpp index 5bf8a2e82..c6d0f576a 100644 --- a/include/store/storeUtils.hpp +++ b/include/store/storeUtils.hpp @@ -94,8 +94,8 @@ namespace StoreUtils { size_t FindSplitPoint(const std::string &str, const std::vector splitters); void ProcessReleaseNotes(std::string ReleaseNotes); - void DrawReleaseNotes(const int &scrollIndex, const std::unique_ptr &entry); - void ReleaseNotesLogic(int &scrollIndex, int &storeMode); + void DrawReleaseNotes(const int &scrollOffset, const std::string &title); + void ReleaseNotesLogic(int &scrollOffset, int &scrollDelta, int &storeMode); bool compareTitleDescending(const std::unique_ptr &a, const std::unique_ptr &b); bool compareTitleAscending(const std::unique_ptr &a, const std::unique_ptr &b); diff --git a/romfs/lang/br/app.json b/romfs/lang/br/app.json index 3db9443ca..28bf09dc2 100644 --- a/romfs/lang/br/app.json +++ b/romfs/lang/br/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Bruhstracting %s...", "SHORTCUT_INSTALLING": "Bruhstalling %s...", "SIZE": "Bruhize", + "SKIP": "Skip", "SORT_BY": "Bort By", "SORTING": "Sorting", "START_SELECT": "Bress START to bruhlect the currbruhnt foldbruh", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "This UniStore is inbruhlid and bruhnot be\nbroded with Universal-Updater.\nMaybe there are Bruhtax bruhrors?", "UNISTORE_TOO_NEW": "Your bruhsion of Universal-Updater is \ntoo grandpa to use this UniStore.\nPlease bruhptdate to the latest version of Universal-Updater.", "UNISTORE_TOO_OLD": "This UniStore is grandpa... Which means it cannot be used\nwith this version of Universal-Updater.\nPlease ask the bruhtor to update it.", - "UPDATE_AVAILABLE": "Bruhpdate Available!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Bruhpdate available: %s", "UPDATE_DONE": "Bruhpdate done! Please re-bruh Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Loading Bruhsheet...", "UPDATING_SPRITE_SHEET2": "Bruhing Bruhsheet %i of %i...", "UPDATING_UNISTORE": "Bruhpdating UniStore...", diff --git a/romfs/lang/cs/app.json b/romfs/lang/cs/app.json index 7fb09f04c..d54d54be7 100644 --- a/romfs/lang/cs/app.json +++ b/romfs/lang/cs/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Extracting %s...", "SHORTCUT_INSTALLING": "Installing %s...", "SIZE": "Velikost", + "SKIP": "Skip", "SORT_BY": "Řadit podle", "SORTING": "Řazení", "START_SELECT": "Stiskněte START pro vybrání aktuální složky", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "This UniStore is invalid and cannot be\nloaded with Universal-Updater.\nMaybe check if there are any Syntax errors?", "UNISTORE_TOO_NEW": "Your version of Universal-Updater is\ntoo old to use this UniStore.\nPlease update to the latest version.", "UNISTORE_TOO_OLD": "This UniStore is outdated and cannot be used\nwith this version of Universal-Updater.\nPlease ask the creator to update it.", - "UPDATE_AVAILABLE": "Update Available!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Update available: %s", "UPDATE_DONE": "Update done! Please re-open Universal-Updater.", - "UPDATE_OR_CANCEL": "Press \uE000, START or touch screen to update.\nPress \uE001 to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Updating Spritesheet...", "UPDATING_SPRITE_SHEET2": "Updating Spritesheet %i of %i...", "UPDATING_UNISTORE": "Updating UniStore...", diff --git a/romfs/lang/da/app.json b/romfs/lang/da/app.json index 522bbb5a4..a0b2898e4 100644 --- a/romfs/lang/da/app.json +++ b/romfs/lang/da/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Udpakker %s...", "SHORTCUT_INSTALLING": "Installerer %s...", "SIZE": "Størrelse", + "SKIP": "Skip", "SORT_BY": "Sortér Efter", "SORTING": "Sprteromg", "START_SELECT": "Tryk på START for at vælge den aktuelle mappe", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Denne UniStore er ugyldig og kan ikke\nindlæses med Universal-Updater.\nMåske tjek om der er nogen Syntaksfejl?", "UNISTORE_TOO_NEW": "Din version af Universal-Updater er\nfor gammel til at bruge denne UniStore.\nOpdater venligst til den nyeste version.", "UNISTORE_TOO_OLD": "Denne UniStore er forældet og kan ikke bruges\nmed denne version af Universal-Updater.\nBed venligst ophavsmanden om at opdatere den.", - "UPDATE_AVAILABLE": "Opdater tilgængelige", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Opdater tilgængelige: %s", "UPDATE_DONE": "Opdatering færdig! Genåbn venligst Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Opdaterer Spritesheet...", "UPDATING_SPRITE_SHEET2": "Indlæser Spritesheet %i af %i...", "UPDATING_UNISTORE": "Opdaterer UniStore...", diff --git a/romfs/lang/de/app.json b/romfs/lang/de/app.json index 7285b6552..337c42542 100644 --- a/romfs/lang/de/app.json +++ b/romfs/lang/de/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%s wird extrahiert...", "SHORTCUT_INSTALLING": "%s wird installiert...", "SIZE": "Größe", + "SKIP": "Skip", "SORT_BY": "Sortieren nach", "SORTING": "Sortierung", "START_SELECT": "Drücke START, um den aktuellen Ordner auszuwählen", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Dieser UniStore ist ungültig und kann nicht\nmit Universal-Updater geladen werden.\nMöglicherweise liegt ein Syntaxfehler vor?", "UNISTORE_TOO_NEW": "Die Version von Universal-Updater ist\nzu alt, um diesen UniStore zu verwenden.\nBitte aktualisiere auf die neueste Version.", "UNISTORE_TOO_OLD": "Der UniStore ist veraltet und kann nicht mit dieser\nVersion von Universal-Updater verwendet werden.\nKontaktiere die Verantwortlichen für ein Update.", - "UPDATE_AVAILABLE": "Update verfügbar!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Update verfügbar: %s", "UPDATE_DONE": "Update abgeschlossen! Bitte starte Universal-Updater neu.", - "UPDATE_OR_CANCEL": "Drücke , START oder berühre den\nTouchscreen zum Aktualisieren.\nDrücke  zum Überspringen.", + "UPDATE_OR_CANCEL": "Drücke  zum Aktualisieren,  zum Überspringen.", "UPDATING_SPRITE_SHEET": "Spritesheet wird aktualisiert...", "UPDATING_SPRITE_SHEET2": "Spritesheet %i von %i wird aktualisiert...", "UPDATING_UNISTORE": "UniStore wird aktualisiert...", diff --git a/romfs/lang/en/app.json b/romfs/lang/en/app.json index 0d60a1430..70f54f97f 100644 --- a/romfs/lang/en/app.json +++ b/romfs/lang/en/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Extracting %s...", "SHORTCUT_INSTALLING": "Installing %s...", "SIZE": "Size", + "SKIP": "Skip", "SORT_BY": "Sort By", "SORTING": "Sorting", "START_SELECT": "Press START to select the current folder", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "This UniStore is invalid and cannot be\nloaded with Universal-Updater.\nMaybe check if there are any Syntax errors?", "UNISTORE_TOO_NEW": "Your version of Universal-Updater is\ntoo old to use this UniStore.\nPlease update to the latest version.", "UNISTORE_TOO_OLD": "This UniStore is outdated and cannot be used\nwith this version of Universal-Updater.\nPlease ask the creator to update it.", - "UPDATE_AVAILABLE": "Update Available!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Update available: %s", "UPDATE_DONE": "Update done! Please re-open Universal-Updater.", - "UPDATE_OR_CANCEL": "Press \uE000, START or touch screen to update.\nPress \uE001 to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Updating Spritesheet...", "UPDATING_SPRITE_SHEET2": "Updating Spritesheet %i of %i...", "UPDATING_UNISTORE": "Updating UniStore...", diff --git a/romfs/lang/es/app.json b/romfs/lang/es/app.json index ac45ed3a4..700dec77b 100644 --- a/romfs/lang/es/app.json +++ b/romfs/lang/es/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Extrayendo %s...", "SHORTCUT_INSTALLING": "Instalando %s...", "SIZE": "Tamaño", + "SKIP": "Skip", "SORT_BY": "Ordenar por", "SORTING": "Ordenando", "START_SELECT": "Presione START para seleccionar la carpeta actual", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Esta UniStore no es válida y no puede cargarse\ncon Universal-Updater.\n¿Quizás verifique si hay algún error de sintaxis?", "UNISTORE_TOO_NEW": "Su versión de Universal-Updater es\ndemasiado antigua para usar esta UniStore.\nPor favor, actualice a la última versión.", "UNISTORE_TOO_OLD": "Esta UniStore está desactualizada y no se puede utilizar\ncon esta versión de Universal-Updater.\nPor favor, solicite al creador que la actualice.", - "UPDATE_AVAILABLE": "¡Actualización disponible!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Actualización disponible: %s", "UPDATE_DONE": "¡Actualización completada! Por favor, vuelva a abrir Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Actualizando Spritesheet...", "UPDATING_SPRITE_SHEET2": "Actualizando Spritesheet %i de %i...", "UPDATING_UNISTORE": "Actualizando UniStore...", diff --git a/romfs/lang/fr/app.json b/romfs/lang/fr/app.json index 3391e5375..690ef3095 100644 --- a/romfs/lang/fr/app.json +++ b/romfs/lang/fr/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Extraction de %s…", "SHORTCUT_INSTALLING": "Installation de %s…", "SIZE": "Taille ", + "SKIP": "Skip", "SORT_BY": "Trier par", "SORTING": "Tri", "START_SELECT": "Appuyez sur START pour sélectionner le dossier actuel", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Cet UniStore est invalide et ne peut pas\nêtre chargé avec Universal-Updater.\nPeut-être vérifier s'il y a des erreurs de syntaxe ?", "UNISTORE_TOO_NEW": "Votre version de Universal-Updater est\ntrop ancienne pour utiliser cet UniStore.\nVeuillez mettre à jour vers la dernière version.", "UNISTORE_TOO_OLD": "Cet UniStore est obsolète et ne peut être utilisé\navec cette version de Universal-Updater.\nVeuillez demander au créateur de le mettre à jour.", - "UPDATE_AVAILABLE": "Mise à jour disponible !", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Mise à jour disponible : %s", "UPDATE_DONE": "La mise à jour est terminée ! Veuillez rouvrir Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Mise à jour de la grille de sprites…", "UPDATING_SPRITE_SHEET2": "Mise à jour des sprites : %i/%i…", "UPDATING_UNISTORE": "Mise à jour de l'UniStore…", diff --git a/romfs/lang/hu/app.json b/romfs/lang/hu/app.json index 2d810c077..971083293 100644 --- a/romfs/lang/hu/app.json +++ b/romfs/lang/hu/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%s kicsomagolása...", "SHORTCUT_INSTALLING": "%s telepítése...", "SIZE": "Méret", + "SKIP": "Skip", "SORT_BY": "Rendezés eszerint", "SORTING": "Rendezés", "START_SELECT": "Nyomjon START-t az aktuális mappa kiválasztásához", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Ez az UniStore érvénytelen és nem \nbetölthető az Universal-Updater-rel. \nEgy ellenőrzés szintaktikai hibákra?", "UNISTORE_TOO_NEW": "Ez az Universal-Updater \nnagyon régi ehhez az UniStore-hoz.\nKérjük frissítsen a legutóbbira.", "UNISTORE_TOO_OLD": "Az UniStore régi és nem használható Universal-Updater ezen verziójával.\nKérje meg a készítőját, hogy frissítse.", - "UPDATE_AVAILABLE": "Frissítés elérhető!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Frissítés elérhető: %s", "UPDATE_DONE": "Frissítés kész! Kérjük, nyissa meg újra az Universal-Updater-t.", - "UPDATE_OR_CANCEL": "Nyomj , START gombot vagy érintsd meg a képernyőt a frissításhez.\nNyomj  gombot az átugráshoz.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "A spritelap frissítése...", "UPDATING_SPRITE_SHEET2": "A spritelap frissítése %i/%i...", "UPDATING_UNISTORE": "UniStore frissítése...", diff --git a/romfs/lang/it/app.json b/romfs/lang/it/app.json index 71aa9bb34..08f3fd7fb 100644 --- a/romfs/lang/it/app.json +++ b/romfs/lang/it/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Estrazione di %s in corso...", "SHORTCUT_INSTALLING": "Installazione di %s in corso...", "SIZE": "Dimensione", + "SKIP": "Skip", "SORT_BY": "Ordina Per", "SORTING": "Ordinamento", "START_SELECT": "Premere START per selezionare la cartella corrente", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Questo UniStore non è valido e non può essere caricato\ncon Universal-Updater.\nMagari controllare se ci sono errori di sintassi?", "UNISTORE_TOO_NEW": "La tua versione di Universal-Updater è\ntroppo vecchia per usare questo UniStore.\nSi prega di aggiornare all'ultima versione.", "UNISTORE_TOO_OLD": "Questo UniStore è obsoleto e non può essere utilizzato\ncon questa versione di Universal-Updater.\nChiedi al creatore di aggiornarlo.", - "UPDATE_AVAILABLE": "Aggiornamento Disponibile!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Aggiornamento disponibile: %s", "UPDATE_DONE": "Aggiornamento completato! Riapri Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Aggiornamento dello Spritesheet...", "UPDATING_SPRITE_SHEET2": "Aggiornamento dello Spritesheet %i di %i...", "UPDATING_UNISTORE": "Aggiornamento dell'UniStore...", diff --git a/romfs/lang/jp/app.json b/romfs/lang/jp/app.json index 3c8a4598b..f6c0f4bf1 100644 --- a/romfs/lang/jp/app.json +++ b/romfs/lang/jp/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%sを解凍中……", "SHORTCUT_INSTALLING": "%sをインストール中……", "SIZE": "サイズ", + "SKIP": "Skip", "SORT_BY": "並べ替え順", "SORTING": "並べ替え", "START_SELECT": "STARTを押して、現在のフォルダを選択します", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "このUniStoreは無効であり、\nUniversal-Updaterで読み込めません。\n構文エラーがないか確認しますか?", "UNISTORE_TOO_NEW": "Universal-Updaterのバージョンはこの\nUniStoreを使用するには古すぎます。\n最新のバージョンに更新してください。", "UNISTORE_TOO_OLD": "このUniStoreは古く、このバージョンの\nUniversal-Updaterでは使用できません。\n作成者に更新しますを依頼してください。", - "UPDATE_AVAILABLE": "更新があります!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "更新があります: %s", "UPDATE_DONE": "更新が完了しました!Universal-Updaterを再度開いてください。", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "スプライトシートを更新しています……", "UPDATING_SPRITE_SHEET2": "スプライトシート%i/%iを更新しています……", "UPDATING_UNISTORE": "UniStoreを更新しています……", diff --git a/romfs/lang/ko/app.json b/romfs/lang/ko/app.json index 7a71e1ccb..d83d85f8d 100644 --- a/romfs/lang/ko/app.json +++ b/romfs/lang/ko/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%s 압축 해제 중...", "SHORTCUT_INSTALLING": "%s 설치 중...", "SIZE": "크기", + "SKIP": "Skip", "SORT_BY": "정렬 기준", "SORTING": "정렬", "START_SELECT": "현재 폴더를 선택하려면 START를 누르세요", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "이 UniStore는 유효하지 않으며\nUniversal-Updater로 불러올 수 없습니다.\n구문 오류가 있는지 확인하세요.", "UNISTORE_TOO_NEW": "사용 중인 Universal-Updater의 버전이\n너무 오래되어 이 UniStore를 사용할 수 없습니다.\n최신 버전으로 업데이트하세요.", "UNISTORE_TOO_OLD": "이 UniStore는 오래되어 이 버전의\nUniversal-Updater에서는 사용할 수 없습니다.\n제작자에게 업데이트를 요청하세요.", - "UPDATE_AVAILABLE": "업데이트 사용 가능!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "업데이트 사용 가능: %s", "UPDATE_DONE": "업데이트를 완료했습니다! Universal-Updater를 다시 시작하세요.", - "UPDATE_OR_CANCEL": ", 시작을 누르거나 화면을 터치하여 업데이트합니다.\n건너뛰려면  을 누르세요.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "스프라이트시트 업데이트 중...", "UPDATING_SPRITE_SHEET2": "스프라이트시트 업데이트 중... (%i / %i)", "UPDATING_UNISTORE": "UniStore 업데이트 중...", diff --git a/romfs/lang/lt/app.json b/romfs/lang/lt/app.json index a587e2645..b670382bd 100644 --- a/romfs/lang/lt/app.json +++ b/romfs/lang/lt/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Išpakuojama %s...", "SHORTCUT_INSTALLING": "Įdiegiama %s...", "SIZE": "Dydis", + "SKIP": "Skip", "SORT_BY": "Rikiuoti pagal", "SORTING": "Rikiavimas", "START_SELECT": "Spauskite START kad pasirinktumėte dabartinį katalogą", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Ši „UniStore“ neveikia ir negali būti naudojama su Universal-Updater. Patikrinkite, gal yra sintaksės klaidų?", "UNISTORE_TOO_NEW": "Jūsų Universal-Updater versija yra\nper sena naudoti šį „UniStore“.\nAtsinaujinkite į naujausią versiją.", "UNISTORE_TOO_OLD": "Ši „UniStore“ yra pasenusi ir negali būti naudojama su šia Universal-Updater versija. Paprašykite kūrėjo, kad ją atnaujintų.", - "UPDATE_AVAILABLE": "Yra Atnaujinimų!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Yra Atnaujinimų: %s", "UPDATE_DONE": "Atnaujinimai baigti, prašome iš naujo atidaryti Universal-Updater.", - "UPDATE_OR_CANCEL": "Paspauskite , START arba liečiamą ekraną kad atnaujintumėte.\nPaspauskite , jei norite praleisti.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Atnaujinamas „SpriteSheet“...", "UPDATING_SPRITE_SHEET2": "Atnaujinamas „Spritesheet“ %i iš %i...", "UPDATING_UNISTORE": "Atnaujinama „UniStore“", diff --git a/romfs/lang/nl/app.json b/romfs/lang/nl/app.json index df5f1163c..adbbfbc96 100644 --- a/romfs/lang/nl/app.json +++ b/romfs/lang/nl/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%s uitpakken...", "SHORTCUT_INSTALLING": "%s installeren...", "SIZE": "Grootte", + "SKIP": "Skip", "SORT_BY": "Sorteren Op", "SORTING": "Sorteren", "START_SELECT": "Druk op START om de huidige map te selecteren", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Deze UniStore is ongeldig en kan niet\ngeladen worden met Universal-Updater.\nMisschien controleren of er Syntax fouten zijn?", "UNISTORE_TOO_NEW": "Uw versie van de Universal-Updater is\nte oud om deze UniStore te gebruiken.\nUpdate alsjeblieft naar de nieuwste versie.", "UNISTORE_TOO_OLD": "Deze UniStore is verouderd en kan niet gebruikt worden\nmet deze versie van Universal-Updater.\nVraag de maker om het te updaten.", - "UPDATE_AVAILABLE": "Update Beschikbaar!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Update Beschikbaar: %s", "UPDATE_DONE": "Update klaar! Graag Universal-Updater opnieuw openen.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Spritesheet bijwerken...", "UPDATING_SPRITE_SHEET2": "Bijwerken Spritesheet %i van %i...", "UPDATING_UNISTORE": "UniStore bijwerken...", diff --git a/romfs/lang/no/app.json b/romfs/lang/no/app.json index 8bd051e74..29d29db6a 100644 --- a/romfs/lang/no/app.json +++ b/romfs/lang/no/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Pakker ut %s...", "SHORTCUT_INSTALLING": "Installerer %s...", "SIZE": "Størrelse", + "SKIP": "Skip", "SORT_BY": "Sorter etter", "SORTING": "Sortering", "START_SELECT": "Trykk START for å velge gjeldende mappe", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Denne UniStore er ugyldig og kan ikke\nlastes med Universal-Updater.\nKanskje sjekke om det er noen syntaksfeil?", "UNISTORE_TOO_NEW": "Versjonen din av Universal-Updater er\nfor gammel til å bruke denne UniStore.\nVennligst oppdater til den nyeste versjonen.", "UNISTORE_TOO_OLD": "Denne UniStore er utdatert og kan ikke brukes\nmed denne versjonen av Universal-Updater.\nVennligst be skaperen om å oppdatere den.", - "UPDATE_AVAILABLE": "Oppdatering tilgjengelig!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Oppdatering tilgjengelig: %s", "UPDATE_DONE": "Oppdatering fullført! Vennligst åpne Universal-Updater på nytt.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Oppdaterer Spritesheet...", "UPDATING_SPRITE_SHEET2": "Oppdaterer Spritesheet %i av %i...", "UPDATING_UNISTORE": "Oppdaterer UniStore...", diff --git a/romfs/lang/pl/app.json b/romfs/lang/pl/app.json index 4faff2cd2..19d978257 100644 --- a/romfs/lang/pl/app.json +++ b/romfs/lang/pl/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Rozpakowywanie %s...", "SHORTCUT_INSTALLING": "Instalowanie %s...", "SIZE": "Rozmiar", + "SKIP": "Skip", "SORT_BY": "Sortuj według", "SORTING": "Sortowanie", "START_SELECT": "Naciśnij przycisk START, aby wybrać bieżący folder", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Ten UniStore jest nieprawidłowy i nie może zostać\nzaładowany z Universal-Updater.\nMoże sprawdź czy są jakieś błędy składni?", "UNISTORE_TOO_NEW": "Twoja wersja Universal-Updater jest\nzbyt stara aby używać tego UniStore.\nProszę zaktualizować do najnowszej wersji.", "UNISTORE_TOO_OLD": "Ten UniStore jest nieaktualny i nie może być użyty\nw tej wersji Universal-Updater.\nPoproś twórcę o jego aktualizację.", - "UPDATE_AVAILABLE": "Dostępna aktualizacja!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Dostępna aktualizacja: %s", "UPDATE_DONE": "Aktualizacja zakończona! Proszę ponownie otworzyć Universal-Updater.", - "UPDATE_OR_CANCEL": "Naciśnij , START lub ekran dotykowy, aby zaktualizować.\nNaciśnij , aby pominąć.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Aktualizowanie tekstur...", "UPDATING_SPRITE_SHEET2": "Aktualizowanie tekstury %i z %i...", "UPDATING_UNISTORE": "Aktualizowanie UniStore...", diff --git a/romfs/lang/pt-BR/app.json b/romfs/lang/pt-BR/app.json index 29d9cadbe..7215969b9 100644 --- a/romfs/lang/pt-BR/app.json +++ b/romfs/lang/pt-BR/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Extraindo %s...", "SHORTCUT_INSTALLING": "Instalando %s...", "SIZE": "Tamanho", + "SKIP": "Skip", "SORT_BY": "Classificar por", "SORTING": "Ordem e Classificação", "START_SELECT": "Pressione START para selecionar a pasta atual", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Esta UniStore não pôde ser carregada por ser\nconsiderada invalida. Se você é um desenvolvedor, \ncertifique-se que não há erros de sintaxe.", "UNISTORE_TOO_NEW": "Esta UniStore é incompatível com a\nversão atual de Universal-Updater.\nPor favor, atualize para a versão mais recente.", "UNISTORE_TOO_OLD": "Esta UniStore está obsoleta, e não é compatível \ncom esta versão de Universal-Updater.\nPeça ao criador desta UniStore para atualizar-la.", - "UPDATE_AVAILABLE": "Atualização disponível!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Atualização disponível: %s", "UPDATE_DONE": "Atualização concluida! Por favor, reinicie Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Atualizando spritesheet...", "UPDATING_SPRITE_SHEET2": "Atualizando spritesheet %i de %i...", "UPDATING_UNISTORE": "Atualizando a UniStore...", diff --git a/romfs/lang/pt/app.json b/romfs/lang/pt/app.json index 36880e5e5..ce92b01b2 100644 --- a/romfs/lang/pt/app.json +++ b/romfs/lang/pt/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "A extrair %s...", "SHORTCUT_INSTALLING": "A instalar %s...", "SIZE": "Tamanho", + "SKIP": "Skip", "SORT_BY": "Ordenar por", "SORTING": "Ordenação", "START_SELECT": "Prime START para selecionar a pasta atual", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Esta UniStore é inválida e não pode ser\ncarregada com o Universal-Updater.\nTalvez deverias verificar se existem alguns erros de sintaxe?", "UNISTORE_TOO_NEW": "A tua versão do Universal-Updater é\ndemasiado velha para usar esta UniStore.\nPor favor, atualiza para a versão mais recente.", "UNISTORE_TOO_OLD": "Esta UniStore está desatualizada e não pode ser utilizada\ncom esta versão do Universal-Updater.\nPor favor, pede ao criador para atualizá-la.", - "UPDATE_AVAILABLE": "Atualização disponível!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Atualização disponível: %s", "UPDATE_DONE": "Atualização concluída! Por favor, abre novamente o Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "A atualizar ficha de sprites...", "UPDATING_SPRITE_SHEET2": "A atualizar ficha de sprites %i de %i...", "UPDATING_UNISTORE": "A atualizar UniStore...", diff --git a/romfs/lang/ro/app.json b/romfs/lang/ro/app.json index 7035e7d53..429e9d91c 100644 --- a/romfs/lang/ro/app.json +++ b/romfs/lang/ro/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Se extrage %s...", "SHORTCUT_INSTALLING": "Se instalează %s...", "SIZE": "Mărime", + "SKIP": "Skip", "SORT_BY": "Sortați după", "SORTING": "Sortare", "START_SELECT": "Apăsați START pentru a selecta dosarul curent", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Acest UniStore este invalid şi nu poate fi rulat cu Universal-Updater. \nPoate verificați pentru erori de sintaxă?", "UNISTORE_TOO_NEW": "Versiunea voastră de Universal-Updater este prea veche pentru a folosi acest UniStore.\nVă rugăm actualizați la ultima versiune.", "UNISTORE_TOO_OLD": "Acest UniStore este învechit şi nu poate fi folosit cu această versiune a Universal-Updater. \nVă rugăm întrebați creatorul să o actualizeze.", - "UPDATE_AVAILABLE": "Actualizare Disponibilă!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Actualizare Disponibilă: %s", "UPDATE_DONE": "Actualizare terminată! Vă rugăm să redeschideți Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Se actualizează Spritesheet...", "UPDATING_SPRITE_SHEET2": "Se actualizează Spritesheet %i din %i...", "UPDATING_UNISTORE": "Se actualizează UniStore...", diff --git a/romfs/lang/ru/app.json b/romfs/lang/ru/app.json index 627463458..3c38dd0b3 100644 --- a/romfs/lang/ru/app.json +++ b/romfs/lang/ru/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Извлечение %s...", "SHORTCUT_INSTALLING": "Установка %s...", "SIZE": "Размер", + "SKIP": "Skip", "SORT_BY": "Сортировка по", "SORTING": "Сортировка", "START_SELECT": "Нажмите Start для выбора текущей папки", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "UniStore некорректен и не может быть загружен Universal-Updater.\nМожет быть стоить проверить синтаксические ошибки?", "UNISTORE_TOO_NEW": "Ваша версия Universal-Updater \nслишком старая для использования этого UniStore.\nПожалуйста, обновитесь до последней версии.", "UNISTORE_TOO_OLD": "Этот UniStore устарел и не может быть использован\nс этой версией Universal-Updater.\nПожалуйста, попросите автора обновить его.", - "UPDATE_AVAILABLE": "Доступны обновление!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Доступны обновление: %s", "UPDATE_DONE": "Обновление завершено! Перезапустите Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Загрузка таблицы спрайтов...", "UPDATING_SPRITE_SHEET2": "Загрузка таблицы спрайтов %i из %i...", "UPDATING_UNISTORE": "Обновление UniStore...", diff --git a/romfs/lang/ry/app.json b/romfs/lang/ry/app.json index 1fe4e1c3a..e35482457 100644 --- a/romfs/lang/ry/app.json +++ b/romfs/lang/ry/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "%s解凍中……", "SHORTCUT_INSTALLING": "%sインストール中……", "SIZE": "サイズ", + "SKIP": "Skip", "SORT_BY": "並べいけーい順", "SORTING": "並べい替い", "START_SELECT": "STARTを押して、現在のフォルダを選択します", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "くぬUniStoreー無効やい、\nUniversal-Updaterっし読み込みやびらん。\n構文エラーぬねーんが確認さびーが?", "UNISTORE_TOO_NEW": "Universal-Updaterぬバージョノーくぬ\nUniStore使用すんがー古しじやびーん。\n最新ぬバージョンんかい更新しくぃみそーれー。", "UNISTORE_TOO_OLD": "くぬUniStoreー古く、くぬバージョンぬ\nUniversal-Updaterっしぇー使用なやびらん。\n作成者んかい更新たぬでぃくぃみそーれー。", - "UPDATE_AVAILABLE": "更新ぬあいびーん!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "更新ぬあいびーん: %s", "UPDATE_DONE": "更新ぬしーうわやびたん!Universal-Updater再度ふぃらちくぃみそーれー。", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "スプライトシート更新そーいびーん……", "UPDATING_SPRITE_SHEET2": "スプライトシート%i/%i更新そーいびーん……", "UPDATING_UNISTORE": "UniStore更新そーいびーん……", diff --git a/romfs/lang/tr/app.json b/romfs/lang/tr/app.json index 301732545..62e9cf531 100644 --- a/romfs/lang/tr/app.json +++ b/romfs/lang/tr/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Ayıklanıyor %s...", "SHORTCUT_INSTALLING": "Kuruluyor %s...", "SIZE": "Boyut", + "SKIP": "Skip", "SORT_BY": "Şuna Göre Sırala", "SORTING": "Sıralama", "START_SELECT": "Geçerli klasörü seçmek için STARTA'a bas", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Bu UniStore geçersiz ve Universal-Updater\nile yüklenemez.\nBelki sözdizimi hatası vardır, bir kontrol etsen?", "UNISTORE_TOO_NEW": "Universal-Updater sürümün bu UniStore'u\nkullanmak için çok eski.\nLütfen son sürüme güncelleyin.", "UNISTORE_TOO_OLD": "UniStore eski ve Universal-Updater\nbu sürümüyle bunu kullanılamaz.\nKreatörden güncellemesini isteyin.", - "UPDATE_AVAILABLE": "Güncelleme Mevcut!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Güncelleme Mevcut: %s", "UPDATE_DONE": "Güncelleme tamamdır! Universal-Updater'ı yeniden açın.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Model Tablosu Güncelleniyor...", "UPDATING_SPRITE_SHEET2": "%i / %i Model Tablosu Güncelleniyor...", "UPDATING_UNISTORE": "UniStore Güncelleniyor...", diff --git a/romfs/lang/uk/app.json b/romfs/lang/uk/app.json index 49d14698d..c5e7551a8 100644 --- a/romfs/lang/uk/app.json +++ b/romfs/lang/uk/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "Розпакування %s...", "SHORTCUT_INSTALLING": "Встановлення %s...", "SIZE": "Розмір", + "SKIP": "Skip", "SORT_BY": "Сортувати за", "SORTING": "Сортування", "START_SELECT": "Натисніть START для вибору поточної теки", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "Цей UniStore недійсний і не може бути\nзавантажений через Universal-Updater.\nМожливо, варто перевірити, чи є якісь синтаксичні помилки?", "UNISTORE_TOO_NEW": "Ваша версія Universal-Updater\nзанадто стара, щоб використовувати цей UniStore.\nБудь ласка, оновіться до останньої версії.", "UNISTORE_TOO_OLD": "Ця версія UniStore застаріла і не може використовуватися\nз поточною версією Universal-Updater.\nБудь ласка, попросіть автора оновити його.", - "UPDATE_AVAILABLE": "Доступне оновлення!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "Доступне оновлення: %s", "UPDATE_DONE": "Оновлення завершено! Будь ласка, перевідкрийте Universal-Updater.", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "Оновлення таблиці спрайтів...", "UPDATING_SPRITE_SHEET2": "Оновлення таблиці спрайтів %i із %i...", "UPDATING_UNISTORE": "Оновлення UniStore...", diff --git a/romfs/lang/zh-CN/app.json b/romfs/lang/zh-CN/app.json index c90f0714a..5d08eb309 100644 --- a/romfs/lang/zh-CN/app.json +++ b/romfs/lang/zh-CN/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "正在提取 %s...", "SHORTCUT_INSTALLING": "正在安装 %s...", "SIZE": "大小", + "SKIP": "Skip", "SORT_BY": "排序方式", "SORTING": "排序", "START_SELECT": "点击START按钮选择当前文件夹", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "该 UniStore 无效,\nUniversal-Updater 无法加载。\n请检查是否存在语法错误?", "UNISTORE_TOO_NEW": "您的 Universal-Updater 版本过低,\n无法使用该 UniStore 。\n请更新到最新版本。", "UNISTORE_TOO_OLD": "该 UniStore 已过期,\n无法与当前版本的 Universal-Updater 配合使用。\n请向商店创建者请求更新。", - "UPDATE_AVAILABLE": "更新版本现已可用!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "更新版本现已可用: %s", "UPDATE_DONE": "更新完成 !请重新打开 Universal-Updater。", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "正在更新贴图集……", "UPDATING_SPRITE_SHEET2": "正在更新贴图集 %i / %i……", "UPDATING_UNISTORE": "正在更新 UniStore...", diff --git a/romfs/lang/zh-TW/app.json b/romfs/lang/zh-TW/app.json index 28b99a001..27fa74191 100644 --- a/romfs/lang/zh-TW/app.json +++ b/romfs/lang/zh-TW/app.json @@ -133,6 +133,7 @@ "SHORTCUT_EXTRACTING": "要提取%s...", "SHORTCUT_INSTALLING": "要安裝%s...", "SIZE": "容量", + "SKIP": "Skip", "SORT_BY": "排序依據", "SORTING": "分類中", "START_SELECT": "按 START 選擇當前資料夾", @@ -145,9 +146,10 @@ "UNISTORE_INVALID_ERROR": "該 UniStore 無效,\n無法由 Universal-Updater 載入。\n請檢查是否存在句法錯誤?", "UNISTORE_TOO_NEW": "您的 Universal-Updater 版本過舊,\n無法使用該 UniStore。\n請升級至最新版本。", "UNISTORE_TOO_OLD": "該 UniStore 已過期,\n無法與當前版本的 Universal-Updater 配合使用。\n請詢問創建者以進行升級。", - "UPDATE_AVAILABLE": "更新可用!", + "UPDATE": "Update", + "UPDATE_AVAILABLE": "更新可用: %s", "UPDATE_DONE": "更新完成!請重啓 Universal-Updater。", - "UPDATE_OR_CANCEL": "Press , START or touch screen to update.\nPress  to skip.", + "UPDATE_OR_CANCEL": "Press  to update,  to skip.", "UPDATING_SPRITE_SHEET": "正在更新精靈表...", "UPDATING_SPRITE_SHEET2": "正在更新精靈表 %i 之 %i...", "UPDATING_UNISTORE": "正在更新 UniStore...", diff --git a/source/init.cpp b/source/init.cpp index 24a9b9111..d404dff28 100644 --- a/source/init.cpp +++ b/source/init.cpp @@ -186,6 +186,7 @@ Result Init::MainLoop() { while (aptMainLoop() && !fullExit) { hidScanInput(); hHeld = hidKeysHeld(); + hUp = hidKeysUp(); hDown = hidKeysDown(); hRepeat = hidKeysDownRepeat(); hidTouchRead(&touch); diff --git a/source/menu/releaseNotes.cpp b/source/menu/releaseNotes.cpp index da13601cf..b358da3a3 100644 --- a/source/menu/releaseNotes.cpp +++ b/source/menu/releaseNotes.cpp @@ -30,6 +30,9 @@ #include "storeUtils.hpp" std::vector wrappedNotes; +touchPosition touches[2]; //Stores last two touch positions +static const Structs::ButtonPos back = { 4, 0, 24, 24 }; +extern bool touching(touchPosition touch, Structs::ButtonPos button); size_t StoreUtils::FindSplitPoint(const std::string &str, const std::vector splitters) { for (const std::string &splitter : splitters) { @@ -54,7 +57,7 @@ void StoreUtils::ProcessReleaseNotes(std::string releaseNotes) { /* If too long to fit on screen, wrap at spaces, slashes, periods, etc. */ size_t spacePos; - while (width > 390.0f && (spacePos = FindSplitPoint(substr.substr(0, splitPos - 1), {" ", "/", ".", "-", "_", "。", "、", ","})) != std::string::npos) { + while (width > 310.0f && (spacePos = FindSplitPoint(substr.substr(0, splitPos - 1), {" ", "/", ".", "-", "_", "。", "、", ","})) != std::string::npos) { splitPos = spacePos; if (substr[splitPos] != ' ') splitPos++; @@ -75,105 +78,89 @@ void StoreUtils::ProcessReleaseNotes(std::string releaseNotes) { } while (splitPos != std::string::npos); } -void StoreUtils::DrawReleaseNotes(const int &scrollIndex, const std::unique_ptr &entry) { - if (entry && StoreUtils::store) { - Gui::ScreenDraw(Top); - Gui::Draw_Rect(0, 26, 400, 214, UIThemes->BGColor()); +void StoreUtils::DrawReleaseNotes(const int &scrollOffset, const std::string &title) { + if (title != "" && StoreUtils::store) { + Gui::ScreenDraw(Bottom); + Gui::Draw_Rect(0, 26, 320, 214, UIThemes->BGColor()); float fontHeight = Gui::GetStringHeight(0.5f, "", font); - for (size_t i = 0; (scrollIndex + i) < wrappedNotes.size() && i < (240.0f - 25.0f) / fontHeight; i++) { - Gui::DrawString(5, 25 + i * fontHeight, 0.5f, UIThemes->TextColor(), wrappedNotes[scrollIndex + i], 390, 0, font); + for (size_t i = 0; i < wrappedNotes.size(); i++) { + if (25 + i * fontHeight > scrollOffset && 25 + i * fontHeight < scrollOffset + 240.0f) + Gui::DrawString(5, 25 + i * fontHeight - scrollOffset, 0.5f, UIThemes->TextColor(), wrappedNotes[i], 310, 0, font); } - Gui::Draw_Rect(0, 0, 400, 25, UIThemes->BarColor()); - Gui::Draw_Rect(0, 25, 400, 1, UIThemes->BarOutline()); - Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), entry->GetTitle(), 390, 0, font); + Gui::Draw_Rect(0, 0, 320, 25, UIThemes->BarColor()); + Gui::Draw_Rect(0, 25, 320, 1, UIThemes->BarOutline()); + Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), title, 310, 0, font); + + GFX::DrawIcon(sprites_arrow_idx, back.x, back.y, UIThemes->TextColor()); - } else { Gui::ScreenDraw(Top); - Gui::Draw_Rect(0, 0, 400, 25, UIThemes->BarColor()); - Gui::Draw_Rect(0, 25, 400, 1, UIThemes->BarOutline()); - Gui::Draw_Rect(0, 26, 400, 214, UIThemes->BGColor()); - } + Gui::Draw_Rect(0, 0, 400, 240, DIM_COLOR); // Darken. + } Animation::QueueEntryDone(); } /* As the name says: Release notes logic. - int &scrollIndex: The scroll index for the Release Notes text. + int &scrollOffset: The scroll offset for the Release Notes text. + int &scrollDelta: The scroll delta for the Release Notes text. int &storeMode: The store mode to properly return back. */ -void StoreUtils::ReleaseNotesLogic(int &scrollIndex, int &storeMode) { +void StoreUtils::ReleaseNotesLogic(int &scrollOffset, int &scrollDelta, int &storeMode) { int linesPerScreen = ((240.0f - 25.0f) / Gui::GetStringHeight(0.5f, "", font)); - - if (hRepeat & KEY_DOWN) scrollIndex++; - if (hRepeat & KEY_UP) scrollIndex--; - if (hRepeat & KEY_RIGHT) scrollIndex += linesPerScreen; - if (hRepeat & KEY_LEFT) scrollIndex -= linesPerScreen; - - /* Ensure it doesn't scroll off screen. */ - if (scrollIndex < 0) scrollIndex = 0; - if (scrollIndex > (int)wrappedNotes.size() - linesPerScreen) - scrollIndex = std::max(0, (int)wrappedNotes.size() - linesPerScreen); - - if (hDown & KEY_B) { - scrollIndex = 0; - storeMode = 0; + scrollOffset += scrollDelta; + if (scrollDelta != 0) { + scrollDelta > 0 ? scrollDelta-- : scrollDelta++; } -} - - -/* - I place it temporarely here for now. - Display Release changelog for Universal-Updater. -*/ -void DisplayChangelog() { - if (config->changelog()) { - config->changelog(false); + if ((int)wrappedNotes.size() > linesPerScreen) { + //D-Pad + if (hHeld & KEY_DDOWN && scrollDelta < 10) scrollDelta += 2; + if (hHeld & KEY_DUP && scrollDelta > -10) scrollDelta -= 2; + if (hHeld & KEY_DRIGHT && scrollDelta < 20) scrollDelta += 5; + if (hHeld & KEY_DLEFT && scrollDelta > -20) scrollDelta -= 5; + + //Circle Pad + circlePosition circlePad; + hidCircleRead(std::addressof(circlePad)); + if (scrollDelta < 10 && scrollDelta > -10) scrollDelta -= circlePad.dy / 60; + + //Touch + if (hDown & KEY_TOUCH && touch.py > 25) { + touches[1] = touch; + scrollDelta = 0; + } + if (hHeld & KEY_TOUCH) { + if (touch.py > 25) { + scrollOffset -= touch.py - touches[1].py; + } + touches[0] = touches[1]; + touches[1] = touch; + } + if (hUp & KEY_TOUCH && touches[1].py > 25) { + scrollDelta = touches[0].py - touches[1].py; + } - bool confirmed = false; - const std::string notes = GetChangelog(); - if (notes == "") return; - int scrollIndex = 0; + } - while(!confirmed) { - Gui::clearTextBufs(); - C3D_FrameBegin(C3D_FRAME_SYNCDRAW); - C2D_TargetClear(Top, C2D_Color32(0, 0, 0, 0)); - C2D_TargetClear(Bottom, C2D_Color32(0, 0, 0, 0)); - - Gui::ScreenDraw(Top); - Gui::Draw_Rect(0, 26, 400, 214, UIThemes->BGColor()); - Gui::DrawString(5, 25 - scrollIndex, 0.5f, UIThemes->TextColor(), notes, 390, 0, font, C2D_WordWrap); - Gui::Draw_Rect(0, 0, 400, 25, UIThemes->BarColor()); - Gui::Draw_Rect(0, 25, 400, 1, UIThemes->BarOutline()); - Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), "Universal-Updater", 390, 0, font); - Gui::Draw_Rect(0, 215, 400, 25, UIThemes->BarColor()); - Gui::Draw_Rect(0, 214, 400, 1, UIThemes->BarOutline()); - Gui::DrawStringCentered(0, 217, 0.7f, UIThemes->TextColor(), C_V, 390, 0, font); - - GFX::DrawBottom(); - Gui::Draw_Rect(0, 0, 320, 25, UIThemes->BarColor()); - Gui::Draw_Rect(0, 25, 320, 1, UIThemes->BarOutline()); - C3D_FrameEnd(0); - - hidScanInput(); - touchPosition t; - touchRead(&t); - u32 repeat = hidKeysDownRepeat(); - u32 down = hidKeysDown(); - - /* Scroll Logic. */ - if (repeat & KEY_DOWN) scrollIndex += Gui::GetStringHeight(0.5f, "", font); - - if (repeat & KEY_UP) { - if (scrollIndex > 0) scrollIndex -= Gui::GetStringHeight(0.5f, "", font); - } + /* Ensure it doesn't scroll off screen. */ + if (scrollOffset < 0) { + scrollOffset = 0; + scrollDelta = 0; + } + int maxScroll = wrappedNotes.size() * Gui::GetStringHeight(0.5f, "", font) - (240.0f - 25.0f); + if (scrollOffset > maxScroll && ((int)wrappedNotes.size() > linesPerScreen)) { + scrollOffset = maxScroll; + scrollDelta = 0; + } - if ((down & KEY_A) || (down & KEY_B) || (down & KEY_START) || (down & KEY_TOUCH)) confirmed = true; - } + if (hDown & KEY_B || (hDown & KEY_TOUCH && touching(touch, back))) { + if (config->changelog()) config->changelog(false); + scrollOffset = 0; + scrollDelta = 0; + storeMode = 0; } } \ No newline at end of file diff --git a/source/screens/mainScreen.cpp b/source/screens/mainScreen.cpp index 311f437c1..93bc2732e 100644 --- a/source/screens/mainScreen.cpp +++ b/source/screens/mainScreen.cpp @@ -37,7 +37,6 @@ extern int fadeAlpha; extern UniStoreInfo GetInfo(const std::string &file, const std::string &fileName); extern void notConnectedMsg(); -extern void DisplayChangelog(); /* MainScreen Constructor. @@ -101,7 +100,13 @@ MainScreen::MainScreen() { StoreUtils::store = std::make_unique(_STORE_PATH + config->lastStore(), config->lastStore()); StoreUtils::ResetAll(); StoreUtils::SortEntries(false, SortType::LAST_UPDATED); - DisplayChangelog(); + + // Display Release changelog for Universal-Updater. + if (config->changelog()) { + if (GetChangelog() == "") return; + StoreUtils::ProcessReleaseNotes(GetChangelog()); + storeMode = 7; + } }; /* @@ -114,13 +119,6 @@ void MainScreen::Draw(void) const { return; } - if (this->storeMode == 7) { - /* Release Notes. */ - StoreUtils::DrawReleaseNotes(this->scrollIndex, StoreUtils::entries[StoreUtils::store->GetEntry()]); - GFX::DrawBottom(); - return; - } - Gui::ScreenDraw(Top); config->list() ? StoreUtils::DrawList() : StoreUtils::DrawGrid(); Gui::Draw_Rect(0, 0, 400, 25, UIThemes->BarColor()); @@ -170,6 +168,12 @@ void MainScreen::Draw(void) const { } StoreUtils::DrawSideMenu(this->storeMode); + if (this->storeMode == 7) { + /* Release Notes. */ + std::string title = config->changelog() ? std::string("Universal-Updater ") + C_V : StoreUtils::entries[StoreUtils::store->GetEntry()]->GetTitle(); + StoreUtils::DrawReleaseNotes(this->scrollOffset, title); + return; + } if (this->showMarks && StoreUtils::store && StoreUtils::store->GetValid()) StoreUtils::DisplayMarkBox(StoreUtils::entries[StoreUtils::store->GetEntry()]->GetMarks()); if (fadeAlpha > 0) Gui::Draw_Rect(0, 0, 320, 240, C2D_Color32(0, 0, 0, fadeAlpha)); } @@ -217,7 +221,7 @@ void MainScreen::Logic(u32 hDown, u32 hHeld, touchPosition touch) { /* Release Notes. */ if (this->storeMode == 7) { - StoreUtils::ReleaseNotesLogic(this->scrollIndex, this->storeMode); + StoreUtils::ReleaseNotesLogic(this->scrollOffset, this->scrollDelta, this->storeMode); return; } diff --git a/source/utils/download.cpp b/source/utils/download.cpp index 5fd360432..fe0d3e1bc 100644 --- a/source/utils/download.cpp +++ b/source/utils/download.cpp @@ -72,6 +72,15 @@ static bool writeError = false; #define FILE_ALLOC_SIZE 0x60000 CURL *CurlHandle = nullptr; +const std::vector promptButtons = { + {24, 94, 124, 48}, + {172, 94, 124, 48} +}; +const std::vector promptLabels = { + "SKIP", "UPDATE" +}; +extern bool touching(touchPosition touch, Structs::ButtonPos button); + static int curlProgress(CURL *hnd, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) @@ -890,7 +899,8 @@ void UpdateAction() { UUUpdate res = IsUUUpdateAvailable(); if (res.Available) { bool confirmed = false; - int scrollIndex = 0; + int scrollOffset = 0; + int scrollDelta = 0; while(!confirmed) { Gui::clearTextBufs(); @@ -900,37 +910,57 @@ void UpdateAction() { Gui::ScreenDraw(Top); Gui::Draw_Rect(0, 26, 400, 214, UIThemes->BGColor()); - Gui::DrawString(5, 25 - scrollIndex, 0.5f, UIThemes->TextColor(), res.Notes, 390, 0, font, C2D_WordWrap); + Gui::DrawString(5, 25 - scrollOffset, 0.5f, UIThemes->TextColor(), res.Notes, 390, 0, font, C2D_WordWrap); Gui::Draw_Rect(0, 0, 400, 25, UIThemes->BarColor()); Gui::Draw_Rect(0, 25, 400, 1, UIThemes->BarOutline()); Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), "Universal-Updater", 390, 0, font); Gui::Draw_Rect(0, 215, 400, 25, UIThemes->BarColor()); Gui::Draw_Rect(0, 214, 400, 1, UIThemes->BarOutline()); - Gui::DrawStringCentered(0, 217, 0.7f, UIThemes->TextColor(), res.Version, 390, 0, font); + char updMsg[150]; + snprintf(updMsg, sizeof(updMsg), Lang::get("UPDATE_AVAILABLE").c_str(), res.Version.c_str()); + Gui::DrawStringCentered(0, 217, 0.7f, UIThemes->TextColor(), updMsg, 390, 0, font); GFX::DrawBottom(); Gui::Draw_Rect(0, 0, 320, 25, UIThemes->BarColor()); Gui::Draw_Rect(0, 25, 320, 1, UIThemes->BarOutline()); - Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), Lang::get("UPDATE_AVAILABLE"), 310, 0, font); - Gui::DrawString(5, 30, 0.6f, UIThemes->TextColor(), Lang::get("UPDATE_OR_CANCEL"), 310, 0, font, C2D_WordWrap); + Gui::DrawStringCentered(0, 1, 0.7f, UIThemes->TextColor(), Lang::get("UPDATE_OR_CANCEL"), 310, 0, font); + + for(uint i = 0; i < promptButtons.size(); i++) { + Gui::Draw_Rect(promptButtons[i].x, promptButtons[i].y, promptButtons[i].w, promptButtons[i].h, UIThemes->BarColor()); + Gui::DrawStringCentered(promptButtons[i].x - 160 + promptButtons[i].w / 2, promptButtons[i].y + 15, 0.6f, UIThemes->TextColor(), Lang::get(promptLabels[i]), promptButtons[i].w - 10, 0, font); + } + C3D_FrameEnd(0); hidScanInput(); touchPosition t; touchRead(&t); - u32 repeat = hidKeysDownRepeat(); + u32 held = hidKeysHeld(); u32 down = hidKeysDown(); /* Scroll Logic. */ - if (repeat & KEY_DOWN) scrollIndex += Gui::GetStringHeight(0.5f, "", font); - - if (repeat & KEY_UP) { - if (scrollIndex > 0) scrollIndex -= Gui::GetStringHeight(0.5f, "", font); + scrollOffset += scrollDelta; + if (scrollDelta != 0) { + scrollDelta > 0 ? scrollDelta-- : scrollDelta++; + } + + // D-Pad input + if (held & KEY_DDOWN && scrollDelta < 10) scrollDelta += 2; + if (held & KEY_DUP && scrollDelta > -10) scrollDelta -= 2; + + //Circle Pad input + circlePosition circlePad; + hidCircleRead(std::addressof(circlePad)); + if (scrollDelta < 10 && scrollDelta > -10) scrollDelta -= circlePad.dy / 60; + + if (scrollOffset < 0) { + scrollOffset = 0; + scrollDelta = 0; } - if (down & KEY_B) return; + if (down & KEY_B || (down & KEY_TOUCH && touching(t, promptButtons[0]))) return; - if ((down & KEY_A) || (down & KEY_START) || (down & KEY_TOUCH)) confirmed = true; + if ((down & KEY_A) || (down & KEY_START) || (down & KEY_TOUCH && touching(t, promptButtons[1]))) confirmed = true; } Result dlRes;