From b5037abd83a68634785890368a5ac1d71dde0521 Mon Sep 17 00:00:00 2001 From: J-D-K Date: Mon, 14 Jun 2021 22:26:36 -0400 Subject: [PATCH] Restore color pulse, fix up zh-TW line breaking rules, fix load screen --- Makefile | 4 ++-- romfs/icon.jpg => icon.jpg | Bin JKSV_icon.png => iconAssets/JKSV_icon.png | Bin JKSV_icon.svg => iconAssets/JKSV_icon.svg | 0 inc/data.h | 5 ++++- inc/miscui.h | 14 ++++++++++++-- inc/ui.h | 1 - inc/uistr.h | 2 ++ romfs/icon.png | Bin 0 -> 13966 bytes romfs/img/fb/menuBotLeft.png | Bin 1059 -> 4854 bytes romfs/img/fb/menuBotRight.png | Bin 1056 -> 4843 bytes romfs/img/fb/menuTopLeft.png | Bin 1054 -> 4842 bytes romfs/img/fb/menuTopRight.png | Bin 1069 -> 4843 bytes romfs/lang/zh-TW.txt | 14 +++++++------- src/data.cpp | 18 ++++++++++++++++++ src/file.cpp | 8 ++++---- src/gfx.cpp | 2 +- src/ui.cpp | 17 ++++++++++------- src/ui/miscui.cpp | 18 +++++++++--------- src/ui/ttlsel.cpp | 2 ++ src/ui/uistr.cpp | 7 +++++++ src/ui/usrsel.cpp | 2 +- 22 files changed, 79 insertions(+), 35 deletions(-) rename romfs/icon.jpg => icon.jpg (100%) rename JKSV_icon.png => iconAssets/JKSV_icon.png (100%) rename JKSV_icon.svg => iconAssets/JKSV_icon.svg (100%) create mode 100644 romfs/icon.png diff --git a/Makefile b/Makefile index 268c994..13c1867 100644 --- a/Makefile +++ b/Makefile @@ -38,9 +38,9 @@ INCLUDES := inc EXEFS_SRC := exefs_src APP_TITLE := JKSV APP_AUTHOR := JK -APP_VERSION := 06.02.2021 +APP_VERSION := 06.14.2021 ROMFS := romfs -ICON := romfs/icon.jpg +ICON := icon.jpg #--------------------------------------------------------------------------------- # options for code generation diff --git a/romfs/icon.jpg b/icon.jpg similarity index 100% rename from romfs/icon.jpg rename to icon.jpg diff --git a/JKSV_icon.png b/iconAssets/JKSV_icon.png similarity index 100% rename from JKSV_icon.png rename to iconAssets/JKSV_icon.png diff --git a/JKSV_icon.svg b/iconAssets/JKSV_icon.svg similarity index 100% rename from JKSV_icon.svg rename to iconAssets/JKSV_icon.svg diff --git a/inc/data.h b/inc/data.h index 64719be..92d57c6 100644 --- a/inc/data.h +++ b/inc/data.h @@ -13,7 +13,7 @@ #define curData users[data::selUser].titles[data::selData] #define BLD_MON 06 -#define BLD_DAY 02 +#define BLD_DAY 14 #define BLD_YEAR 2021 namespace data @@ -123,6 +123,9 @@ namespace data SDL_Texture *userIcon; }; + //Gets total count of save containers + unsigned getTotalSaves(); + //Adds title to blacklist void blacklistAdd(data::titledata& t); //Adds title to favorite list diff --git a/inc/miscui.h b/inc/miscui.h index 5dca760..b134db7 100644 --- a/inc/miscui.h +++ b/inc/miscui.h @@ -3,6 +3,7 @@ #include "gfx.h" +#define PROG_MAX_WIDTH_DEFAULT 576 #define POP_FRAME_DEFAULT 130 //For smaller classes that aren't easy to get lost in and general functions @@ -12,17 +13,26 @@ namespace ui class progBar { public: + progBar() = default; + //Constructor. _max is the maximum value - progBar(const uint64_t& _max) { max = _max; } + progBar(const uint64_t& _max, const uint64_t& _maxWidth) { max = _max; maxWidth = _maxWidth; } + + void setMax(const uint64_t& _max, const uint64_t& _maxWidth){ max = _max; maxWidth = _maxWidth; } //Updates progress void update(const uint64_t& _prog); + void incProgress(unsigned inc){ prog += inc; } + //Draws with text at top void draw(const std::string& text, const std::string& head); + //Draws without dialog box + void drawNoDialog(int x, int y); + private: - uint64_t max, prog; + uint64_t max, prog, maxWidth; float width; }; diff --git a/inc/ui.h b/inc/ui.h index 2faea3d..86ef0af 100644 --- a/inc/ui.h +++ b/inc/ui.h @@ -77,7 +77,6 @@ namespace ui void init(); void exit(); - //Just draws a screen and flips JIC boot takes long. void showLoadScreen(); //Clears and draws general stuff used by multiple screens diff --git a/inc/uistr.h b/inc/uistr.h index 6ea67e2..5e040c9 100644 --- a/inc/uistr.h +++ b/inc/uistr.h @@ -4,6 +4,8 @@ //Strings since translation support namespace ui { + extern const std::string loadGlyphArray[8]; + extern std::string author, userHelp, titleHelp, folderHelp, optHelp, \ confBlacklist, confOverwrite, confRestore, confDel, confCopy, \ confEraseNand, confEraseFolder, yt, nt, on, off, confirmHead, \ diff --git a/romfs/icon.png b/romfs/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb07d76456f4dac93386a2c6c846f08f0324b0e5 GIT binary patch literal 13966 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 literal 0 HcmV?d00001 diff --git a/romfs/img/fb/menuBotLeft.png b/romfs/img/fb/menuBotLeft.png index feafb8f8fe16a509bf0b529d3271540f994d252b..5caf7025814c13173cbb826eef673c23b9f40f2c 100644 GIT binary patch literal 4854 zcmeHKYg7~079JiVh1Pnp)}Y=p1`xzf-U&%cL=52}1|v`fYt_lj1R^Ap$3OyYRgkL4 zRZtWosEFF@3$3pz$d!utLh(hbUQwuuT0lj)T17>$N-Y-wAN?jO5rXO?e5 zNp`Hh`$)IBt2`?gNMe}>Hn$Xwpcdsu(} z92R{?%J!oY<_w)WD8SbGM{Z2v?8-~zDR@)3e6(X}%^vd3d?LcC*vtHJ^mNNAC+77?GpHAY1)sgr1zEFAnez!EJ z?DK=epKU9(p8TS0h^%$q^yt8EhfF$^Z#HlNy1 z=lQAL`>Tih7NVX0w?*N{BC0yw>Q6siw4}kXG^e^ec3s%_(tEL!x4Lp4oN=k07V=$- zM?Ag*n&@%N@atutsDf~H_E9oht&1Tc9sU}->LXl;m(z`3ScVv`9*}zY3VIw5JswSOZw{?=TK!Z%W(Xx|)EYX$Q;yFJhX=-<` z@EPT!&-o<*G=z{MAwf3vl&!OJxx?V}~D| z5u2&7n|_ic2L{#?Ht zuL@RW*RhJ0orm}}VIzeThmZU;_wS!uIHNrSIt0ehNy3vucC$vW-Y?#^VrX(>!OxuK zmnPRw+a$>n7v_)kVB){3!uox>e($V}wutky>uQ4Ub{5=RR{N!k_i@Lqsu7ae4}v=z zw z%C4FEGcxLZ2y_I6!d6|1-Ym7s zn08(%Xw%(nCTxdL$uefVQU%LN69EfY0u~2RShZ<9<`_3P$b@U8F`;3-6yQz9Orj`* zl+CtSEG!G3MVb=XT!}=&=J41&9s&@EIbBboRzz?1rYU+jLJ2cw(i$i&sfTG!R86K* zGA0w);aBnL3`*r|dcC<<1)vApiW=Bl7Kg3VvHN}h(0>@ta8&XXv_H=NJO{5Sy05yYAxo-^_9;sBl_Mjz5)and&FCg|?NJ^`D zBi387(H46;eFFjRuX*1>zslVX1}LRc8cJfRba;`WGA2E~6elq)F10tgTn$Gg48#zD zNWez~Trq*5ga$`=e4$!{5nvIju|8ChdNYOUF@mN70S;gdX!SU0F~2dz zX>~*_h0=O*MLeEZ#FGSy`9dyG;0Ta_x>5mwy&q&F zm755ZB2955nIdD-LBX`Ay};q1o@t5DngJr6uKC`ok0p#fZ#|13MQb;~u)T1lDAqHG z8BHT_`#`|2$Al%J`a}Y(@ZOSo)vx`N=~AO2o<@WRB7~YRLeY*u@Gt!I&ck0g0-%0B$UEu#Uat3Y zy^{j(1b$y#@8xOn#zPkQza=E>^?htx#0ZtHg`;`cKDzBUa zS|1o963h_fK8SuCprX|b(Al4gR4V%4a_Q$Z&?Dz%ryO*7Qi^y=PU`4WGh{!?5jbqo zQb{m)oGqDvD|V O6pBZN|R>eSD^Ks6dk(${KLbL!m;x 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 delta 967 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 delta 957 zcmV;u148`kC9MdMBmrKLB_V(0C=7<*b&5R#k^qV0U~H=P26O!Vp|R6RCNn*?ewnI3 zwV?%;e)IvI(DCEnPXC}t@Jun8=aO?ki6s`P=y-UPI-eZkd_GECEx)(ZH6So4T77)= zyzB?;g88!SZTYFNrzc0{SOeSpfw~-tuK=f_6-fCJAS}mJmm`%Gc`1L~9?J^3xIHhS zt@(Y8&oua08Xi$ia>{HG&nUqx7xZ01G~{g`Le*ycE6~U9bWRm$l0#Voo_Q!#$k(D( zN5A5uW6tbj*0irwfR<1&^vjvoUzcAgr&Ibu{vP$&<1g$_q-iGf9MBJh^40#-&gsog z&qyb?r^q>9k>A<3a)p1m$kBS{W660f>Rig~Vcs^fHQ&mphEEDUl09lc zbsUKXoI5tzhT6EW08r=1J6G;}%(iiZ#3+XtT9GEojbL=ZDAFeGI4XBBfZx>tyJ0&h zta54L8Me%DjU9n^cEavqIODlP{zs)(CiOlJ6m#$^SI{M6XG4F*AjeFBF%3kxucW4# z;In=#gR6pInrU_{u!e1T0RAoU+vd^EMRDV%g7a9slu|2#R(P&> zyJAAEn{2wpEp2(T&9}1ECe*aWmRfGsyp>jW*>%S`-t%s|?`5wCAJ|GqJkpU5JNzg| z?bvEvd+e#_ZryvKUN343>!8_Yt%b*M=oG7UI84`Lt~50=#VV)sTak>-225kSZtzacQMgGG$xV`|-Xw|YO_IoOl0<%! zB$7KMeLMPg^zG;`an$jb4E~L!{{Stn=DH9_Ze#!e00v@9M??Ti0H^@efVIdnlWh_n z3gZG80}2H@s!hO?l@cgGD@jB_R0!8&Wav2hpMima;X{TtBLf2i0}}%j2+X+pA4LEr fh$6tiz`y_ifawU(b97_500000NkvXXu0mjfjSI@H diff --git a/romfs/lang/zh-TW.txt b/romfs/lang/zh-TW.txt index 5720f18..54e8194 100644 --- a/romfs/lang/zh-TW.txt +++ b/romfs/lang/zh-TW.txt @@ -33,25 +33,25 @@ confirmHead = "再次確認" copyHead = "正在複製檔案..." #Confirm blacklist. -confirmBlacklist = "是否確定要將#%s#加入黑名單?" +confirmBlacklist = "是否確定要將 #%s #加入黑名單?" #Confirm overwriting folder -confirmOverwrite = "是否確定要覆寫#%s#?" +confirmOverwrite = "是否確定要覆寫 #%s#?" #Confirm restoring save -confirmRestore = "是否確定要還原#%s#?" +confirmRestore = "是否確定要還原 #%s#?" #Confirm deleting. -confirmDelete = "是否確定要刪除#%s#? *此為永久性刪除*!" +confirmDelete = "是否確定要刪除 #%s#? *此為永久性刪除*!" #Confirm file copy in file mode -confirmCopy = "是否確定要將#%s#複製到#%s#?" +confirmCopy = "是否確定要將 #%s# 複製到 #%s#?" #Warning for erasing save data from system in title menu -confirmEraseNand = "*警告*: 此操作將把#%s#檔案從你的主機系統內*徹底抹除*!如同從#檔案管理器#內將進度檔案刪除!是否確定要繼續執行抹除?" +confirmEraseNand = "*警告*: 此操作將把 #%s# 檔案從你的主機系統內*徹底抹除*! 如同從#檔案管理器#內將進度檔案刪除! 是否確定要繼續執行抹除?" #Warning for deleting save data in folder menu -confirmEraseFolder = "*警告*: 此操作*將把*目前的進度#%s#檔案*從主機系統內刪除*!是否確定要繼續執行刪除?" +confirmEraseFolder = "*警告*: 此操作*將把*目前的進度 #%s# 檔案*從主機系統內刪除*! 是否確定要繼續執行刪除?" #Error displayed in pop-up if no titles are found for user. Rarely happens, but can for Device and BCAT noSavesFound = "沒有找到#%s#的進度檔案!" diff --git a/src/data.cpp b/src/data.cpp index 1ebc59a..179c2cb 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -486,6 +486,24 @@ void data::user::loadPlayTimes() } } +unsigned data::getTotalSaves() +{ + unsigned ret = 0; + FsSaveDataInfoReader read; + FsSaveDataInfo tmp; + int64_t out = 0; + for(unsigned i = 0; i < 7; i++) + { + if(R_FAILED(fsOpenSaveDataInfoReader(&read, (FsSaveDataSpaceId)saveOrder[i]))) + continue; + + while(R_SUCCEEDED(fsSaveDataInfoReaderRead(&read, &tmp, 1, &out)) && out != 0) + ++ret; + } + fsSaveDataInfoReaderClose(&read); + return ret; +} + void data::loadBlacklist() { fs::dataFile blk(fs::getWorkDir() + "blacklist.txt"); diff --git a/src/file.cpp b/src/file.cpp index d17e9ad..7d36ebe 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -371,7 +371,7 @@ void fs::copyFile(const std::string& from, const std::string& to) copyArgs *send = copyArgsCreate(from, to, "", NULL, &progress); //Setup progress bar. This thread updates screen, other handles copying - ui::progBar prog(fsize(from)); + ui::progBar prog(fsize(from), PROG_MAX_WIDTH_DEFAULT); Thread cpyThread; threadCreate(&cpyThread, copyfile_t, send, NULL, 0x4000, 0x2B, 1); @@ -448,7 +448,7 @@ void copyFileCommit_t(void *a) void fs::copyFileCommit(const std::string& from, const std::string& to, const std::string& dev) { uint64_t offset = 0; - ui::progBar prog(fsize(from)); + ui::progBar prog(fsize(from), PROG_MAX_WIDTH_DEFAULT); copyArgs *send = copyArgsCreate(from, to, dev, NULL, &offset); Thread cpyThread; @@ -515,7 +515,7 @@ void copyFileToZip_t(void *a) void copyFileToZip(const std::string& from, zipFile *z) { - ui::progBar prog(fs::fsize(from)); + ui::progBar prog(fs::fsize(from), PROG_MAX_WIDTH_DEFAULT); uint64_t progress = 0; copyArgs *send = copyArgsCreate(from, "", "", z, &progress); @@ -571,7 +571,7 @@ void fs::copyZipToDir(unzFile *unz, const std::string& to, const std::string& de { std::string path = to + filename; mkdirRec(path.substr(0, path.find_last_of('/') + 1)); - ui::progBar prog(info.uncompressed_size); + ui::progBar prog(info.uncompressed_size, PROG_MAX_WIDTH_DEFAULT); size_t done = 0; //Create new empty file using FS diff --git a/src/gfx.cpp b/src/gfx.cpp index 730317b..ebf2af9 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -277,7 +277,7 @@ void gfx::drawTextf(int fontSize, int x, int y, const SDL_Color *c, const char * { SDL_Rect src = {0, 0, g->w, g->h}; SDL_Rect dst = {tmpX + g->left, y + (fontSize - g->top), g->w, g->h}; - SDL_SetTextureColorMod(g->tex, c->r, c->g, c->b); + SDL_SetTextureColorMod(g->tex, textcol->r, textcol->g, textcol->b); SDL_RenderCopy(render, g->tex, &src, &dst); tmpX += g->advX; diff --git a/src/ui.cpp b/src/ui.cpp index 4fa216a..b5c1d50 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -42,7 +42,6 @@ SDL_Texture *mnuTopLeft, *mnuTopRight, *mnuBotLeft, *mnuBotRight; SDL_Texture *ui::sideBar; static SDL_Texture *icn; -static SDL_Color white = {0xFF, 0xFF, 0xFF, 0xFF}; //X position of help texts. Calculated to make editing quicker/easier static unsigned userHelpX, titleHelpX, folderHelpX, optHelpX; @@ -349,11 +348,10 @@ void ui::exit() void ui::showLoadScreen() { - SDL_Texture *icon = gfx::loadImageFile("romfs:/icon.jpg"); - SDL_SetRenderDrawColor(gfx::render, 0x2D, 0x2D, 0x2D, 0xFF); - SDL_RenderClear(gfx::render); - gfx::texDraw(icon, 512, 232); - gfx::drawTextf(16, 1100, 673, &white, "Loading..."); + SDL_Texture *icon = gfx::loadImageFile("romfs:/icon.png"); + gfx::clear(&ui::clearClr); + gfx::texDraw(icon, 512, 226); + gfx::drawTextf(18, 1100, 673, &ui::txtCont, "Loading..."); gfx::present(); SDL_DestroyTexture(icon); } @@ -435,7 +433,12 @@ void ui::drawBoundBox(int x, int y, int w, int h, int clrSh) gfx::drawRect(&rectClr, x + 4, y + 4, w - 8, h - 8); - rectClr = {0x00, 0x88, 0xC5, 0xFF}; + rectClr = {0x00,(uint8_t)(0x88 + clrSh), (uint8_t)(0xC5 + (clrSh / 2)), 0xFF}; + + SDL_SetTextureColorMod(mnuTopLeft, rectClr.r, rectClr.g, rectClr.b); + SDL_SetTextureColorMod(mnuTopRight, rectClr.r, rectClr.g, rectClr.b); + SDL_SetTextureColorMod(mnuBotLeft, rectClr.r, rectClr.g, rectClr.b); + SDL_SetTextureColorMod(mnuBotRight, rectClr.r, rectClr.g, rectClr.b); //top gfx::texDraw(mnuTopLeft, x, y); diff --git a/src/ui/miscui.cpp b/src/ui/miscui.cpp index 16d57f9..6989d97 100644 --- a/src/ui/miscui.cpp +++ b/src/ui/miscui.cpp @@ -27,19 +27,11 @@ enum popStates popFall }; -//8 -static const std::string loadGlyphArray[] = -{ - "\ue020", "\ue021", "\ue022", "\ue023", - "\ue024", "\ue025", "\ue026", "\ue027" -}; - - void ui::progBar::update(const uint64_t& _prog) { prog = _prog; - width = (float)(((float)prog / (float)max) * 576); + width = (float)(((float)prog / (float)max) * (float)maxWidth); } void ui::progBar::draw(const std::string& text, const std::string& head) @@ -59,6 +51,14 @@ void ui::progBar::draw(const std::string& text, const std::string& head) gfx::drawTextfWrap(16, 352, 230, 576, &ui::txtDiag, text.c_str()); } +void ui::progBar::drawNoDialog(int x, int y) +{ + gfx::drawRect(&fillBack, x, y, maxWidth, 12); + gfx::drawRect(ui::thmID == ColorSetId_Light ? &fillLight : &fillDark, x, y, width, 12); + gfx::texDraw(ui::progCovLeft, x, y); + gfx::texDraw(ui::progCovRight, x + maxWidth - 8, y); +} + void ui::showMessage(const char *head, const char *fmt, ...) { char tmp[1024]; diff --git a/src/ui/ttlsel.cpp b/src/ui/ttlsel.cpp index 0afc8ee..3816396 100644 --- a/src/ui/ttlsel.cpp +++ b/src/ui/ttlsel.cpp @@ -18,6 +18,8 @@ static bool clrAdd = true; //Selected rectangle X and Y. static unsigned selRectX = 66, selRectY = 94; +static SDL_Texture *panel; + static inline void reset() { start = 0; diff --git a/src/ui/uistr.cpp b/src/ui/uistr.cpp index ec03ea6..a03f19b 100644 --- a/src/ui/uistr.cpp +++ b/src/ui/uistr.cpp @@ -2,6 +2,13 @@ #include "uistr.h" +//8 +const std::string ui::loadGlyphArray[8] = +{ + "\ue020", "\ue021", "\ue022", "\ue023", + "\ue024", "\ue025", "\ue026", "\ue027" +}; + std::string ui::author = "NULL"; std::string ui::userHelp = "[A] Select [Y] Dump All [X] UI Mode [R] Update [-] Options [ZR] Extras"; std::string ui::titleHelp = "[A] Select [L][R] Change User [Y] Dump All [X] Favorite [-] BlackList [ZR] Erase [B] Back"; diff --git a/src/ui/usrsel.cpp b/src/ui/usrsel.cpp index 3211dae..25e6f67 100644 --- a/src/ui/usrsel.cpp +++ b/src/ui/usrsel.cpp @@ -105,7 +105,7 @@ void ui::updateUserMenu(const uint64_t& down, const uint64_t& held) case HidNpadButton_StickLUp: case HidNpadButton_Up: - data::selUser - 5 < 0 ? data::selUser = 0 : data::selUser -= 4; + data::selUser - 5 < 0 ? data::selUser = 0 : data::selUser -= 5; break; case HidNpadButton_StickLDown: