-fixed the missing pointer and right stick movement detections for the screensaver

-made our cover loader much safer (thanks ALOT seam for all the help getting that done)
-fixed a cleanup bug in cover png loading which might caused some memory leak
This commit is contained in:
fix94.1 2013-09-18 23:59:14 +00:00
parent 2872779215
commit 88ad579fe9
4 changed files with 51 additions and 15 deletions

View File

@ -133,7 +133,8 @@ enum
#define RIGHT_STICK_DOWN rStick_Down() #define RIGHT_STICK_DOWN rStick_Down()
#define RIGHT_STICK_LEFT rStick_Left() #define RIGHT_STICK_LEFT rStick_Left()
#define RIGHT_STICK_RIGHT rStick_Right() #define RIGHT_STICK_RIGHT rStick_Right()
#define RIGHT_STICK_MOVE (RIGHT_STICK_UP || RIGHT_STICK_DOWN \
|| RIGHT_STICK_LEFT || RIGHT_STICK_RIGHT)
#define WROLL_LEFT wRoll_Left() #define WROLL_LEFT wRoll_Left()
#define WROLL_RIGHT wRoll_Right() #define WROLL_RIGHT wRoll_Right()

View File

@ -2622,14 +2622,23 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
mainMenu.getBoxPath(m_items[i].hdr)) : mainMenu.getFrontPath(m_items[i].hdr); mainMenu.getBoxPath(m_items[i].hdr)) : mainMenu.getFrontPath(m_items[i].hdr);
if(path == NULL) if(path == NULL)
return false; return false;
size_t path_len = strlen(path);
char *path_place = (char*)MEM2_alloc(path_len+1);
if(path_place == NULL)
return false;
memset(path_place, 0, path_len+1);
memcpy(path_place, path, path_len);
DCFlushRange(path_place, path_len+1);
TexData tex; TexData tex;
tex.thread = true; tex.thread = true;
m_renderingTex = &tex; m_renderingTex = &tex;
if(TexHandle.fromImageFile(tex, path, textureFmt, 32) != TE_OK) if(TexHandle.fromImageFile(tex, path_place, textureFmt, 32) != TE_OK)
{ {
MEM2_free(path_place);
m_renderingTex = NULL; m_renderingTex = NULL;
return false; return false;
} }
MEM2_free(path_place);
m_renderingTex = NULL; m_renderingTex = NULL;
if(!m_loadingCovers) if(!m_loadingCovers)
return false; return false;
@ -2647,7 +2656,7 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
u32 bufSize = fixGX_GetTexBufferSize(tex.width, tex.height, tex.format, tex.maxLOD > 0 ? GX_TRUE : GX_FALSE, tex.maxLOD); u32 bufSize = fixGX_GetTexBufferSize(tex.width, tex.height, tex.format, tex.maxLOD > 0 ? GX_TRUE : GX_FALSE, tex.maxLOD);
uLongf zBufferSize = m_compressCache ? bufSize + bufSize / 100 + 12 : bufSize; uLongf zBufferSize = m_compressCache ? bufSize + bufSize / 100 + 12 : bufSize;
u8 *zBuffer = m_compressCache ? (u8*)MEM2_alloc(zBufferSize) : tex.data; u8 *zBuffer = m_compressCache ? (u8*)MEM2_alloc(zBufferSize) : tex.data;
if(!!zBuffer && (!m_compressCache || compress(zBuffer, &zBufferSize, tex.data, bufSize) == Z_OK)) if(zBuffer != NULL && (!m_compressCache || compress(zBuffer, &zBufferSize, tex.data, bufSize) == Z_OK))
{ {
const char *gamePath = NULL; const char *gamePath = NULL;
const char *coverDir = NULL; const char *coverDir = NULL;
@ -2674,8 +2683,16 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
FILE *file = NULL; FILE *file = NULL;
if(gamePath != NULL) if(gamePath != NULL)
{ {
char *full_path = (char*)MEM2_alloc(MAX_FAT_PATH+1);
if(full_path == NULL)
{
if(zBuffer != NULL && m_compressCache)
MEM2_free(zBuffer);
return false;
}
memset(full_path, 0, MAX_FAT_PATH+1);
if(coverDir == NULL || strlen(coverDir) == 0) if(coverDir == NULL || strlen(coverDir) == 0)
file = fopen(fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), "wb"); strncpy(full_path, fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), MAX_FAT_PATH);
else else
{ {
if(strchr(coverDir, '/') != NULL) if(strchr(coverDir, '/') != NULL)
@ -2694,8 +2711,11 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
MEM2_free(tmp); MEM2_free(tmp);
} }
fsop_MakeFolder(fmt("%s/%s", m_cachePath.c_str(), coverDir)); fsop_MakeFolder(fmt("%s/%s", m_cachePath.c_str(), coverDir));
file = fopen(fmt("%s/%s/%s.wfc", m_cachePath.c_str(), coverDir, gamePath), "wb"); strncpy(full_path, fmt("%s/%s/%s.wfc", m_cachePath.c_str(), coverDir, gamePath), MAX_FAT_PATH);
} }
DCFlushRange(full_path, MAX_FAT_PATH+1);
file = fopen(full_path, "wb");
MEM2_free(full_path);
} }
if(file != NULL) if(file != NULL)
{ {
@ -2706,6 +2726,8 @@ bool CCoverFlow::_loadCoverTexPNG(u32 i, bool box, bool hq, bool blankBoxCover)
if (m_deletePicsAfterCaching) if (m_deletePicsAfterCaching)
fsop_deleteFile(path); fsop_deleteFile(path);
} }
if(zBuffer != NULL && m_compressCache)
MEM2_free(zBuffer);
} }
} }
if (!hq) _dropHQLOD(i); if (!hq) _dropHQLOD(i);
@ -2791,10 +2813,17 @@ CCoverFlow::CLRet CCoverFlow::_loadCoverTex(u32 i, bool box, bool hq, bool blank
FILE *fp = NULL; FILE *fp = NULL;
if(gamePath != NULL) if(gamePath != NULL)
{ {
char *full_path = (char*)MEM2_alloc(MAX_FAT_PATH+1);
if(full_path == NULL)
return CL_NOMEM;
memset(full_path, 0, MAX_FAT_PATH+1);
if(coverDir == NULL || strlen(coverDir) == 0) if(coverDir == NULL || strlen(coverDir) == 0)
fp = fopen(fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), "rb"); strncpy(full_path, fmt("%s/%s.wfc", m_cachePath.c_str(), gamePath), MAX_FAT_PATH);
else else
fp = fopen(fmt("%s/%s/%s.wfc", m_cachePath.c_str(), coverDir, gamePath), "rb"); strncpy(full_path, fmt("%s/%s/%s.wfc", m_cachePath.c_str(), coverDir, gamePath), MAX_FAT_PATH);
DCFlushRange(full_path, MAX_FAT_PATH+1);
fp = fopen(full_path, "rb");
MEM2_free(full_path);
} }
if(fp != NULL) if(fp != NULL)
{ {

View File

@ -2470,20 +2470,24 @@ void CMenu::_cleanupDefaultFont()
m_wbf2_font = NULL; m_wbf2_font = NULL;
} }
char tmp[256];
const char *CMenu::_getId() const char *CMenu::_getId()
{ {
char tmp[MAX_FAT_PATH];
memset(tmp, 0, MAX_FAT_PATH);
const char *id = NULL; const char *id = NULL;
const dir_discHdr *hdr = CoverFlow.getHdr(); const dir_discHdr *hdr = CoverFlow.getHdr();
if(hdr->type == TYPE_HOMEBREW) if(hdr->type == TYPE_HOMEBREW)
id = strrchr(hdr->path, '/') + 1; id = strrchr(hdr->path, '/') + 1;
else if(hdr->type == TYPE_PLUGIN) else if(hdr->type == TYPE_PLUGIN)
{ {
tmp[0] = '\0'; if(strstr(hdr->path, ":/") != NULL)
if(strrchr(hdr->path, ':') != NULL)
{ {
strcat(tmp, strchr(hdr->path, '/') + 1); if(*(strchr(hdr->path, '/') + 1) != '\0')
*(strchr(tmp, '/') + 1) = '\0'; strcat(tmp, strchr(hdr->path, '/') + 1);
else
strcat(tmp, hdr->path);
if(strchr(tmp, '/') != NULL)
*(strchr(tmp, '/') + 1) = '\0';
} }
strcat(tmp, fmt("%ls",hdr->title)); strcat(tmp, fmt("%ls",hdr->title));
id = tmp; id = tmp;
@ -2493,7 +2497,6 @@ const char *CMenu::_getId()
id = hdr->id; id = hdr->id;
if(hdr->type == TYPE_GC_GAME && hdr->settings[0] == 1) /* disc 2 */ if(hdr->type == TYPE_GC_GAME && hdr->settings[0] == 1) /* disc 2 */
{ {
tmp[0] = '\0';
strcat(tmp, fmt("%.6s_2", hdr->id)); strcat(tmp, fmt("%.6s_2", hdr->id));
id = tmp; id = tmp;
} }

View File

@ -588,14 +588,17 @@ void CMenu::ShowGameZone()
u32 CMenu::NoInputTime() u32 CMenu::NoInputTime()
{ {
bool input_found = false; bool input_found = false;
if(gc_btnsPressed != 0) if(ShowPointer() == true || RIGHT_STICK_MOVE == true || gc_btnsPressed != 0)
input_found = true; input_found = true;
else else
{ {
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
if(wii_btnsPressed[chan] != 0 || wii_btnsHeld[chan] != 0 || m_show_pointer[chan] == true) if(wii_btnsPressed[chan] != 0 || wii_btnsHeld[chan] != 0)
{
input_found = true; input_found = true;
break;
}
} }
} }
if(input_found == false) if(input_found == false)