/**************************************************************************** * USB Loader GX Team * gui_banner.cpp * * Shows TPL Banner images ***************************************************************************/ #include "gui_banner.h" GuiBanner::GuiBanner(const char *tplfilepath) { memory = NULL; tplfilesize = 0; width = 0; height = 0; FILE *tplfp = fopen(tplfilepath, "rb"); if (tplfp != NULL) { unsigned short heighttemp = 0; unsigned short widthtemp = 0; fseek(tplfp, 0x14, SEEK_SET); fread((void*) &heighttemp, 1, 2, tplfp); fread((void*) &widthtemp, 1, 2, tplfp); fseek(tplfp, 0, SEEK_END); tplfilesize = ftell(tplfp); rewind(tplfp); memory = memalign(32, tplfilesize); if (!memory) { fclose(tplfp); return; } fread(memory, 1, tplfilesize, tplfp); fclose(tplfp); TPLFile tplfile; int ret; ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); if (ret < 0) { free(memory); memory = NULL; return; } ret = TPL_GetTexture(&tplfile, 0, &texObj); if (ret < 0) { free(memory); memory = NULL; return; } TPL_CloseTPLFile(&tplfile); width = widthtemp; height = heighttemp; widescreen = 0; filecheck = true; } else { filecheck = false; fclose(tplfp); } } GuiBanner::GuiBanner(void *mem, u32 len, int w, int h) { if (!mem || !len) return; memory = mem; tplfilesize = len; width = w; height = h; TPLFile tplfile; int ret; ret = TPL_OpenTPLFromMemory(&tplfile, memory, tplfilesize); if (ret < 0) { free(memory); memory = NULL; return; } ret = TPL_GetTexture(&tplfile, 0, &texObj); if (ret < 0) { free(memory); memory = NULL; return; } TPL_CloseTPLFile(&tplfile); filecheck = true; } GuiBanner::~GuiBanner() { if (memory != NULL) { free(memory); memory = NULL; } } void GuiBanner::Draw() { LOCK( this ); if (!filecheck || !this->IsVisible()) return; float currScale = this->GetScale(); Menu_DrawTPLImg(this->GetLeft(), this->GetTop(), 0, width, height, &texObj, imageangle, widescreen ? currScale * 0.80 : currScale, currScale, this->GetAlpha(), xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4); this->UpdateEffects(); }