diff --git a/Makefile b/Makefile index d4b2450..3c028b5 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ INCLUDES := inc inc/ui EXEFS_SRC := exefs_src APP_TITLE := JKSV APP_AUTHOR := JK -APP_VERSION := 07.24.2021 +APP_VERSION := 07.27.2021 ROMFS := romfs ICON := icon.jpg diff --git a/inc/data.h b/inc/data.h index e820f72..98a4161 100644 --- a/inc/data.h +++ b/inc/data.h @@ -11,7 +11,7 @@ #define curData users[data::selUser].titleInfo[data::selData] #define BLD_MON 7 -#define BLD_DAY 24 +#define BLD_DAY 27 #define BLD_YEAR 2021 namespace data @@ -89,7 +89,7 @@ namespace data }; //Adds title to blacklist - void blacklistAdd(const uint64_t& tid); + void blacklistAdd(void *a); //Adds title to favorite list void favoriteTitle(const uint64_t& tid); //Adds path definition for title diff --git a/inc/ui/miscui.h b/inc/ui/miscui.h index 5e9e59e..dd86c4e 100644 --- a/inc/ui/miscui.h +++ b/inc/ui/miscui.h @@ -92,7 +92,7 @@ namespace ui void reset(); //Resets selected + start - void resetSel() { selected = 0; start = 0; } + void resetSel() { selected = 0; } //Enables control/disables drawing select box void setActive(bool _set); @@ -100,11 +100,11 @@ namespace ui private: //drawing x and y + rectangle width/height. Height is calc'd with font size - int x = 0, y = 0, rW = 0, rY = 0, fSize = 0, rH = 0, mL = 0; + int x = 0, mY = 0, tY = 0, y = 0, rW = 0, rY = 0, fSize = 0, rH = 0, mL = 0; //Options vector std::vector opt; //Selected + frame counting for auto-scroll - int selected = 0, fc = 0, start = 0; + int selected = 0, fc = 0; //How much we shift the color of the rectangle uint8_t clrSh = 0; bool clrAdd = true, isActive = true; diff --git a/src/data.cpp b/src/data.cpp index fcb6b46..02c68e9 100644 --- a/src/data.cpp +++ b/src/data.cpp @@ -10,6 +10,7 @@ #include "data.h" #include "file.h" #include "util.h" +#include "type.h" //FsSaveDataSpaceId_All doesn't work for SD static const unsigned saveOrder [] = { 0, 1, 2, 3, 4, 100, 101 }; @@ -464,14 +465,20 @@ void data::saveBlackList() } } -void data::blacklistAdd(const uint64_t& tid) +void data::blacklistAdd(void *a) { - blacklist.push_back(tid); + threadInfo *t = (threadInfo *)a; + t->status->setStatus("Adding title to blacklist..."); + uint64_t *tid = (uint64_t *)t->argPtr; + blacklist.push_back(*tid); for(data::user& _u : data::users) { for(unsigned i = 0; i < _u.titleInfo.size(); i++) - if(_u.titleInfo[i].saveID == tid) _u.titleInfo.erase(_u.titleInfo.begin() + i); + if(_u.titleInfo[i].saveID == *tid) _u.titleInfo.erase(_u.titleInfo.begin() + i); } + ui::refreshAllViews(); + delete tid; + t->finished = true; } void data::favoriteTitle(const uint64_t& tid) diff --git a/src/ui/miscui.cpp b/src/ui/miscui.cpp index 715dfea..b13c87a 100644 --- a/src/ui/miscui.cpp +++ b/src/ui/miscui.cpp @@ -22,7 +22,9 @@ static const SDL_Color menuColorDark = {0x00, 0xFF, 0xC5, 0xFF}; void ui::menu::setParams(const unsigned& _x, const unsigned& _y, const unsigned& _rW, const unsigned& _fS, const unsigned& _mL) { x = _x; + mY = _y; y = _y; + tY = _y; rW = _rW; rY = _y; fSize = _fS; @@ -133,44 +135,33 @@ void ui::menu::update() int mSize = opt.size() - 1, scrL = mL - 1; if( (down & HidNpadButton_AnyUp) || ((held & HidNpadButton_AnyUp) && fc == 10) ) { - --selected; - if(selected < 0) - selected = mSize; - - if(mSize > (int)mL) + if(selected > 0) { - if(start > selected) - --start; - else if(selected - scrL > start) - start = selected - scrL; + --selected; + if(selected - mL >= 0 && selected <= mSize - mL) + tY += rH; } } else if( (down & HidNpadButton_AnyDown) || ((held & HidNpadButton_AnyDown) && fc == 10)) { - ++selected; - if(selected > mSize) - selected = 0; - - if(selected > (start + scrL) && (start + scrL) < mSize) - ++start; - if(selected == 0) - start = 0; + if(selected < mSize) + { + ++selected; + if(selected - mL > 0 && selected + mL <= mSize + 1) + tY -= rH; + } } else if(down & HidNpadButton_AnyLeft) { selected -= scrL / 2; if(selected < 0) selected = 0; - if(selected < start) - start = selected; } else if(down & HidNpadButton_AnyRight) { selected += scrL / 2; if(selected > mSize) selected = mSize; - if(selected - scrL > start) - start = selected - scrL; } if(down) @@ -194,6 +185,12 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText if(opt.size() < 1) return; + if(y != tY) + { + float add = (float)((float)tY - (float)y) / ui::animScale; + y += ceil(add); + } + if(clrAdd) { clrSh += 6; @@ -207,21 +204,21 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText clrAdd = true; } - for(int i = start; i < (int)opt.size(); i++) + for(int i = 0; i < (int)opt.size(); i++) { if(i == selected) { if(isActive) - ui::drawBoundBox(target, x, y + ((i - start) * rH), rW, rH, clrSh); + ui::drawBoundBox(target, x, y + (i * rH), rW, rH, clrSh); - gfx::drawRect(target, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, x + 10, ((y + (rH / 2 - fSize / 2)) + ((i - start) * rH)) - 2, 4, fSize + 4); + gfx::drawRect(target, ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, x + 10, ((y + (rH / 2 - fSize / 2)) + (i * rH)) - 2, 4, fSize + 4); if(drawText) - gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + ((i - start) * rH), ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str()); + gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), ui::thmID == ColorSetId_Light ? &menuColorLight : &menuColorDark, opt[i].txt.c_str()); } else { if(drawText) - gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + ((i - start) * rH), textClr, opt[i].txt.c_str()); + gfx::drawTextf(target, fSize, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), textClr, opt[i].txt.c_str()); } int w, h; @@ -231,7 +228,7 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText int dW = scale * w; int dH = scale * h; - gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + ((i - start) * rH), dW, dH); + gfx::texDrawStretch(target, opt[i].icn, x + 20, (y + (rH / 2 - fSize / 2)) + (i * rH), dW, dH); } } @@ -240,9 +237,9 @@ void ui::menu::draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText void ui::menu::reset() { opt.clear(); - start = 0; selected = 0; - + y = mY; + tY = mY; fc = 0; } diff --git a/src/ui/sett.cpp b/src/ui/sett.cpp index 4aa872a..46dcf88 100644 --- a/src/ui/sett.cpp +++ b/src/ui/sett.cpp @@ -141,7 +141,7 @@ static void updateMenuText() void ui::settInit() { ui::settMenu = new ui::menu; - ui::settMenu->setParams(32, 32, 1016, 20, 8); + ui::settMenu->setParams(32, 32, 1016, 24, 5); ui::settMenu->setCallback(settMenuCallback, NULL); ui::settMenu->setActive(false); diff --git a/src/ui/ttl.cpp b/src/ui/ttl.cpp index 3cf09a4..068085e 100644 --- a/src/ui/ttl.cpp +++ b/src/ui/ttl.cpp @@ -12,6 +12,7 @@ static ui::slideOutPanel *ttlOptsPanel, *infoPanel, *fldPanel;//There's no reaso static fs::dirList *fldList; static fs::backupArgs *backargs; static std::string infoPanelString; +static SDL_Texture *fldBuffer;//This is so folder menu doesn't draw over guide void ui::refreshAllViews() { @@ -58,8 +59,6 @@ static void fldFuncRestore(void *a) ui::confirm(conf); } - - void ui::populateFldMenu() { fldMenu->reset(); @@ -155,8 +154,10 @@ static void ttlOptsShowInfoPanel(void *a) static void ttlOptsBlacklistTitle(void *a) { + uint64_t *sendTid = new uint64_t; + *sendTid = data::curData.saveID; std::string title = data::getTitleNameByTID(data::curData.saveID); - ui::confirmArgs *conf = ui::confirmArgsCreate(false, NULL, NULL, true, ui::confBlacklist.c_str(), title.c_str()); + ui::confirmArgs *conf = ui::confirmArgsCreate(false, data::blacklistAdd, sendTid, true, ui::confBlacklist.c_str(), title.c_str()); ui::confirm(conf); } @@ -322,7 +323,9 @@ static void fldMenuCallback(void *a) static void fldPanelDraw(void *a) { SDL_Texture *target = (SDL_Texture *)a; - fldMenu->draw(target, &ui::txtCont, true); + gfx::clearTarget(fldBuffer, &ui::slidePanelColor); + fldMenu->draw(fldBuffer, &ui::txtCont, true); + gfx::texDraw(target, fldBuffer, 0, 0); gfx::drawLine(target, &ui::divClr, 10, 648, fldHelpWidth + 54, 648); gfx::drawTextf(target, 18, 32, 673, &ui::txtCont, ui::folderHelp.c_str()); } @@ -336,12 +339,12 @@ void ui::ttlInit() ttlViews.emplace_back(new ui::titleview(u, 128, 128, 16, 16, 7, ttlViewCallback)); ttlOpts = new ui::menu; - ttlOpts->setParams(10, 32, 390, 18, 8); + ttlOpts->setParams(10, 32, 390, 20, 7); ttlOpts->setCallback(ttlOptsCallback, NULL); ttlOpts->setActive(false); fldMenu = new ui::menu; - fldMenu->setParams(10, 32, fldHelpWidth + 44, 18, 8); + fldMenu->setParams(10, 32, fldHelpWidth + 44, 20, 6); fldMenu->setCallback(fldMenuCallback, NULL); fldMenu->setActive(false); @@ -353,6 +356,7 @@ void ui::ttlInit() infoPanel->setCallback(infoPanelCallback, NULL); fldPanel = new ui::slideOutPanel(fldHelpWidth + 64, 720, 0, fldPanelDraw); + fldBuffer = SDL_CreateTexture(gfx::render, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC | SDL_TEXTUREACCESS_TARGET, fldHelpWidth + 64, 647); ui::registerPanel(fldPanel); fldList = new fs::dirList; @@ -379,6 +383,7 @@ void ui::ttlExit() for(ui::titleview *t : ttlViews) delete t; + SDL_DestroyTexture(fldBuffer); delete ttlOptsPanel; delete ttlOpts; delete infoPanel; diff --git a/src/ui/usr.cpp b/src/ui/usr.cpp index 70d85d3..3c2c7e6 100644 --- a/src/ui/usr.cpp +++ b/src/ui/usr.cpp @@ -299,23 +299,23 @@ void ui::usrInit() bcatSaveMenu = new ui::menu; cacheSaveMenu = new ui::menu; - usrMenu->setParams(64, 16, 0, 96, 4); - usrOptMenu->setParams(8, 32, 390, 18, 8); + usrMenu->setParams(64, 16, 0, 96, 2); + usrOptMenu->setParams(8, 32, 390, 20, 7); usrOptMenu->setCallback(usrOptCallback, NULL); - saveCreateMenu->setParams(8, 32, 390, 18, 8); + saveCreateMenu->setParams(8, 32, 492, 20, 7); saveCreateMenu->setActive(false); saveCreateMenu->setCallback(saveCreateCallback, NULL); - deviceSaveMenu->setParams(8, 32, 390, 18, 8); + deviceSaveMenu->setParams(8, 32, 492, 20, 7); deviceSaveMenu->setActive(false); deviceSaveMenu->setCallback(saveCreateCallback, NULL); - bcatSaveMenu->setParams(8, 32, 390, 18, 8); + bcatSaveMenu->setParams(8, 32, 492, 20, 7); bcatSaveMenu->setActive(false); bcatSaveMenu->setCallback(saveCreateCallback, NULL); - cacheSaveMenu->setParams(8, 32, 390, 18, 8); + cacheSaveMenu->setParams(8, 32, 492, 20, 7); cacheSaveMenu->setActive(false); cacheSaveMenu->setCallback(saveCreateCallback, NULL); @@ -345,16 +345,16 @@ void ui::usrInit() usrOptMenu->optAddButtonEvent(1, HidNpadButton_A, usrOptDeleteAllUserSaves, NULL); usrOptMenu->setActive(false); - saveCreatePanel = new ui::slideOutPanel(410, 720, 0, saveCreatePanelDraw); + saveCreatePanel = new ui::slideOutPanel(512, 720, 0, saveCreatePanelDraw); ui::registerPanel(saveCreatePanel); - deviceSavePanel = new ui::slideOutPanel(410, 720, 0, deviceSavePanelDraw); + deviceSavePanel = new ui::slideOutPanel(512, 720, 0, deviceSavePanelDraw); ui::registerPanel(deviceSavePanel); - bcatSavePanel = new ui::slideOutPanel(410, 720, 0, bcatSavePanelDraw); + bcatSavePanel = new ui::slideOutPanel(512, 720, 0, bcatSavePanelDraw); ui::registerPanel(bcatSavePanel); - cacheSavePanel = new ui::slideOutPanel(410, 720, 0, cacheSavePanelDraw); + cacheSavePanel = new ui::slideOutPanel(512, 720, 0, cacheSavePanelDraw); ui::registerPanel(cacheSavePanel); accCreate = {FsSaveDataType_Account, saveCreateMenu};