*Removed ramdisk
*Lot's of changes in image processing *Added use of libgd and ImageData class from WiiXplorer. No more crashes with corrupted images and no more restriction to images sizes that are devidable by 4 :). *Added a recource file manager for better access of all files/images for internal files and theme files. Some themes will have to adjust some filenames because we want to use the same filenames for themes and internal source files.
@ -2,8 +2,8 @@
|
||||
<app version="1">
|
||||
<name> USB Loader GX</name>
|
||||
<coder>USB Loader GX Team</coder>
|
||||
<version>1.0 r975</version>
|
||||
<release_date>201009250708</release_date>
|
||||
<version>1.0 r976</version>
|
||||
<release_date>201009251926</release_date>
|
||||
<short_description>Loads games from USB-devices</short_description>
|
||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
||||
|
4
Makefile
@ -25,7 +25,6 @@ SOURCES := source \
|
||||
source/libwbfs \
|
||||
source/language \
|
||||
source/mload \
|
||||
source/ramdisk \
|
||||
source/patches \
|
||||
source/usbloader \
|
||||
source/xml \
|
||||
@ -42,6 +41,7 @@ SOURCES := source \
|
||||
source/memory \
|
||||
source/libntfs \
|
||||
source/FileOperations \
|
||||
source/ImageOperations \
|
||||
source/utils \
|
||||
source/utils/minizip \
|
||||
source/usbloader/wbfs
|
||||
@ -60,7 +60,7 @@ LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80B00
|
||||
#---------------------------------------------------------------------------------
|
||||
# any extra libraries we wish to link with the project
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBS := -lpngu -lpng -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad -lmxml -ljpeg -lunzip
|
||||
LIBS := -lpngu -lpng -lgd -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec -lmad -lmxml -ljpeg -lunzip
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
|
2
gui.pnps
@ -1 +1 @@
|
||||
<pd><ViewState><e p="gui\source\mload" x="false"></e><e p="gui\source\settings" x="false"></e><e p="gui\source\utils" x="false"></e><e p="gui\source\images" x="false"></e><e p="gui\source\libfat" x="false"></e><e p="gui\source\prompts" x="false"></e><e p="gui\source\banner" x="false"></e><e p="gui\source\cheats" x="false"></e><e p="gui\source\libntfs" x="false"></e><e p="gui\source\network" x="true"></e><e p="gui\source\fonts" x="false"></e><e p="gui\source\menu" x="false"></e><e p="gui\source\ramdisk" x="false"></e><e p="gui\source\sounds" x="false"></e><e p="gui\source\system" x="false"></e><e p="gui\source\wad" x="false"></e><e p="gui" x="true"></e><e p="gui\source\FileOperations" x="false"></e><e p="gui\source\homebrewboot" x="false"></e><e p="gui\source\language" x="false"></e><e p="gui\source" x="true"></e><e p="gui\source\libwbfs" x="false"></e><e p="gui\source\libwiigui" x="false"></e><e p="gui\source\patches" x="false"></e><e p="gui\source\themes" x="false"></e><e p="gui\source\memory" x="false"></e><e p="gui\source\usbloader" x="false"></e><e p="gui\source\xml" x="false"></e></ViewState></pd>
|
||||
<pd><ViewState><e p="gui\source\mload" x="false"></e><e p="gui\source\settings" x="false"></e><e p="gui\source\utils" x="false"></e><e p="gui\source\images" x="false"></e><e p="gui\source\libfat" x="false"></e><e p="gui\source\prompts" x="false"></e><e p="gui\source\banner" x="false"></e><e p="gui\source\cheats" x="false"></e><e p="gui\source\libntfs" x="false"></e><e p="gui\source\network" x="true"></e><e p="gui\source\fonts" x="false"></e><e p="gui\source\menu" x="false"></e><e p="gui\source\sounds" x="false"></e><e p="gui\source\system" x="false"></e><e p="gui\source\wad" x="false"></e><e p="gui" x="true"></e><e p="gui\source\FileOperations" x="false"></e><e p="gui\source\homebrewboot" x="false"></e><e p="gui\source\language" x="false"></e><e p="gui\source" x="true"></e><e p="gui\source\libwbfs" x="false"></e><e p="gui\source\libwiigui" x="false"></e><e p="gui\source\patches" x="false"></e><e p="gui\source\themes" x="false"></e><e p="gui\source\ImageOperations" x="false"></e><e p="gui\source\memory" x="false"></e><e p="gui\source\usbloader" x="false"></e><e p="gui\source\xml" x="false"></e></ViewState></pd>
|
616
source/ImageOperations/TextureConverter.c
Normal file
@ -0,0 +1,616 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* Dimok
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* TextureConverter.cpp
|
||||
*
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#include <gccore.h>
|
||||
#include <malloc.h>
|
||||
#include "TextureConverter.h"
|
||||
|
||||
#define cut_bounds(x, min, max) ( (x < min) ? min : (x > max) ? max : x )
|
||||
#define ALIGN(x) (((x) + 3) & ~3)
|
||||
#define ALIGN32(x) (((x) + 31) & ~31)
|
||||
#define coordsRGBA8(x, y, w) (((((y >> 2) * (w >> 2) + (x >> 2)) << 5) + ((y & 3) << 2) + (x & 3)) << 1)
|
||||
#define datasizeRGBA8(w, h) ALIGN32(((w+3)>>2)*((h+3)>>2)*32*2)
|
||||
|
||||
#define MAXWIDTH 1024.0f
|
||||
#define MAXHEIGHT 768.0f
|
||||
|
||||
static u16 avg(u16 w0, u16 w1, u16 c0, u16 c1)
|
||||
{
|
||||
u16 a0, a1;
|
||||
u16 a, c;
|
||||
|
||||
a0 = c0 >> 11;
|
||||
a1 = c1 >> 11;
|
||||
a = (w0*a0 + w1*a1) / (w0 + w1);
|
||||
c = a << 11;
|
||||
|
||||
a0 = (c0 >> 5) & 63;
|
||||
a1 = (c1 >> 5) & 63;
|
||||
a = (w0*a0 + w1*a1) / (w0 + w1);
|
||||
c |= a << 5;
|
||||
|
||||
a0 = c0 & 31;
|
||||
a1 = c1 & 31;
|
||||
a = (w0*a0 + w1*a1) / (w0 + w1);
|
||||
c |= a;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
bool I4ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 8)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 8)
|
||||
{
|
||||
for(y = y1; y < (y1 + 8); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 8); x += 2, iv++)
|
||||
{
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
u8 oldpixel = buffer[iv];
|
||||
u8 b = (oldpixel >> 4) * 255 / 15;
|
||||
u8 g = (oldpixel >> 4) * 255 / 15;
|
||||
u8 r = (oldpixel >> 4) * 255 / 15;
|
||||
u8 a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
|
||||
r = (oldpixel & 0xF) * 255 / 15;
|
||||
g = (oldpixel & 0xF) * 255 / 15;
|
||||
b = (oldpixel & 0xF) * 255 / 15;
|
||||
a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x+1, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IA4ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 4)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 8)
|
||||
{
|
||||
for(y = y1; y < (y1 + 4); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 8); x++)
|
||||
{
|
||||
u8 oldpixel = *(u8*)(buffer + (iv++));
|
||||
oldpixel = ~oldpixel;
|
||||
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
u8 r = ((oldpixel & 0xF) * 255) / 15;
|
||||
u8 g = ((oldpixel & 0xF) * 255) / 15;
|
||||
u8 b = ((oldpixel & 0xF) * 255) / 15;
|
||||
u8 a = ((oldpixel >> 4) * 255) / 15;
|
||||
a = 127-127*a/255;
|
||||
|
||||
gdImageSetPixel(*im, x+1, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool I8ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 4)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 8)
|
||||
{
|
||||
for(y = y1; y < (y1 + 4); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 8); x++)
|
||||
{
|
||||
u8 pixel = *(u8*)(buffer + ((iv++) * 1));
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
u8 r = pixel;
|
||||
u8 g = pixel;
|
||||
u8 b = pixel;
|
||||
u8 a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IA8ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 4)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 4)
|
||||
{
|
||||
for(y = y1; y < (y1 + 4); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 4); x++)
|
||||
{
|
||||
u16 oldpixel = *(u16*)(buffer + ((iv++) * 2));
|
||||
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
u8 r = oldpixel >> 8;
|
||||
u8 g = oldpixel >> 8;
|
||||
u8 b = oldpixel >> 8;
|
||||
u8 a = oldpixel & 0xFF;
|
||||
a = 127-127*a/255;
|
||||
|
||||
gdImageSetPixel(*im, x+1, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CMPToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u8 r, g, b, a;
|
||||
u16 raw;
|
||||
u16 c[4];
|
||||
int x0, x1, x2, y0, y1, y2, off;
|
||||
int ww = (-(-(width) & -(8)));
|
||||
int ix;
|
||||
u32 px;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
x0 = x & 3;
|
||||
x1 = (x >> 2) & 1;
|
||||
x2 = x >> 3;
|
||||
y0 = y & 3;
|
||||
y1 = (y >> 2) & 1;
|
||||
y2 = y >> 3;
|
||||
off = (8 * x1) + (16 * y1) + (32 * x2) + (4 * ww * y2);
|
||||
|
||||
c[0] = *(u16*)(buffer + off);
|
||||
c[1] = *(u16*)(buffer + off + 2);
|
||||
if (c[0] > c[1]) {
|
||||
c[2] = avg(2, 1, c[0], c[1]);
|
||||
c[3] = avg(1, 2, c[0], c[1]);
|
||||
} else {
|
||||
c[2] = avg(1, 1, c[0], c[1]);
|
||||
c[3] = 0;
|
||||
}
|
||||
|
||||
px = *(u32*)(buffer + off + 4);
|
||||
ix = x0 + (4 * y0);
|
||||
raw = c[(px >> (30 - (2 * ix))) & 3];
|
||||
|
||||
r = (raw >> 8) & 0xf8;
|
||||
g = (raw >> 3) & 0xf8;
|
||||
b = (raw << 3) & 0xf8;
|
||||
a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RGB565ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 4)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 4)
|
||||
{
|
||||
for(y = y1; y < (y1 + 4); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 4); x++)
|
||||
{
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
u16 pixel = *(u16*)(buffer + ((iv++) * 2));
|
||||
|
||||
u8 r = ((pixel >> 11) & 0x1F) << 3;
|
||||
u8 g = ((pixel >> 5) & 0x3F) << 2;
|
||||
u8 b = ((pixel >> 0) & 0x1F) << 3;
|
||||
u8 a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RGB565A3ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y;
|
||||
u32 x1, y1;
|
||||
u32 iv;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(iv = 0, y1 = 0; y1 < height; y1 += 4)
|
||||
{
|
||||
for(x1 = 0; x1 < width; x1 += 4)
|
||||
{
|
||||
for(y = y1; y < (y1 + 4); y++)
|
||||
{
|
||||
for(x = x1; x < (x1 + 4); x++)
|
||||
{
|
||||
u16 pixel = *(u16*)(buffer + ((iv++) * 2));
|
||||
if((x >= width) || (y >= height))
|
||||
continue;
|
||||
|
||||
if(pixel & (1 << 15))
|
||||
{
|
||||
// RGB5
|
||||
u8 r = (((pixel >> 10) & 0x1F) * 255) / 31;
|
||||
u8 g = (((pixel >> 5) & 0x1F) * 255) / 31;
|
||||
u8 b = (((pixel >> 0) & 0x1F) * 255) / 31;
|
||||
u8 a = gdAlphaOpaque;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
else
|
||||
{
|
||||
// RGB4A3
|
||||
u8 r = (((pixel >> 12) & 0xF) * 255) / 15;
|
||||
u8 g = (((pixel >> 8) & 0xF) * 255) / 15;
|
||||
u8 b = (((pixel >> 4) & 0xF) * 255) / 15;
|
||||
u8 a = (((pixel >> 0) & 0x7) * 64) / 7;
|
||||
a = 127-127*a/255;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RGBA8ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y, offset;
|
||||
u8 r, g, b, a;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(y = 0; y < height; y++)
|
||||
{
|
||||
for(x = 0; x < width; x++)
|
||||
{
|
||||
offset = coordsRGBA8(x, y, width);
|
||||
a = *(buffer+offset);
|
||||
r = *(buffer+offset+1);
|
||||
g = *(buffer+offset+32);
|
||||
b = *(buffer+offset+33);
|
||||
|
||||
a = 127-127*a/255;
|
||||
|
||||
gdImageSetPixel(*im, x, y, gdTrueColorAlpha(r, g, b, a));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool YCbYCrToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im)
|
||||
{
|
||||
u32 x, y, x1, YCbYCr;
|
||||
int r, g, b;
|
||||
u8 r1, g1, b1;
|
||||
|
||||
if(!buffer)
|
||||
return false;
|
||||
|
||||
*im = gdImageCreateTrueColor(width, height);
|
||||
if(*im == 0)
|
||||
return false;
|
||||
|
||||
gdImageAlphaBlending(*im, 0);
|
||||
gdImageSaveAlpha(*im, 1);
|
||||
|
||||
for(y = 0; y < height; y++)
|
||||
{
|
||||
for (x = 0, x1 = 0; x < (width / 2); x++, x1++)
|
||||
{
|
||||
YCbYCr = ((u32 *) buffer)[y*width/2+x];
|
||||
|
||||
u8 * val = (u8 *) &YCbYCr;
|
||||
|
||||
r = (int) (1.371f * (val[3] - 128));
|
||||
g = (int) (- 0.698f * (val[3] - 128) - 0.336f * (val[1] - 128));
|
||||
b = (int) (1.732f * (val[1] - 128));
|
||||
|
||||
r1 = cut_bounds(val[0] + r, 0, 255);
|
||||
g1 = cut_bounds(val[0] + g, 0, 255);
|
||||
b1 = cut_bounds(val[0] + b, 0, 255);
|
||||
|
||||
gdImageSetPixel(*im, x1, y, gdTrueColorAlpha(r1, g1, b1, gdAlphaOpaque));
|
||||
x1++;
|
||||
|
||||
r1 = cut_bounds(val[2] + r, 0, 255);
|
||||
g1 = cut_bounds(val[2] + g, 0, 255);
|
||||
b1 = cut_bounds(val[2] + b, 0, 255);
|
||||
gdImageSetPixel(*im, x1, y, gdTrueColorAlpha(r1, g1, b1, gdAlphaOpaque));
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
u8 * GDImageToRGBA8(gdImagePtr * gdImg, int * w, int * h)
|
||||
{
|
||||
int width = gdImageSX(*gdImg);
|
||||
int height = gdImageSY(*gdImg);
|
||||
float scale = 1.0f;
|
||||
int retries = 100; //shouldn't need that long but to be sure
|
||||
|
||||
gdImageAlphaBlending(*gdImg, 0);
|
||||
gdImageSaveAlpha(*gdImg, 1);
|
||||
|
||||
while(width*scale > MAXWIDTH || height*scale > MAXHEIGHT)
|
||||
{
|
||||
if(width*scale > MAXWIDTH)
|
||||
scale = MAXWIDTH/width;
|
||||
if(height*scale > MAXHEIGHT)
|
||||
scale = MAXHEIGHT/height;
|
||||
|
||||
retries--;
|
||||
|
||||
if(!retries)
|
||||
{
|
||||
while(width*scale > MAXWIDTH || height*scale > MAXHEIGHT)
|
||||
scale -= 0.02;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
width = ALIGN((int) (width * scale));
|
||||
height = ALIGN((int) (height * scale));
|
||||
|
||||
if(width != gdImageSX(*gdImg) || height != gdImageSY(*gdImg))
|
||||
{
|
||||
gdImagePtr dst = gdImageCreateTrueColor(width, height);
|
||||
gdImageAlphaBlending(dst, 0);
|
||||
gdImageSaveAlpha(dst, 1);
|
||||
gdImageCopyResized(dst, *gdImg, 0, 0, 0, 0, width, height, gdImageSX(*gdImg), gdImageSY(*gdImg));
|
||||
|
||||
gdImageDestroy(*gdImg);
|
||||
*gdImg = dst;
|
||||
|
||||
width = gdImageSX(*gdImg);
|
||||
height = gdImageSY(*gdImg);
|
||||
}
|
||||
|
||||
int len = datasizeRGBA8(width, height);
|
||||
|
||||
u8 * data = (u8 *) memalign(32, len);
|
||||
if(!data)
|
||||
return NULL;
|
||||
|
||||
u8 a;
|
||||
u32 x, y, pixel, offset;
|
||||
|
||||
for(y = 0; y < height; ++y)
|
||||
{
|
||||
for(x = 0; x < width; ++x)
|
||||
{
|
||||
pixel = gdImageGetPixel(*gdImg, x, y);
|
||||
|
||||
a = 254 - 2*((u8)gdImageAlpha(*gdImg, pixel));
|
||||
if(a == 254) a++;
|
||||
|
||||
offset = coordsRGBA8(x, y, width);
|
||||
data[offset] = a;
|
||||
data[offset+1] = (u8)gdImageRed(*gdImg, pixel);
|
||||
data[offset+32] = (u8)gdImageGreen(*gdImg, pixel);
|
||||
data[offset+33] = (u8)gdImageBlue(*gdImg, pixel);
|
||||
}
|
||||
}
|
||||
|
||||
DCFlushRange(data, len);
|
||||
|
||||
if(w)
|
||||
*w = width;
|
||||
if(h)
|
||||
*h = height;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
u8 * FlipRGBAImage(const u8 *src, u32 width, u32 height)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
int len = datasizeRGBA8(width, height);
|
||||
|
||||
u8 * data = memalign(32, len);
|
||||
if(!data)
|
||||
return NULL;
|
||||
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
u32 offset = coordsRGBA8(x, y, width);
|
||||
u8 a = src[offset];
|
||||
u8 r = src[offset+1];
|
||||
u8 g = src[offset+32];
|
||||
u8 b = src[offset+33];
|
||||
|
||||
u32 offset2 = coordsRGBA8((width-x-1), (height-y-1), width);
|
||||
data[offset2] = a;
|
||||
data[offset2+1] = r;
|
||||
data[offset2+32] = g;
|
||||
data[offset2+33] = b;
|
||||
}
|
||||
}
|
||||
|
||||
DCFlushRange(data, len);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
u8 * RGB8ToRGBA8(const u8 *src, u32 width, u32 height)
|
||||
{
|
||||
u32 x, y, offset;
|
||||
|
||||
int len = datasizeRGBA8(width, height);
|
||||
|
||||
u8 * dst = (u8 *) memalign(32, len);
|
||||
if(!dst)
|
||||
return NULL;
|
||||
|
||||
for (y = 0; y < height; ++y)
|
||||
{
|
||||
for (x = 0; x < width; ++x)
|
||||
{
|
||||
offset = coordsRGBA8(x, y, width);
|
||||
dst[offset] = 0xFF;
|
||||
dst[offset+1] = src[(y*width+x)*3];
|
||||
dst[offset+32] = src[(y*width+x)*3+1];
|
||||
dst[offset+33] = src[(y*width+x)*3+2];
|
||||
}
|
||||
}
|
||||
|
||||
DCFlushRange(dst, len);
|
||||
|
||||
return dst;
|
||||
}
|
57
source/ImageOperations/TextureConverter.h
Normal file
@ -0,0 +1,57 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* Dimok
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* TextureConverter.h
|
||||
*
|
||||
* A texture to GD image converter.
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#ifndef __TEXTURE_CONVERTER_H_
|
||||
#define __TEXTURE_CONVERTER_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include <gccore.h>
|
||||
#include <gd.h>
|
||||
|
||||
bool I4ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool IA4ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool I8ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool IA8ToGD(const u8 * buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool CMPToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool RGB565ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool RGB565A3ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool RGBA8ToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
bool YCbYCrToGD(const u8* buffer, u32 width, u32 height, gdImagePtr * im);
|
||||
u8 * GDImageToRGBA8(gdImagePtr * gdImg, int * w, int * h);
|
||||
u8 * FlipRGBAImage(const u8 *src, u32 width, u32 height);
|
||||
u8 * RGB8ToRGBA8(const u8 *src, u32 width, u32 height);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //__TEXTURE_CONVERTER_H_
|
244
source/ImageOperations/TplImage.cpp
Normal file
@ -0,0 +1,244 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* Dimok
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* TplImage.cpp
|
||||
*
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#include <gccore.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include "FileOperations/fileops.h"
|
||||
#include "TextureConverter.h"
|
||||
#include "TplImage.h"
|
||||
|
||||
TplImage::TplImage(const char * filepath)
|
||||
{
|
||||
TPLBuffer = NULL;
|
||||
TPLSize = 0;
|
||||
|
||||
u8 * buffer = NULL;
|
||||
u64 filesize = 0;
|
||||
LoadFileToMem(filepath, &buffer, &filesize);
|
||||
|
||||
if(buffer)
|
||||
{
|
||||
LoadImage(buffer, filesize);
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
TplImage::TplImage(const u8 * imgBuffer, u32 imgSize)
|
||||
{
|
||||
TPLBuffer = NULL;
|
||||
TPLSize = 0;
|
||||
|
||||
if(imgBuffer)
|
||||
{
|
||||
LoadImage(imgBuffer, imgSize);
|
||||
}
|
||||
}
|
||||
|
||||
TplImage::~TplImage()
|
||||
{
|
||||
if(TPLBuffer)
|
||||
free(TPLBuffer);
|
||||
|
||||
Texture.clear();
|
||||
TextureHeader.clear();
|
||||
TplTextureBuffer.clear();
|
||||
}
|
||||
|
||||
bool TplImage::LoadImage(const u8 * imgBuffer, u32 imgSize)
|
||||
{
|
||||
if(TPLBuffer)
|
||||
free(TPLBuffer);
|
||||
|
||||
TPLBuffer = NULL;
|
||||
TPLSize = 0;
|
||||
|
||||
if(!imgBuffer)
|
||||
return false;
|
||||
|
||||
TPLBuffer = (u8 *) malloc(imgSize);
|
||||
if(!TPLBuffer)
|
||||
return false;
|
||||
|
||||
TPLSize = imgSize;
|
||||
|
||||
memcpy(TPLBuffer, imgBuffer, imgSize);
|
||||
|
||||
return ParseTplFile();
|
||||
}
|
||||
|
||||
bool TplImage::ParseTplFile()
|
||||
{
|
||||
if(!TPLBuffer)
|
||||
return false;
|
||||
|
||||
TPLHeader = (const TPL_Header *) TPLBuffer;
|
||||
|
||||
if(TPLHeader->magic != 0x0020AF30)
|
||||
return false;
|
||||
|
||||
if(TPLHeader->head_size != 12)
|
||||
return false;
|
||||
|
||||
const TPL_Texture * curTexture = (const TPL_Texture *) (TPLHeader+1);
|
||||
|
||||
for(u32 i = 0; i < TPLHeader->num_textures; i++)
|
||||
{
|
||||
Texture.resize(i+1);
|
||||
TextureHeader.resize(i+1);
|
||||
TplTextureBuffer.resize(i+1);
|
||||
|
||||
Texture[i] = curTexture;
|
||||
|
||||
TextureHeader[i] = (const TPL_Texture_Header *) ((const u8 *) TPLBuffer+Texture[i]->text_header_offset);
|
||||
|
||||
TplTextureBuffer[i] = TPLBuffer + TextureHeader[i]->offset;
|
||||
|
||||
curTexture++;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
int TplImage::GetWidth(int pos)
|
||||
{
|
||||
if(pos < 0 || pos >= (int) Texture.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return TextureHeader[pos]->width;
|
||||
}
|
||||
|
||||
int TplImage::GetHeight(int pos)
|
||||
{
|
||||
if(pos < 0 || pos >= (int) TextureHeader.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return TextureHeader[pos]->height;
|
||||
}
|
||||
|
||||
u32 TplImage::GetFormat(int pos)
|
||||
{
|
||||
if(pos < 0 || pos >= (int) TextureHeader.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return TextureHeader[pos]->format;
|
||||
}
|
||||
|
||||
const u8 * TplImage::GetTextureBuffer(int pos)
|
||||
{
|
||||
if(pos < 0 || pos >= (int) TplTextureBuffer.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return TplTextureBuffer[pos];
|
||||
}
|
||||
|
||||
int TplImage::GetTextureSize(int pos)
|
||||
{
|
||||
int width = GetWidth(pos);
|
||||
int height = GetHeight(pos);
|
||||
int len = 0;
|
||||
|
||||
switch(GetFormat(pos))
|
||||
{
|
||||
case GX_TF_I4:
|
||||
case GX_TF_CI4:
|
||||
case GX_TF_CMPR:
|
||||
len = ((width+7)>>3)*((height+7)>>3)*32;
|
||||
break;
|
||||
case GX_TF_I8:
|
||||
case GX_TF_IA4:
|
||||
case GX_TF_CI8:
|
||||
len = ((width+7)>>3)*((height+7)>>2)*32;
|
||||
break;
|
||||
case GX_TF_IA8:
|
||||
case GX_TF_CI14:
|
||||
case GX_TF_RGB565:
|
||||
case GX_TF_RGB5A3:
|
||||
len = ((width+3)>>2)*((height+3)>>2)*32;
|
||||
break;
|
||||
case GX_TF_RGBA8:
|
||||
len = ((width+3)>>2)*((height+3)>>2)*32*2;
|
||||
break;
|
||||
default:
|
||||
len = ((width+3)>>2)*((height+3)>>2)*32*2;
|
||||
break;
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
gdImagePtr TplImage::ConvertToGD(int pos)
|
||||
{
|
||||
if(pos < 0 || pos >= (int) Texture.size())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
gdImagePtr gdImg = 0;
|
||||
|
||||
switch(TextureHeader[pos]->format)
|
||||
{
|
||||
case GX_TF_RGB565:
|
||||
RGB565ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_RGB5A3:
|
||||
RGB565A3ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_RGBA8:
|
||||
RGBA8ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_I4:
|
||||
I4ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_I8:
|
||||
I8ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_IA4:
|
||||
IA4ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_IA8:
|
||||
IA8ToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
case GX_TF_CMPR:
|
||||
CMPToGD(TplTextureBuffer[pos], TextureHeader[pos]->width, TextureHeader[pos]->height, &gdImg);
|
||||
break;
|
||||
default:
|
||||
gdImg = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return gdImg;
|
||||
}
|
98
source/ImageOperations/TplImage.h
Normal file
@ -0,0 +1,98 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* Dimok
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* TplImage.h
|
||||
*
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#ifndef TPL_IMAGE_H_
|
||||
#define TPL_IMAGE_H_
|
||||
|
||||
#include <gccore.h>
|
||||
#include <gd.h>
|
||||
#include <vector>
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 magic;
|
||||
u32 num_textures;
|
||||
u32 head_size;
|
||||
} TPL_Header;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 text_header_offset;
|
||||
u32 text_palette_offset;
|
||||
} TPL_Texture;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u16 height;
|
||||
u16 width;
|
||||
u32 format;
|
||||
u32 offset;
|
||||
u32 wrap_s;
|
||||
u32 wrap_t;
|
||||
u32 min;
|
||||
u32 mag;
|
||||
f32 lod_bias;
|
||||
u8 edge_lod;
|
||||
u8 min_lod;
|
||||
u8 max_lod;
|
||||
u8 unpacked;
|
||||
} TPL_Texture_Header;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u16 num_items;
|
||||
u8 unpacked;
|
||||
u8 pad;
|
||||
u32 format;
|
||||
u32 offset;
|
||||
} TPL_Palette_Header;
|
||||
|
||||
class TplImage
|
||||
{
|
||||
public:
|
||||
TplImage(const char * filepath);
|
||||
TplImage(const u8 * imgBuffer, u32 imgSize);
|
||||
~TplImage();
|
||||
bool LoadImage(const u8 * imgBuffer, u32 imgSize);
|
||||
int GetWidth(int Texture);
|
||||
int GetHeight(int Texture);
|
||||
u32 GetFormat(int Texture);
|
||||
const u8 * GetTextureBuffer(int Texture);
|
||||
int GetTextureSize(int Texture);
|
||||
gdImagePtr ConvertToGD(int Texture);
|
||||
private:
|
||||
bool ParseTplFile();
|
||||
|
||||
u8 * TPLBuffer;
|
||||
u32 TPLSize;
|
||||
const TPL_Header * TPLHeader;
|
||||
std::vector<const TPL_Texture *> Texture;
|
||||
std::vector<const TPL_Texture_Header *> TextureHeader;
|
||||
std::vector<const u8 *> TplTextureBuffer;
|
||||
};
|
||||
|
||||
#endif
|
@ -25,7 +25,6 @@
|
||||
#include "MD5.h"
|
||||
#include "banner.h"
|
||||
#include "openingbnr.h"
|
||||
#include "../ramdisk/ramdisk.h"
|
||||
#include "FileOperations/fileops.h"
|
||||
|
||||
u16 be16(const u8 *p)
|
||||
@ -480,6 +479,8 @@ int unpackBin(const char * filename, const char * outdir)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
#define TMP_PATH(s) "BANNER:/dump"s
|
||||
//#define TMP_PATH(s) "SD:/dump"s
|
||||
|
||||
@ -559,3 +560,4 @@ int unpackBanner(const u8 *gameid, int what, const char *outdir)
|
||||
error2: if (ret < 0) return ret;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
@ -33,7 +33,7 @@ extern "C"
|
||||
#define UNPACK_ICON_BIN 2 /* extract icon.bin to outdir/icon/ */
|
||||
#define UNPACK_SOUND_BIN 4 /* copies sound.bin to outdir/sound.bin */
|
||||
#define UNPACK_ALL (UNPACK_SOUND_BIN | UNPACK_ICON_BIN | UNPACK_BANNER_BIN)
|
||||
int unpackBanner(const u8 * gameid, int what, const char *outdir);
|
||||
//int unpackBanner(const u8 * gameid, int what, const char *outdir);
|
||||
//! Extract the lz77 compressed banner, icon and sound .bin
|
||||
u8* decompress_lz77(u8 *data, size_t data_size, size_t* decompressed_size);
|
||||
|
||||
|
@ -34,11 +34,8 @@ int CheatMenu(const char * gameID)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
GuiImage settingsbackground(&settingsbg);
|
||||
|
||||
GuiTrigger trigA;
|
||||
@ -83,8 +80,7 @@ int CheatMenu(const char * gameID)
|
||||
case 1:
|
||||
int cntcheats = c.getCnt();
|
||||
customOptionList cheatslst(cntcheats);
|
||||
GuiCustomOptionBrowser chtBrowser(400, 280, &cheatslst, Settings.theme_path, "bg_options_settings.png",
|
||||
bg_options_settings_png, 1, 90);
|
||||
GuiCustomOptionBrowser chtBrowser(400, 280, &cheatslst, "bg_options_settings.png", 1, 90);
|
||||
chtBrowser.SetPosition(0, 90);
|
||||
chtBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
chtBrowser.SetClickable(true);
|
||||
|
@ -116,30 +116,9 @@ extern const u32 settings_background_png_size;
|
||||
extern const u8 bg_browser_png[];
|
||||
extern const u32 bg_browser_png_size;
|
||||
|
||||
extern const u8 icon_archives_png[];
|
||||
extern const u32 icon_archives_png_size;
|
||||
|
||||
//extern const u8 icon_default_png[];
|
||||
//extern const u32 icon_default_png_size;
|
||||
|
||||
extern const u8 icon_folder_png[];
|
||||
extern const u32 icon_folder_png_size;
|
||||
/*
|
||||
extern const u8 icon_gfx_png[];
|
||||
extern const u32 icon_gfx_png_size;
|
||||
|
||||
extern const u8 icon_pls_png[];
|
||||
extern const u32 icon_pls_png_size;
|
||||
|
||||
extern const u8 icon_sfx_png[];
|
||||
extern const u32 icon_sfx_png_size;
|
||||
|
||||
extern const u8 icon_txt_png[];
|
||||
extern const u32 icon_txt_png_size;
|
||||
|
||||
extern const u8 icon_xml_png[];
|
||||
extern const u32 icon_xml_png_size;
|
||||
*/
|
||||
extern const u8 bg_browser_selection_png[];
|
||||
extern const u32 bg_browser_selection_png_size;
|
||||
|
||||
@ -176,11 +155,8 @@ extern const u32 dialogue_box_startgame_png_size;
|
||||
extern const u8 wdialogue_box_startgame_png[];
|
||||
extern const u32 wdialogue_box_startgame_png_size;
|
||||
|
||||
extern const u8 button_dialogue_box_startgame_png[];
|
||||
extern const u32 button_dialogue_box_startgame_size;
|
||||
|
||||
extern const u8 button_dialogue_box_png[];
|
||||
extern const u32 button_dialogue_box_size;
|
||||
extern const u32 button_dialogue_box_png_size;
|
||||
|
||||
extern const u8 keyboard_textbox_png[];
|
||||
extern const u32 keyboard_textbox_png_size;
|
||||
@ -204,19 +180,19 @@ extern const u8 keyboard_clear_over_png[];
|
||||
extern const u32 keyboard_clear_over_png_size;
|
||||
|
||||
extern const u8 menu_button_png[];
|
||||
extern const u32 menu_button_size;
|
||||
extern const u32 menu_button_png_size;
|
||||
|
||||
extern const u8 menu_button_over_png[];
|
||||
extern const u32 menu_button_over_size;
|
||||
extern const u32 menu_button_over_png_size;
|
||||
|
||||
extern const u8 settings_button_png[];
|
||||
extern const u32 settings_button_size;
|
||||
extern const u32 settings_button_png_size;
|
||||
|
||||
extern const u8 settings_button_over_png[];
|
||||
extern const u32 settings_button_over_size;
|
||||
extern const u32 settings_button_over_png_size;
|
||||
|
||||
extern const u8 settings_menu_button_png[];
|
||||
extern const u32 settings_menu_button_size;
|
||||
extern const u32 settings_menu_button_png_size;
|
||||
|
||||
extern const u8 wiimote_poweroff_png[];
|
||||
extern const u32 wiimote_poweroff_png_size;
|
||||
@ -242,21 +218,12 @@ extern const u32 scrollbar_png_size;
|
||||
extern const u8 scrollbar_arrowup_png[];
|
||||
extern const u32 scrollbar_arrowup_png_size;
|
||||
|
||||
extern const u8 scrollbar_arrowup_over_png[];
|
||||
extern const u32 scrollbar_arrowup_over_png_size;
|
||||
|
||||
extern const u8 scrollbar_arrowdown_png[];
|
||||
extern const u32 scrollbar_arrowdown_png_size;
|
||||
|
||||
extern const u8 scrollbar_arrowdown_over_png[];
|
||||
extern const u32 scrollbar_arrowdown_over_png_size;
|
||||
|
||||
extern const u8 scrollbar_box_png[];
|
||||
extern const u32 scrollbar_box_png_size;
|
||||
|
||||
extern const u8 scrollbar_box_over_png[];
|
||||
extern const u32 scrollbar_box_over_png_size;
|
||||
|
||||
extern const u8 progressbar_png[];
|
||||
extern const u32 progressbar_png_size;
|
||||
|
||||
@ -344,27 +311,51 @@ extern const u32 not_favorite_png_size;
|
||||
extern const u8 favIcon_png[];
|
||||
extern const u32 favIcon_png_size;
|
||||
|
||||
extern const u8 favIcon_gray_png[];
|
||||
extern const u32 favIcon_gray_png_size;
|
||||
|
||||
extern const u8 searchIcon_png[];
|
||||
extern const u32 searchIcon_png_size;
|
||||
|
||||
extern const u8 searchIcon_gray_png[];
|
||||
extern const u32 searchIcon_gray_png_size;
|
||||
|
||||
extern const u8 abcIcon_png[];
|
||||
extern const u32 abcIcon_png_size;
|
||||
|
||||
extern const u8 abcIcon_gray_png[];
|
||||
extern const u32 abcIcon_gray_png_size;
|
||||
|
||||
extern const u8 rankIcon_png[];
|
||||
extern const u32 rankIcon_png_size;
|
||||
|
||||
extern const u8 rankIcon_gray_png[];
|
||||
extern const u32 rankIcon_gray_png_size;
|
||||
|
||||
extern const u8 playCountIcon_png[];
|
||||
extern const u32 playCountIcon_png_size;
|
||||
|
||||
extern const u8 playCountIcon_gray_png[];
|
||||
extern const u32 playCountIcon_gray_png_size;
|
||||
|
||||
extern const u8 arrangeList_png[];
|
||||
extern const u32 arrangeList_png_size;
|
||||
|
||||
extern const u8 arrangeList_gray_png[];
|
||||
extern const u32 arrangeList_gray_png_size;
|
||||
|
||||
extern const u8 arrangeGrid_png[];
|
||||
extern const u32 arrangeGrid_png_size;
|
||||
|
||||
extern const u8 arrangeGrid_gray_png[];
|
||||
extern const u32 arrangeGrid_gray_png_size;
|
||||
|
||||
extern const u8 arrangeCarousel_png[];
|
||||
extern const u32 arrangeCarousel_png_size;
|
||||
|
||||
extern const u8 arrangeCarousel_gray_png[];
|
||||
extern const u32 arrangeCarousel_gray_png_size;
|
||||
|
||||
extern const u8 settings_title_png[];
|
||||
extern const u32 settings_title_png_size;
|
||||
|
||||
@ -387,7 +378,7 @@ extern const u8 wifi1_png[];
|
||||
extern const u32 wifi1_png_size;
|
||||
|
||||
extern const u8 wifi2_png[];
|
||||
extern const u32 wifi2png_size;
|
||||
extern const u32 wifi2_png_size;
|
||||
|
||||
extern const u8 wifi3_png[];
|
||||
extern const u32 wifi3_png_size;
|
||||
@ -395,9 +386,6 @@ extern const u32 wifi3_png_size;
|
||||
extern const u8 wifi4_png[];
|
||||
extern const u32 wifi4_png_size;
|
||||
|
||||
//extern const u8 wifi6_png[];
|
||||
//extern const u32 wifi6_png_size;
|
||||
|
||||
extern const u8 wifi8_png[];
|
||||
extern const u32 wifi8_png_size;
|
||||
|
||||
@ -438,10 +426,10 @@ extern const u32 nunchuk_png_size;
|
||||
extern const u8 nunchukR_png[];
|
||||
extern const u32 nunchukR_png_size;
|
||||
|
||||
extern const u8 dancepadR_png[];
|
||||
extern const u32 dancepadR_size;
|
||||
extern const u8 dancepad_png[];
|
||||
extern const u32 dancepad_png_size;
|
||||
extern const u8 dancepadR_png[];
|
||||
extern const u32 dancepadR_png_size;
|
||||
|
||||
extern const u8 balanceboard_png[];
|
||||
extern const u32 balanceboard_png_size;
|
||||
@ -477,12 +465,7 @@ extern const u8 nintendods_png[];
|
||||
extern const u32 nintendods_png_size;
|
||||
extern const u8 nintendodsR_png[];
|
||||
extern const u32 nintendodsR_png_size;
|
||||
/*
|
||||
extern const u8 vitalitysensor_png[];
|
||||
extern const u32 vitalitysensor_png_size;
|
||||
extern const u8 vitalitysensor_png[];
|
||||
extern const u32 vitalitysensorR_png_size;
|
||||
*/
|
||||
|
||||
extern const u8 esrb_ec_png[];
|
||||
extern const u32 esrb_ec_png_size;
|
||||
|
||||
@ -537,15 +520,24 @@ extern const u32 usbport_png_size;
|
||||
extern const u8 dvd_png[];
|
||||
extern const u32 dvd_png_size;
|
||||
|
||||
extern const u8 dvd_gray_png[];
|
||||
extern const u32 dvd_gray_png_size;
|
||||
|
||||
extern const u8 new_png[];
|
||||
extern const u32 new_png_size;
|
||||
|
||||
extern const u8 lock_png[];
|
||||
extern const u32 lock_png_size;
|
||||
|
||||
extern const u8 lock_gray_png[];
|
||||
extern const u32 lock_gray_png_size;
|
||||
|
||||
extern const u8 unlock_png[];
|
||||
extern const u32 unlock_png_size;
|
||||
|
||||
extern const u8 unlock_gray_png[];
|
||||
extern const u32 unlock_gray_png_size;
|
||||
|
||||
extern const u8 stub_bin[];
|
||||
extern const u32 stub_bin_size;
|
||||
|
||||
|
@ -90,30 +90,21 @@ int MenuHomebrewBrowse()
|
||||
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
/*** Image Variables ***/
|
||||
char imgPath[150];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", Settings.theme_path);
|
||||
GuiImageData bgData(imgPath, settings_background_png);
|
||||
GuiImageData bgData(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgData(imgPath, settings_title_png);
|
||||
GuiImageData MainButtonImgData(Resources::GetFile("settings_title.png"), Resources::GetFileSize("settings_title.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title_over.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgOverData(imgPath, settings_title_over_png);
|
||||
GuiImageData MainButtonImgOverData(Resources::GetFile("settings_title_over.png"), Resources::GetFileSize("settings_title_over.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", Settings.theme_path);
|
||||
GuiImageData arrow_left(imgPath, startgame_arrow_left_png);
|
||||
GuiImageData arrow_left(Resources::GetFile("startgame_arrow_left.png"), Resources::GetFileSize("startgame_arrow_left.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", Settings.theme_path);
|
||||
GuiImageData arrow_right(imgPath, startgame_arrow_right_png);
|
||||
GuiImageData arrow_right(Resources::GetFile("startgame_arrow_right.png"), Resources::GetFileSize("startgame_arrow_right.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sWifi_btn.png", Settings.theme_path);
|
||||
GuiImageData wifiImgData(imgPath, Wifi_btn_png);
|
||||
GuiImageData wifiImgData(Resources::GetFile("Wifi_btn.png"), Resources::GetFileSize("Wifi_btn.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sChannel_btn.png", Settings.theme_path);
|
||||
GuiImageData channelImgData(imgPath, Channel_btn_png);
|
||||
GuiImageData channelImgData(Resources::GetFile("Channel_btn.png"), Resources::GetFileSize("Channel_btn.png"));
|
||||
|
||||
GuiImage background(&bgData);
|
||||
|
||||
@ -400,7 +391,7 @@ int MenuHomebrewBrowse()
|
||||
{
|
||||
char iconpath[200];
|
||||
snprintf(iconpath, sizeof(iconpath), "%sicon.png", HomebrewFiles.GetFilepath(fileoffset + i));
|
||||
IconData[i] = new GuiImageData(iconpath, 0);
|
||||
IconData[i] = new GuiImageData(iconpath);
|
||||
if (IconData[i]->GetImage())
|
||||
{
|
||||
IconImg[i] = new GuiImage(IconData[i]);
|
||||
|
BIN
source/images/abcIcon_gray.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
source/images/arrangeCarousel_gray.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
source/images/arrangeGrid_gray.png
Normal file
After Width: | Height: | Size: 989 B |
BIN
source/images/arrangeList_gray.png
Normal file
After Width: | Height: | Size: 1014 B |
BIN
source/images/dvd_gray.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
source/images/favIcon_gray.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
source/images/lock_gray.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
source/images/playCountIcon_gray.png
Normal file
After Width: | Height: | Size: 1023 B |
BIN
source/images/rankIcon_gray.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
source/images/searchIcon_gray.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
source/images/unlock_gray.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
@ -40,7 +40,7 @@
|
||||
#include <math.h>
|
||||
#include <asndlib.h>
|
||||
#include <wiiuse/wpad.h>
|
||||
#include "pngu/pngu.h"
|
||||
#include "gui_imagedata.h"
|
||||
#include "FreeTypeGX.h"
|
||||
#include "video.h"
|
||||
#include "filelist.h"
|
||||
@ -558,41 +558,6 @@ class GuiWindow: public GuiElement
|
||||
std::vector<GuiElement*> _elements; //!< Contains all elements within the GuiWindow
|
||||
};
|
||||
|
||||
//!Converts image data into GX-useable RGBA8. Currently designed for use only with PNG files
|
||||
class GuiImageData
|
||||
{
|
||||
public:
|
||||
//!Constructor
|
||||
//!Converts the image data to RGBA8 - expects PNG format
|
||||
//!\param i Image data
|
||||
GuiImageData(const u8 * i);
|
||||
GuiImageData(const char * imgPath, const u8 * buffer);
|
||||
GuiImageData(const u8 * img, int imgSize);
|
||||
GuiImageData(const char *path, const char *file, const u8 * buffer, bool force_widescreen = false,
|
||||
const u8 * wbuffer = NULL);
|
||||
//!Destructor
|
||||
~GuiImageData();
|
||||
//!Gets a pointer to the image data
|
||||
//!\return pointer to image data
|
||||
u8 * GetImage();
|
||||
//!Gets the image width
|
||||
//!\return image width
|
||||
int GetWidth();
|
||||
//!Gets the image height
|
||||
//!\return image height
|
||||
int GetHeight();
|
||||
//!LoadJpeg file
|
||||
void LoadJpeg(const u8 *img, int imgSize);
|
||||
//!RawTo4x4RGBA
|
||||
void RawTo4x4RGBA(const unsigned char *src, void *dst, const unsigned int width, const unsigned int height);
|
||||
//!Sets the image to grayscale
|
||||
void SetGrayscale(void);
|
||||
protected:
|
||||
u8 * data; //!< Image data
|
||||
int height; //!< Height of image
|
||||
int width; //!< Width of image
|
||||
};
|
||||
|
||||
//!Display, manage, and manipulate images in the GUI
|
||||
class GuiImage: public GuiElement
|
||||
{
|
||||
@ -1078,9 +1043,8 @@ typedef struct _optionlist
|
||||
class GuiOptionBrowser: public GuiElement
|
||||
{
|
||||
public:
|
||||
GuiOptionBrowser(int w, int h, OptionList * l, const u8 *imagebg, int scrollbar);
|
||||
GuiOptionBrowser(int w, int h, OptionList * l, const char * themePath, const u8 *imagebg, int scrollbar,
|
||||
int start);
|
||||
GuiOptionBrowser(int w, int h, OptionList * l, const char *imagebg, int scrollbar);
|
||||
GuiOptionBrowser(int w, int h, OptionList * l, const char *imagebg, int scrollbar, int start);
|
||||
~GuiOptionBrowser();
|
||||
void SetCol2Position(int x);
|
||||
int FindMenuItem(int c, int d);
|
||||
|
@ -141,8 +141,7 @@ void customOptionList::Clear(bool OnlyValue/*=false*/)
|
||||
/**
|
||||
* Constructor for the GuiCustomOptionBrowser class.
|
||||
*/
|
||||
GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char *themePath,
|
||||
const char *custombg, const u8 *imagebg, int scrollon, int col2)
|
||||
GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * custombg, int scrollon, int col2)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
@ -154,7 +153,6 @@ GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList *
|
||||
selectedItem = 0;
|
||||
focus = 1; // allow focus
|
||||
coL2 = col2;
|
||||
char imgPath[100];
|
||||
|
||||
trigA = new GuiTrigger;
|
||||
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -162,37 +160,31 @@ GuiCustomOptionBrowser::GuiCustomOptionBrowser(int w, int h, customOptionList *
|
||||
trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A);
|
||||
btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%s%s", themePath, custombg);
|
||||
bgOptions = new GuiImageData(imgPath, imagebg);
|
||||
bgOptions = Resources::GetImageData(custombg);
|
||||
|
||||
bgOptionsImg = new GuiImage(bgOptions);
|
||||
bgOptionsImg->SetParent(this);
|
||||
bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath);
|
||||
bgOptionsEntry = new GuiImageData(imgPath, bg_options_entry_png);
|
||||
bgOptionsEntry = Resources::GetImageData("bg_options_entry.png");
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath);
|
||||
scrollbar = new GuiImageData(imgPath, scrollbar_png);
|
||||
scrollbar = Resources::GetImageData("scrollbar.png");
|
||||
scrollbarImg = new GuiImage(scrollbar);
|
||||
scrollbarImg->SetParent(this);
|
||||
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
scrollbarImg->SetPosition(0, 4);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath);
|
||||
arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDown = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownImg = new GuiImage(arrowDown);
|
||||
arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDownOver = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownOverImg = new GuiImage(arrowDownOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath);
|
||||
arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUp = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpImg = new GuiImage(arrowUp);
|
||||
arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUpOver = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpOverImg = new GuiImage(arrowUpOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath);
|
||||
scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBox = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxImg = new GuiImage(scrollbarBox);
|
||||
scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBoxOver = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver);
|
||||
|
||||
arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight());
|
||||
|
@ -44,8 +44,7 @@ class customOptionList
|
||||
class GuiCustomOptionBrowser: public GuiElement
|
||||
{
|
||||
public:
|
||||
GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * themePath, const char *custombg,
|
||||
const u8 *imagebg, int scrollbar, int col2);
|
||||
GuiCustomOptionBrowser(int w, int h, customOptionList * l, const char * background, int scrollbar, int col2);
|
||||
~GuiCustomOptionBrowser();
|
||||
int FindMenuItem(int c, int d);
|
||||
int GetClickedOption();
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "gui.h"
|
||||
#include "prompts/filebrowser.h"
|
||||
#include "settings/CSettings.h"
|
||||
#include "themes/CTheme.h"
|
||||
|
||||
/**
|
||||
* Constructor for the GuiFileBrowser class.
|
||||
@ -34,40 +35,27 @@ GuiFileBrowser::GuiFileBrowser(int w, int h)
|
||||
btnSoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_browser.png", Settings.theme_path);
|
||||
bgFileSelection = new GuiImageData(imgPath, bg_browser_png);
|
||||
bgFileSelection = new GuiImageData(Resources::GetFile("bg_browser.png"), Resources::GetFileSize("bg_browser.png"));
|
||||
bgFileSelectionImg = new GuiImage(bgFileSelection);
|
||||
bgFileSelectionImg->SetParent(this);
|
||||
bgFileSelectionImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_browser_selection.png", Settings.theme_path);
|
||||
bgFileSelectionEntry = new GuiImageData(imgPath, bg_browser_selection_png);
|
||||
// fileArchives = new GuiImageData(icon_archives_png);
|
||||
// fileDefault = new GuiImageData(icon_default_png);
|
||||
fileFolder = new GuiImageData(icon_folder_png);
|
||||
// fileGFX = new GuiImageData(icon_gfx_png);
|
||||
// filePLS = new GuiImageData(icon_pls_png);
|
||||
// fileSFX = new GuiImageData(icon_sfx_png);
|
||||
// fileTXT = new GuiImageData(icon_txt_png);
|
||||
// fileXML = new GuiImageData(icon_xml_png);
|
||||
bgFileSelectionEntry = Resources::GetImageData("bg_browser_selection.png");
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", Settings.theme_path);
|
||||
scrollbar = new GuiImageData(imgPath, scrollbar_png);
|
||||
fileFolder = Resources::GetImageData("icon_folder.png");
|
||||
|
||||
scrollbar = Resources::GetImageData("scrollbar.png");
|
||||
scrollbarImg = new GuiImage(scrollbar);
|
||||
scrollbarImg->SetParent(this);
|
||||
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
scrollbarImg->SetPosition(0, 2);
|
||||
scrollbarImg->SetSkew(0, 0, 0, 0, 0, -30, 0, -30);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", Settings.theme_path);
|
||||
arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDown = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownImg = new GuiImage(arrowDown);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", Settings.theme_path);
|
||||
arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUp = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpImg = new GuiImage(arrowUp);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", Settings.theme_path);
|
||||
scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBox = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxImg = new GuiImage(scrollbarBox);
|
||||
|
||||
arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight());
|
||||
|
@ -25,7 +25,7 @@ int txtscroll = 0;
|
||||
/**
|
||||
* Constructor for the GuiGameBrowser class.
|
||||
*/
|
||||
GuiGameBrowser::GuiGameBrowser(int w, int h, const char *themePath, const u8 *imagebg, int selected, int offset)
|
||||
GuiGameBrowser::GuiGameBrowser(int w, int h, int selected, int offset)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
@ -35,7 +35,6 @@ GuiGameBrowser::GuiGameBrowser(int w, int h, const char *themePath, const u8 *im
|
||||
listOffset = MAX( 0, MIN( offset, ( gameList.size() - pagesize ) ) );
|
||||
selectedItem = selected - offset;
|
||||
focus = 1; // allow focus
|
||||
char imgPath[100];
|
||||
|
||||
trigA = new GuiTrigger;
|
||||
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -43,11 +42,8 @@ GuiGameBrowser::GuiGameBrowser(int w, int h, const char *themePath, const u8 *im
|
||||
trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A);
|
||||
btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath);
|
||||
bgGames = new GuiImageData(imgPath, imagebg);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%snew.png", themePath);
|
||||
newGames = new GuiImageData(imgPath, new_png);
|
||||
bgGames = Resources::GetImageData("bg_options.png");
|
||||
newGames = Resources::GetImageData("new.png");
|
||||
|
||||
bgGameImg = new GuiImage(bgGames);
|
||||
bgGameImg->SetParent(this);
|
||||
@ -55,11 +51,9 @@ GuiGameBrowser::GuiGameBrowser(int w, int h, const char *themePath, const u8 *im
|
||||
|
||||
maxTextWidth = bgGameImg->GetWidth() - 24 - 4;
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath);
|
||||
bgGamesEntry = new GuiImageData(imgPath, bg_options_entry_png);
|
||||
bgGamesEntry = Resources::GetImageData("bg_options_entry.png");
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath);
|
||||
scrollbar = new GuiImageData(imgPath, scrollbar_png);
|
||||
scrollbar = Resources::GetImageData("sscrollbar.png");
|
||||
scrollbarImg = new GuiImage(scrollbar);
|
||||
scrollbarImg->SetParent(this);
|
||||
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
@ -67,20 +61,17 @@ GuiGameBrowser::GuiGameBrowser(int w, int h, const char *themePath, const u8 *im
|
||||
|
||||
maxTextWidth -= scrollbarImg->GetWidth() + 4;
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath);
|
||||
arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDown = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownImg = new GuiImage(arrowDown);
|
||||
arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDownOver = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownOverImg = new GuiImage(arrowDownOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath);
|
||||
arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUp = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpImg = new GuiImage(arrowUp);
|
||||
arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUpOver = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpOverImg = new GuiImage(arrowUpOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath);
|
||||
scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBox = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxImg = new GuiImage(scrollbarBox);
|
||||
scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBoxOver = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver);
|
||||
|
||||
arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight());
|
||||
|
@ -7,7 +7,7 @@
|
||||
class GuiGameBrowser: public GuiElement
|
||||
{
|
||||
public:
|
||||
GuiGameBrowser(int w, int h, const char *themePath, const u8 *imagebg, int selected = 0, int offset = 0);
|
||||
GuiGameBrowser(int w, int h, int selected = 0, int offset = 0);
|
||||
~GuiGameBrowser();
|
||||
int FindMenuItem(int c, int d);
|
||||
int GetClickedOption();
|
||||
|
@ -44,8 +44,8 @@ static GuiImageData *GameCarouselLoadCoverImage(void * Arg)
|
||||
/**
|
||||
* Constructor for the GuiGameCarousel class.
|
||||
*/
|
||||
GuiGameCarousel::GuiGameCarousel(int w, int h, const char *themePath, const u8 *imagebg, int selected, int offset) :
|
||||
noCover(nocover_png)
|
||||
GuiGameCarousel::GuiGameCarousel(int w, int h, const char *themePath, const u8 *imagebg, int imagebgsize, int selected, int offset) :
|
||||
noCover(nocover_png, nocover_png_size)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
@ -57,7 +57,6 @@ GuiGameCarousel::GuiGameCarousel(int w, int h, const char *themePath, const u8 *
|
||||
clickedItem = -1;
|
||||
|
||||
speed = 0;
|
||||
char imgPath[100];
|
||||
|
||||
trigA = new GuiTrigger;
|
||||
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -73,10 +72,8 @@ GuiGameCarousel::GuiGameCarousel(int w, int h, const char *themePath, const u8 *
|
||||
btnSoundClick = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
btnSoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", Settings.theme_path);
|
||||
imgLeft = new GuiImageData(imgPath, startgame_arrow_left_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", Settings.theme_path);
|
||||
imgRight = new GuiImageData(imgPath, startgame_arrow_right_png);
|
||||
imgLeft = Resources::GetImageData("startgame_arrow_left.png");
|
||||
imgRight = Resources::GetImageData("startgame_arrow_right.png");
|
||||
|
||||
int btnHeight = (int) lround(sqrt(RADIUS * RADIUS - 90000) - RADIUS - 50);
|
||||
|
||||
|
@ -7,7 +7,7 @@ class GuiImageAsync;
|
||||
class GuiGameCarousel: public GuiElement
|
||||
{
|
||||
public:
|
||||
GuiGameCarousel(int w, int h, const char *themePath, const u8 *imagebg, int selected = 0, int offset = 0);
|
||||
GuiGameCarousel(int w, int h, const char *themePath, const u8 *imagebg, int imagebgsize, int selected = 0, int offset = 0);
|
||||
~GuiGameCarousel();
|
||||
int FindMenuItem(int c, int d);
|
||||
int GetClickedOption();
|
||||
|
@ -201,7 +201,7 @@ static GuiImageData *GameGridLoadCoverImage(void * Arg)
|
||||
* Constructor for the GuiGamegrid class.
|
||||
*/
|
||||
GuiGameGrid::GuiGameGrid(int w, int h, const char *themePath, const u8 *imagebg, int selected, int offset) :
|
||||
noCover(nocoverFlat_png)
|
||||
noCover(nocoverFlat_png, nocoverFlat_png_size)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
|
@ -160,7 +160,7 @@ static void GuiImageAsyncThread_RemoveImage(GuiImageAsync* Image)
|
||||
*/
|
||||
GuiImageData *StdImageLoaderCallback(void *arg)
|
||||
{
|
||||
return new GuiImageData((char*) arg, NULL);
|
||||
return new GuiImageData((char*) arg);
|
||||
}
|
||||
|
||||
GuiImageAsync::GuiImageAsync(const char *Filename, GuiImageData * PreloadImg) :
|
||||
|
@ -1,292 +1,65 @@
|
||||
/****************************************************************************
|
||||
* libwiigui
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* by Dimok
|
||||
*
|
||||
* Tantric 2009
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* gui_imagedata.cpp
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* LoadJpeg copyright by r-win for WiiXplorer
|
||||
* check WiiXplorer source for license conditions
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* GUI class definitions
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
|
||||
#include "gui.h"
|
||||
#include "ImageOperations/TextureConverter.h"
|
||||
#include "ImageOperations/TplImage.h"
|
||||
#include "FileOperations/fileops.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include <jpeglib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define new_width 640
|
||||
#define new_height 480
|
||||
#define ALIGN32(x) (((x) + 31) & ~31)
|
||||
|
||||
/**
|
||||
* Constructor for the GuiImageData class.
|
||||
*/
|
||||
|
||||
extern int idiotFlag;
|
||||
extern char idiotChar[50];
|
||||
GuiImageData::GuiImageData(const u8 * img)
|
||||
GuiImageData::GuiImageData(const char * filepath)
|
||||
{
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
format = GX_TF_RGBA8;
|
||||
|
||||
if (img)
|
||||
{
|
||||
PNGUPROP imgProp;
|
||||
IMGCTX ctx = PNGU_SelectImageFromBuffer(img);
|
||||
u8 *buffer = NULL;
|
||||
u64 size = 0;
|
||||
|
||||
if (!ctx) return;
|
||||
if(LoadFileToMem(filepath, &buffer, &size) < 0)
|
||||
return;
|
||||
|
||||
int res = PNGU_GetImageProperties(ctx, &imgProp);
|
||||
//if (((4%imgProp.imgWidth)!=0)||((4%imgProp.imgHeight)!=0))idiotFlag=1;
|
||||
LoadImage(buffer, size);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
int len = imgProp.imgWidth * imgProp.imgHeight * 4;
|
||||
if (len % 32) len += (32 - len % 32);
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
if (data)
|
||||
{
|
||||
res = PNGU_DecodeTo4x4RGBA8(ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
width = imgProp.imgWidth;
|
||||
height = imgProp.imgHeight;
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
idiotFlag = 1;
|
||||
snprintf(idiotChar, sizeof(idiotChar), "%s", img);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
PNGU_ReleaseImageContext(ctx);
|
||||
}
|
||||
if(buffer)
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
GuiImageData::GuiImageData(const u8 * img, int imgSize)
|
||||
{
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
format = GX_TF_RGBA8;
|
||||
|
||||
if (img)
|
||||
{
|
||||
if (img[0] == 0xFF && img[1] == 0xD8) // IMAGE_JPEG
|
||||
{
|
||||
LoadJpeg(img, imgSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Constructor for the GuiImageData class.
|
||||
*/
|
||||
GuiImageData::GuiImageData(const char * imgPath, const u8 * buffer)
|
||||
{
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
|
||||
if (imgPath)
|
||||
{
|
||||
PNGUPROP imgProp;
|
||||
IMGCTX ctx = PNGU_SelectImageFromDevice(imgPath);
|
||||
//if (((4%imgProp.imgWidth)!=0)||((4%imgProp.imgHeight)!=0))idiotFlag=1;
|
||||
|
||||
if (ctx)
|
||||
{
|
||||
int res = PNGU_GetImageProperties(ctx, &imgProp);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
int len = imgProp.imgWidth * imgProp.imgHeight * 4;
|
||||
if (len % 32) len += (32 - len % 32);
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
if (data)
|
||||
{
|
||||
res = PNGU_DecodeTo4x4RGBA8(ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
width = imgProp.imgWidth;
|
||||
height = imgProp.imgHeight;
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
idiotFlag = 1;
|
||||
snprintf(idiotChar, sizeof(idiotChar), "%s", imgPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
PNGU_ReleaseImageContext(ctx);
|
||||
}
|
||||
}
|
||||
|
||||
if (!data) //use buffer data instead
|
||||
{
|
||||
width = 0;
|
||||
height = 0;
|
||||
if (buffer)
|
||||
{
|
||||
PNGUPROP imgProp;
|
||||
IMGCTX ctx = PNGU_SelectImageFromBuffer(buffer);
|
||||
|
||||
if (!ctx) return;
|
||||
|
||||
int res = PNGU_GetImageProperties(ctx, &imgProp);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
int len = imgProp.imgWidth * imgProp.imgHeight * 4;
|
||||
if (len % 32) len += (32 - len % 32);
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
if (data)
|
||||
{
|
||||
res = PNGU_DecodeTo4x4RGBA8(ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
width = imgProp.imgWidth;
|
||||
height = imgProp.imgHeight;
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
PNGU_ReleaseImageContext(ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for the GuiImageData class.
|
||||
*/
|
||||
GuiImageData::GuiImageData(const char *path, const char *file, const u8 *buffer, bool force_widescreen/*=false*/,
|
||||
const u8 *wbuffer/*=NULL*/)
|
||||
{
|
||||
data = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
char path_4_3[100];
|
||||
char path_16_9[100];
|
||||
char *imgPath;
|
||||
|
||||
snprintf(path_4_3, sizeof(path_4_3), "%s%s", path, file);
|
||||
if (force_widescreen)
|
||||
{
|
||||
snprintf(path_16_9, sizeof(path_16_9), "%sw%s", path, file);
|
||||
imgPath = path_16_9;
|
||||
if (wbuffer) buffer = wbuffer;
|
||||
}
|
||||
else imgPath = path_4_3;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (imgPath)
|
||||
{
|
||||
PNGUPROP imgProp;
|
||||
IMGCTX ctx = PNGU_SelectImageFromDevice(imgPath);
|
||||
//if (((4%imgProp.imgWidth)!=0)||((4%imgProp.imgHeight)!=0))idiotFlag=1;
|
||||
|
||||
if (ctx)
|
||||
{
|
||||
int res = PNGU_GetImageProperties(ctx, &imgProp);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
int len = imgProp.imgWidth * imgProp.imgHeight * 4;
|
||||
if (len % 32) len += (32 - len % 32);
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
if (data)
|
||||
{
|
||||
res = PNGU_DecodeTo4x4RGBA8(ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
width = imgProp.imgWidth;
|
||||
height = imgProp.imgHeight;
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
idiotFlag = 1;
|
||||
snprintf(idiotChar, sizeof(idiotChar), "%s", imgPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
PNGU_ReleaseImageContext(ctx);
|
||||
}
|
||||
}
|
||||
if (data || imgPath == path_4_3) break;
|
||||
imgPath = path_4_3;
|
||||
}
|
||||
|
||||
if (!data) //use buffer data instead
|
||||
{
|
||||
width = 0;
|
||||
height = 0;
|
||||
if (buffer)
|
||||
{
|
||||
PNGUPROP imgProp;
|
||||
IMGCTX ctx = PNGU_SelectImageFromBuffer(buffer);
|
||||
|
||||
if (!ctx) return;
|
||||
|
||||
int res = PNGU_GetImageProperties(ctx, &imgProp);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
int len = imgProp.imgWidth * imgProp.imgHeight * 4;
|
||||
if (len % 32) len += (32 - len % 32);
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
if (data)
|
||||
{
|
||||
res = PNGU_DecodeTo4x4RGBA8(ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
|
||||
|
||||
if (res == PNGU_OK)
|
||||
{
|
||||
width = imgProp.imgWidth;
|
||||
height = imgProp.imgHeight;
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
PNGU_ReleaseImageContext(ctx);
|
||||
}
|
||||
}
|
||||
LoadImage(img, imgSize);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -294,162 +67,114 @@ GuiImageData::GuiImageData(const char *path, const char *file, const u8 *buffer,
|
||||
*/
|
||||
GuiImageData::~GuiImageData()
|
||||
{
|
||||
if (data)
|
||||
if(data)
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void GuiImageData::LoadImage(const u8 * img, int imgSize)
|
||||
{
|
||||
if(!img)
|
||||
return;
|
||||
|
||||
if(data)
|
||||
{
|
||||
free(data);
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
u8 * GuiImageData::GetImage()
|
||||
{
|
||||
return data;
|
||||
}
|
||||
|
||||
int GuiImageData::GetWidth()
|
||||
{
|
||||
return width;
|
||||
}
|
||||
|
||||
int GuiImageData::GetHeight()
|
||||
{
|
||||
return height;
|
||||
}
|
||||
void GuiImageData::SetGrayscale(void)
|
||||
{
|
||||
GXColor color;
|
||||
u32 offset, gray;
|
||||
|
||||
for (int x = 0; x < width; x++)
|
||||
if (imgSize < 8)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
offset = (((y >> 2) << 4) * width) + ((x >> 2) << 6) + (((y % 4 << 2) + x % 4) << 1);
|
||||
color.r = *(data + offset + 1);
|
||||
color.g = *(data + offset + 32);
|
||||
color.b = *(data + offset + 33);
|
||||
|
||||
gray = (77 * color.r + 150 * color.g + 28 * color.b) / 255;
|
||||
|
||||
*(data + offset + 1) = gray;
|
||||
*(data + offset + 32) = gray;
|
||||
*(data + offset + 33) = gray;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (img[0] == 0x89 && img[1] == 'P' && img[2] == 'N' && img[3] == 'G')
|
||||
{
|
||||
// IMAGE_PNG
|
||||
LoadPNG(img, imgSize);
|
||||
}
|
||||
else if (img[0] == 0xFF && img[1] == 0xD8)
|
||||
{
|
||||
// IMAGE_JPEG
|
||||
LoadJpeg(img, imgSize);
|
||||
}
|
||||
else if (img[0] == 'B' && img[1] == 'M')
|
||||
{
|
||||
// IMAGE_BMP
|
||||
LoadBMP(img, imgSize);
|
||||
}
|
||||
else if (img[0] == 'G' && img[1] == 'I' && img[2] == 'F')
|
||||
{
|
||||
// IMAGE_GIF
|
||||
LoadGIF(img, imgSize);
|
||||
}
|
||||
else if (img[0] == 0x00 && img[1] == 0x20 && img[2] == 0xAF && img[3] == 0x30)
|
||||
{
|
||||
// IMAGE_TPL
|
||||
LoadTPL(img, imgSize);
|
||||
}
|
||||
}
|
||||
|
||||
// This function finds it's origin in GRRLIB, which can be found here: http://code.google.com/p/grrlib/
|
||||
void GuiImageData::LoadPNG(const u8 *img, int imgSize)
|
||||
{
|
||||
gdImagePtr gdImg = gdImageCreateFromPngPtr(imgSize, (u8*) img);
|
||||
if(gdImg == 0)
|
||||
return;
|
||||
|
||||
data = GDImageToRGBA8(&gdImg, &width, &height);
|
||||
gdImageDestroy(gdImg);
|
||||
}
|
||||
|
||||
void GuiImageData::LoadJpeg(const u8 *img, int imgSize)
|
||||
{
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
struct jpeg_error_mgr jerr;
|
||||
gdImagePtr gdImg = gdImageCreateFromJpegPtr(imgSize, (u8*) img);
|
||||
if(gdImg == 0)
|
||||
return;
|
||||
|
||||
int n = imgSize;
|
||||
|
||||
while (n > 1)
|
||||
{
|
||||
if (img[n - 1] == 0xff && img[n] == 0xd9)
|
||||
{
|
||||
break;
|
||||
}
|
||||
n--;
|
||||
}
|
||||
|
||||
jpeg_create_decompress( &cinfo );
|
||||
cinfo.err = jpeg_std_error(&jerr);
|
||||
cinfo.progress = NULL;
|
||||
jpeg_mem_src(&cinfo, (u8 *) img, n);
|
||||
jpeg_read_header(&cinfo, TRUE);
|
||||
jpeg_calc_output_dimensions(&cinfo);
|
||||
|
||||
if (cinfo.output_width > new_width || cinfo.output_height > new_height)
|
||||
{
|
||||
float factor = (cinfo.output_width > cinfo.output_height) ? (1.0 * cinfo.output_width) / new_width : (1.0
|
||||
* cinfo.output_height) / new_height;
|
||||
cinfo.scale_num = 1;
|
||||
cinfo.scale_denom = factor;
|
||||
cinfo.do_fancy_upsampling = true;
|
||||
cinfo.do_block_smoothing = false;
|
||||
cinfo.dct_method = JDCT_IFAST;
|
||||
}
|
||||
|
||||
jpeg_start_decompress(&cinfo);
|
||||
|
||||
int rowsize = cinfo.output_width * cinfo.num_components;
|
||||
unsigned char *tempBuffer = (unsigned char *) malloc(rowsize * cinfo.output_height);
|
||||
|
||||
JSAMPROW row_pointer[1];
|
||||
|
||||
row_pointer[0] = (unsigned char*) malloc(rowsize);
|
||||
size_t location = 0;
|
||||
while (cinfo.output_scanline < cinfo.output_height)
|
||||
{
|
||||
jpeg_read_scanlines(&cinfo, row_pointer, 1);
|
||||
memcpy(tempBuffer + location, row_pointer[0], rowsize);
|
||||
location += rowsize;
|
||||
}
|
||||
|
||||
int len = ((cinfo.output_width + 3) >> 2) * ((cinfo.output_height + 3) >> 2) * 32 * 2;
|
||||
|
||||
data = (u8 *) memalign(32, len);
|
||||
|
||||
RawTo4x4RGBA(tempBuffer, data, cinfo.output_width, cinfo.output_height);
|
||||
DCFlushRange(data, len);
|
||||
|
||||
width = cinfo.output_width;
|
||||
height = cinfo.output_height;
|
||||
|
||||
jpeg_finish_decompress(&cinfo);
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
free(row_pointer[0]);
|
||||
free(tempBuffer);
|
||||
data = GDImageToRGBA8(&gdImg, &width, &height);
|
||||
gdImageDestroy(gdImg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a raw bmp (RGB, no alpha) to 4x4RGBA.
|
||||
* @author DragonMinded
|
||||
* @param src
|
||||
* @param dst
|
||||
* @param width
|
||||
* @param height
|
||||
*/
|
||||
void GuiImageData::RawTo4x4RGBA(const unsigned char *src, void *dst, const unsigned int width,
|
||||
const unsigned int height)
|
||||
void GuiImageData::LoadGIF(const u8 *img, int imgSize)
|
||||
{
|
||||
unsigned int block;
|
||||
unsigned int i;
|
||||
unsigned int c;
|
||||
unsigned int ar;
|
||||
unsigned int gb;
|
||||
unsigned char *p = (unsigned char*) dst;
|
||||
gdImagePtr gdImg = gdImageCreateFromGifPtr(imgSize, (u8*) img);
|
||||
if(gdImg == 0)
|
||||
return;
|
||||
|
||||
for (block = 0; block < height; block += 4)
|
||||
{
|
||||
for (i = 0; i < width; i += 4)
|
||||
{
|
||||
/* Alpha and Red */
|
||||
for (c = 0; c < 4; ++c)
|
||||
{
|
||||
for (ar = 0; ar < 4; ++ar)
|
||||
{
|
||||
/* Alpha pixels */
|
||||
*p++ = 255;
|
||||
/* Red pixels */
|
||||
*p++ = src[((i + ar) + ((block + c) * width)) * 3];
|
||||
}
|
||||
}
|
||||
|
||||
/* Green and Blue */
|
||||
for (c = 0; c < 4; ++c)
|
||||
{
|
||||
for (gb = 0; gb < 4; ++gb)
|
||||
{
|
||||
/* Green pixels */
|
||||
*p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 1];
|
||||
/* Blue pixels */
|
||||
*p++ = src[(((i + gb) + ((block + c) * width)) * 3) + 2];
|
||||
}
|
||||
}
|
||||
} /* i */
|
||||
} /* block */
|
||||
data = GDImageToRGBA8(&gdImg, &width, &height);
|
||||
gdImageDestroy(gdImg);
|
||||
}
|
||||
|
||||
void GuiImageData::LoadBMP(const u8 *img, int imgSize)
|
||||
{
|
||||
gdImagePtr gdImg = gdImageCreateFromBmpPtr(imgSize, (u8*) img);
|
||||
if(gdImg == 0)
|
||||
return;
|
||||
|
||||
data = GDImageToRGBA8(&gdImg, &width, &height);
|
||||
gdImageDestroy(gdImg);
|
||||
}
|
||||
|
||||
void GuiImageData::LoadTPL(const u8 *img, int imgSize)
|
||||
{
|
||||
TplImage TplFile(img, imgSize);
|
||||
|
||||
width = TplFile.GetWidth(0);
|
||||
height = TplFile.GetHeight(0);
|
||||
format = (u8) TplFile.GetFormat(0);
|
||||
|
||||
const u8 * ImgPtr = TplFile.GetTextureBuffer(0);
|
||||
|
||||
if(ImgPtr)
|
||||
{
|
||||
int len = ALIGN32(TplFile.GetTextureSize(0));
|
||||
|
||||
data = (u8 *) memalign(32, len);
|
||||
if(!data)
|
||||
return;
|
||||
|
||||
memcpy(data, ImgPtr, len);
|
||||
DCFlushRange(data, len);
|
||||
}
|
||||
}
|
||||
|
69
source/libwiigui/gui_imagedata.h
Normal file
@ -0,0 +1,69 @@
|
||||
/****************************************************************************
|
||||
* Copyright (C) 2010
|
||||
* by Dimok
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied
|
||||
* warranty. In no event will the authors be held liable for any
|
||||
* damages arising from the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any
|
||||
* purpose, including commercial applications, and to alter it and
|
||||
* redistribute it freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you
|
||||
* must not claim that you wrote the original software. If you use
|
||||
* this software in a product, an acknowledgment in the product
|
||||
* documentation would be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and
|
||||
* must not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source
|
||||
* distribution.
|
||||
*
|
||||
* for WiiXplorer 2010
|
||||
***************************************************************************/
|
||||
#ifndef GUI_IMAGEDATA_H_
|
||||
#define GUI_IMAGEDATA_H_
|
||||
|
||||
#include <gctypes.h>
|
||||
#include <gd.h>
|
||||
|
||||
class GuiImageData
|
||||
{
|
||||
public:
|
||||
//!Constructor
|
||||
//!\param img Image data
|
||||
//!\param imgSize The image size
|
||||
GuiImageData(const u8 * img, int imgSize);
|
||||
//!Overload
|
||||
GuiImageData(const char * filepath);
|
||||
//!Destructor
|
||||
~GuiImageData();
|
||||
//!Gets a pointer to the image data
|
||||
//!\return pointer to image data
|
||||
u8 * GetImage() { return data; };
|
||||
//!Gets the image width
|
||||
//!\return image width
|
||||
int GetWidth() { return width; };
|
||||
//!Gets the image height
|
||||
//!\return image height
|
||||
int GetHeight() { return height; };
|
||||
//!Gets the texture format
|
||||
u8 GetTextureFormat() { return format; };
|
||||
//!Load a new image into this GuiImageData
|
||||
void LoadImage(const u8 * img, int imgSize);
|
||||
protected:
|
||||
void LoadPNG(const u8 *img, int imgSize);
|
||||
void LoadBMP(const u8 *img, int imgSize);
|
||||
void LoadJpeg(const u8 *img, int imgSize);
|
||||
void LoadGIF(const u8 *img, int imgSize);
|
||||
void LoadTPL(const u8 *img, int imgSize);
|
||||
|
||||
u8 * data; //!< Image data
|
||||
int height; //!< Height of image
|
||||
int width; //!< Width of image
|
||||
u8 format; //!< Texture format
|
||||
};
|
||||
|
||||
#endif
|
@ -117,7 +117,7 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int min, int lang)
|
||||
memcpy(keys, thekeys, sizeof(thekeys));
|
||||
}
|
||||
|
||||
keyTextbox = new GuiImageData(keyboard_textbox_png);
|
||||
keyTextbox = new GuiImageData(keyboard_textbox_png, keyboard_textbox_png_size);
|
||||
keyTextboxImg = new GuiImage(keyTextbox);
|
||||
keyTextboxImg->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
keyTextboxImg->SetPosition(0, 40);//(0,0);
|
||||
@ -129,12 +129,12 @@ GuiKeyboard::GuiKeyboard(char * t, u32 max, int min, int lang)
|
||||
kbText->SetPosition(0, 53);//(0, 13);
|
||||
this->Append(kbText);
|
||||
|
||||
key = new GuiImageData(keyboard_key_png);
|
||||
keyOver = new GuiImageData(keyboard_key_over_png);
|
||||
keyMedium = new GuiImageData(keyboard_mediumkey_over_png);
|
||||
keyMediumOver = new GuiImageData(keyboard_mediumkey_over_png);
|
||||
keyLarge = new GuiImageData(keyboard_largekey_over_png);
|
||||
keyLargeOver = new GuiImageData(keyboard_largekey_over_png);
|
||||
key = new GuiImageData(keyboard_key_png, keyboard_key_png_size);
|
||||
keyOver = new GuiImageData(keyboard_key_over_png, keyboard_key_over_png_size);
|
||||
keyMedium = new GuiImageData(keyboard_mediumkey_over_png, keyboard_mediumkey_over_png_size);
|
||||
keyMediumOver = new GuiImageData(keyboard_mediumkey_over_png, keyboard_mediumkey_over_png_size);
|
||||
keyLarge = new GuiImageData(keyboard_largekey_over_png, keyboard_largekey_over_png_size);
|
||||
keyLargeOver = new GuiImageData(keyboard_largekey_over_png, keyboard_largekey_over_png_size);
|
||||
|
||||
keySoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
keySoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
@ -35,7 +35,7 @@ GuiNumpad::GuiNumpad(char * t, u32 max)
|
||||
char thekeys[11] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0', '0' };
|
||||
memcpy(keys, thekeys, sizeof(thekeys));
|
||||
|
||||
keyTextbox = new GuiImageData(keyboard_textbox_png);
|
||||
keyTextbox = new GuiImageData(keyboard_textbox_png, keyboard_textbox_png_size);
|
||||
keyTextboxImg = new GuiImage(keyTextbox);
|
||||
keyTextboxImg->SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
keyTextboxImg->SetPosition(0, 40);//(0,0);
|
||||
@ -48,8 +48,8 @@ GuiNumpad::GuiNumpad(char * t, u32 max)
|
||||
kbText->SetPassChar('*');
|
||||
this->Append(kbText);
|
||||
|
||||
keyMedium = new GuiImageData(keyboard_mediumkey_over_png);
|
||||
keyMediumOver = new GuiImageData(keyboard_mediumkey_over_png);
|
||||
keyMedium = new GuiImageData(keyboard_mediumkey_over_png, keyboard_mediumkey_over_png_size);
|
||||
keyMediumOver = new GuiImageData(keyboard_mediumkey_over_png, keyboard_mediumkey_over_png_size);
|
||||
|
||||
keySoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
keySoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "gui.h"
|
||||
#include "../wpad.h"
|
||||
#include "settings/CSettings.h"
|
||||
#include "themes/CTheme.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
@ -20,7 +21,7 @@ static int scrollbaron = 0, startat = 0, loaded = 0;
|
||||
/**
|
||||
* Constructor for the GuiOptionBrowser class.
|
||||
*/
|
||||
GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const u8 *imagebg, int scrollon)
|
||||
GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *imagebg, int scrollon)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
@ -39,31 +40,31 @@ GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const u8 *image
|
||||
|
||||
btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
bgOptions = new GuiImageData(imagebg);
|
||||
bgOptions = Resources::GetImageData(imagebg);
|
||||
bgOptionsImg = new GuiImage(bgOptions);
|
||||
bgOptionsImg->SetParent(this);
|
||||
bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
|
||||
bgOptionsEntry = new GuiImageData(bg_options_entry_png);
|
||||
bgOptionsEntry = Resources::GetImageData("bg_options_entry.png");
|
||||
if (scrollbaron == 1)
|
||||
{
|
||||
scrollbar = new GuiImageData(scrollbar_png);
|
||||
scrollbar = Resources::GetImageData("scrollbar.png");
|
||||
scrollbarImg = new GuiImage(scrollbar);
|
||||
scrollbarImg->SetParent(this);
|
||||
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
scrollbarImg->SetPosition(0, 4);
|
||||
|
||||
arrowDown = new GuiImageData(scrollbar_arrowdown_png);
|
||||
arrowDown = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownImg = new GuiImage(arrowDown);
|
||||
arrowDownOver = new GuiImageData(scrollbar_arrowdown_png);
|
||||
arrowDownOver = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownOverImg = new GuiImage(arrowDownOver);
|
||||
arrowUp = new GuiImageData(scrollbar_arrowup_png);
|
||||
arrowUp = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpImg = new GuiImage(arrowUp);
|
||||
arrowUpOver = new GuiImageData(scrollbar_arrowup_png);
|
||||
arrowUpOver = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpOverImg = new GuiImage(arrowUpOver);
|
||||
scrollbarBox = new GuiImageData(scrollbar_box_png);
|
||||
scrollbarBox = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxImg = new GuiImage(scrollbarBox);
|
||||
scrollbarBoxOver = new GuiImageData(scrollbar_box_png);
|
||||
scrollbarBoxOver = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver);
|
||||
|
||||
arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight());
|
||||
@ -134,8 +135,7 @@ GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const u8 *image
|
||||
/**
|
||||
* Constructor for the GuiOptionBrowser class.
|
||||
*/
|
||||
GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *themePath, const u8 *imagebg,
|
||||
int scrollon, int start)
|
||||
GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *imagebg, int scrollon, int start)
|
||||
{
|
||||
width = w;
|
||||
height = h;
|
||||
@ -147,7 +147,6 @@ GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *the
|
||||
listOffset = this->FindMenuItem(-1, 1);
|
||||
selectedItem = 0;
|
||||
focus = 1; // allow focus
|
||||
char imgPath[100];
|
||||
|
||||
trigA = new GuiTrigger;
|
||||
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -155,38 +154,32 @@ GuiOptionBrowser::GuiOptionBrowser(int w, int h, OptionList * l, const char *the
|
||||
trigHeldA->SetHeldTrigger(-1, WPAD_BUTTON_A, PAD_BUTTON_A);
|
||||
btnSoundClick = new GuiSound(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", themePath);
|
||||
bgOptions = new GuiImageData(imgPath, imagebg);
|
||||
bgOptions = Resources::GetImageData(imagebg);
|
||||
|
||||
bgOptionsImg = new GuiImage(bgOptions);
|
||||
bgOptionsImg->SetParent(this);
|
||||
bgOptionsImg->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options_entry.png", themePath);
|
||||
bgOptionsEntry = new GuiImageData(imgPath, bg_options_entry_png);
|
||||
bgOptionsEntry = Resources::GetImageData("bg_options_entry.png");
|
||||
if (scrollbaron == 1)
|
||||
{
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", themePath);
|
||||
scrollbar = new GuiImageData(imgPath, scrollbar_png);
|
||||
scrollbar = Resources::GetImageData("scrollbar.png");
|
||||
scrollbarImg = new GuiImage(scrollbar);
|
||||
scrollbarImg->SetParent(this);
|
||||
scrollbarImg->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
scrollbarImg->SetPosition(0, 4);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", themePath);
|
||||
arrowDown = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDown = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownImg = new GuiImage(arrowDown);
|
||||
arrowDownOver = new GuiImageData(imgPath, scrollbar_arrowdown_png);
|
||||
arrowDownOver = Resources::GetImageData("scrollbar_arrowdown.png");
|
||||
arrowDownOverImg = new GuiImage(arrowDownOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", themePath);
|
||||
arrowUp = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUp = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpImg = new GuiImage(arrowUp);
|
||||
arrowUpOver = new GuiImageData(imgPath, scrollbar_arrowup_png);
|
||||
arrowUpOver = Resources::GetImageData("scrollbar_arrowup.png");
|
||||
arrowUpOverImg = new GuiImage(arrowUpOver);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_box.png", themePath);
|
||||
scrollbarBox = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBox = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxImg = new GuiImage(scrollbarBox);
|
||||
scrollbarBoxOver = new GuiImageData(imgPath, scrollbar_box_png);
|
||||
scrollbarBoxOver = Resources::GetImageData("scrollbar_box.png");
|
||||
scrollbarBoxOverImg = new GuiImage(scrollbarBoxOver);
|
||||
|
||||
arrowUpBtn = new GuiButton(arrowUpImg->GetWidth(), arrowUpImg->GetHeight());
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "../wpad.h"
|
||||
#include "../main.h"
|
||||
#include "../settings/CSettings.h"
|
||||
#include "../themes/CTheme.h"
|
||||
#include "../usbloader/GameList.h"
|
||||
|
||||
extern GuiWindow * mainWindow;
|
||||
@ -30,11 +31,10 @@ class cSearchButton
|
||||
|
||||
GuiSearchBar::GuiSearchBar(const wchar_t *SearchChars) :
|
||||
inSide(0), text((char *) NULL, 22, ( GXColor )
|
||||
{ 0, 0, 0, 255}), buttons(0), keyImageData(keyboard_key_png), keyOverImageData(keyboard_key_over_png), sndOver(
|
||||
{ 0, 0, 0, 255}), buttons(0), keyImageData(keyboard_key_png, keyboard_key_png_size), keyOverImageData(keyboard_key_over_png, keyboard_key_over_png_size), sndOver(
|
||||
button_over_pcm, button_over_pcm_size, Settings.sfxvolume), sndClick(button_click_pcm,
|
||||
button_click_pcm_size, Settings.sfxvolume)
|
||||
{
|
||||
char imgPath[100];
|
||||
trig.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
|
||||
@ -69,8 +69,7 @@ GuiSearchBar::GuiSearchBar(const wchar_t *SearchChars) :
|
||||
text.SetMaxWidth(width - (10 + 2 * 42 + 10), SCROLL_HORIZONTAL);
|
||||
this->Append(&text);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%skeyboard_backspace_over.png", Settings.theme_path);
|
||||
imgBacspaceBtn = new GuiImageData(imgPath, keyboard_backspace_over_png);
|
||||
imgBacspaceBtn = Resources::GetImageData("keyboard_backspace_over.png");
|
||||
BacspaceBtnImg_Over = new GuiImage(imgBacspaceBtn);
|
||||
BacspaceBtnImg = new GuiImage(BacspaceBtnImg_Over);
|
||||
BacspaceBtnImg->SetGrayscale();
|
||||
@ -78,8 +77,7 @@ GuiSearchBar::GuiSearchBar(const wchar_t *SearchChars) :
|
||||
&sndClick, 1);
|
||||
this->Append(BacspaceBtn);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%skeyboard_clear_over.png", Settings.theme_path);
|
||||
imgClearBtn = new GuiImageData(imgPath, keyboard_clear_over_png);
|
||||
imgClearBtn = Resources::GetImageData("keyboard_clear_over.png");
|
||||
ClearBtnImg_Over = new GuiImage(imgClearBtn);
|
||||
ClearBtnImg = new GuiImage(ClearBtnImg_Over);
|
||||
ClearBtnImg->SetGrayscale();
|
||||
|
@ -10,9 +10,9 @@
|
||||
|
||||
#include "gui.h"
|
||||
|
||||
static GuiImageData tooltipLeft(tooltip_left_png);
|
||||
static GuiImageData tooltipTile(tooltip_tile_png);
|
||||
static GuiImageData tooltipRight(tooltip_right_png);
|
||||
static GuiImageData tooltipLeft(tooltip_left_png, tooltip_left_png_size);
|
||||
static GuiImageData tooltipTile(tooltip_tile_png, tooltip_left_png_size);
|
||||
static GuiImageData tooltipRight(tooltip_right_png, tooltip_right_png_size);
|
||||
|
||||
/**
|
||||
* Constructor for the GuiTooltip class.
|
||||
|
@ -218,13 +218,13 @@ GuiImageData *LoadCoverImage(struct discHdr *header, bool Prefere3D, bool noCove
|
||||
//Load full id image
|
||||
snprintf(Path, sizeof(Path), "%s%s.png", coverPath, IDfull);
|
||||
delete Cover;
|
||||
Cover = new (std::nothrow) GuiImageData(Path, NULL);
|
||||
Cover = new (std::nothrow) GuiImageData(Path);
|
||||
//Load short id image
|
||||
if (!Cover || !Cover->GetImage())
|
||||
{
|
||||
snprintf(Path, sizeof(Path), "%s%s.png", coverPath, ID);
|
||||
delete Cover;
|
||||
Cover = new (std::nothrow) GuiImageData(Path, NULL);
|
||||
Cover = new (std::nothrow) GuiImageData(Path);
|
||||
}
|
||||
if (Cover && Cover->GetImage()) break;
|
||||
}
|
||||
@ -234,11 +234,9 @@ GuiImageData *LoadCoverImage(struct discHdr *header, bool Prefere3D, bool noCove
|
||||
flag = Prefere3D;
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
const char *nocoverPath = (flag ? "%snoimage.png" : "%snoimage2d.png");
|
||||
flag = !flag;
|
||||
snprintf(Path, sizeof(Path), nocoverPath, Settings.theme_path);
|
||||
delete Cover;
|
||||
Cover = new (std::nothrow) GuiImageData(Path, (Prefere3D ? nocover_png : nocoverFlat_png));
|
||||
Cover = new (std::nothrow) GuiImageData(Resources::GetFile(Prefere3D ? "nocover.png" : "nocoverFlat.png"), Resources::GetFileSize(Prefere3D ? "nocover.png" : "nocoverFlat.png"));
|
||||
if (Cover && Cover->GetImage()) break;
|
||||
}
|
||||
}
|
||||
@ -257,27 +255,20 @@ int MainMenu(int menu)
|
||||
{
|
||||
|
||||
currentMenu = menu;
|
||||
char imgPath[100];
|
||||
|
||||
//if (strcmp(headlessID,"")!=0)HaltGui();
|
||||
//WindowPrompt("Can you see me now",0,"ok");
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", Settings.theme_path);
|
||||
pointer[0] = new GuiImageData(imgPath, player1_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", Settings.theme_path);
|
||||
pointer[1] = new GuiImageData(imgPath, player2_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", Settings.theme_path);
|
||||
pointer[2] = new GuiImageData(imgPath, player3_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", Settings.theme_path);
|
||||
pointer[3] = new GuiImageData(imgPath, player4_point_png);
|
||||
pointer[0] = new GuiImageData(Resources::GetFile("player1_point.png"), Resources::GetFileSize("player1_point.png"));
|
||||
pointer[1] = new GuiImageData(Resources::GetFile("player2_point.png"), Resources::GetFileSize("player2_point.png"));
|
||||
pointer[2] = new GuiImageData(Resources::GetFile("player3_point.png"), Resources::GetFileSize("player3_point.png"));
|
||||
pointer[3] = new GuiImageData(Resources::GetFile("player4_point.png"), Resources::GetFileSize("player4_point.png"));
|
||||
|
||||
mainWindow = new GuiWindow(screenwidth, screenheight);
|
||||
|
||||
if (Settings.widescreen)
|
||||
snprintf(imgPath, sizeof(imgPath), "%swbackground.png", Settings.theme_path);
|
||||
else snprintf(imgPath, sizeof(imgPath), "%sbackground.png", Settings.theme_path);
|
||||
const char * image = Settings.widescreen ? "wbackground.png" : "background.png";
|
||||
|
||||
background = new GuiImageData(imgPath, Settings.widescreen ? wbackground_png : background_png);
|
||||
background = new GuiImageData(Resources::GetFile(image), Resources::GetFileSize(image));
|
||||
|
||||
bgImg = new GuiImage(background);
|
||||
mainWindow->Append(bgImg);
|
||||
|
@ -63,7 +63,6 @@ int MenuDiscList()
|
||||
char ID[4];
|
||||
char IDfull[7];
|
||||
u32 covert = 0;
|
||||
char imgPath[100];
|
||||
if (!dvdheader) dvdheader = new struct discHdr;
|
||||
u8 mountMethodOLD = 0;
|
||||
|
||||
@ -103,80 +102,46 @@ int MenuDiscList()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_install.png", Settings.theme_path);
|
||||
GuiImageData btnInstall(imgPath, button_install_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_install_over.png", Settings.theme_path);
|
||||
GuiImageData btnInstallOver(imgPath, button_install_over_png);
|
||||
GuiImageData btnInstall(Resources::GetFile("button_install.png"), Resources::GetFileSize("button_install.png"));
|
||||
GuiImageData btnInstallOver(Resources::GetFile("button_install_over.png"), Resources::GetFileSize("button_install_over.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_button.png", Settings.theme_path);
|
||||
GuiImageData btnSettings(imgPath, settings_button_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_button_over.png", Settings.theme_path);
|
||||
GuiImageData btnSettingsOver(imgPath, settings_button_over_png);
|
||||
GuiImageData btnSettings(Resources::GetFile("settings_button.png"), Resources::GetFileSize("settings_button.png"));
|
||||
GuiImageData btnSettingsOver(Resources::GetFile("settings_button_over.png"), Resources::GetFileSize("settings_button_over.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", Settings.theme_path);
|
||||
GuiImageData btnpwroff(imgPath, wiimote_poweroff_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", Settings.theme_path);
|
||||
GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", Settings.theme_path);
|
||||
GuiImageData btnhome(imgPath, menu_button_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", Settings.theme_path);
|
||||
GuiImageData btnhomeOver(imgPath, menu_button_over_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sSDcard_over.png", Settings.theme_path);
|
||||
GuiImageData btnsdcardOver(imgPath, sdcard_over_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sSDcard.png", Settings.theme_path);
|
||||
GuiImageData btnsdcard(imgPath, sdcard_png);
|
||||
GuiImageData btnpwroff(Resources::GetFile("wiimote_poweroff.png"), Resources::GetFileSize("wiimote_poweroff.png"));
|
||||
GuiImageData btnpwroffOver(Resources::GetFile("wiimote_poweroff_over.png"), Resources::GetFileSize("wiimote_poweroff_over.png"));
|
||||
GuiImageData btnhome(Resources::GetFile("menu_button.png"), Resources::GetFileSize("menu_button.png"));
|
||||
GuiImageData btnhomeOver(Resources::GetFile("menu_button_over.png"), Resources::GetFileSize("menu_button_over.png"));
|
||||
GuiImageData btnsdcardOver(Resources::GetFile("sdcard_over.png"), Resources::GetFileSize("sdcard_over.png"));
|
||||
GuiImageData btnsdcard(Resources::GetFile("sdcard.png"), Resources::GetFileSize("sdcard.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sfavIcon.png", Settings.theme_path);
|
||||
GuiImageData imgfavIcon(imgPath, favIcon_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sfavIcon_gray.png", Settings.theme_path);
|
||||
GuiImageData imgfavIcon_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssearchIcon.png", Settings.theme_path);
|
||||
GuiImageData imgsearchIcon(imgPath, searchIcon_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssearchIcon_gray.png", Settings.theme_path);
|
||||
GuiImageData imgsearchIcon_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sabcIcon.png", Settings.theme_path);
|
||||
GuiImageData imgabcIcon(imgPath, abcIcon_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sabcIcon_gray.png", Settings.theme_path);
|
||||
GuiImageData imgabcIcon_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%srankIcon.png", Settings.theme_path);
|
||||
GuiImageData imgrankIcon(imgPath, rankIcon_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%srankIcon_gray.png", Settings.theme_path);
|
||||
GuiImageData imgrankIcon_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayCountIcon.png", Settings.theme_path);
|
||||
GuiImageData imgplayCountIcon(imgPath, playCountIcon_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayCountIcon_gray.png", Settings.theme_path);
|
||||
GuiImageData imgplayCountIcon_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeGrid(imgPath, arrangeGrid_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeGrid_gray.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeGrid_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeList.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeList(imgPath, arrangeList_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeList_gray.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeList_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeCarousel(imgPath, arrangeCarousel_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel_gray.png", Settings.theme_path);
|
||||
GuiImageData imgarrangeCarousel_gray(imgPath, NULL);
|
||||
GuiImageData imgfavIcon(Resources::GetFile("favIcon.png"), Resources::GetFileSize("favIcon.png"));
|
||||
GuiImageData imgfavIcon_gray(Resources::GetFile("favIcon_gray.png"), Resources::GetFileSize("favIcon_gray.png"));
|
||||
GuiImageData imgsearchIcon(Resources::GetFile("searchIcon.png"), Resources::GetFileSize("searchIcon.png"));
|
||||
GuiImageData imgsearchIcon_gray(Resources::GetFile("searchIcon_gray.png"), Resources::GetFileSize("searchIcon_gray.png"));
|
||||
GuiImageData imgabcIcon(Resources::GetFile("abcIcon.png"), Resources::GetFileSize("abcIcon.png"));
|
||||
GuiImageData imgabcIcon_gray(Resources::GetFile("abcIcon_gray.png"), Resources::GetFileSize("abcIcon_gray.png"));
|
||||
GuiImageData imgrankIcon(Resources::GetFile("rankIcon.png"), Resources::GetFileSize("rankIcon.png"));
|
||||
GuiImageData imgrankIcon_gray(Resources::GetFile("rankIcon_gray.png"), Resources::GetFileSize("rankIcon_gray.png"));
|
||||
GuiImageData imgplayCountIcon(Resources::GetFile("playCountIcon.png"), Resources::GetFileSize("playCountIcon.png"));
|
||||
GuiImageData imgplayCountIcon_gray(Resources::GetFile("playCountIcon_gray.png"), Resources::GetFileSize("playCountIcon_gray.png"));
|
||||
GuiImageData imgarrangeGrid(Resources::GetFile("arrangeGrid.png"), Resources::GetFileSize("arrangeGrid.png"));
|
||||
GuiImageData imgarrangeGrid_gray(Resources::GetFile("arrangeGrid_gray.png"), Resources::GetFileSize("arrangeGrid_gray.png"));
|
||||
GuiImageData imgarrangeList(Resources::GetFile("arrangeList.png"), Resources::GetFileSize("arrangeList.png"));
|
||||
GuiImageData imgarrangeList_gray(Resources::GetFile("arrangeList_gray.png"), Resources::GetFileSize("arrangeList_gray.png"));
|
||||
GuiImageData imgarrangeCarousel(Resources::GetFile("arrangeCarousel.png"), Resources::GetFileSize("arrangeCarousel.png"));
|
||||
GuiImageData imgarrangeCarousel_gray(Resources::GetFile("arrangeCarousel_gray.png"), Resources::GetFileSize("arrangeCarousel_gray.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%slock.png", Settings.theme_path);
|
||||
GuiImageData imgLock(imgPath, lock_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%slock_gray.png", Settings.theme_path);
|
||||
GuiImageData imgLock_gray(imgPath, NULL);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sunlock.png", Settings.theme_path);
|
||||
GuiImageData imgUnlock(imgPath, unlock_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sunlock_gray.png", Settings.theme_path);
|
||||
GuiImageData imgUnlock_gray(imgPath, NULL);
|
||||
GuiImageData imgLock(Resources::GetFile("lock.png"), Resources::GetFileSize("lock.png"));
|
||||
GuiImageData imgLock_gray(Resources::GetFile("lock_gray.png"), Resources::GetFileSize("lock_gray.png"));
|
||||
GuiImageData imgUnlock(Resources::GetFile("lock_gray.png"), Resources::GetFileSize("lock_gray.png"));
|
||||
GuiImageData imgUnlock_gray(Resources::GetFile("unlock_gray.png"), Resources::GetFileSize("unlock_gray.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdvd.png", Settings.theme_path);
|
||||
GuiImageData imgdvd(imgPath, dvd_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdvd_gray.png", Settings.theme_path);
|
||||
GuiImageData imgdvd_gray(imgPath, NULL);
|
||||
GuiImageData imgdvd(Resources::GetFile("dvd.png"), Resources::GetFileSize("dvd.png"));
|
||||
GuiImageData imgdvd_gray(Resources::GetFile("dvd_gray.png"), Resources::GetFileSize("dvd_gray.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbrowser.png", Settings.theme_path);
|
||||
GuiImageData homebrewImgData(imgPath, browser_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbrowser_over.png", Settings.theme_path);
|
||||
GuiImageData homebrewImgDataOver(imgPath, browser_over_png);
|
||||
GuiImageData homebrewImgData(Resources::GetFile("browser.png"), Resources::GetFileSize("browser.png"));
|
||||
GuiImageData homebrewImgDataOver(Resources::GetFile("browser_over.png"), Resources::GetFileSize("browser_over.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -290,11 +255,6 @@ int MenuDiscList()
|
||||
GuiImage favoriteBtnImg(&imgfavIcon);
|
||||
favoriteBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage favoriteBtnImg_g(&imgfavIcon_gray);
|
||||
if (favoriteBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
favoriteBtnImg_g = favoriteBtnImg;
|
||||
favoriteBtnImg_g.SetGrayscale();
|
||||
}
|
||||
favoriteBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton favoriteBtn(&favoriteBtnImg_g, &favoriteBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_favorite_x,
|
||||
Theme.gamelist_favorite_y, &trigA, &btnSoundOver, btnClick2, 1, &favoriteBtnTT, -15, 52, 0, 3);
|
||||
@ -306,11 +266,6 @@ int MenuDiscList()
|
||||
GuiImage searchBtnImg(&imgsearchIcon);
|
||||
searchBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage searchBtnImg_g(&imgsearchIcon_gray);
|
||||
if (searchBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
searchBtnImg_g = searchBtnImg;
|
||||
searchBtnImg_g.SetGrayscale();
|
||||
}
|
||||
searchBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton searchBtn(&searchBtnImg_g, &searchBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_search_x,
|
||||
Theme.gamelist_search_y, &trigA, &btnSoundOver, btnClick2, 1, &searchBtnTT, -15, 52, 0, 3);
|
||||
@ -322,11 +277,6 @@ int MenuDiscList()
|
||||
GuiImage abcBtnImg(Settings.fave ? &imgrankIcon : &imgabcIcon);
|
||||
abcBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage abcBtnImg_g(Settings.fave ? &imgrankIcon_gray : &imgabcIcon_gray);
|
||||
if (abcBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
abcBtnImg_g = abcBtnImg;
|
||||
abcBtnImg_g.SetGrayscale();
|
||||
}
|
||||
abcBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton abcBtn(&abcBtnImg_g, &abcBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_abc_x, Theme.gamelist_abc_y,
|
||||
&trigA, &btnSoundOver, btnClick2, 1, &abcBtnTT, -15, 52, 0, 3);
|
||||
@ -338,11 +288,6 @@ int MenuDiscList()
|
||||
GuiImage countBtnImg(&imgplayCountIcon);
|
||||
countBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage countBtnImg_g(&imgplayCountIcon_gray);
|
||||
if (countBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
countBtnImg_g = countBtnImg;
|
||||
countBtnImg_g.SetGrayscale();
|
||||
}
|
||||
countBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton countBtn(&countBtnImg_g, &countBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_count_x,
|
||||
Theme.gamelist_count_y, &trigA, &btnSoundOver, btnClick2, 1, &countBtnTT, -15, 52, 0, 3);
|
||||
@ -354,11 +299,6 @@ int MenuDiscList()
|
||||
GuiImage listBtnImg(&imgarrangeList);
|
||||
listBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage listBtnImg_g(&imgarrangeList_gray);
|
||||
if (listBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
listBtnImg_g = listBtnImg;
|
||||
listBtnImg_g.SetGrayscale();
|
||||
}
|
||||
listBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton listBtn(&listBtnImg_g, &listBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_list_x,
|
||||
Theme.gamelist_list_y, &trigA, &btnSoundOver, btnClick2, 1, &listBtnTT, 15, 52, 1, 3);
|
||||
@ -370,11 +310,6 @@ int MenuDiscList()
|
||||
GuiImage gridBtnImg(&imgarrangeGrid);
|
||||
gridBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage gridBtnImg_g(&imgarrangeGrid_gray);
|
||||
if (gridBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
gridBtnImg_g = gridBtnImg;
|
||||
gridBtnImg_g.SetGrayscale();
|
||||
}
|
||||
gridBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton gridBtn(&gridBtnImg_g, &gridBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_grid_x,
|
||||
Theme.gamelist_grid_y, &trigA, &btnSoundOver, btnClick2, 1, &gridBtnTT, 15, 52, 1, 3);
|
||||
@ -386,11 +321,6 @@ int MenuDiscList()
|
||||
GuiImage carouselBtnImg(&imgarrangeCarousel);
|
||||
carouselBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray);
|
||||
if (carouselBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
carouselBtnImg_g = carouselBtnImg;
|
||||
carouselBtnImg_g.SetGrayscale();
|
||||
}
|
||||
carouselBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton carouselBtn(&carouselBtnImg_g, &carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_carousel_x,
|
||||
Theme.gamelist_carousel_y, &trigA, &btnSoundOver, btnClick2, 1, &carouselBtnTT, 15, 52, 1, 3);
|
||||
@ -404,11 +334,6 @@ int MenuDiscList()
|
||||
GuiImage lockBtnImg(&imgLock);
|
||||
lockBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage lockBtnImg_g(&imgLock_gray);
|
||||
if (lockBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
lockBtnImg_g = lockBtnImg;
|
||||
lockBtnImg_g.SetGrayscale();
|
||||
}
|
||||
lockBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
GuiButton lockBtn(&lockBtnImg_g, &lockBtnImg_g, ALIGN_LEFT, ALIGN_TOP, Theme.gamelist_lock_x,
|
||||
Theme.gamelist_lock_y, &trigA, &btnSoundOver, btnClick2, 1, &lockBtnTT, 15, 52, 1, 3);
|
||||
@ -420,11 +345,6 @@ int MenuDiscList()
|
||||
GuiImage unlockBtnImg(&imgUnlock);
|
||||
unlockBtnImg.SetWidescreen(Settings.widescreen);
|
||||
GuiImage unlockBtnImg_g(&imgUnlock_gray);
|
||||
if (unlockBtnImg_g.GetImage() == NULL)
|
||||
{
|
||||
unlockBtnImg_g = unlockBtnImg;
|
||||
unlockBtnImg_g.SetGrayscale();
|
||||
}
|
||||
unlockBtnImg_g.SetWidescreen(Settings.widescreen);
|
||||
|
||||
if (canUnlock && Settings.godmode)
|
||||
@ -581,8 +501,7 @@ int MenuDiscList()
|
||||
GuiGameCarousel * gameCarousel = NULL;
|
||||
if (Settings.gameDisplay == list)
|
||||
{
|
||||
gameBrowser = new GuiGameBrowser(Theme.gamelist_w, Theme.gamelist_h, Settings.theme_path, bg_options_png,
|
||||
startat, offset);
|
||||
gameBrowser = new GuiGameBrowser(Theme.gamelist_w, Theme.gamelist_h, startat, offset);
|
||||
gameBrowser->SetPosition(Theme.gamelist_x, Theme.gamelist_y);
|
||||
gameBrowser->SetAlignment(ALIGN_LEFT, ALIGN_CENTRE);
|
||||
}
|
||||
@ -1765,35 +1684,26 @@ void rockout(int f)
|
||||
{
|
||||
HaltGui();
|
||||
|
||||
char imgPath[100];
|
||||
if (gameSelected >= 0 && gameSelected < gameList.size() && (strcasestr(get_title(gameList[gameSelected]), "guitar")
|
||||
|| strcasestr(get_title(gameList[gameSelected]), "band") || strcasestr(get_title(gameList[gameSelected]),
|
||||
"rock")))
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
delete pointer[i];
|
||||
snprintf(imgPath, sizeof(imgPath), "%srplayer1_point.png", Settings.theme_path);
|
||||
pointer[0] = new GuiImageData(imgPath, rplayer1_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%srplayer2_point.png", Settings.theme_path);
|
||||
pointer[1] = new GuiImageData(imgPath, rplayer2_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%srplayer3_point.png", Settings.theme_path);
|
||||
pointer[2] = new GuiImageData(imgPath, rplayer3_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%srplayer4_point.png", Settings.theme_path);
|
||||
pointer[3] = new GuiImageData(imgPath, rplayer4_point_png);
|
||||
pointer[0] = Resources::GetImageData("rplayer1_point.png");
|
||||
pointer[1] = Resources::GetImageData("rplayer2_point.png");
|
||||
pointer[2] = Resources::GetImageData("rplayer3_point.png");
|
||||
pointer[3] = Resources::GetImageData("rplayer4_point.png");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
delete pointer[i];
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", Settings.theme_path);
|
||||
pointer[0] = new GuiImageData(imgPath, player1_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png", Settings.theme_path);
|
||||
pointer[1] = new GuiImageData(imgPath, player2_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png", Settings.theme_path);
|
||||
pointer[2] = new GuiImageData(imgPath, player3_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png", Settings.theme_path);
|
||||
pointer[3] = new GuiImageData(imgPath, player4_point_png);
|
||||
pointer[0] = Resources::GetImageData("player1_point.png");
|
||||
pointer[1] = Resources::GetImageData("player2_point.png");
|
||||
pointer[2] = Resources::GetImageData("player3_point.png");
|
||||
pointer[3] = Resources::GetImageData("player4_point.png");
|
||||
}
|
||||
ResumeGui();
|
||||
}
|
||||
|
@ -23,7 +23,6 @@ int MenuFormat()
|
||||
USBStorage2_Init();
|
||||
|
||||
int menu = MENU_NONE;
|
||||
char imgPath[100];
|
||||
|
||||
customOptionList options(MAX_PARTITIONS_EX);
|
||||
extern PartList partitions;
|
||||
@ -56,19 +55,15 @@ int MenuFormat()
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff.png", Settings.theme_path);
|
||||
GuiImageData btnpwroff(imgPath, wiimote_poweroff_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%swiimote_poweroff_over.png", Settings.theme_path);
|
||||
GuiImageData btnpwroffOver(imgPath, wiimote_poweroff_over_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%smenu_button.png", Settings.theme_path);
|
||||
GuiImageData btnhome(imgPath, menu_button_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%smenu_button_over.png", Settings.theme_path);
|
||||
GuiImageData btnhomeOver(imgPath, menu_button_over_png);
|
||||
GuiImageData battery(battery_png);
|
||||
GuiImageData batteryBar(battery_bar_png);
|
||||
GuiImageData batteryRed(battery_red_png);
|
||||
GuiImageData batteryBarRed(battery_bar_red_png);
|
||||
|
||||
GuiImageData btnpwroff(Resources::GetFile("wiimote_poweroff.png"), Resources::GetFileSize("wiimote_poweroff.png"));
|
||||
GuiImageData btnpwroffOver(Resources::GetFile("wiimote_poweroff_over.png"), Resources::GetFileSize("wiimote_poweroff_over.png"));
|
||||
GuiImageData btnhome(Resources::GetFile("menu_button.png"), Resources::GetFileSize("menu_button.png"));
|
||||
GuiImageData btnhomeOver(Resources::GetFile("menu_button_over.png"), Resources::GetFileSize("menu_button_over.png"));
|
||||
GuiImageData battery(Resources::GetFile("battery.png"), Resources::GetFileSize("battery.png"));
|
||||
GuiImageData batteryBar(Resources::GetFile("battery_bar.png"), Resources::GetFileSize("battery_bar.png"));
|
||||
GuiImageData batteryRed(Resources::GetFile("battery_red.png"), Resources::GetFileSize("battery_red.png"));
|
||||
GuiImageData batteryBarRed(Resources::GetFile("battery_bar_red.png"), Resources::GetFileSize("battery_bar_red.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -89,8 +84,7 @@ int MenuFormat()
|
||||
1);
|
||||
exitBtn.SetTrigger(&trigHome);
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser(396, 280, &options, Settings.theme_path, "bg_options_settings.png",
|
||||
bg_options_settings_png, 0, 10);
|
||||
GuiCustomOptionBrowser optionBrowser(396, 280, &options, "bg_options_settings.png", 0, 10);
|
||||
optionBrowser.SetPosition(0, 40);
|
||||
optionBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "usbloader/utils.h"
|
||||
#include "usbloader/GameList.h"
|
||||
#include "prompts/ProgressWindow.h"
|
||||
#include "themes/CTheme.h"
|
||||
|
||||
float gamesize;
|
||||
|
||||
@ -26,16 +27,10 @@ int MenuInstall()
|
||||
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery.png", Settings.theme_path);
|
||||
GuiImageData battery(imgPath, battery_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar.png", Settings.theme_path);
|
||||
GuiImageData batteryBar(imgPath, battery_bar_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", Settings.theme_path);
|
||||
GuiImageData batteryRed(imgPath, battery_red_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_red.png", Settings.theme_path);
|
||||
GuiImageData batteryBarRed(imgPath, battery_bar_red_png);
|
||||
GuiImageData battery(Resources::GetFile("battery.png"), Resources::GetFileSize("battery.png"));
|
||||
GuiImageData batteryBar(Resources::GetFile("battery_bar.png"), Resources::GetFileSize("battery_bar.png"));
|
||||
GuiImageData batteryRed(Resources::GetFile("battery_red.png"), Resources::GetFileSize("battery_red.png"));
|
||||
GuiImageData batteryBarRed(Resources::GetFile("battery_bar_red.png"), Resources::GetFileSize("battery_bar_red.png"));
|
||||
|
||||
HaltGui();
|
||||
GuiWindow w(screenwidth, screenheight);
|
||||
|
@ -156,12 +156,8 @@ int DiscBrowse(struct discHdr * header)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgamesettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -198,8 +194,7 @@ int DiscBrowse(struct discHdr * header)
|
||||
u8 scrollbaron = 0;
|
||||
if (dolfilecount > 9) scrollbaron = 1;
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, Settings.theme_path, "bg_options_gamesettings.png",
|
||||
bg_options_settings_png, dolfilecount > 9 ? 1 : 0, 200);
|
||||
GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, "bg_options_gamesettings.png", dolfilecount > 9 ? 1 : 0, 200);
|
||||
optionBrowser3.SetPosition(0, 90);
|
||||
optionBrowser3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
|
@ -128,11 +128,8 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
|
||||
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
promptWindow.SetPosition(0, -10);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -143,8 +140,7 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
|
||||
dialogBoxImg.SetWidescreen(Settings.widescreen);
|
||||
}
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", Settings.theme_path);
|
||||
GuiImageData progressbarOutline(imgPath, progressbar_outline_png);
|
||||
GuiImageData progressbarOutline(Resources::GetFile("progressbar_outline.png"), Resources::GetFileSize("progressbar_outline.png"));
|
||||
|
||||
GuiImage progressbarOutlineImg(&progressbarOutline);
|
||||
if (Settings.wsprompt == yes)
|
||||
@ -154,15 +150,13 @@ static void ProgressWindow(const char *title, const char *msg1, const char *msg2
|
||||
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarOutlineImg.SetPosition(25, 40);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", Settings.theme_path);
|
||||
GuiImageData progressbarEmpty(imgPath, progressbar_empty_png);
|
||||
GuiImageData progressbarEmpty(Resources::GetFile("progressbar_empty.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImage progressbarEmptyImg(&progressbarEmpty);
|
||||
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarEmptyImg.SetPosition(25, 40);
|
||||
progressbarEmptyImg.SetTile(100);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", Settings.theme_path);
|
||||
GuiImageData progressbar(imgPath, progressbar_png);
|
||||
GuiImageData progressbar(Resources::GetFile("progressbar.png"), Resources::GetFileSize("progressbar.png"));
|
||||
GuiImage progressbarImg(&progressbar);
|
||||
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarImg.SetPosition(25, 40);
|
||||
|
@ -78,9 +78,7 @@ int OnScreenNumpad(char * var, u32 maxlen)
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -168,9 +166,7 @@ int OnScreenKeyboard(char * var, u32 maxlen, int min)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -254,12 +250,12 @@ void WindowCredits()
|
||||
GuiWindow creditsWindowBox(580, 448);
|
||||
creditsWindowBox.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
|
||||
GuiImageData creditsBox(credits_bg_png);
|
||||
GuiImageData creditsBox(credits_bg_png, credits_bg_png_size);
|
||||
GuiImage creditsBoxImg(&creditsBox);
|
||||
creditsBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
creditsWindowBox.Append(&creditsBoxImg);
|
||||
|
||||
GuiImageData star(little_star_png);
|
||||
GuiImageData star(little_star_png, little_star_png_size);
|
||||
GuiImage starImg(&star);
|
||||
starImg.SetWidescreen(Settings.widescreen); //added
|
||||
starImg.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
@ -471,13 +467,11 @@ int WindowScreensaver()
|
||||
gprintf("WindowScreenSaver()\n");
|
||||
int i = 0;
|
||||
bool exit = false;
|
||||
char imgPath[100];//uncomment for themable screensaver
|
||||
|
||||
/* initialize random seed: */
|
||||
srand(time(NULL));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscreensaver.png", Settings.theme_path);//uncomment for themable screensaver
|
||||
GuiImageData GXlogo(imgPath, gxlogo_png);//uncomment for themable screensaver
|
||||
GuiImageData GXlogo(Resources::GetFile("gxlogo.png"), Resources::GetFileSize("gxlogo.png"));//uncomment for themable screensaver
|
||||
//GuiImageData GXlogo(gxlogo_png);//comment for themable screensaver
|
||||
GuiImage GXlogoImg(&GXlogo);
|
||||
GXlogoImg.SetPosition(172, 152);
|
||||
@ -545,12 +539,9 @@ int WindowPrompt(const char *title, const char *msg, const char *btn1Label, cons
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -837,7 +828,6 @@ int WindowExitPrompt()
|
||||
homeout->SetLoop(0);
|
||||
|
||||
int choice = -1;
|
||||
char imgPath[100];
|
||||
|
||||
u64 oldstub = getStubDest();
|
||||
loadStub();
|
||||
@ -851,22 +841,18 @@ int WindowExitPrompt()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
GuiImageData top(exit_top_png);
|
||||
GuiImageData topOver(exit_top_over_png);
|
||||
GuiImageData bottom(exit_bottom_png);
|
||||
GuiImageData bottomOver(exit_bottom_over_png);
|
||||
GuiImageData button(exit_button_png);
|
||||
GuiImageData wiimote(wiimote_png);
|
||||
GuiImageData close(closebutton_png);
|
||||
GuiImageData top(exit_top_png, exit_top_png_size);
|
||||
GuiImageData topOver(exit_top_over_png, exit_top_over_png_size);
|
||||
GuiImageData bottom(exit_bottom_png, exit_bottom_png_size);
|
||||
GuiImageData bottomOver(exit_bottom_over_png, exit_bottom_over_png_size);
|
||||
GuiImageData button(exit_button_png, exit_button_png_size);
|
||||
GuiImageData wiimote(wiimote_png, wiimote_png_size);
|
||||
GuiImageData close(closebutton_png, closebutton_png_size);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_white.png", Settings.theme_path);
|
||||
GuiImageData battery(imgPath, battery_white_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_white.png", Settings.theme_path);
|
||||
GuiImageData batteryBar(imgPath, battery_bar_white_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_red.png", Settings.theme_path);
|
||||
GuiImageData batteryRed(imgPath, battery_red_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbattery_bar_red.png", Settings.theme_path);
|
||||
GuiImageData batteryBarRed(imgPath, battery_bar_red_png);
|
||||
GuiImageData battery(Resources::GetFile("battery_white.png"), Resources::GetFileSize("battery_white.png"));
|
||||
GuiImageData batteryBar(Resources::GetFile("battery_bar_white.png"), Resources::GetFileSize("battery_bar_white.png"));
|
||||
GuiImageData batteryRed(Resources::GetFile("battery_red.png"), Resources::GetFileSize("battery_red.png"));
|
||||
GuiImageData batteryBarRed(Resources::GetFile("battery_bar_red.png"), Resources::GetFileSize("battery_bar_red.png"));
|
||||
|
||||
int i = 0, ret = 0, level;
|
||||
char txt[3];
|
||||
@ -1188,19 +1174,13 @@ int GameWindowPrompt()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sfavorite.png", Settings.theme_path);
|
||||
GuiImageData imgFavorite(imgPath, favorite_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%snot_favorite.png", Settings.theme_path);
|
||||
GuiImageData imgNotFavorite(imgPath, not_favorite_png);
|
||||
GuiImageData imgFavorite(Resources::GetFile("favorite.png"), Resources::GetFileSize("favorite.png"));
|
||||
GuiImageData imgNotFavorite(Resources::GetFile("not_favorite.png"), Resources::GetFileSize("not_favorite.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", Settings.theme_path);
|
||||
GuiImageData imgLeft(imgPath, startgame_arrow_left_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", Settings.theme_path);
|
||||
GuiImageData imgRight(imgPath, startgame_arrow_right_png);
|
||||
GuiImageData imgLeft(Resources::GetFile("startgame_arrow_left.png"), Resources::GetFileSize("startgame_arrow_left.png"));
|
||||
GuiImageData imgRight(Resources::GetFile("startgame_arrow_right.png"), Resources::GetFileSize("startgame_arrow_right.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -1221,11 +1201,12 @@ int GameWindowPrompt()
|
||||
screenShotBtn.SetPosition(0, 0);
|
||||
screenShotBtn.SetTrigger(&trigZ);
|
||||
|
||||
if (Settings.widescreen)
|
||||
snprintf(imgPath, sizeof(imgPath), "%swdialogue_box_startgame.png", Settings.theme_path);
|
||||
else snprintf(imgPath, sizeof(imgPath), "%sdialogue_box_startgame.png", Settings.theme_path);
|
||||
const char * image = "dialogue_box_startgame.png";
|
||||
|
||||
GuiImageData dialogBox(imgPath, Settings.widescreen ? wdialogue_box_startgame_png : dialogue_box_startgame_png);
|
||||
if (Settings.widescreen)
|
||||
image = "wdialogue_box_startgame.png";
|
||||
|
||||
GuiImageData dialogBox(Resources::GetFile(image), Resources::GetFileSize(image));
|
||||
GuiImage dialogBoxImg(&dialogBox);
|
||||
|
||||
GuiTooltip nameBtnTT(tr( "Rename Game on WBFS" ));
|
||||
@ -1428,15 +1409,15 @@ int GameWindowPrompt()
|
||||
|
||||
gprintf("\t%s\n", IDFull);
|
||||
if (diskCover) delete diskCover;
|
||||
|
||||
char imgPath[150];
|
||||
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.disc_path, IDFull); //changed to current full id
|
||||
diskCover = new GuiImageData(imgPath, 0);
|
||||
diskCover = new GuiImageData(imgPath);
|
||||
|
||||
if (!diskCover->GetImage())
|
||||
{
|
||||
delete diskCover;
|
||||
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.disc_path, ID); //changed to current id
|
||||
diskCover = new GuiImageData(imgPath, 0);
|
||||
diskCover = new GuiImageData(imgPath);
|
||||
|
||||
if (!diskCover->GetImage())
|
||||
{
|
||||
@ -1444,12 +1425,11 @@ int GameWindowPrompt()
|
||||
|
||||
delete diskCover;
|
||||
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.disc_path, ID); //changed to current id
|
||||
diskCover = new GuiImageData(imgPath, 0);
|
||||
diskCover = new GuiImageData(imgPath);
|
||||
if (!diskCover->GetImage())
|
||||
{
|
||||
delete diskCover;
|
||||
snprintf(imgPath, sizeof(imgPath), "%snodisc.png", Settings.theme_path); //changed to nodisc.png
|
||||
diskCover = new GuiImageData(imgPath, nodisc_png);
|
||||
diskCover = Resources::GetImageData("nodisc.png");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1787,11 +1767,8 @@ int DiscWait(const char *title, const char *msg, const char *btn1Label, const ch
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
GuiTrigger trigB;
|
||||
@ -1938,11 +1915,8 @@ int FormatingPartition(const char *title, partitionEntry *entry)
|
||||
promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
promptWindow.SetPosition(0, -10);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -1996,11 +1970,8 @@ bool SearchMissingImages(int choice2)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -2131,11 +2102,8 @@ bool NetworkInitPrompt()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -2240,11 +2208,8 @@ int ProgressDownloadWindow(int choice2)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -2254,8 +2219,7 @@ int ProgressDownloadWindow(int choice2)
|
||||
dialogBoxImg.SetWidescreen(Settings.widescreen);
|
||||
}
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", Settings.theme_path);
|
||||
GuiImageData progressbarOutline(imgPath, progressbar_outline_png);
|
||||
GuiImageData progressbarOutline(Resources::GetFile("progressbar_outline.png"), Resources::GetFileSize("progressbar_outline.png"));
|
||||
GuiImage progressbarOutlineImg(&progressbarOutline);
|
||||
if (Settings.wsprompt == yes)
|
||||
{
|
||||
@ -2264,15 +2228,13 @@ int ProgressDownloadWindow(int choice2)
|
||||
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarOutlineImg.SetPosition(25, 40);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", Settings.theme_path);
|
||||
GuiImageData progressbarEmpty(imgPath, progressbar_empty_png);
|
||||
GuiImageData progressbarEmpty(Resources::GetFile("progressbar_empty.png"), Resources::GetFileSize("progressbar_empty.png"));
|
||||
GuiImage progressbarEmptyImg(&progressbarEmpty);
|
||||
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarEmptyImg.SetPosition(25, 40);
|
||||
progressbarEmptyImg.SetTile(100);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", Settings.theme_path);
|
||||
GuiImageData progressbar(imgPath, progressbar_png);
|
||||
GuiImageData progressbar(Resources::GetFile("progressbar.png"), Resources::GetFileSize("progressbar.png"));
|
||||
GuiImage progressbarImg(&progressbar);
|
||||
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarImg.SetPosition(25, 40);
|
||||
@ -3215,11 +3177,8 @@ int ProgressUpdateWindow()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -3229,8 +3188,7 @@ int ProgressUpdateWindow()
|
||||
dialogBoxImg.SetWidescreen(Settings.widescreen);
|
||||
}
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", Settings.theme_path);
|
||||
GuiImageData progressbarOutline(imgPath, progressbar_outline_png);
|
||||
GuiImageData progressbarOutline(Resources::GetFile("progressbar_outline.png"), Resources::GetFileSize("progressbar_outline.png"));
|
||||
GuiImage progressbarOutlineImg(&progressbarOutline);
|
||||
if (Settings.wsprompt == yes)
|
||||
{
|
||||
@ -3239,15 +3197,13 @@ int ProgressUpdateWindow()
|
||||
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarOutlineImg.SetPosition(25, 7);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", Settings.theme_path);
|
||||
GuiImageData progressbarEmpty(imgPath, progressbar_empty_png);
|
||||
GuiImageData progressbarEmpty(Resources::GetFile("progressbar_empty.png"), Resources::GetFileSize("progressbar_empty.png"));
|
||||
GuiImage progressbarEmptyImg(&progressbarEmpty);
|
||||
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarEmptyImg.SetPosition(25, 7);
|
||||
progressbarEmptyImg.SetTile(100);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", Settings.theme_path);
|
||||
GuiImageData progressbar(imgPath, progressbar_png);
|
||||
GuiImageData progressbar(Resources::GetFile("progressbar.png"), Resources::GetFileSize("progressbar.png"));
|
||||
GuiImage progressbarImg(&progressbar);
|
||||
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarImg.SetPosition(25, 7);
|
||||
@ -3614,11 +3570,8 @@ int CodeDownload(const char *id)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -3801,28 +3754,22 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbg_options.png", Settings.theme_path);
|
||||
GuiImageData whiteBox(imgPath, bg_options_png);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar.png", Settings.theme_path);
|
||||
GuiImageData scrollbar(imgPath, scrollbar_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiImageData whiteBox(Resources::GetFile("bg_options.png"), Resources::GetFileSize("bg_options.png"));
|
||||
|
||||
GuiImageData scrollbar(Resources::GetFile("scrollbar.png"), Resources::GetFileSize("scrollbar.png"));
|
||||
GuiImage scrollbarImg(&scrollbar);
|
||||
scrollbarImg.SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
|
||||
scrollbarImg.SetPosition(-40, 114);
|
||||
scrollbarImg.SetSkew(0, 0, 0, 0, 0, -120, 0, -120);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowdown.png", Settings.theme_path);
|
||||
GuiImageData arrowDown(imgPath, scrollbar_arrowdown_png);
|
||||
GuiImageData arrowDown(Resources::GetFile("scrollbar_arrowdown.png"), Resources::GetFileSize("scrollbar_arrowdown.png"));
|
||||
GuiImage arrowDownImg(&arrowDown);
|
||||
arrowDownImg.SetScale(.8);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sscrollbar_arrowup.png", Settings.theme_path);
|
||||
GuiImageData arrowUp(imgPath, scrollbar_arrowup_png);
|
||||
GuiImageData arrowUp(Resources::GetFile("scrollbar_arrowup.png"), Resources::GetFileSize("scrollbar_arrowup.png"));
|
||||
GuiImage arrowUpImg(&arrowUp);
|
||||
arrowUpImg.SetScale(.8);
|
||||
|
||||
@ -3846,13 +3793,20 @@ int HBCWindowPrompt(const char *name, const char *coder, const char *version, co
|
||||
|
||||
GuiImageData *iconData = NULL;
|
||||
GuiImage *iconImg = NULL;
|
||||
|
||||
char imgPath[150];
|
||||
snprintf(imgPath, sizeof(imgPath), "%s", iconPath);
|
||||
|
||||
bool iconExist = CheckFile(imgPath);
|
||||
if (iconExist)
|
||||
{
|
||||
iconData = new GuiImageData(iconPath, dialogue_box_png);
|
||||
iconImg = new GuiImage(iconData);
|
||||
iconData = new GuiImageData(imgPath);
|
||||
if(!iconData->GetImage())
|
||||
{
|
||||
delete iconData;
|
||||
iconData = new GuiImageData(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
}
|
||||
iconImg = new GuiImage(iconData);
|
||||
iconImg->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
iconImg->SetPosition(45, 10);
|
||||
}
|
||||
|
@ -130,12 +130,8 @@ bool TitleSelector(char output[])
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgamesettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
GuiImage settingsbackground(&settingsbg);
|
||||
GuiButton settingsbackgroundbtn(settingsbackground.GetWidth(), settingsbackground.GetHeight());
|
||||
@ -163,8 +159,7 @@ bool TitleSelector(char output[])
|
||||
u8 scrollbaron = 0;
|
||||
if (num_titles + 1 > 9) scrollbaron = 1;
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser4(396, 280, &options4, Settings.theme_path, "bg_options_gamesettings.png",
|
||||
bg_options_settings_png, scrollbaron, 200);
|
||||
GuiCustomOptionBrowser optionBrowser4(396, 280, &options4, "bg_options_gamesettings.png", scrollbaron, 200);
|
||||
optionBrowser4.SetPosition(0, 90);
|
||||
optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
@ -362,12 +357,8 @@ int TitleBrowser()
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgamesettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -404,13 +395,11 @@ int TitleBrowser()
|
||||
u8 scrollbaron = 0;
|
||||
if (total + 1 > 9) scrollbaron = 1;
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, Settings.theme_path, "bg_options_gamesettings.png",
|
||||
bg_options_settings_png, scrollbaron, 200);
|
||||
GuiCustomOptionBrowser optionBrowser3(396, 280, &options3, "bg_options_gamesettings.png", scrollbaron, 200);
|
||||
optionBrowser3.SetPosition(0, 90);
|
||||
optionBrowser3.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sWifi_btn.png", Settings.theme_path);
|
||||
GuiImageData wifiImgData(imgPath, Wifi_btn_png);
|
||||
GuiImageData wifiImgData(Resources::GetFile("Wifi_btn.png"), Resources::GetFileSize("Wifi_btn.png"));
|
||||
GuiImage wifiImg(&wifiImgData);
|
||||
if (Settings.wsprompt == yes)
|
||||
{
|
||||
|
@ -310,7 +310,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*=
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
GuiImageData folderImgData(icon_folder_png);
|
||||
GuiImageData folderImgData(Resources::GetFile("icon_folder.png"), Resources::GetFileSize("icon_folder.png"));
|
||||
GuiImage folderImg(&folderImgData);
|
||||
GuiButton folderBtn(folderImg.GetWidth(), folderImg.GetHeight());
|
||||
folderBtn.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
@ -319,9 +319,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*=
|
||||
folderBtn.SetTrigger(&trigA);
|
||||
folderBtn.SetEffectGrow();
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiText ExitBtnTxt(tr( "Cancel" ), 24, ( GXColor )
|
||||
{ 0, 0, 0, 255});
|
||||
GuiImage ExitBtnImg(&btnOutline);
|
||||
@ -369,7 +367,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*=
|
||||
fileBrowser.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
fileBrowser.SetPosition(0, 120);
|
||||
|
||||
GuiImageData Address(addressbar_textbox_png);
|
||||
GuiImageData Address(Resources::GetFile("addressbar_textbox.png"), Resources::GetFileSize("addressbar_textbox.png"));
|
||||
GuiText AdressText((char*) NULL, 20, ( GXColor )
|
||||
{ 0, 0, 0, 255});
|
||||
AdressText.SetTextf("%s%s", browser->rootdir, browser->dir);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "fatmounter.h"
|
||||
#include "FileOperations/fileops.h"
|
||||
#include "prompts/PromptWindows.h"
|
||||
#include "themes/CTheme.h"
|
||||
#include "gameinfo.h"
|
||||
#include "usbloader/GameList.h"
|
||||
#include "../gecko.h"
|
||||
@ -137,17 +138,12 @@ int showGameInfo(char *ID)
|
||||
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgameinfo1_png.png", Settings.theme_path);
|
||||
GuiImageData dialogBox1(imgPath, gameinfo1_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgameinfo1a_png.png", Settings.theme_path);
|
||||
GuiImageData dialogBox2(imgPath, gameinfo1a_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgameinfo2_png.png", Settings.theme_path);
|
||||
GuiImageData dialogBox3(imgPath, gameinfo2_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sgameinfo2a_png.png", Settings.theme_path);
|
||||
GuiImageData dialogBox4(imgPath, gameinfo2a_png);
|
||||
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox1(Resources::GetFile("gameinfo1.png"), Resources::GetFileSize("gameinfo1.png"));
|
||||
GuiImageData dialogBox2(Resources::GetFile("gameinfo1a.png"), Resources::GetFileSize("gameinfo1a.png"));
|
||||
GuiImageData dialogBox3(Resources::GetFile("gameinfo2.png"), Resources::GetFileSize("gameinfo2.png"));
|
||||
GuiImageData dialogBox4(Resources::GetFile("gameinfo2a.png"), Resources::GetFileSize("gameinfo2a.png"));
|
||||
|
||||
GuiTrigger trig1;
|
||||
trig1.SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_X, 0);
|
||||
@ -217,59 +213,56 @@ int showGameInfo(char *ID)
|
||||
|
||||
// switch icons
|
||||
if (nunchuk)
|
||||
nunchukImgData = new GuiImageData(nunchukR_png);
|
||||
else nunchukImgData = new GuiImageData(nunchuk_png);
|
||||
nunchukImgData = Resources::GetImageData("nunchukR.png");
|
||||
else nunchukImgData = Resources::GetImageData("nunchuk.png");
|
||||
|
||||
if (classiccontroller)
|
||||
classiccontrollerImgData = new GuiImageData(classiccontrollerR_png);
|
||||
else classiccontrollerImgData = new GuiImageData(classiccontroller_png);
|
||||
classiccontrollerImgData = Resources::GetImageData("classiccontrollerR.png");
|
||||
else classiccontrollerImgData = Resources::GetImageData("classiccontroller.png");
|
||||
|
||||
if (guitar)
|
||||
guitarImgData = new GuiImageData(guitarR_png);
|
||||
else guitarImgData = new GuiImageData(guitar_png);
|
||||
guitarImgData = Resources::GetImageData("guitarR.png");
|
||||
else guitarImgData = Resources::GetImageData("guitar.png");
|
||||
|
||||
if (gamecube)
|
||||
gamecubeImgData = new GuiImageData(gcncontrollerR_png);
|
||||
else gamecubeImgData = new GuiImageData(gcncontroller_png);
|
||||
gamecubeImgData = Resources::GetImageData("gcncontrollerR.png");
|
||||
else gamecubeImgData = Resources::GetImageData("gcncontroller.png");
|
||||
|
||||
if (wheel)
|
||||
wheelImgData = new GuiImageData(wheelR_png);
|
||||
else wheelImgData = new GuiImageData(wheel_png);
|
||||
wheelImgData = Resources::GetImageData("wheelR.png");
|
||||
else wheelImgData = Resources::GetImageData("wheel.png");
|
||||
|
||||
if (motionplus)
|
||||
motionplusImgData = new GuiImageData(motionplusR_png);
|
||||
else motionplusImgData = new GuiImageData(motionplus_png);
|
||||
motionplusImgData = Resources::GetImageData("motionplusR.png");
|
||||
else motionplusImgData = Resources::GetImageData("motionplus.png");
|
||||
|
||||
if (drums)
|
||||
drumsImgData = new GuiImageData(drumsR_png);
|
||||
else drumsImgData = new GuiImageData(drums_png);
|
||||
drumsImgData = Resources::GetImageData("drumsR.png");
|
||||
else drumsImgData = Resources::GetImageData("drums.png");
|
||||
|
||||
if (microphone)
|
||||
microphoneImgData = new GuiImageData(microphoneR_png);
|
||||
else microphoneImgData = new GuiImageData(microphone_png);
|
||||
microphoneImgData = Resources::GetImageData("microphoneR.png");
|
||||
else microphoneImgData = Resources::GetImageData("microphone.png");
|
||||
|
||||
if (zapper)
|
||||
zapperImgData = new GuiImageData(zapperR_png);
|
||||
else zapperImgData = new GuiImageData(zapper_png);
|
||||
zapperImgData = Resources::GetImageData("zapperR.png");
|
||||
else zapperImgData = Resources::GetImageData("zapper.png");
|
||||
|
||||
if (wiispeak)
|
||||
wiispeakImgData = new GuiImageData(wiispeakR_png);
|
||||
else wiispeakImgData = new GuiImageData(wiispeak_png);
|
||||
wiispeakImgData = Resources::GetImageData("wiispeakR.png");
|
||||
else wiispeakImgData = Resources::GetImageData("wiispeak.png");
|
||||
|
||||
if (nintendods)
|
||||
nintendodsImgData = new GuiImageData(nintendodsR_png);
|
||||
else nintendodsImgData = new GuiImageData(nintendods_png);
|
||||
|
||||
//if (vitalitysensor) vitalitysensorImgData = new GuiImageData(vitalitysensorR_png);
|
||||
//else vitalitysensorImgData = new GuiImageData(vitalitysensor_png);
|
||||
nintendodsImgData = Resources::GetImageData("nintendodsR.png");
|
||||
else nintendodsImgData = Resources::GetImageData("nintendods.png");
|
||||
|
||||
if (balanceboard)
|
||||
balanceboardImgData = new GuiImageData(balanceboardR_png);
|
||||
else balanceboardImgData = new GuiImageData(balanceboard_png);
|
||||
balanceboardImgData = Resources::GetImageData("balanceboardR.png");
|
||||
else balanceboardImgData = Resources::GetImageData("balanceboard.png");
|
||||
|
||||
if (dancepad)
|
||||
dancepadImgData = new GuiImageData(dancepadR_png);
|
||||
else dancepadImgData = new GuiImageData(dancepad_png);
|
||||
dancepadImgData = Resources::GetImageData("dancepadR.png");
|
||||
else dancepadImgData = Resources::GetImageData("dancepad.png");
|
||||
|
||||
// look for optional accessories
|
||||
for (int i = 1; i <= XML_ELEMMAX; i++)
|
||||
@ -312,13 +305,13 @@ int showGameInfo(char *ID)
|
||||
gameinfoWindow.Append(dialogBoxImg3);
|
||||
gameinfoWindow.Append(dialogBoxImg4);
|
||||
|
||||
char imgPath[150];
|
||||
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID);
|
||||
cover = new GuiImageData(imgPath, 0); //load full id image
|
||||
cover = new GuiImageData(imgPath); //load full id image
|
||||
if (!cover->GetImage())
|
||||
{
|
||||
delete cover;
|
||||
snprintf(imgPath, sizeof(imgPath), "%snoimage.png", Settings.covers_path);
|
||||
cover = new GuiImageData(imgPath, nocover_png); //load no image
|
||||
cover = Resources::GetImageData("nocover.png");
|
||||
}
|
||||
delete coverImg;
|
||||
coverImg = NULL;
|
||||
@ -331,14 +324,14 @@ int showGameInfo(char *ID)
|
||||
// # of players
|
||||
if (strcmp(gameinfo.players, "") != 0)
|
||||
{
|
||||
playersImgData = new GuiImageData(Wiimote1_png);
|
||||
playersImgData = Resources::GetImageData("wiimote1.png");
|
||||
if (atoi(gameinfo.players) > 1)
|
||||
{
|
||||
playersImgData = new GuiImageData(Wiimote2_png);
|
||||
playersImgData = Resources::GetImageData("wiimote2.png");
|
||||
}
|
||||
if (atoi(gameinfo.players) > 2)
|
||||
{
|
||||
playersImgData = new GuiImageData(Wiimote4_png);
|
||||
playersImgData = Resources::GetImageData("wiimote4.png");
|
||||
}
|
||||
|
||||
playersImg = new GuiImage(playersImgData);
|
||||
@ -450,16 +443,6 @@ int showGameInfo(char *ID)
|
||||
gameinfoWindow.Append(nintendodsImg);
|
||||
intputX += (Settings.widescreen ? nintendodsImg->GetWidth() * .8 : nintendodsImg->GetWidth()) + 5;
|
||||
}
|
||||
/*
|
||||
if (vitalitysensor==1) {
|
||||
vitalitysensorImg = new GuiImage(vitalitysensorImgData);
|
||||
vitalitysensorImg->SetWidescreen(Settings.widescreen);
|
||||
vitalitysensorImg->SetPosition(intputX , inputY);
|
||||
vitalitysensorImg->SetAlignment(0,4);
|
||||
gameinfoWindow.Append(vitalitysensorImg);
|
||||
intputX += (Settings.widescreen ? vitalitysensorImg->GetWidth() * .8 : vitalitysensorImg->GetWidth())+5;
|
||||
}
|
||||
*/
|
||||
if (dancepad == 1)
|
||||
{
|
||||
dancepadImg = new GuiImage(dancepadImgData);
|
||||
@ -482,36 +465,30 @@ int showGameInfo(char *ID)
|
||||
// # online players
|
||||
if ((strcmp(gameinfo.wifiplayers, "") != 0) && (strcmp(gameinfo.wifiplayers, "0") != 0))
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi1_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi1.png");
|
||||
if (atoi(gameinfo.wifiplayers) > 1)
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi2_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi2.png");
|
||||
}
|
||||
if (atoi(gameinfo.wifiplayers) > 2)
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi4_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi4.png");
|
||||
}
|
||||
if (atoi(gameinfo.wifiplayers) > 4)
|
||||
{
|
||||
//wifiplayersImgData= new GuiImageData(wifi6_png);
|
||||
wifiplayersImgData = new GuiImageData(wifi8_png);
|
||||
wifiplayersImgData =Resources::GetImageData("wifi8.png");
|
||||
}
|
||||
/*
|
||||
if (atoi(gameinfo.wifiplayers)>6) {
|
||||
wifiplayersImgData= new GuiImageData(wifi8_png);
|
||||
}
|
||||
*/
|
||||
if (atoi(gameinfo.wifiplayers) > 8)
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi12_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi12.png");
|
||||
}
|
||||
if (atoi(gameinfo.wifiplayers) > 12)
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi16_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi16.png");
|
||||
}
|
||||
if (atoi(gameinfo.wifiplayers) > 16)
|
||||
{
|
||||
wifiplayersImgData = new GuiImageData(wifi32_png);
|
||||
wifiplayersImgData = Resources::GetImageData("wifi32.png");
|
||||
}
|
||||
wifiplayersImg = new GuiImage(wifiplayersImgData);
|
||||
wifiplayersImg->SetWidescreen(Settings.widescreen);
|
||||
@ -527,60 +504,60 @@ int showGameInfo(char *ID)
|
||||
if (strcmp(gameinfo.ratingtype, "ESRB") == 0)
|
||||
{
|
||||
if (strcmp(gameinfo.ratingvalueESRB, "EC") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_ec_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_ec.png");
|
||||
else if (strcmp(gameinfo.ratingvalueESRB, "E") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_e_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_e.png");
|
||||
else if (strcmp(gameinfo.ratingvalueESRB, "E10+") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_eten_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_eten.png");
|
||||
else if (strcmp(gameinfo.ratingvalueESRB, "T") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_t_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_t.png");
|
||||
else if (strcmp(gameinfo.ratingvalueESRB, "M") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_m_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_m.png");
|
||||
else if (strcmp(gameinfo.ratingvalueESRB, "AO") == 0)
|
||||
ratingImgData = new GuiImageData(esrb_ao_png);
|
||||
ratingImgData = Resources::GetImageData("esrb_ao.png");
|
||||
else
|
||||
{
|
||||
ratingImgData = new GuiImageData(norating_png);
|
||||
ratingImgData = Resources::GetImageData("norating.png");
|
||||
}
|
||||
} //there are 2 values here cause some countries are stupid and
|
||||
else if (strcmp(gameinfo.ratingtype, "PEGI") == 0) //can't use the same as everybody else
|
||||
{
|
||||
if ((strcmp(gameinfo.ratingvaluePEGI, "3") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "4") == 0))
|
||||
ratingImgData = new GuiImageData(pegi_3_png);
|
||||
ratingImgData = Resources::GetImageData("pegi_3.png");
|
||||
else if ((strcmp(gameinfo.ratingvaluePEGI, "7") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "7") == 0))
|
||||
ratingImgData = new GuiImageData(pegi_7_png);
|
||||
ratingImgData = Resources::GetImageData("pegi_7.png");
|
||||
else if (strcmp(gameinfo.ratingvaluePEGI, "12") == 0)
|
||||
ratingImgData = new GuiImageData(pegi_12_png);
|
||||
ratingImgData = Resources::GetImageData("pegi_12.png");
|
||||
else if ((strcmp(gameinfo.ratingvaluePEGI, "16") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "15") == 0))
|
||||
ratingImgData = new GuiImageData(pegi_16_png);
|
||||
ratingImgData = Resources::GetImageData("pegi_16.png");
|
||||
else if (strcmp(gameinfo.ratingvaluePEGI, "18") == 0)
|
||||
ratingImgData = new GuiImageData(pegi_18_png);
|
||||
ratingImgData = Resources::GetImageData("pegi_18.png");
|
||||
else
|
||||
{
|
||||
ratingImgData = new GuiImageData(norating_png);
|
||||
ratingImgData = Resources::GetImageData("norating.png");
|
||||
}
|
||||
}
|
||||
else if (strcmp(gameinfo.ratingtype, "CERO") == 0)
|
||||
{
|
||||
if (strcmp(gameinfo.ratingvalueCERO, "A") == 0)
|
||||
ratingImgData = new GuiImageData(cero_a_png);
|
||||
ratingImgData = Resources::GetImageData("cero_a.png");
|
||||
else if (strcmp(gameinfo.ratingvalueCERO, "B") == 0)
|
||||
ratingImgData = new GuiImageData(cero_b_png);
|
||||
ratingImgData = Resources::GetImageData("cero_b.png");
|
||||
else if (strcmp(gameinfo.ratingvalueCERO, "C") == 0)
|
||||
ratingImgData = new GuiImageData(cero_c_png);
|
||||
ratingImgData = Resources::GetImageData("cero_c.png");
|
||||
else if (strcmp(gameinfo.ratingvalueCERO, "D") == 0)
|
||||
ratingImgData = new GuiImageData(cero_d_png);
|
||||
ratingImgData = Resources::GetImageData("cero_d.png");
|
||||
else if (strcmp(gameinfo.ratingvalueCERO, "Z") == 0)
|
||||
ratingImgData = new GuiImageData(cero_z_png);
|
||||
ratingImgData = Resources::GetImageData("cero_z.png");
|
||||
else
|
||||
{
|
||||
ratingImgData = new GuiImageData(norating_png);
|
||||
ratingImgData = Resources::GetImageData("norating.png");
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ratingImgData = new GuiImageData(norating_png);
|
||||
ratingImgData = Resources::GetImageData("norating.png");
|
||||
}
|
||||
ratingImg = new GuiImage(ratingImgData);
|
||||
ratingImg->SetWidescreen(Settings.widescreen);
|
||||
|
@ -1,981 +0,0 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/iosupport.h>
|
||||
#include <sys/errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <ogcsys.h>
|
||||
#include <new>
|
||||
#include "ramdisk.h"
|
||||
|
||||
#define NAMELENMAX 0x80
|
||||
#define MAXPATHLEN 0x100
|
||||
|
||||
class RAMDISK_PARTITION;
|
||||
class RAMDISK_LINK_ENTRY;
|
||||
class RAMDISK_DIR_ENTRY;
|
||||
class RAMDISK_FILE_ENTRY;
|
||||
class RAMDISK_BASE_ENTRY
|
||||
{
|
||||
public:
|
||||
RAMDISK_BASE_ENTRY(const char *Name, RAMDISK_DIR_ENTRY *Parent);
|
||||
virtual ~RAMDISK_BASE_ENTRY();
|
||||
void Rename(const char *Name);
|
||||
RAMDISK_LINK_ENTRY *IsLink();
|
||||
RAMDISK_DIR_ENTRY *IsDir();
|
||||
RAMDISK_FILE_ENTRY *IsFile();
|
||||
RAMDISK_PARTITION *GetPartition();
|
||||
char *name;
|
||||
RAMDISK_DIR_ENTRY *parent;
|
||||
RAMDISK_BASE_ENTRY *next;
|
||||
};
|
||||
class RAMDISK_LINK_ENTRY: public RAMDISK_BASE_ENTRY
|
||||
{
|
||||
public:
|
||||
RAMDISK_LINK_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent, RAMDISK_BASE_ENTRY *Link);
|
||||
RAMDISK_BASE_ENTRY *link;
|
||||
};
|
||||
class RAMDISK_DIR_ENTRY: public RAMDISK_BASE_ENTRY
|
||||
{
|
||||
public:
|
||||
RAMDISK_DIR_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent);
|
||||
~RAMDISK_DIR_ENTRY();
|
||||
RAMDISK_BASE_ENTRY *FindEntry(const char* Path);
|
||||
RAMDISK_FILE_ENTRY *CreateFile(const char *Filename);
|
||||
RAMDISK_DIR_ENTRY *CreateDir(const char *Filename);
|
||||
void RemoveEntry(RAMDISK_BASE_ENTRY *Entry);
|
||||
RAMDISK_BASE_ENTRY *first;
|
||||
RAMDISK_BASE_ENTRY *last;
|
||||
};
|
||||
typedef struct
|
||||
{
|
||||
RAMDISK_DIR_ENTRY *dir;
|
||||
RAMDISK_BASE_ENTRY *current_entry;
|
||||
} DIR_STRUCT;
|
||||
|
||||
class RAMDISK_PARTITION: public RAMDISK_DIR_ENTRY
|
||||
{
|
||||
public:
|
||||
RAMDISK_PARTITION(const char *Mountpoint, bool AutoMount);
|
||||
RAMDISK_BASE_ENTRY *FindEntry(const char* Path);
|
||||
RAMDISK_DIR_ENTRY *FindPath(const char* Path, const char **Basename = NULL);
|
||||
RAMDISK_DIR_ENTRY *cwd;
|
||||
bool automount;
|
||||
};
|
||||
|
||||
class FILE_DATA
|
||||
{
|
||||
public:
|
||||
FILE_DATA(size_t Len);
|
||||
~FILE_DATA();
|
||||
u8 *data;
|
||||
size_t len;
|
||||
FILE_DATA *next;
|
||||
};
|
||||
typedef struct
|
||||
{
|
||||
RAMDISK_FILE_ENTRY *file;
|
||||
bool isLink;
|
||||
u32 current_pos;
|
||||
bool read;
|
||||
bool write;
|
||||
} FILE_STRUCT;
|
||||
class RAMDISK_FILE_ENTRY: public RAMDISK_BASE_ENTRY
|
||||
{
|
||||
public:
|
||||
RAMDISK_FILE_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent);
|
||||
~RAMDISK_FILE_ENTRY();
|
||||
bool Truncate(size_t newLen);
|
||||
bool AddCluster(size_t size);
|
||||
size_t Read(struct _reent *r, FILE_STRUCT *fileStruct, char *ptr, size_t len);
|
||||
size_t Write(struct _reent *r, FILE_STRUCT *fileStruct, const char *ptr, size_t len);
|
||||
size_t file_len;
|
||||
size_t cluster_len;
|
||||
FILE_DATA *first_cluster;
|
||||
FILE_DATA *last_cluster;
|
||||
};
|
||||
|
||||
RAMDISK_LINK_ENTRY::RAMDISK_LINK_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent, RAMDISK_BASE_ENTRY *Link) :
|
||||
RAMDISK_BASE_ENTRY(Name, Parent), link(Link)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
RAMDISK_BASE_ENTRY::RAMDISK_BASE_ENTRY(const char *Name, RAMDISK_DIR_ENTRY *Parent) :
|
||||
name(strdup(Name)), parent(Parent), next(NULL)
|
||||
{
|
||||
}
|
||||
RAMDISK_BASE_ENTRY::~RAMDISK_BASE_ENTRY()
|
||||
{
|
||||
free(name);
|
||||
if (parent) parent->RemoveEntry(this);
|
||||
}
|
||||
void RAMDISK_BASE_ENTRY::Rename(const char *Name)
|
||||
{
|
||||
free(name);
|
||||
name = strdup(Name);
|
||||
}
|
||||
|
||||
inline RAMDISK_LINK_ENTRY *RAMDISK_BASE_ENTRY::IsLink()
|
||||
{
|
||||
return dynamic_cast<RAMDISK_LINK_ENTRY*> (this);
|
||||
}
|
||||
inline RAMDISK_DIR_ENTRY *RAMDISK_BASE_ENTRY::IsDir()
|
||||
{
|
||||
RAMDISK_LINK_ENTRY *lentry = dynamic_cast<RAMDISK_LINK_ENTRY*> (this);
|
||||
return dynamic_cast<RAMDISK_DIR_ENTRY*> (lentry ? lentry->link : this);
|
||||
}
|
||||
inline RAMDISK_FILE_ENTRY *RAMDISK_BASE_ENTRY::IsFile()
|
||||
{
|
||||
RAMDISK_LINK_ENTRY *lentry = dynamic_cast<RAMDISK_LINK_ENTRY*> (this);
|
||||
return dynamic_cast<RAMDISK_FILE_ENTRY*> (lentry ? lentry->link : this);
|
||||
}
|
||||
RAMDISK_PARTITION *RAMDISK_BASE_ENTRY::GetPartition()
|
||||
{
|
||||
for (RAMDISK_BASE_ENTRY *entry = this; entry; entry = entry->parent)
|
||||
if (entry->parent == NULL) return dynamic_cast<RAMDISK_PARTITION *> (entry);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RAMDISK_DIR_ENTRY::RAMDISK_DIR_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent) :
|
||||
RAMDISK_BASE_ENTRY(Name, Parent)
|
||||
{
|
||||
RAMDISK_BASE_ENTRY* entry = new RAMDISK_LINK_ENTRY(".", this, this);
|
||||
first = entry;
|
||||
last = entry;
|
||||
if (parent)
|
||||
{
|
||||
entry = new RAMDISK_LINK_ENTRY("..", this, parent);
|
||||
first->next = entry;
|
||||
last = entry;
|
||||
}
|
||||
}
|
||||
RAMDISK_DIR_ENTRY::~RAMDISK_DIR_ENTRY()
|
||||
{
|
||||
while (first)
|
||||
{
|
||||
first->parent = NULL; // ~RAMDISK_BASE_ENTRY() no calls RemoveEntry()
|
||||
RAMDISK_BASE_ENTRY* next = first->next;
|
||||
delete first;
|
||||
first = next;
|
||||
}
|
||||
}
|
||||
|
||||
RAMDISK_BASE_ENTRY *RAMDISK_DIR_ENTRY::FindEntry(const char* Path)
|
||||
{
|
||||
const char* dirpath = Path;
|
||||
const char* cptr;
|
||||
while (dirpath[0] == '/')
|
||||
dirpath++; // move past leading '/'
|
||||
|
||||
if (dirpath[0] == '\0') // this path is found
|
||||
return this;
|
||||
|
||||
cptr = strchr(dirpath, '/'); // find next '/'
|
||||
if (cptr == NULL) cptr = strchr(dirpath, '\0'); // cptr at end
|
||||
for (RAMDISK_BASE_ENTRY *curr = first; curr; curr = curr->next)
|
||||
{
|
||||
if (strncmp(curr->name, dirpath, cptr - dirpath) == 0)
|
||||
{
|
||||
if ( RAMDISK_DIR_ENTRY *dir = curr->IsDir() )
|
||||
return dir->FindEntry(cptr);
|
||||
else return curr;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
RAMDISK_FILE_ENTRY *RAMDISK_DIR_ENTRY::CreateFile(const char *Filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
RAMDISK_FILE_ENTRY* file = new RAMDISK_FILE_ENTRY(Filename, this);
|
||||
if (!first) first = file;
|
||||
last->next = file;
|
||||
last = file;
|
||||
return file;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
RAMDISK_DIR_ENTRY *RAMDISK_DIR_ENTRY::CreateDir(const char *Filename)
|
||||
{
|
||||
try
|
||||
{
|
||||
RAMDISK_DIR_ENTRY* dir = new RAMDISK_DIR_ENTRY(Filename, this);
|
||||
if (!first) first = dir;
|
||||
last->next = dir;
|
||||
last = dir;
|
||||
return dir;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
void RAMDISK_DIR_ENTRY::RemoveEntry(RAMDISK_BASE_ENTRY *Entry)
|
||||
{
|
||||
RAMDISK_BASE_ENTRY **p_last = NULL;
|
||||
for (RAMDISK_BASE_ENTRY **curr = &first; *curr; curr = &((*curr)->next))
|
||||
{
|
||||
if (*curr == Entry)
|
||||
{
|
||||
*curr = Entry->next;
|
||||
if (Entry->next == NULL) // entry is last
|
||||
last = *p_last;
|
||||
break;
|
||||
}
|
||||
p_last = curr;
|
||||
}
|
||||
}
|
||||
|
||||
RAMDISK_PARTITION::RAMDISK_PARTITION(const char *Mountpoint, bool AutoMount) :
|
||||
RAMDISK_DIR_ENTRY(Mountpoint, NULL), cwd(this), automount(AutoMount)
|
||||
{
|
||||
}
|
||||
|
||||
RAMDISK_BASE_ENTRY * RAMDISK_PARTITION::FindEntry(const char* path)
|
||||
{
|
||||
char *cptr;
|
||||
if ((cptr = strchr(path, ':'))) path = cptr + 1; //move path past any device names
|
||||
if (strchr(path, ':') != NULL)
|
||||
{
|
||||
// r->_errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
if (*path == '/') // if first character is '/' use absolute root path
|
||||
return RAMDISK_DIR_ENTRY::FindEntry(path);
|
||||
else // else use current working dir
|
||||
return cwd->FindEntry(path);
|
||||
}
|
||||
RAMDISK_DIR_ENTRY * RAMDISK_PARTITION::FindPath(const char* path, const char **basename)
|
||||
{
|
||||
int pathLen = strlen(path);
|
||||
char dirfilename[pathLen + 1]; // to hold a full path
|
||||
const char *cptr = path + pathLen; // find the end...
|
||||
const char *filename = NULL; // to hold filename
|
||||
while (cptr-- > path) //search till start
|
||||
{
|
||||
if ((*cptr == '/') || (*cptr == ':')) // split at either / or : (whichever comes first form the end!)
|
||||
{
|
||||
cptr++;
|
||||
strlcpy(dirfilename, path, 1 + cptr - path); //copy string up till and including / or :
|
||||
filename = cptr; //filename = now remainder of string
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
filename = path; //filename = complete path
|
||||
dirfilename[0] = 0; //make directory path ""
|
||||
}
|
||||
RAMDISK_BASE_ENTRY *entry = FindEntry(dirfilename);
|
||||
if (entry)
|
||||
{
|
||||
if (basename) *basename = filename;
|
||||
return entry->IsDir();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
FILE_DATA::FILE_DATA(size_t Len) :
|
||||
next(NULL)
|
||||
{
|
||||
data = new u8[Len];
|
||||
len = Len;
|
||||
memset(data, 0, len);
|
||||
}
|
||||
FILE_DATA::~FILE_DATA()
|
||||
{
|
||||
delete[] data;
|
||||
delete next;
|
||||
}
|
||||
|
||||
RAMDISK_FILE_ENTRY::RAMDISK_FILE_ENTRY(const char* Name, RAMDISK_DIR_ENTRY *Parent) :
|
||||
RAMDISK_BASE_ENTRY(Name, Parent), file_len(0), cluster_len(0), first_cluster(NULL), last_cluster(NULL)
|
||||
{
|
||||
}
|
||||
RAMDISK_FILE_ENTRY::~RAMDISK_FILE_ENTRY()
|
||||
{
|
||||
Truncate(0);
|
||||
}
|
||||
#define CLUSTER_SIZE 4*1024
|
||||
|
||||
bool RAMDISK_FILE_ENTRY::Truncate(size_t newSize)
|
||||
{
|
||||
if (newSize > cluster_len)
|
||||
{
|
||||
// Expanding the file over cluster_len
|
||||
return AddCluster(newSize - cluster_len);
|
||||
}
|
||||
else if (newSize < file_len)
|
||||
{
|
||||
// Shrinking the file
|
||||
FILE_DATA *prev_cluster = NULL;
|
||||
size_t len = 0;
|
||||
for (FILE_DATA **p_cluster = &first_cluster; *p_cluster; p_cluster = &(*p_cluster)->next)
|
||||
{
|
||||
if (len >= newSize)
|
||||
{
|
||||
last_cluster = prev_cluster;
|
||||
delete *p_cluster;
|
||||
(*p_cluster) = NULL;
|
||||
break;
|
||||
}
|
||||
len += (*p_cluster)->len;
|
||||
prev_cluster = *p_cluster;
|
||||
}
|
||||
}
|
||||
file_len = newSize;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RAMDISK_FILE_ENTRY::AddCluster(size_t len)
|
||||
{
|
||||
if (len < CLUSTER_SIZE) len = CLUSTER_SIZE;
|
||||
try
|
||||
{
|
||||
*(last_cluster ? &last_cluster->next : &first_cluster) = last_cluster = new FILE_DATA(len);
|
||||
cluster_len += len;
|
||||
return true;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
size_t RAMDISK_FILE_ENTRY::Read(struct _reent *r, FILE_STRUCT *fileStruct, char *ptr, size_t len)
|
||||
{
|
||||
if (!fileStruct->read)
|
||||
{
|
||||
r->_errno = EBADF;
|
||||
return 0;
|
||||
}
|
||||
// Short circuit cases where len is 0 (or less)
|
||||
if (len <= 0) return 0;
|
||||
// Don't try to read if the read pointer is past the end of file
|
||||
if (fileStruct->current_pos >= file_len)
|
||||
{
|
||||
r->_errno = EOVERFLOW;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Don't read past end of file
|
||||
if (len + fileStruct->current_pos > file_len)
|
||||
{
|
||||
r->_errno = EOVERFLOW;
|
||||
len = fileStruct->current_pos - file_len;
|
||||
}
|
||||
|
||||
off_t pos = fileStruct->current_pos;
|
||||
size_t readed = 0;
|
||||
size_t max_len = file_len;
|
||||
for (FILE_DATA *cluster = first_cluster; cluster; cluster = cluster->next)
|
||||
{
|
||||
if (pos > cluster->len)
|
||||
{
|
||||
pos -= cluster->len;
|
||||
max_len -= cluster->len;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t read = max_len;
|
||||
if (read > cluster->len) read = cluster->len;
|
||||
read -= pos;
|
||||
if (read > len) read = len;
|
||||
memcpy(ptr, &(cluster->data[pos]), read);
|
||||
readed += read;
|
||||
ptr += read;
|
||||
len -= read;
|
||||
if (len == 0) break;
|
||||
pos -= cluster->len;
|
||||
max_len -= cluster->len;
|
||||
|
||||
}
|
||||
}
|
||||
fileStruct->current_pos += readed;
|
||||
return readed;
|
||||
}
|
||||
size_t RAMDISK_FILE_ENTRY::Write(struct _reent *r, FILE_STRUCT *fileStruct, const char *ptr, size_t len)
|
||||
{
|
||||
|
||||
if (!fileStruct->write)
|
||||
{
|
||||
r->_errno = EBADF;
|
||||
return 0;
|
||||
}
|
||||
// Short circuit cases where len is 0 (or less)
|
||||
if (len <= 0) return 0;
|
||||
|
||||
off_t pos = fileStruct->current_pos;
|
||||
if (cluster_len < (pos + len) && !AddCluster((pos + len) - cluster_len))
|
||||
{
|
||||
// Couldn't get a cluster, so abort
|
||||
r->_errno = ENOSPC;
|
||||
return 0;
|
||||
}
|
||||
if (file_len < (pos + len)) file_len = (pos + len);
|
||||
|
||||
size_t written = 0;
|
||||
size_t max_len = cluster_len;
|
||||
for (FILE_DATA *cluster = first_cluster; cluster; cluster = cluster->next)
|
||||
{
|
||||
if (pos > cluster->len)
|
||||
{
|
||||
pos -= cluster->len;
|
||||
max_len -= cluster->len;
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t write = cluster->len - pos;
|
||||
if (write > len) write = len;
|
||||
memcpy(&(cluster->data[pos]), ptr, write);
|
||||
written += write;
|
||||
ptr += write;
|
||||
len -= write;
|
||||
if (len == 0) break;
|
||||
pos -= cluster->len;
|
||||
max_len -= cluster->len;
|
||||
}
|
||||
}
|
||||
fileStruct->current_pos += written;
|
||||
return written;
|
||||
}
|
||||
|
||||
static int ramdiskFS_open_r(struct _reent *r, void *fileStruct, const char *path, int flags, int mode);
|
||||
static int ramdiskFS_close_r(struct _reent *r, int fd);
|
||||
static int ramdiskFS_write_r(struct _reent *r, int fd, const char *ptr, size_t len);
|
||||
static int ramdiskFS_read_r(struct _reent *r, int fd, char *ptr, size_t len);
|
||||
static off_t ramdiskFS_seek_r(struct _reent *r, int fd, off_t pos, int dir);
|
||||
static int ramdiskFS_fstat_r(struct _reent *r, int fd, struct stat *st);
|
||||
static int ramdiskFS_stat_r(struct _reent *r, const char *file, struct stat *st);
|
||||
static int ramdiskFS_unlink_r(struct _reent *r, const char *name);
|
||||
static int ramdiskFS_chdir_r(struct _reent *r, const char *name);
|
||||
static int ramdiskFS_mkdir_r(struct _reent *r, const char *path, int mode);
|
||||
|
||||
static DIR_ITER* ramdiskFS_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path);
|
||||
static int ramdiskFS_dirreset_r(struct _reent *r, DIR_ITER *dirState);
|
||||
static int ramdiskFS_dirnext_r(struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *st);
|
||||
static int ramdiskFS_dirclose_r(struct _reent *r, DIR_ITER *dirState);
|
||||
|
||||
static int ramdiskFS_ftruncate_r(struct _reent *r, int fd, off_t len);
|
||||
|
||||
static devoptab_t ramdiskFS_devoptab = { "ramdisk", sizeof(FILE_STRUCT), // int structSize;
|
||||
&ramdiskFS_open_r, // int (*open_r)(struct _reent *r, void *fileStruct, const char *path,int
|
||||
// flags,int mode);
|
||||
&ramdiskFS_close_r, // int (*close_r)(struct _reent *r, int fd);
|
||||
&ramdiskFS_write_r, // int (*write_r)(struct _reent *r, int fd, const char *ptr, int len);
|
||||
&ramdiskFS_read_r, // int (*read_r)(struct _reent *r, int fd, char *ptr, int len);
|
||||
&ramdiskFS_seek_r, // off_t (*seek_r)(struct _reent *r, off_t fd, int pos, int dir);
|
||||
&ramdiskFS_fstat_r, // int (*fstat_r)(struct _reent *r, int fd, struct stat *st);
|
||||
&ramdiskFS_stat_r, // int (*stat_r)(struct _reent *r, const char *file, struct stat *st);
|
||||
NULL, // int (*link_r)(struct _reent *r, const char *existing, const char *newLink);
|
||||
&ramdiskFS_unlink_r, // int (*unlink_r)(struct _reent *r, const char *name);
|
||||
&ramdiskFS_chdir_r, // int (*chdir_r)(struct _reent *r, const char *name);
|
||||
NULL, // int (*rename_r) (struct _reent *r, const char *oldName, const char *newName);
|
||||
ramdiskFS_mkdir_r, // int (*mkdir_r) (struct _reent *r, const char *path, int mode);
|
||||
sizeof(DIR_STRUCT), // int dirStateSize;
|
||||
&ramdiskFS_diropen_r, // DIR_ITER* (*diropen_r)(struct _reent *r, DIR_ITER *dirState, const char *path);
|
||||
&ramdiskFS_dirreset_r, // int (*dirreset_r)(struct _reent *r, DIR_ITER *dirState);
|
||||
&ramdiskFS_dirnext_r, // int (*dirnext_r)(struct _reent *r, DIR_ITER *dirState, char *filename,
|
||||
// struct stat *filestat);
|
||||
&ramdiskFS_dirclose_r, // int (*dirclose_r)(struct _reent *r, DIR_ITER *dirState);
|
||||
NULL, // statvfs_r
|
||||
&ramdiskFS_ftruncate_r, // int (*ftruncate_r)(struct _reent *r, int fd, off_t len);
|
||||
|
||||
NULL, // fsync_r,
|
||||
NULL // Device data
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static inline RAMDISK_PARTITION* ramdiskFS_getPartitionFromPath(const char* path)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
const devoptab_t *devops = GetDeviceOpTab(path);
|
||||
if (!devops) return NULL;
|
||||
return *((RAMDISK_PARTITION**) devops->deviceData);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// File functions
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_open_r(struct _reent *r, void *file_Struct, const char *path, int flags, int mode)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) file_Struct;
|
||||
|
||||
RAMDISK_PARTITION *partition = ramdiskFS_getPartitionFromPath(path);
|
||||
if (partition == NULL)
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((flags & 0x03) == O_RDONLY)
|
||||
{
|
||||
// Open the file for read-only access
|
||||
fileStruct->read = true;
|
||||
fileStruct->write = false;
|
||||
}
|
||||
else if ((flags & 0x03) == O_WRONLY)
|
||||
{
|
||||
// Open file for write only access
|
||||
fileStruct->read = false;
|
||||
fileStruct->write = true;
|
||||
}
|
||||
else if ((flags & 0x03) == O_RDWR)
|
||||
{
|
||||
// Open file for read/write access
|
||||
fileStruct->read = true;
|
||||
fileStruct->write = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
r->_errno = EACCES;
|
||||
return -1;
|
||||
}
|
||||
RAMDISK_BASE_ENTRY *entry = partition->FindEntry(path);
|
||||
|
||||
// The file shouldn't exist if we are trying to create it
|
||||
if (entry && (flags & O_CREAT) && (flags & O_EXCL))
|
||||
{
|
||||
r->_errno = EEXIST;
|
||||
return -1;
|
||||
}
|
||||
// It should not be a directory if we're openning a file,
|
||||
if (entry && entry->IsDir())
|
||||
{
|
||||
r->_errno = EISDIR;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fileStruct->isLink = entry ? entry->IsLink() : false;
|
||||
fileStruct->file = entry ? entry->IsFile() : NULL;
|
||||
if (!fileStruct->file) // entry not exists
|
||||
{
|
||||
if (flags & O_CREAT)
|
||||
{
|
||||
const char *filename;
|
||||
RAMDISK_DIR_ENTRY *dir = partition->FindPath(path, &filename);
|
||||
if (!dir)
|
||||
{
|
||||
r->_errno = ENOTDIR;
|
||||
return -1;
|
||||
}
|
||||
fileStruct->file = dir->CreateFile(filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
// file doesn't exist, and we aren't creating it
|
||||
r->_errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
if (fileStruct->file)
|
||||
{
|
||||
fileStruct->current_pos = 0;
|
||||
// Truncate the file if requested
|
||||
if ((flags & O_TRUNC) && fileStruct->write) fileStruct->file->Truncate(0);
|
||||
if (flags & O_APPEND) fileStruct->current_pos = fileStruct->file->file_len;
|
||||
return 0;
|
||||
}
|
||||
r->_errno = ENOENT;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_close_r(struct _reent *r, int fd)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
return (0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_read_r(struct _reent *r, int fd, char *ptr, size_t len)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) fd;
|
||||
return fileStruct->file->Read(r, fileStruct, ptr, len);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_write_r(struct _reent *r, int fd, const char *ptr, size_t len)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) fd;
|
||||
return fileStruct->file->Write(r, fileStruct, ptr, len);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static off_t ramdiskFS_seek_r(struct _reent *r, int fd, off_t pos, int dir)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
//need check for eof here...
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) fd;
|
||||
|
||||
switch (dir)
|
||||
{
|
||||
case SEEK_SET:
|
||||
break;
|
||||
case SEEK_CUR:
|
||||
pos += fileStruct->current_pos;
|
||||
break;
|
||||
case SEEK_END:
|
||||
pos += fileStruct->file->file_len; // set start to end of file
|
||||
break;
|
||||
default:
|
||||
r->_errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
return fileStruct->current_pos = pos;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_fstat_r(struct _reent *r, int fd, struct stat *st)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) fd;
|
||||
|
||||
st->st_mode = fileStruct->isLink ? S_IFLNK : S_IFREG;
|
||||
st->st_size = fileStruct->file->file_len;
|
||||
return (0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_stat_r(struct _reent *r, const char *file, struct stat *st)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT fileStruct;
|
||||
DIR_STRUCT dirStruct;
|
||||
DIR_ITER dirState;
|
||||
dirState.dirStruct = &dirStruct; //create a temp dirstruct
|
||||
int ret;
|
||||
|
||||
if (ramdiskFS_open_r(r, &fileStruct, file, 0, 0) == 0)
|
||||
{
|
||||
ret = ramdiskFS_fstat_r(r, (int) &fileStruct, st);
|
||||
ramdiskFS_close_r(r, (int) &fileStruct);
|
||||
return (ret);
|
||||
}
|
||||
else if ((ramdiskFS_diropen_r(r, &dirState, file) != NULL))
|
||||
{
|
||||
st->st_mode = S_IFDIR;
|
||||
ramdiskFS_dirclose_r(r, &dirState);
|
||||
return (0);
|
||||
}
|
||||
r->_errno = ENOENT;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_unlink_r(struct _reent *r, const char *name)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
RAMDISK_PARTITION *partition = ramdiskFS_getPartitionFromPath(name);
|
||||
if (partition == NULL)
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
RAMDISK_BASE_ENTRY *entry = partition->FindEntry(name);
|
||||
if (!entry)
|
||||
{
|
||||
r->_errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (entry->IsLink())
|
||||
{
|
||||
if (entry->name[0] == '.' && (entry->name[1] == '\0' || (entry->name[1] == '.' && entry->name[2] == '\0')))
|
||||
{
|
||||
r->_errno = EPERM;
|
||||
return -1;
|
||||
}
|
||||
delete entry;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( RAMDISK_DIR_ENTRY *dir = entry->IsDir() )
|
||||
{
|
||||
for (RAMDISK_BASE_ENTRY *entry = dir->first; entry; entry = entry->next)
|
||||
{
|
||||
if (!(entry->name[0] == '.'
|
||||
&& (entry->name[1] == '\0' || (entry->name[1] == '.' && entry->name[2] == '\0'))))
|
||||
{
|
||||
r->_errno = EPERM;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete entry;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_chdir_r(struct _reent *r, const char *name)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
DIR_STRUCT dirStruct;
|
||||
DIR_ITER dirState;
|
||||
dirState.dirStruct = &dirStruct;
|
||||
if ((name == NULL))
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((ramdiskFS_diropen_r(r, &dirState, name) == NULL)) return -1;
|
||||
|
||||
RAMDISK_PARTITION *partition = dirStruct.dir->GetPartition();
|
||||
if (partition == NULL)
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
partition->cwd = dirStruct.dir;
|
||||
ramdiskFS_dirclose_r(r, &dirState);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_mkdir_r(struct _reent *r, const char *path, int mode)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
RAMDISK_PARTITION *partition = ramdiskFS_getPartitionFromPath(path);
|
||||
if (partition == NULL)
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return -1;
|
||||
}
|
||||
RAMDISK_BASE_ENTRY *entry = partition->FindEntry(path);
|
||||
if (entry)
|
||||
{
|
||||
r->_errno = EEXIST;
|
||||
return -1;
|
||||
}
|
||||
const char *filename;
|
||||
RAMDISK_DIR_ENTRY *dir = partition->FindPath(path, &filename);
|
||||
if (!dir)
|
||||
{
|
||||
r->_errno = ENOTDIR;
|
||||
return -1;
|
||||
}
|
||||
dir->CreateDir(filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Directory functions
|
||||
//---------------------------------------------------------------------------------
|
||||
static DIR_ITER* ramdiskFS_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
|
||||
DIR_STRUCT *dirStruct = (DIR_STRUCT*) dirState->dirStruct;
|
||||
char *cptr;
|
||||
|
||||
RAMDISK_PARTITION *partition = ramdiskFS_getPartitionFromPath(path);
|
||||
if (partition == NULL)
|
||||
{
|
||||
r->_errno = ENODEV;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((cptr = strchr(path, ':'))) path = cptr + 1; //move path past any device names
|
||||
if (strchr(path, ':') != NULL)
|
||||
{
|
||||
r->_errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (*path == '/') //if first character is '/' use absolute root path
|
||||
dirStruct->dir = partition; //first root dir
|
||||
else dirStruct->dir = partition->cwd; //else use current working dir
|
||||
|
||||
RAMDISK_BASE_ENTRY *entry = dirStruct->dir->FindEntry(path);
|
||||
if (entry == NULL)
|
||||
{
|
||||
r->_errno = ENOENT;
|
||||
return NULL;
|
||||
}
|
||||
dirStruct->dir = entry->IsDir();
|
||||
if (dirStruct->dir == NULL)
|
||||
{
|
||||
r->_errno = ENOTDIR;
|
||||
return NULL;
|
||||
}
|
||||
dirStruct->current_entry = dirStruct->dir->first;
|
||||
return dirState;
|
||||
}
|
||||
|
||||
/*Consts containing relative system path strings*/
|
||||
//reset dir to start of entry selected by dirStruct->cur_dir_id
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_dirreset_r(struct _reent *r, DIR_ITER *dirState)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
DIR_STRUCT *dirStruct = (DIR_STRUCT*) dirState->dirStruct;
|
||||
dirStruct->current_entry = dirStruct->dir->first;
|
||||
return (0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_dirnext_r(struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *st)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
DIR_STRUCT *dirStruct = (DIR_STRUCT*) dirState->dirStruct;
|
||||
// RAMDISK_BASE_ENTRY **dirStruct = (RAMDISK_BASE_ENTRY**)dirState->dirStruct;
|
||||
|
||||
if (dirStruct->current_entry)
|
||||
{
|
||||
strcpy(filename, dirStruct->current_entry->name);
|
||||
if (dirStruct->current_entry->IsDir())
|
||||
{
|
||||
if (st) st->st_mode = S_IFDIR;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (st) st->st_mode = 0;
|
||||
}
|
||||
dirStruct->current_entry = dirStruct->current_entry->next;
|
||||
return (0);
|
||||
}
|
||||
r->_errno = ENOENT;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_dirclose_r(struct _reent *r, DIR_ITER *dirState)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
return (0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static int ramdiskFS_ftruncate_r(struct _reent *r, int fd, off_t len)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
FILE_STRUCT *fileStruct = (FILE_STRUCT*) fd;
|
||||
|
||||
if (len < 0)
|
||||
{
|
||||
// Trying to truncate to a negative size
|
||||
r->_errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
if ((sizeof(len) > 4) && len > (off_t)FILE_MAX_SIZE)
|
||||
{
|
||||
// Trying to extend the file beyond what supports
|
||||
r->_errno = EFBIG;
|
||||
return -1;
|
||||
}
|
||||
*/
|
||||
if (!fileStruct->write)
|
||||
{
|
||||
// Read-only file
|
||||
r->_errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
if (fileStruct->file->Truncate(len)) return 0;
|
||||
r->_errno = ENOSPC;
|
||||
return -1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void ramdiskFS_Unmount(const char* mountpoint)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
RAMDISK_PARTITION *partition;
|
||||
devoptab_t *devops = (devoptab_t*) GetDeviceOpTab(mountpoint);
|
||||
|
||||
if (!devops) return;
|
||||
|
||||
// Perform a quick check to make sure we're dealing with a ramdiskFS_ controlled device
|
||||
if (devops->open_r != ramdiskFS_devoptab.open_r) return;
|
||||
|
||||
if (RemoveDevice(mountpoint) == -1) return;
|
||||
|
||||
partition = *((RAMDISK_PARTITION **) devops->deviceData);
|
||||
if (partition->automount) delete partition;
|
||||
free(devops);
|
||||
}
|
||||
extern "C" void ramdiskUnmount(const char *mountpoint)
|
||||
{
|
||||
ramdiskFS_Unmount(mountpoint);
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
int ramdiskFS_Mount(const char *mountpoint, void *handle)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
devoptab_t* devops;
|
||||
char* nameCopy;
|
||||
RAMDISK_PARTITION** partition;
|
||||
char Mountpoint[100];
|
||||
char *cptr;
|
||||
|
||||
strlcpy(Mountpoint, mountpoint, sizeof(Mountpoint));
|
||||
int len = strlen(Mountpoint);
|
||||
cptr = strchr(Mountpoint, ':');
|
||||
if (cptr)
|
||||
{
|
||||
len = cptr - Mountpoint;
|
||||
*++cptr = 0;
|
||||
}
|
||||
else strlcat(Mountpoint, ":", sizeof(Mountpoint));
|
||||
ramdiskFS_Unmount(Mountpoint);
|
||||
if (handle) ramdiskFS_Unmount(((RAMDISK_PARTITION*) handle)->name);
|
||||
|
||||
devops = (devoptab_t*) malloc(sizeof(devoptab_t) + sizeof(RAMDISK_PARTITION*) + len + 1);
|
||||
if (!devops) return false;
|
||||
|
||||
partition = (RAMDISK_PARTITION**) (devops + 1); // Use the space allocated at the end of the devoptab struct
|
||||
// for storing the partition
|
||||
nameCopy = (char*) (partition + 1); // Use the space allocated at the end of the partition struct
|
||||
// for storing the name
|
||||
|
||||
memcpy(devops, &ramdiskFS_devoptab, sizeof(ramdiskFS_devoptab)); // Add an entry for this device to the devoptab table
|
||||
|
||||
strlcpy(nameCopy, Mountpoint, len + 1);
|
||||
devops->name = nameCopy;
|
||||
|
||||
if (handle)
|
||||
{
|
||||
*partition = (RAMDISK_PARTITION*) handle;
|
||||
(*partition)->Rename(Mountpoint);
|
||||
}
|
||||
else *partition = new RAMDISK_PARTITION(Mountpoint, true);
|
||||
devops->deviceData = partition;
|
||||
|
||||
if (AddDevice(devops) < 0)
|
||||
{
|
||||
free(devops);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
extern "C" int ramdiskMount(const char *mountpoint, void *handle)
|
||||
{
|
||||
return ramdiskFS_Mount(mountpoint, handle);
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
extern "C" void* ramdiskCreate()
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
return new RAMDISK_PARTITION("", false);
|
||||
}
|
||||
//---------------------------------------------------------------------------------
|
||||
extern "C" void ramdiskDelete(void* Handle)
|
||||
{
|
||||
//---------------------------------------------------------------------------------
|
||||
RAMDISK_PARTITION *partition = (RAMDISK_PARTITION*) Handle;
|
||||
if (partition->automount == false) ramdiskFS_Unmount(partition->name);
|
||||
delete partition;
|
||||
}
|
||||
|
@ -1,81 +0,0 @@
|
||||
#ifndef __RAMDISK_H
|
||||
#define __RAMDISK_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*
|
||||
ramdiskCreate initialize a dynamic RAM-disk.
|
||||
return: Handle for ramdiskMount
|
||||
*/
|
||||
void* ramdiskCreate();
|
||||
|
||||
/**************************************************
|
||||
* ramdiskDelete
|
||||
*
|
||||
* destroy all datas
|
||||
* if the ramdisk is allready mounted forces ramdiskUnmount
|
||||
* IN: a Handle was created witch ramdiskCreate();
|
||||
**************************************************/
|
||||
void ramdiskDelete(void* Handle);
|
||||
|
||||
/**************************************************
|
||||
* ramdiskMount
|
||||
*
|
||||
* mounts a ramdisk
|
||||
* IN: mountpoint e.g. "RAM" or "MEM:"
|
||||
* handle is a Handle was created ramdiskCreate()
|
||||
* or NULL for auto-create
|
||||
* OUT: 0 = Error / !0 = OK
|
||||
**************************************************/
|
||||
int ramdiskMount(const char *mountpoint, void *handle);
|
||||
|
||||
/**************************************************
|
||||
* ramdiskUnmount
|
||||
*
|
||||
* unmounts a ramdisk
|
||||
* IN: mountpoint e.g "RAM" or "MEM:"
|
||||
**************************************************/
|
||||
void ramdiskUnmount(const char *mountpoint);
|
||||
|
||||
/*
|
||||
NOTE:
|
||||
if the ramdisk not explizit created with ramdiskCreate (e.g ramdiskMount("RAMDISK:", NULL))
|
||||
the ramdisk is implizit created. When unmount this "auto-created" ramdisk the ramdisk automitic deleted
|
||||
|
||||
but if the ramdisk explizit created (with ramdiskCreate),
|
||||
then we can remount the filesystem without lost all datas.
|
||||
|
||||
Example1:
|
||||
=========
|
||||
void *ram = ramdiskCreate(); // create ramdisk
|
||||
ramdiskMount("RAM", ram); // mount the ramdisk
|
||||
...
|
||||
fopen("RAM:/file", ...);
|
||||
...
|
||||
ramdiskMount("MEM", ram); // remount as MEM: (without lost of data)
|
||||
...
|
||||
fopen("RAM:/file", ...);
|
||||
...
|
||||
ramdiskUnmount("MEM"); // unmount
|
||||
...
|
||||
ramdiskMount("RAM", ram); // remount as RAM: (without lost of data)
|
||||
...
|
||||
ramdiskDelete(ram); // unmount and delete
|
||||
|
||||
Example2:
|
||||
=========
|
||||
ramdiskMount("RAM", NULL); // create and mount the ramdisk
|
||||
...
|
||||
fopen("RAM:/file", ...);
|
||||
...
|
||||
ramdiskUnmount("RAM"); // unmount and delete
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /*__RAMDISK_H*/
|
@ -106,33 +106,22 @@ int MenuSettings()
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData MainButtonImgData(Resources::GetFile("settings_title.png"), Resources::GetFileSize("settings_title.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgData(imgPath, settings_title_png);
|
||||
GuiImageData MainButtonImgOverData(Resources::GetFile("settings_title_over.png"), Resources::GetFileSize("settings_title_over.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title_over.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgOverData(imgPath, settings_title_over_png);
|
||||
GuiImageData PageindicatorImgData(Resources::GetFile("pageindicator.png"), Resources::GetFileSize("pageindicator.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%spageindicator.png", Settings.theme_path);
|
||||
GuiImageData PageindicatorImgData(imgPath, pageindicator_png);
|
||||
GuiImageData arrow_left(Resources::GetFile("startgame_arrow_left.png"), Resources::GetFileSize("startgame_arrow_left.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", Settings.theme_path);
|
||||
GuiImageData arrow_left(imgPath, startgame_arrow_left_png);
|
||||
GuiImageData arrow_right(Resources::GetFile("startgame_arrow_right.png"), Resources::GetFileSize("startgame_arrow_right.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", Settings.theme_path);
|
||||
GuiImageData arrow_right(imgPath, startgame_arrow_right_png);
|
||||
GuiImageData creditsImgData(Resources::GetFile("credits_button.png"), Resources::GetFileSize("credits_button.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%scredits_button.png", Settings.theme_path);
|
||||
GuiImageData creditsImgData(imgPath, credits_button_png);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%scredits_button_over.png", Settings.theme_path);
|
||||
GuiImageData creditsOver(imgPath, credits_button_over_png);
|
||||
GuiImageData creditsOver(Resources::GetFile("credits_button_over.png"), Resources::GetFileSize("credits_button_over.png"));
|
||||
|
||||
GuiImage creditsImg(&creditsImgData);
|
||||
GuiImage creditsImgOver(&creditsOver);
|
||||
@ -305,8 +294,7 @@ int MenuSettings()
|
||||
MainButton4.SetTrigger(&trigA);
|
||||
|
||||
customOptionList options2(MAXOPTIONS);
|
||||
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, Settings.theme_path, "bg_options_settings.png",
|
||||
bg_options_settings_png, 0, 150);
|
||||
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, "bg_options_settings.png", 0, 150);
|
||||
optionBrowser2.SetPosition(0, 90);
|
||||
optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
@ -1731,27 +1719,17 @@ int MenuSettings()
|
||||
Theme.Load(Settings.theme_path);
|
||||
ResumeGui();
|
||||
menu = MENU_SETTINGS;
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png",
|
||||
Settings.theme_path);
|
||||
pointer[0] = new GuiImageData(imgPath, player1_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer2_point.png",
|
||||
Settings.theme_path);
|
||||
pointer[1] = new GuiImageData(imgPath, player2_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer3_point.png",
|
||||
Settings.theme_path);
|
||||
pointer[2] = new GuiImageData(imgPath, player3_point_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%splayer4_point.png",
|
||||
Settings.theme_path);
|
||||
pointer[3] = new GuiImageData(imgPath, player4_point_png);
|
||||
if (Settings.widescreen)
|
||||
snprintf(imgPath, sizeof(imgPath), "%swbackground.png",
|
||||
Settings.theme_path);
|
||||
else snprintf(imgPath, sizeof(imgPath), "%sbackground.png",
|
||||
Settings.theme_path);
|
||||
|
||||
background = new GuiImageData(imgPath,
|
||||
Settings.widescreen ? wbackground_png : background_png);
|
||||
|
||||
if(pointer[0]) delete pointer[0];
|
||||
if(pointer[1]) delete pointer[1];
|
||||
if(pointer[2]) delete pointer[2];
|
||||
if(pointer[3]) delete pointer[3];
|
||||
pointer[0] = Resources::GetImageData("player1_point.png");
|
||||
pointer[1] = Resources::GetImageData("player2_point.png");
|
||||
pointer[2] = Resources::GetImageData("player3_point.png");
|
||||
pointer[3] = Resources::GetImageData("player4_point.png");
|
||||
if(background) delete background;
|
||||
background = Resources::GetImageData(Settings.widescreen ? "wbackground.png" : "background.png");
|
||||
if(bgImg) delete bgImg;
|
||||
bgImg = new GuiImage(background);
|
||||
mainWindow->Append(bgImg);
|
||||
mainWindow->Append(&w);
|
||||
@ -2292,18 +2270,12 @@ int MenuGameSettings(struct discHdr * header)
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", Settings.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
GuiImageData MainButtonImgData(Resources::GetFile("settings_title.png"), Resources::GetFileSize("settings_title.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgData(imgPath, settings_title_png);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_title_over.png", Settings.theme_path);
|
||||
GuiImageData MainButtonImgOverData(imgPath, settings_title_over_png);
|
||||
GuiImageData MainButtonImgOverData(Resources::GetFile("settings_title_over.png"), Resources::GetFileSize("settings_title_over.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
@ -2429,8 +2401,7 @@ int MenuGameSettings(struct discHdr * header)
|
||||
MainButton4.SetTrigger(&trigA);
|
||||
|
||||
customOptionList options2(MAXOPTIONS);
|
||||
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, Settings.theme_path, "bg_options_settings.png",
|
||||
bg_options_settings_png, 0, 150);
|
||||
GuiCustomOptionBrowser optionBrowser2(396, 280, &options2, "bg_options_settings.png", 0, 150);
|
||||
optionBrowser2.SetPosition(0, 90);
|
||||
optionBrowser2.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
|
@ -100,12 +100,8 @@ int MenuLanguageSelect()
|
||||
if ( !btnClick2 ) btnClick2 = new GuiSound( button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume );
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf( imgPath, sizeof( imgPath ), "%sbutton_dialogue_box.png", Settings.theme_path );
|
||||
GuiImageData btnOutline( imgPath, button_dialogue_box_png );
|
||||
snprintf( imgPath, sizeof( imgPath ), "%ssettings_background.png", Settings.theme_path );
|
||||
GuiImageData settingsbg( imgPath, settings_background_png );
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData settingsbg(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger( -1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A );
|
||||
@ -217,7 +213,7 @@ int MenuLanguageSelect()
|
||||
scrollon = 1;
|
||||
}
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser4( 396, 280, &options2, Settings.theme_path, "bg_options_settings.png", bg_options_settings_png, scrollon, 10 );
|
||||
GuiCustomOptionBrowser optionBrowser4( 396, 280, &options2, "bg_options_settings.png", scrollon, 10 );
|
||||
optionBrowser4.SetPosition( 0, 90 );
|
||||
optionBrowser4.SetAlignment( ALIGN_CENTRE, ALIGN_TOP );
|
||||
|
||||
|
@ -145,6 +145,8 @@ CTheme::~CTheme()
|
||||
|
||||
void CTheme::SetDefault()
|
||||
{
|
||||
Resources::Clear();
|
||||
|
||||
gamelist_x = 200;
|
||||
gamelist_y = 49;//40;
|
||||
gamelist_w = 396;
|
||||
@ -357,6 +359,8 @@ bool CTheme::Load(const char * theme_path)
|
||||
}
|
||||
fclose(file);
|
||||
|
||||
Resources::LoadFiles(theme_path);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <string>
|
||||
#include <stdio.h>
|
||||
#include <gctypes.h>
|
||||
#include "Resources.h"
|
||||
|
||||
class CTheme
|
||||
{
|
||||
|
260
source/themes/Resources.cpp
Normal file
@ -0,0 +1,260 @@
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include "FileOperations/fileops.h"
|
||||
#include "filelist.h"
|
||||
#include "Resources.h"
|
||||
|
||||
RecourceFile Resources::RecourceFiles[] =
|
||||
{
|
||||
{"closebutton.png", closebutton_png, closebutton_png_size, NULL, 0},
|
||||
{"gxlogo.png", gxlogo_png, gxlogo_png_size, NULL, 0},
|
||||
{"sdcard.png", sdcard_png, sdcard_png_size, NULL, 0},
|
||||
{"sdcard_over.png", sdcard_over_png, sdcard_over_png_size, NULL, 0},
|
||||
{"Wifi_btn.png", Wifi_btn_png, Wifi_btn_png_size, NULL, 0},
|
||||
{"wiimote.png", wiimote_png, wiimote_png_size, NULL, 0},
|
||||
{"gameinfo1.png", gameinfo1_png, gameinfo1_png_size, NULL, 0},
|
||||
{"gameinfo2.png", gameinfo2_png, gameinfo2_png_size, NULL, 0},
|
||||
{"gameinfo1a.png", gameinfo1a_png, gameinfo1a_png_size, NULL, 0},
|
||||
{"gameinfo2a.png", gameinfo2a_png, gameinfo2a_png_size, NULL, 0},
|
||||
{"credits_button.png", credits_button_png, credits_button_png_size, NULL, 0},
|
||||
{"credits_button_over.png", credits_button_over_png, credits_button_over_png_size, NULL, 0},
|
||||
{"tooltip_left.png", tooltip_left_png, tooltip_left_png_size, NULL, 0},
|
||||
{"tooltip_tile.png", tooltip_tile_png, tooltip_tile_png_size, NULL, 0},
|
||||
{"tooltip_right.png", tooltip_right_png, tooltip_right_png_size, NULL, 0},
|
||||
{"startgame_arrow_left.png", startgame_arrow_left_png, startgame_arrow_left_png_size, NULL, 0},
|
||||
{"startgame_arrow_right.png", startgame_arrow_right_png, startgame_arrow_right_png_size, NULL, 0},
|
||||
{"credits_bg.png", credits_bg_png, credits_bg_png_size, NULL, 0},
|
||||
{"little_star.png", little_star_png, little_star_png_size, NULL, 0},
|
||||
{"background.png", background_png, background_png_size, NULL, 0},
|
||||
{"wbackground.png", wbackground_png, wbackground_png_size, NULL, 0},
|
||||
{"bg_options_settings.png", bg_options_settings_png, bg_options_settings_png_size, NULL, 0},
|
||||
{"settings_background.png", settings_background_png, settings_background_png_size, NULL, 0},
|
||||
{"bg_browser.png", bg_browser_png, bg_browser_png_size, NULL, 0},
|
||||
{"icon_folder.png", icon_folder_png, icon_folder_png_size, NULL, 0},
|
||||
{"bg_browser_selection.png", bg_browser_selection_png, bg_browser_selection_png_size, NULL, 0},
|
||||
{"addressbar_textbox.png", addressbar_textbox_png, addressbar_textbox_png_size, NULL, 0},
|
||||
{"browser.png", browser_png, browser_png_size, NULL, 0},
|
||||
{"browser_over.png", browser_over_png, browser_over_png_size, NULL, 0},
|
||||
{"nocover.png", nocover_png, nocover_png_size, NULL, 0},
|
||||
{"nocoverFlat.png", nocoverFlat_png, nocoverFlat_png_size, NULL, 0},
|
||||
{"nodisc.png", nodisc_png, nodisc_png_size, NULL, 0},
|
||||
{"theme_dialogue_box.png", theme_dialogue_box_png, theme_dialogue_box_png_size, NULL, 0},
|
||||
{"button_install.png", button_install_png, button_install_png_size, NULL, 0},
|
||||
{"button_install_over.png", button_install_over_png, button_install_over_png_size, NULL, 0},
|
||||
{"dialogue_box_startgame.png", dialogue_box_startgame_png, dialogue_box_startgame_png_size, NULL, 0},
|
||||
{"wdialogue_box_startgame.png", wdialogue_box_startgame_png, wdialogue_box_startgame_png_size, NULL, 0},
|
||||
{"button_dialogue_box.png", button_dialogue_box_png, button_dialogue_box_png_size, NULL, 0},
|
||||
{"keyboard_textbox.png", keyboard_textbox_png, keyboard_textbox_png_size, NULL, 0},
|
||||
{"keyboard_key.png", keyboard_key_png, keyboard_key_png_size, NULL, 0},
|
||||
{"keyboard_key_over.png", keyboard_key_over_png, keyboard_key_over_png_size, NULL, 0},
|
||||
{"keyboard_mediumkey_over.png", keyboard_mediumkey_over_png, keyboard_mediumkey_over_png_size, NULL, 0},
|
||||
{"keyboard_largekey_over.png", keyboard_largekey_over_png, keyboard_largekey_over_png_size, NULL, 0},
|
||||
{"keyboard_backspace_over.png", keyboard_backspace_over_png, keyboard_backspace_over_png_size, NULL, 0},
|
||||
{"keyboard_clear_over.png", keyboard_clear_over_png, keyboard_clear_over_png_size, NULL, 0},
|
||||
{"menu_button.png", menu_button_png, menu_button_png_size, NULL, 0},
|
||||
{"menu_button_over.png", menu_button_over_png, menu_button_over_png_size, NULL, 0},
|
||||
{"settings_button.png", settings_button_png, settings_button_png_size, NULL, 0},
|
||||
{"settings_button_over.png", settings_button_over_png, settings_button_over_png_size, NULL, 0},
|
||||
{"settings_menu_button.png", settings_menu_button_png, settings_menu_button_png_size, NULL, 0},
|
||||
{"wiimote_poweroff.png", wiimote_poweroff_png, wiimote_poweroff_png_size, NULL, 0},
|
||||
{"dialogue_box.png", dialogue_box_png, dialogue_box_png_size, NULL, 0},
|
||||
{"theme_box.png", theme_box_png, theme_box_png_size, NULL, 0},
|
||||
{"wiimote_poweroff_over.png", wiimote_poweroff_over_png, wiimote_poweroff_over_png_size, NULL, 0},
|
||||
{"bg_options.png", bg_options_png, bg_options_png_size, NULL, 0},
|
||||
{"bg_options_entry.png", bg_options_entry_png, bg_options_entry_png_size, NULL, 0},
|
||||
{"scrollbar.png", scrollbar_png, scrollbar_png_size, NULL, 0},
|
||||
{"scrollbar_arrowup.png", scrollbar_arrowup_png, scrollbar_arrowup_png_size, NULL, 0},
|
||||
{"scrollbar_arrowdown.png", scrollbar_arrowdown_png, scrollbar_arrowdown_png_size, NULL, 0},
|
||||
{"scrollbar_box.png", scrollbar_box_png, scrollbar_box_png_size, NULL, 0},
|
||||
{"progressbar.png", progressbar_png, progressbar_png_size, NULL, 0},
|
||||
{"progressbar_empty.png", progressbar_empty_png, progressbar_empty_png_size, NULL, 0},
|
||||
{"progressbar_outline.png", progressbar_outline_png, progressbar_outline_png_size, NULL, 0},
|
||||
{"player1_point.png", player1_point_png, player1_point_png_size, NULL, 0},
|
||||
{"player2_point.png", player2_point_png, player2_point_png_size, NULL, 0},
|
||||
{"player3_point.png", player3_point_png, player3_point_png_size, NULL, 0},
|
||||
{"player4_point.png", player4_point_png, player4_point_png_size, NULL, 0},
|
||||
{"rplayer1_point.png", rplayer1_point_png, rplayer1_point_png_size, NULL, 0},
|
||||
{"rplayer2_point.png", rplayer2_point_png, rplayer2_point_png_size, NULL, 0},
|
||||
{"rplayer3_point.png", rplayer3_point_png, rplayer3_point_png_size, NULL, 0},
|
||||
{"rplayer4_point.png", rplayer4_point_png, rplayer4_point_png_size, NULL, 0},
|
||||
{"battery.png", battery_png, battery_png_size, NULL, 0},
|
||||
{"battery_bar.png", battery_bar_png, battery_bar_png_size, NULL, 0},
|
||||
{"battery_white.png", battery_white_png, battery_white_png_size, NULL, 0},
|
||||
{"battery_red.png", battery_red_png, battery_red_png_size, NULL, 0},
|
||||
{"battery_bar_white.png", battery_bar_white_png, battery_bar_white_png_size, NULL, 0},
|
||||
{"battery_bar_red.png", battery_bar_red_png, battery_bar_red_png_size, NULL, 0},
|
||||
{"arrow_next.png", arrow_next_png, arrow_next_png_size, NULL, 0},
|
||||
{"arrow_previous.png", arrow_previous_png, arrow_previous_png_size, NULL, 0},
|
||||
{"mp3_pause.png", mp3_pause_png, mp3_pause_png_size, NULL, 0},
|
||||
{"mp3_stop.png", mp3_stop_png, mp3_stop_png_size, NULL, 0},
|
||||
{"exit_top.png", exit_top_png, exit_top_png_size, NULL, 0},
|
||||
{"exit_top_over.png", exit_top_over_png, exit_top_over_png_size, NULL, 0},
|
||||
{"exit_bottom.png", exit_bottom_png, exit_bottom_png_size, NULL, 0},
|
||||
{"exit_bottom_over.png", exit_bottom_over_png, exit_bottom_over_png_size, NULL, 0},
|
||||
{"exit_button.png", exit_button_png, exit_button_png_size, NULL, 0},
|
||||
{"favorite.png", favorite_png, favorite_png_size, NULL, 0},
|
||||
{"not_favorite.png", not_favorite_png, not_favorite_png_size, NULL, 0},
|
||||
{"favIcon.png", favIcon_png, favIcon_png_size, NULL, 0},
|
||||
{"favIcon_gray.png", favIcon_gray_png, favIcon_gray_png_size, NULL, 0},
|
||||
{"searchIcon.png", searchIcon_png, searchIcon_png_size, NULL, 0},
|
||||
{"searchIcon_gray.png", searchIcon_gray_png, searchIcon_gray_png_size, NULL, 0},
|
||||
{"abcIcon.png", abcIcon_png, abcIcon_png_size, NULL, 0},
|
||||
{"abcIcon_gray.png", abcIcon_gray_png, abcIcon_gray_png_size, NULL, 0},
|
||||
{"rankIcon.png", rankIcon_png, rankIcon_png_size, NULL, 0},
|
||||
{"rankIcon_gray.png", rankIcon_gray_png, rankIcon_gray_png_size, NULL, 0},
|
||||
{"playCountIcon.png", playCountIcon_png, playCountIcon_png_size, NULL, 0},
|
||||
{"playCountIcon_gray.png", playCountIcon_gray_png, playCountIcon_gray_png_size, NULL, 0},
|
||||
{"arrangeList.png", arrangeList_png, arrangeList_png_size, NULL, 0},
|
||||
{"arrangeList_gray.png", arrangeList_gray_png, arrangeList_gray_png_size, NULL, 0},
|
||||
{"arrangeGrid.png", arrangeGrid_png, arrangeGrid_png_size, NULL, 0},
|
||||
{"arrangeGrid_gray.png", arrangeGrid_gray_png, arrangeGrid_gray_png_size, NULL, 0},
|
||||
{"arrangeCarousel.png", arrangeCarousel_png, arrangeCarousel_png_size, NULL, 0},
|
||||
{"arrangeCarousel_gray.png", arrangeCarousel_gray_png, arrangeCarousel_gray_png_size, NULL, 0},
|
||||
{"settings_title.png", settings_title_png, settings_title_png_size, NULL, 0},
|
||||
{"settings_title_over.png", settings_title_over_png, settings_title_over_png_size, NULL, 0},
|
||||
{"pageindicator.png", pageindicator_png, pageindicator_png_size, NULL, 0},
|
||||
{"Wiimote1.png", Wiimote1_png, Wiimote1_png_size, NULL, 0},
|
||||
{"Wiimote2.png", Wiimote2_png, Wiimote1_png_size, NULL, 0},
|
||||
{"Wiimote4.png", Wiimote4_png, Wiimote4_png_size, NULL, 0},
|
||||
{"wifi1.png", wifi1_png, wifi1_png_size, NULL, 0},
|
||||
{"wifi2.png", wifi2_png, wifi2_png_size, NULL, 0},
|
||||
{"wifi3.png", wifi3_png, wifi3_png_size, NULL, 0},
|
||||
{"wifi4.png", wifi4_png, wifi4_png_size, NULL, 0},
|
||||
{"wifi8.png", wifi8_png, wifi8_png_size, NULL, 0},
|
||||
{"wifi12.png", wifi12_png, wifi12_png_size, NULL, 0},
|
||||
{"wifi16.png", wifi16_png, wifi16_png_size, NULL, 0},
|
||||
{"wifi32.png", wifi32_png, wifi32_png_size, NULL, 0},
|
||||
{"norating.png", norating_png, norating_png_size, NULL, 0},
|
||||
{"guitar.png", guitar_png, guitar_png_size, NULL, 0},
|
||||
{"guitarR.png", guitarR_png, guitarR_png_size, NULL, 0},
|
||||
{"microphone.png", microphone_png, microphone_png_size, NULL, 0},
|
||||
{"microphoneR.png", microphoneR_png, microphoneR_png_size, NULL, 0},
|
||||
{"gcncontroller.png", gcncontroller_png, gcncontroller_png_size, NULL, 0},
|
||||
{"gcncontrollerR.png", gcncontrollerR_png, gcncontrollerR_png_size, NULL, 0},
|
||||
{"classiccontroller.png", classiccontroller_png, classiccontroller_png_size, NULL, 0},
|
||||
{"classiccontrollerR.png", classiccontrollerR_png, classiccontrollerR_png_size, NULL, 0},
|
||||
{"nunchuk.png", nunchuk_png, nunchuk_png_size, NULL, 0},
|
||||
{"nunchukR.png", nunchukR_png, nunchukR_png_size, NULL, 0},
|
||||
{"dancepad.png", dancepad_png, dancepad_png_size, NULL, 0},
|
||||
{"dancepadR.png", dancepadR_png, dancepadR_png_size, NULL, 0},
|
||||
{"balanceboard.png", balanceboard_png, balanceboard_png_size, NULL, 0},
|
||||
{"balanceboardR.png", balanceboardR_png, balanceboardR_png_size, NULL, 0},
|
||||
{"drums.png", drums_png, drums_png_size, NULL, 0},
|
||||
{"drumsR.png", drumsR_png, drumsR_png_size, NULL, 0},
|
||||
{"motionplus.png", motionplus_png, motionplus_png_size, NULL, 0},
|
||||
{"motionplusR.png", motionplusR_png, motionplusR_png_size, NULL, 0},
|
||||
{"wheel.png", wheel_png, wheel_png_size, NULL, 0},
|
||||
{"wheelR.png", wheelR_png, wheelR_png_size, NULL, 0},
|
||||
{"zapper.png", zapper_png, zapper_png_size, NULL, 0},
|
||||
{"zapperR.png", zapperR_png, zapperR_png_size, NULL, 0},
|
||||
{"wiispeak.png", wiispeak_png, wiispeak_png_size, NULL, 0},
|
||||
{"wiispeakR.png", wiispeakR_png, wiispeakR_png_size, NULL, 0},
|
||||
{"nintendods.png", nintendods_png, nintendods_png_size, NULL, 0},
|
||||
{"nintendodsR.png", nintendodsR_png, nintendodsR_png_size, NULL, 0},
|
||||
{"esrb_ec.png", esrb_ec_png, esrb_ec_png_size, NULL, 0},
|
||||
{"esrb_e.png", esrb_e_png, esrb_e_png_size, NULL, 0},
|
||||
{"esrb_eten.png", esrb_eten_png, esrb_eten_png_size, NULL, 0},
|
||||
{"esrb_t.png", esrb_t_png, esrb_t_png_size, NULL, 0},
|
||||
{"esrb_m.png", esrb_m_png, esrb_m_png_size, NULL, 0},
|
||||
{"esrb_ao.png", esrb_ao_png, esrb_ao_png_size, NULL, 0},
|
||||
{"cero_a.png", cero_a_png, cero_a_png_size, NULL, 0},
|
||||
{"cero_b.png", cero_b_png, cero_b_png_size, NULL, 0},
|
||||
{"cero_c.png", cero_c_png, cero_c_png_size, NULL, 0},
|
||||
{"cero_d.png", cero_d_png, cero_d_png_size, NULL, 0},
|
||||
{"cero_z.png", cero_z_png, cero_z_png_size, NULL, 0},
|
||||
{"pegi_3.png", pegi_3_png, pegi_3_png_size, NULL, 0},
|
||||
{"pegi_7.png", pegi_7_png, pegi_7_png_size, NULL, 0},
|
||||
{"pegi_12.png", pegi_12_png, pegi_12_png_size, NULL, 0},
|
||||
{"pegi_16.png", pegi_16_png, pegi_16_png_size, NULL, 0},
|
||||
{"pegi_18.png", pegi_18_png, pegi_18_png_size, NULL, 0},
|
||||
{"dvd.png", dvd_png, dvd_png_size, NULL, 0},
|
||||
{"dvd_gray.png", dvd_gray_png, dvd_gray_png_size, NULL, 0},
|
||||
{"new.png", new_png, new_png_size, NULL, 0},
|
||||
{"lock.png", lock_png, lock_png_size, NULL, 0},
|
||||
{"lock_gray.png", lock_gray_png, lock_gray_png_size, NULL, 0},
|
||||
{"unlock.png", unlock_png, unlock_png_size, NULL, 0},
|
||||
{"unlock_gray.png", unlock_gray_png, unlock_gray_png_size, NULL, 0},
|
||||
{NULL, NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
void Resources::Clear()
|
||||
{
|
||||
for(int i = 0; RecourceFiles[i].filename != NULL; ++i)
|
||||
{
|
||||
if(RecourceFiles[i].CustomFile)
|
||||
{
|
||||
free(RecourceFiles[i].CustomFile);
|
||||
RecourceFiles[i].CustomFile = NULL;
|
||||
}
|
||||
|
||||
if(RecourceFiles[i].CustomFileSize != 0)
|
||||
RecourceFiles[i].CustomFileSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Resources::LoadFiles(const char * path)
|
||||
{
|
||||
if(!path)
|
||||
return;
|
||||
|
||||
Clear();
|
||||
|
||||
char fullpath[1024];
|
||||
|
||||
for(int i = 0; RecourceFiles[i].filename != NULL; ++i)
|
||||
{
|
||||
snprintf(fullpath, sizeof(fullpath), "%s/%s", path, RecourceFiles[i].filename);
|
||||
|
||||
if(CheckFile(fullpath))
|
||||
{
|
||||
u8 * buffer = NULL;
|
||||
u64 filesize = 0;
|
||||
|
||||
LoadFileToMem(fullpath, &buffer, &filesize);
|
||||
|
||||
RecourceFiles[i].CustomFile = buffer;
|
||||
RecourceFiles[i].CustomFileSize = (u32) filesize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const u8 * Resources::GetFile(const char * filename)
|
||||
{
|
||||
for(int i = 0; RecourceFiles[i].filename != NULL; ++i)
|
||||
{
|
||||
if(strcasecmp(filename, RecourceFiles[i].filename) == 0)
|
||||
{
|
||||
return (RecourceFiles[i].CustomFile ? RecourceFiles[i].CustomFile : RecourceFiles[i].DefaultFile);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const u32 Resources::GetFileSize(const char * filename)
|
||||
{
|
||||
for(int i = 0; RecourceFiles[i].filename != NULL; ++i)
|
||||
{
|
||||
if(strcasecmp(filename, RecourceFiles[i].filename) == 0)
|
||||
{
|
||||
return (RecourceFiles[i].CustomFile ? RecourceFiles[i].CustomFileSize : RecourceFiles[i].DefaultFileSize);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GuiImageData * Resources::GetImageData(const char * filename)
|
||||
{
|
||||
for(int i = 0; RecourceFiles[i].filename != NULL; ++i)
|
||||
{
|
||||
if(strcasecmp(filename, RecourceFiles[i].filename) == 0)
|
||||
{
|
||||
const u8 * buff = RecourceFiles[i].CustomFile ? RecourceFiles[i].CustomFile : RecourceFiles[i].DefaultFile;
|
||||
const u32 size = RecourceFiles[i].CustomFile ? RecourceFiles[i].CustomFileSize : RecourceFiles[i].DefaultFileSize;
|
||||
return (new GuiImageData(buff, size));
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
29
source/themes/Resources.h
Normal file
@ -0,0 +1,29 @@
|
||||
#ifndef RECOURCES_H_
|
||||
#define RECOURCES_H_
|
||||
|
||||
#include "libwiigui/gui_imagedata.h"
|
||||
#include "filelist.h"
|
||||
|
||||
typedef struct _RecourceFile
|
||||
{
|
||||
const char *filename;
|
||||
const u8 *DefaultFile;
|
||||
const u32 DefaultFileSize;
|
||||
u8 *CustomFile;
|
||||
u32 CustomFileSize;
|
||||
} RecourceFile;
|
||||
|
||||
class Resources
|
||||
{
|
||||
public:
|
||||
static void Clear();
|
||||
static void LoadFiles(const char * path);
|
||||
static const u8 * GetFile(const char * filename);
|
||||
static const u32 GetFileSize(const char * filename);
|
||||
static GuiImageData * GetImageData(const char * filename);
|
||||
|
||||
private:
|
||||
static RecourceFile RecourceFiles[];
|
||||
};
|
||||
|
||||
#endif
|
@ -153,11 +153,8 @@ static int Theme_Prompt(const char *title, const char *author, GuiImageData *thu
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%stheme_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, theme_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("theme_dialogue_box.png"), Resources::GetFileSize("theme_dialogue_box.png"));
|
||||
|
||||
GuiImage dialogBoxImg(&dialogBox);
|
||||
|
||||
@ -285,38 +282,28 @@ int Theme_Downloader()
|
||||
|
||||
char THEME_LINK[70];
|
||||
sprintf(THEME_LINK, "http://wii.spiffy360.com/themes.php?xml=1&category=1&adult=%d", Settings.godmode);
|
||||
//gprintf("\nTHEME_LINK: %s", THEME_LINK);
|
||||
//const char THEME_LINK_ADULT[70] = "http://wii.spiffy360.com/themes.php?xml=1&category=1&adult=1";
|
||||
|
||||
/*** Sound Variables ***/
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
GuiSound btnClick1(button_click_pcm, button_click_pcm_size, Settings.sfxvolume);
|
||||
|
||||
/*** Image Variables ***/
|
||||
char imgPath[150];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%stheme_box.png", Settings.theme_path);
|
||||
GuiImageData theme_box_Data(imgPath, theme_box_png);
|
||||
GuiImageData theme_box_Data(Resources::GetFile("theme_box.png"), Resources::GetFileSize("theme_box.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", Settings.theme_path);
|
||||
GuiImageData bgData(imgPath, settings_background_png);
|
||||
GuiImageData bgData(Resources::GetFile("settings_background.png"), Resources::GetFileSize("settings_background.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_left.png", Settings.theme_path);
|
||||
GuiImageData arrow_left(imgPath, startgame_arrow_left_png);
|
||||
GuiImageData arrow_left(Resources::GetFile("startgame_arrow_left.png"), Resources::GetFileSize("startgame_arrow_left.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", Settings.theme_path);
|
||||
GuiImageData arrow_right(imgPath, startgame_arrow_right_png);
|
||||
GuiImageData arrow_right(Resources::GetFile("startgame_arrow_right.png"), Resources::GetFileSize("startgame_arrow_right.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sWifi_btn.png", Settings.theme_path);
|
||||
GuiImageData wifiImgData(imgPath, Wifi_btn_png);
|
||||
GuiImageData wifiImgData(Resources::GetFile("Wifi_btn.png"), Resources::GetFileSize("Wifi_btn.png"));
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%spageindicator.png", Settings.theme_path);
|
||||
GuiImageData PageindicatorImgData(imgPath, pageindicator_png);
|
||||
GuiImageData PageindicatorImgData(Resources::GetFile("pageindicator.png"), Resources::GetFileSize("pageindicator.png"));
|
||||
|
||||
GuiImage background(&bgData);
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <wiiuse/wpad.h>
|
||||
#include <pngu/pngu.h>
|
||||
|
||||
#include "input.h"
|
||||
#include "gecko.h"
|
||||
|
@ -125,11 +125,8 @@ s32 Wad_Install(FILE *fp)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
@ -150,8 +147,7 @@ s32 Wad_Install(FILE *fp)
|
||||
btn1.SetLabel(&btn1Txt);
|
||||
btn1.SetState(STATE_SELECTED);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_outline.png", Settings.theme_path);
|
||||
GuiImageData progressbarOutline(imgPath, progressbar_outline_png);
|
||||
GuiImageData progressbarOutline(Resources::GetFile("progressbar_outline.png"), Resources::GetFileSize("progressbar_outline.png"));
|
||||
GuiImage progressbarOutlineImg(&progressbarOutline);
|
||||
if (Settings.wsprompt == yes)
|
||||
{
|
||||
@ -160,15 +156,13 @@ s32 Wad_Install(FILE *fp)
|
||||
progressbarOutlineImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarOutlineImg.SetPosition(25, 50);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar_empty.png", Settings.theme_path);
|
||||
GuiImageData progressbarEmpty(imgPath, progressbar_empty_png);
|
||||
GuiImageData progressbarEmpty(Resources::GetFile("progressbar_empty.png"), Resources::GetFileSize("progressbar_empty.png"));
|
||||
GuiImage progressbarEmptyImg(&progressbarEmpty);
|
||||
progressbarEmptyImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarEmptyImg.SetPosition(25, 50);
|
||||
progressbarEmptyImg.SetTile(100);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sprogressbar.png", Settings.theme_path);
|
||||
GuiImageData progressbar(imgPath, progressbar_png);
|
||||
GuiImageData progressbar(Resources::GetFile("progressbar.png"), Resources::GetFileSize("progressbar.png"));
|
||||
GuiImage progressbarImg(&progressbar);
|
||||
progressbarImg.SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
|
||||
progressbarImg.SetPosition(25, 50);
|
||||
@ -312,6 +306,8 @@ s32 Wad_Install(FILE *fp)
|
||||
// Get TMD info
|
||||
tmd_data = (tmd *) SIGNATURE_PAYLOAD(p_tmd);
|
||||
|
||||
char imgPath[150];
|
||||
|
||||
// Install contents
|
||||
//ResumeGui();
|
||||
//HaltGui();
|
||||
@ -448,11 +444,8 @@ s32 Wad_Uninstall(FILE *fp)
|
||||
if (!btnClick2) btnClick2 = new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sdialogue_box.png", Settings.theme_path);
|
||||
GuiImageData dialogBox(imgPath, dialogue_box_png);
|
||||
GuiImageData btnOutline(Resources::GetFile("button_dialogue_box.png"), Resources::GetFileSize("button_dialogue_box.png"));
|
||||
GuiImageData dialogBox(Resources::GetFile("dialogue_box.png"), Resources::GetFileSize("dialogue_box.png"));
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
|
||||
|