usbloadergx/source/banner/gui_banner.cpp

124 lines
2.7 KiB
C++
Raw Normal View History

/****************************************************************************
* 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();
}