*Added a widescreen factor to the settings which defines how much the images should be scaled down in X-Axis to look like widescreen. This value is usually 640/854=0.75 but might be not "looking good" for some people, so it is a setting now. It is applied to covers/buttons/windows (on set widescreen prompts)/several images

*Added a font scale factor to the settings. This font scale resizes the overall font sizes. Only full integer font sizes are supported. The font scale factor is multiplied to the font size of a text and the result is rounded and used as the font size. It's a good quick fix for too big fonts.
*Fixed GAMEID_GAMETITLE folder game layout
This commit is contained in:
dimok321 2011-02-25 18:18:57 +00:00
parent e11901bc09
commit 6d6f0f2243
21 changed files with 132 additions and 99 deletions

View File

@ -2,8 +2,8 @@
<app version="1"> <app version="1">
<name> USB Loader GX</name> <name> USB Loader GX</name>
<coder>USB Loader GX Team</coder> <coder>USB Loader GX Team</coder>
<version>2.0 r1073</version> <version>2.0 r1074</version>
<release_date>201102141852</release_date> <release_date>201102211941</release_date>
<no_ios_reload/> <no_ios_reload/>
<short_description>Loads games from USB-devices</short_description> <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. <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.

File diff suppressed because one or more lines are too long

View File

@ -23,6 +23,7 @@
***************************************************************************/ ***************************************************************************/
#include "BoxCover.hpp" #include "BoxCover.hpp"
#include "BoxMesh.hpp" #include "BoxMesh.hpp"
#include "settings/CSettings.h"
#include "themes/CTheme.h" #include "themes/CTheme.h"
extern GuiImageData * pointer[4]; extern GuiImageData * pointer[4];
@ -47,12 +48,13 @@ BoxCover::BoxCover(GuiImageData * img, bool flat)
PosZ = -27.f; PosZ = -27.f;
AnimRotate = 0.0f; AnimRotate = 0.0f;
last_manual_move_frame = 0; last_manual_move_frame = 0;
camera = (guVector) {0.0F, 0.0F, 0.0F}; guVector camera = (guVector) {0.0F, 0.0F, 0.0F};
up = (guVector) {0.0F, 1.0F, 0.0F}; guVector up = (guVector) {0.0F, 1.0F, 0.0F};
look = (guVector) {0.0F, 0.0F, -1.0F}; guVector look = (guVector) {0.0F, 0.0F, -1.0F};
boxColor = (GXColor) {233, 233, 233, 255}; boxColor = (GXColor) {233, 233, 233, 255};
guLookAt(view, &camera, &up, &look); guLookAt(view, &camera, &up, &look);
guPerspective(projection, 8, 640.f/480.f, 1.0f, 300.0F);
//! Remove me later //! Remove me later
for(int i = 0; i < 4; ++i) for(int i = 0; i < 4; ++i)
@ -110,7 +112,7 @@ void BoxCover::WiiPADControl(GuiTrigger *t)
else else
moveChan = -1; moveChan = -1;
} }
else if((t->wpad.btns_h & WPAD_BUTTON_A) && moveChan == t->chan && t->wpad.ir.valid) else if((t->wpad.btns_h & WPAD_BUTTON_A) && moveChan == t->chan && t->wpad.ir.valid && !effects)
{ {
movePosX = (t->wpad.ir.x-moveStartPosX) * fabs(PosZ)/3400.f; movePosX = (t->wpad.ir.x-moveStartPosX) * fabs(PosZ)/3400.f;
movePosY = (moveStartPosY-t->wpad.ir.y) * fabs(PosZ)/3400.f; movePosY = (moveStartPosY-t->wpad.ir.y) * fabs(PosZ)/3400.f;
@ -194,8 +196,6 @@ void BoxCover::Draw()
{ {
u8 BoxAlpha = (int) (alpha+angleDyn) & 0xFF; u8 BoxAlpha = (int) (alpha+angleDyn) & 0xFF;
Mtx44 projection;
guPerspective(projection, 8, (f32)screenwidth/(f32)screenheight, 1.0f, 300.0F);
GX_LoadProjectionMtx(projection, GX_PERSPECTIVE); GX_LoadProjectionMtx(projection, GX_PERSPECTIVE);
GX_SetVtxDesc(GX_VA_POS, GX_INDEX8); GX_SetVtxDesc(GX_VA_POS, GX_INDEX8);
@ -215,7 +215,8 @@ void BoxCover::Draw()
guMtxRotAxisDeg(modelView, &cubeAxis, RotZ-Animation); guMtxRotAxisDeg(modelView, &cubeAxis, RotZ-Animation);
guMtxConcat(modelView3, modelView2, modelView2); guMtxConcat(modelView3, modelView2, modelView2);
guMtxConcat(modelView2, modelView, modelView); guMtxConcat(modelView2, modelView, modelView);
//guMtxScaleApply(modelView, modelView, BoxScale, BoxScale, BoxScale); if(Settings.widescreen)
guMtxScaleApply(modelView, modelView, Settings.WSFactor, 1.0f, 1.0f);
guMtxTransApply(modelView, modelView, PosX+xoffsetDyn/680.0f+movePosX, PosY+yoffsetDyn/680.0f+movePosY, PosZ); guMtxTransApply(modelView, modelView, PosX+xoffsetDyn/680.0f+movePosX, PosY+yoffsetDyn/680.0f+movePosY, PosZ);
guMtxConcat(view,modelView,modelView); guMtxConcat(view,modelView,modelView);
@ -317,14 +318,14 @@ void BoxCover::UpdateEffects()
if(effects & EFFECT_BOX_FLY_CENTRE) if(effects & EFFECT_BOX_FLY_CENTRE)
{ {
if(PosX > 0.01f) if(PosX > 0.1f)
PosX -= effectAmount/1200.0f; PosX -= effectAmount/1200.f;
if(PosY > 0.01f) if(PosY > 0.1f)
PosY -= effectAmount/1200.0f; PosY -= effectAmount/1200.f;
if(PosX < -0.01f) if(PosX < -0.1f)
PosX += effectAmount/1200.0f; PosX += effectAmount/1200.f;
if(PosY < -0.01f) if(PosY < -0.1f)
PosY += effectAmount/1200.0f; PosY += effectAmount/1200.f;
movePosX = 0.0f; movePosX = 0.0f;
movePosY = 0.0f; movePosY = 0.0f;
@ -342,13 +343,13 @@ void BoxCover::UpdateEffects()
else if(effects & EFFECT_BOX_FLY_BACK) else if(effects & EFFECT_BOX_FLY_BACK)
{ {
if(PosX > PosXOrig+0.1f) if(PosX > PosXOrig+0.1f)
PosX -= effectAmount/1200.0f; PosX -= effectAmount/1200.f;
if(PosY > PosYOrig+0.1f) if(PosY > PosYOrig+0.1f)
PosY -= effectAmount/1200.0f; PosY -= effectAmount/1200.f;
if(PosX < PosXOrig-0.1f) if(PosX < PosXOrig-0.1f)
PosX += effectAmount/1200.0f; PosX += effectAmount/1200.f;
if(PosY < PosYOrig-0.1f) if(PosY < PosYOrig-0.1f)
PosY += effectAmount/1200.0f; PosY += effectAmount/1200.f;
PosZ -= 0.4f; PosZ -= 0.4f;
RotY -= effectAmount/4.9f; RotY -= effectAmount/4.9f;

View File

@ -69,7 +69,7 @@ class BoxCover : public GuiImage
int moveChan; int moveChan;
bool flatCover; bool flatCover;
bool Zoomable; bool Zoomable;
guVector camera, up, look; Mtx44 projection;
GuiImageData boxBorder; GuiImageData boxBorder;
GuiImageData *defaultBox; GuiImageData *defaultBox;
GuiImageData *NormalPointers[4]; GuiImageData *NormalPointers[4];
@ -79,8 +79,6 @@ class BoxCover : public GuiImage
GXTexObj boxBorderTex; GXTexObj boxBorderTex;
GXTexObj defaultBoxTex; GXTexObj defaultBoxTex;
GXColor boxColor; GXColor boxColor;
}; };
#endif #endif

View File

@ -81,7 +81,7 @@ bool DirList::LoadPath(std::string &folderpath, const char *filter, u32 flags)
if(!filename || !st) if(!filename || !st)
{ {
delete [] filename; delete [] filename;
delete filename; delete st;
closedir(dir); closedir(dir);
return false; return false;
} }

View File

@ -377,15 +377,12 @@ uint16_t FreeTypeGX::drawText(int16_t x, int16_t y, int16_t z, const wchar_t *te
{ {
if (ftKerningEnabled && i > 0) if (ftKerningEnabled && i > 0)
{ {
FT_Get_Kerning(ftFace, fontData[pixelSize][text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_Get_Kerning(ftFace, fontData[pixelSize][text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_KERNING_DEFAULT, &pairDelta);
FT_KERNING_DEFAULT, &pairDelta);
x_pos += pairDelta.x >> 6; x_pos += pairDelta.x >> 6;
} }
GX_InitTexObj(&glyphTexture, glyphData->glyphDataTexture, glyphData->textureWidth, GX_InitTexObj(&glyphTexture, glyphData->glyphDataTexture, glyphData->textureWidth, glyphData->textureHeight, GX_TF_IA4, GX_CLAMP, GX_CLAMP, GX_FALSE);
glyphData->textureHeight, GX_TF_IA4, GX_CLAMP, GX_CLAMP, GX_FALSE); copyTextureToFramebuffer(&glyphTexture, glyphData->textureWidth, glyphData->textureHeight, x_pos + glyphData->renderOffsetX + x_offset, y - glyphData->renderOffsetY + y_offset, z, color);
copyTextureToFramebuffer(&glyphTexture, glyphData->textureWidth, glyphData->textureHeight, x_pos
+ glyphData->renderOffsetX + x_offset, y - glyphData->renderOffsetY + y_offset, z, color);
x_pos += glyphData->glyphAdvanceX; x_pos += glyphData->glyphAdvanceX;
++printed; ++printed;

View File

@ -1,3 +1,4 @@
#include "settings/CSettings.h"
#include "Text.hpp" #include "Text.hpp"
Text::Text(const char * t, int s, GXColor c) : Text::Text(const char * t, int s, GXColor c) :
@ -312,7 +313,7 @@ void Text::Draw()
GXColor c = color; GXColor c = color;
c.a = this->GetAlpha(); c.a = this->GetAlpha();
int newSize = size * GetScale(); int newSize = size * GetScale() * Settings.FontScaleFactor;
if (newSize != currentSize) if (newSize != currentSize)
{ {

View File

@ -216,10 +216,10 @@ class GuiElement
int GetMaxX(); int GetMaxX();
//!Gets the current width of the element. Does not currently consider the scale //!Gets the current width of the element. Does not currently consider the scale
//!\return width //!\return width
int GetWidth(); virtual int GetWidth();
//!Gets the height of the element. Does not currently consider the scale //!Gets the height of the element. Does not currently consider the scale
//!\return height //!\return height
int GetHeight(); virtual int GetHeight();
//!Sets the size (width/height) of the element //!Sets the size (width/height) of the element
//!\param w Width of element //!\param w Width of element
//!\param h Height of element //!\param h Height of element
@ -662,6 +662,8 @@ class GuiText: public GuiElement
void SetFont(FreeTypeGX *f); void SetFont(FreeTypeGX *f);
//!Get the original text as char //!Get the original text as char
virtual const wchar_t * GetText(); virtual const wchar_t * GetText();
//!Overload for GetWidth()
int GetWidth() { return GetTextWidth(); }
//!Get the Horizontal Size of Text //!Get the Horizontal Size of Text
int GetTextWidth(); int GetTextWidth();
int GetTextWidth(int ind); int GetTextWidth(int ind);

View File

@ -1,4 +1,5 @@
#include "gui_diskcover.h" #include "gui_diskcover.h"
#include "settings/CSettings.h"
GuiDiskCover::GuiDiskCover() GuiDiskCover::GuiDiskCover()
{ {
@ -75,11 +76,11 @@ void GuiDiskCover::Draw()
LOCK( this ); LOCK( this );
if (!image || !this->IsVisible()) return; if (!image || !this->IsVisible()) return;
float currScale = this->GetScale(); float currScale = this->GetScale();
// Menu_DrawDiskCoverShadow(this->GetLeft(), this->GetTop(), 190, width, height, 40, image, imageangle, deg_beta, widescreen ? currScale*0.8 : currScale, currScale, this->GetAlpha(), true);
Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), PosZ, width, height, Distance, image, imageangle, deg_beta, Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), PosZ, width, height, Distance, image, imageangle, deg_beta,
widescreen ? currScale * 0.8 : currScale, currScale, 64, true); widescreen ? currScale * Settings.WSFactor : currScale, currScale, 64, true);
Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), PosZ, width, height, Distance, image, imageangle, deg_beta, Menu_DrawDiskCover(this->GetLeft(), this->GetTop(), PosZ, width, height, Distance, image, imageangle, deg_beta,
widescreen ? currScale * 0.8 : currScale, currScale, this->GetAlpha(), false); widescreen ? currScale * Settings.WSFactor : currScale, currScale, this->GetAlpha(), false);
if (eff_step) if (eff_step)
{ {

View File

@ -248,21 +248,6 @@ int GuiGameBrowser::GetClickedOption()
return found; return found;
} }
int GuiGameBrowser::GetSelectedOption()
{
int found = -1;
for (int i = 0; i < pagesize; i++)
{
if (game[i]->GetState() == STATE_SELECTED)
{
game[i]->SetState(STATE_SELECTED);
found = gameIndex[i];
break;
}
}
return found;
}
/**************************************************************************** /****************************************************************************
* FindMenuItem * FindMenuItem
* *

View File

@ -11,7 +11,7 @@ class GuiGameBrowser: public GuiElement
~GuiGameBrowser(); ~GuiGameBrowser();
int FindMenuItem(int c, int d); int FindMenuItem(int c, int d);
int GetClickedOption(); int GetClickedOption();
int GetSelectedOption(); int GetSelectedOption() { return listOffset+selectedItem; }
void ResetState(); void ResetState();
void SetFocus(int f); void SetFocus(int f);
void Draw(); void Draw();

View File

@ -9,6 +9,7 @@
***************************************************************************/ ***************************************************************************/
#include "gui.h" #include "gui.h"
#include "settings/CSettings.h"
/** /**
* Constructor for the GuiImage class. * Constructor for the GuiImage class.
*/ */
@ -440,7 +441,7 @@ void GuiImage::Draw()
{ {
for (int i = 0; i < tile; i++) for (int i = 0; i < tile; i++)
Menu_DrawImg(currLeft + width * i, this->GetTop(), zoffset, width, height, image, imageangle, Menu_DrawImg(currLeft + width * i, this->GetTop(), zoffset, width, height, image, imageangle,
widescreen ? currScale * 0.80 : currScale, currScale, this->GetAlpha(), xx1, yy1, xx2, yy2, xx3, widescreen ? currScale * Settings.WSFactor : currScale, currScale, this->GetAlpha(), xx1, yy1, xx2, yy2, xx3,
yy3, xx4, yy4); yy3, xx4, yy4);
} }
else else
@ -448,7 +449,7 @@ void GuiImage::Draw()
// temporary (maybe), used to correct offset for scaled images // temporary (maybe), used to correct offset for scaled images
if (scale != 1) currLeft = currLeft - width / 2 + (width * scale) / 2; if (scale != 1) currLeft = currLeft - width / 2 + (width * scale) / 2;
Menu_DrawImg(currLeft, this->GetTop(), zoffset, width, height, image, imageangle, widescreen ? currScale * 0.80 Menu_DrawImg(currLeft, this->GetTop(), zoffset, width, height, image, imageangle, widescreen ? currScale * Settings.WSFactor
: currScale, currScale, this->GetAlpha(), xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4); : currScale, currScale, this->GetAlpha(), xx1, yy1, xx2, yy2, xx3, yy3, xx4, yy4);
} }

View File

@ -10,6 +10,7 @@
#include "gui.h" #include "gui.h"
#include "wstring.hpp" #include "wstring.hpp"
#include "settings/CSettings.h"
#define MAX_LINES_TO_DRAW 9 #define MAX_LINES_TO_DRAW 9
@ -18,8 +19,7 @@ static int presetMaxWidth = 0;
static int presetAlignmentHor = 0; static int presetAlignmentHor = 0;
static int presetAlignmentVert = 0; static int presetAlignmentVert = 0;
static u16 presetStyle = 0; static u16 presetStyle = 0;
static GXColor presetColor = ( GXColor ) static GXColor presetColor = (GXColor) {255, 255, 255, 255};
{ 255, 255, 255, 255};
#define TEXT_SCROLL_DELAY 5 #define TEXT_SCROLL_DELAY 5
#define TEXT_SCROLL_INITIAL_DELAY 8 #define TEXT_SCROLL_INITIAL_DELAY 8
@ -527,7 +527,7 @@ void GuiText::Draw()
GXColor c = color; GXColor c = color;
c.a = GetAlpha(); c.a = GetAlpha();
int newSize = size * GetScale(); int newSize = size * GetScale() * Settings.FontScaleFactor;
if (newSize != currentSize) if (newSize != currentSize)
{ {
@ -540,18 +540,19 @@ void GuiText::Draw()
{ {
if (wrapMode == DOTTED) // text dotted if (wrapMode == DOTTED) // text dotted
{ {
if (textDyn.size() == 0) MakeDottedText(); if (textDyn.size() == 0)
MakeDottedText();
if (textDyn.size() > 0) (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop(), 0, if (textDyn.size() > 0)
textDyn[textDyn.size() - 1], currentSize, c, style); (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop(), 0, textDyn[textDyn.size() - 1], currentSize, c, style);
} }
else if (wrapMode == SCROLL_HORIZONTAL) else if (wrapMode == SCROLL_HORIZONTAL)
{ {
ScrollText(); ScrollText();
if (textDyn.size() > 0) (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop(), 0, if (textDyn.size() > 0)
textDyn[textDyn.size() - 1], currentSize, c, style); (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop(), 0, textDyn[textDyn.size() - 1], currentSize, c, style);
} }
else if (wrapMode == WRAP) else if (wrapMode == WRAP)
{ {
@ -563,8 +564,7 @@ void GuiText::Draw()
for (u32 i = 0; i < textDyn.size(); i++) for (u32 i = 0; i < textDyn.size(); i++)
{ {
(font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop() + voffset + i * lineheight, 0, (font ? font : fontSystem)->drawText(this->GetLeft(), this->GetTop() + voffset + i * lineheight, 0, textDyn[i], currentSize, c, style);
textDyn[i], currentSize, c, style);
} }
} }
} }

View File

@ -116,7 +116,7 @@ static void * UpdateGUI(void *arg)
userInput[i].wpad.ir.y - pointer[i]->GetHeight()/2, userInput[i].wpad.ir.y - pointer[i]->GetHeight()/2,
9900.0f, pointer[i]->GetWidth(), pointer[i]->GetHeight(), 9900.0f, pointer[i]->GetWidth(), pointer[i]->GetHeight(),
pointer[i]->GetImage(), userInput[i].wpad.ir.angle, pointer[i]->GetImage(), userInput[i].wpad.ir.angle,
Settings.widescreen ? 0.8f : 1.f, 1.f, 255, 0, 0, 0, 0, 0, 0, 0, 0); Settings.widescreen ? Settings.WSFactor : 1.f, 1.f, 255, 0, 0, 0, 0, 0, 0, 0, 0);
} }
} }

View File

@ -181,9 +181,9 @@ static void UpdateProgressValues(GuiImage *progressbarImg, GuiText *prTxt, GuiTe
prTxt->SetTextf("%.2f", progressPercent); prTxt->SetTextf("%.2f", progressPercent);
if (Settings.widescreen && Settings.wsprompt) if (Settings.widescreen && Settings.wsprompt)
progressbarImg->SetSkew(0, 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent * 0.8) progressbarImg->SetSkew(0, 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent * Settings.WSFactor)
- progressbarImg->GetWidth(), 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent - progressbarImg->GetWidth(), 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent
* 0.8) - progressbarImg->GetWidth(), 0, 0, 0); * Settings.WSFactor) - progressbarImg->GetWidth(), 0, 0, 0);
else else
progressbarImg->SetSkew(0, 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent) progressbarImg->SetSkew(0, 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent)
- progressbarImg->GetWidth(), 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent) - progressbarImg->GetWidth(), 0, static_cast<int> (progressbarImg->GetWidth() * progressPercent)

View File

@ -240,11 +240,10 @@ void WindowCredits()
txt[i]->SetPosition(0, 12); txt[i]->SetPosition(0, 12);
i++; i++;
char SvnRev[30];
#ifdef FULLCHANNEL #ifdef FULLCHANNEL
char SvnRev[30]; snprintf(SvnRev, sizeof(SvnRev), "Rev%sc IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision());
snprintf( SvnRev, sizeof( SvnRev ), "Rev%sc IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision() );
#else #else
char SvnRev[30];
snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision()); snprintf(SvnRev, sizeof(SvnRev), "Rev%s IOS%u (Rev %u)", GetRev(), IOS_GetVersion(), IOS_GetRevision());
#endif #endif
@ -362,35 +361,35 @@ void WindowCredits()
sprintf(text, "Waninkoko, Kwiirk & Hermes %s", tr( "for the USB Loader source" )); sprintf(text, "Waninkoko, Kwiirk & Hermes %s", tr( "for the USB Loader source" ));
txt[i] = new GuiText(text); txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y); txt[i]->SetPosition(10, y);
i++; i++;
y += 20; y += 20;
sprintf(text, "Tantric %s", tr( "for his awesome tool LibWiiGui" )); sprintf(text, "Tantric %s", tr( "for his awesome tool LibWiiGui" ));
txt[i] = new GuiText(text); txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y); txt[i]->SetPosition(10, y);
i++; i++;
y += 20; y += 20;
sprintf(text, "Fishears/Nuke %s", tr( "for Ocarina" )); sprintf(text, "Fishears/Nuke %s", tr( "for Ocarina" ));
txt[i] = new GuiText(text); txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y); txt[i]->SetPosition(10, y);
i++; i++;
y += 20; y += 20;
sprintf(text, "WiiPower %s", tr( "for diverse patches" )); sprintf(text, "WiiPower %s", tr( "for diverse patches" ));
txt[i] = new GuiText(text); txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y); txt[i]->SetPosition(10, y);
i++; i++;
y += 20; y += 20;
sprintf(text, "Oggzee %s", tr( "for FAT/NTFS support" )); sprintf(text, "Oggzee %s", tr( "for FAT/NTFS support" ));
txt[i] = new GuiText(text); txt[i] = new GuiText(text);
txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); txt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
txt[i]->SetPosition(60, y); txt[i]->SetPosition(10, y);
i++; i++;
y += 20; y += 20;

View File

@ -396,7 +396,7 @@ static int InternalShowGameInfo(char *ID)
playersImg->SetPosition(intputX, inputY); playersImg->SetPosition(intputX, inputY);
playersImg->SetAlignment(0, 4); playersImg->SetAlignment(0, 4);
InfoWindow.Append(playersImg); InfoWindow.Append(playersImg);
intputX += (Settings.widescreen ? playersImg->GetWidth() * .8 : playersImg->GetWidth()) + 5; intputX += (Settings.widescreen ? playersImg->GetWidth() * Settings.WSFactor : playersImg->GetWidth()) + 5;
} }
//draw the input types for this game //draw the input types for this game
@ -407,7 +407,7 @@ static int InternalShowGameInfo(char *ID)
motionplusImg->SetPosition(intputX, inputY); motionplusImg->SetPosition(intputX, inputY);
motionplusImg->SetAlignment(0, 4); motionplusImg->SetAlignment(0, 4);
InfoWindow.Append(motionplusImg); InfoWindow.Append(motionplusImg);
intputX += (Settings.widescreen ? motionplusImg->GetWidth() * .8 : motionplusImg->GetWidth()) + 5; intputX += (Settings.widescreen ? motionplusImg->GetWidth() * Settings.WSFactor : motionplusImg->GetWidth()) + 5;
} }
if (nunchuk == 1) if (nunchuk == 1)
{ {
@ -416,7 +416,7 @@ static int InternalShowGameInfo(char *ID)
nunchukImg->SetPosition(intputX, inputY); nunchukImg->SetPosition(intputX, inputY);
nunchukImg->SetAlignment(0, 4); nunchukImg->SetAlignment(0, 4);
InfoWindow.Append(nunchukImg); InfoWindow.Append(nunchukImg);
intputX += (Settings.widescreen ? nunchukImg->GetWidth() * .8 : nunchukImg->GetWidth()) + 5; intputX += (Settings.widescreen ? nunchukImg->GetWidth() * Settings.WSFactor : nunchukImg->GetWidth()) + 5;
} }
if (classiccontroller == 1) if (classiccontroller == 1)
{ {
@ -425,7 +425,7 @@ static int InternalShowGameInfo(char *ID)
classiccontrollerImg->SetPosition(intputX, inputY); classiccontrollerImg->SetPosition(intputX, inputY);
classiccontrollerImg->SetAlignment(0, 4); classiccontrollerImg->SetAlignment(0, 4);
InfoWindow.Append(classiccontrollerImg); InfoWindow.Append(classiccontrollerImg);
intputX += (Settings.widescreen ? classiccontrollerImg->GetWidth() * .8 : classiccontrollerImg->GetWidth()) + 5; intputX += (Settings.widescreen ? classiccontrollerImg->GetWidth() * Settings.WSFactor : classiccontrollerImg->GetWidth()) + 5;
} }
if (gamecube == 1) if (gamecube == 1)
{ {
@ -434,7 +434,7 @@ static int InternalShowGameInfo(char *ID)
gcImg->SetPosition(intputX, inputY); gcImg->SetPosition(intputX, inputY);
gcImg->SetAlignment(0, 4); gcImg->SetAlignment(0, 4);
InfoWindow.Append(gcImg); InfoWindow.Append(gcImg);
intputX += (Settings.widescreen ? gcImg->GetWidth() * .8 : gcImg->GetWidth()) + 5; intputX += (Settings.widescreen ? gcImg->GetWidth() * Settings.WSFactor : gcImg->GetWidth()) + 5;
} }
if (wheel == 1) if (wheel == 1)
{ {
@ -443,7 +443,7 @@ static int InternalShowGameInfo(char *ID)
wheelImg->SetPosition(intputX, inputY); wheelImg->SetPosition(intputX, inputY);
wheelImg->SetAlignment(0, 4); wheelImg->SetAlignment(0, 4);
InfoWindow.Append(wheelImg); InfoWindow.Append(wheelImg);
intputX += (Settings.widescreen ? wheelImg->GetWidth() * .8 : wheelImg->GetWidth()) + 5; intputX += (Settings.widescreen ? wheelImg->GetWidth() * Settings.WSFactor : wheelImg->GetWidth()) + 5;
} }
if (guitar == 1) if (guitar == 1)
{ {
@ -452,7 +452,7 @@ static int InternalShowGameInfo(char *ID)
guitarImg->SetPosition(intputX, inputY); guitarImg->SetPosition(intputX, inputY);
guitarImg->SetAlignment(0, 4); guitarImg->SetAlignment(0, 4);
InfoWindow.Append(guitarImg); InfoWindow.Append(guitarImg);
intputX += (Settings.widescreen ? guitarImg->GetWidth() * .8 : guitarImg->GetWidth()) + 5; intputX += (Settings.widescreen ? guitarImg->GetWidth() * Settings.WSFactor : guitarImg->GetWidth()) + 5;
} }
if (drums == 1) if (drums == 1)
{ {
@ -461,7 +461,7 @@ static int InternalShowGameInfo(char *ID)
drumsImg->SetPosition(intputX, inputY); drumsImg->SetPosition(intputX, inputY);
drumsImg->SetAlignment(0, 4); drumsImg->SetAlignment(0, 4);
InfoWindow.Append(drumsImg); InfoWindow.Append(drumsImg);
intputX += (Settings.widescreen ? drumsImg->GetWidth() * .8 : drumsImg->GetWidth()) + 5; intputX += (Settings.widescreen ? drumsImg->GetWidth() * Settings.WSFactor : drumsImg->GetWidth()) + 5;
} }
if (microphone == 1) if (microphone == 1)
{ {
@ -470,7 +470,7 @@ static int InternalShowGameInfo(char *ID)
microphoneImg->SetPosition(intputX, inputY); microphoneImg->SetPosition(intputX, inputY);
microphoneImg->SetAlignment(0, 4); microphoneImg->SetAlignment(0, 4);
InfoWindow.Append(microphoneImg); InfoWindow.Append(microphoneImg);
intputX += (Settings.widescreen ? microphoneImg->GetWidth() * .8 : microphoneImg->GetWidth()) + 5; intputX += (Settings.widescreen ? microphoneImg->GetWidth() * Settings.WSFactor : microphoneImg->GetWidth()) + 5;
} }
if (zapper == 1) if (zapper == 1)
{ {
@ -479,7 +479,7 @@ static int InternalShowGameInfo(char *ID)
zapperImg->SetPosition(intputX, inputY); zapperImg->SetPosition(intputX, inputY);
zapperImg->SetAlignment(0, 4); zapperImg->SetAlignment(0, 4);
InfoWindow.Append(zapperImg); InfoWindow.Append(zapperImg);
intputX += (Settings.widescreen ? zapperImg->GetWidth() * .8 : zapperImg->GetWidth()) + 5; intputX += (Settings.widescreen ? zapperImg->GetWidth() * Settings.WSFactor : zapperImg->GetWidth()) + 5;
} }
if (wiispeak == 1) if (wiispeak == 1)
{ {
@ -488,7 +488,7 @@ static int InternalShowGameInfo(char *ID)
wiispeakImg->SetPosition(intputX, inputY); wiispeakImg->SetPosition(intputX, inputY);
wiispeakImg->SetAlignment(0, 4); wiispeakImg->SetAlignment(0, 4);
InfoWindow.Append(wiispeakImg); InfoWindow.Append(wiispeakImg);
intputX += (Settings.widescreen ? wiispeakImg->GetWidth() * .8 : wiispeakImg->GetWidth()) + 5; intputX += (Settings.widescreen ? wiispeakImg->GetWidth() * Settings.WSFactor : wiispeakImg->GetWidth()) + 5;
} }
if (nintendods == 1) if (nintendods == 1)
{ {
@ -497,7 +497,7 @@ static int InternalShowGameInfo(char *ID)
nintendodsImg->SetPosition(intputX, inputY); nintendodsImg->SetPosition(intputX, inputY);
nintendodsImg->SetAlignment(0, 4); nintendodsImg->SetAlignment(0, 4);
InfoWindow.Append(nintendodsImg); InfoWindow.Append(nintendodsImg);
intputX += (Settings.widescreen ? nintendodsImg->GetWidth() * .8 : nintendodsImg->GetWidth()) + 5; intputX += (Settings.widescreen ? nintendodsImg->GetWidth() * Settings.WSFactor : nintendodsImg->GetWidth()) + 5;
} }
if (dancepad == 1) if (dancepad == 1)
{ {
@ -506,7 +506,7 @@ static int InternalShowGameInfo(char *ID)
dancepadImg->SetPosition(intputX, inputY); dancepadImg->SetPosition(intputX, inputY);
dancepadImg->SetAlignment(0, 4); dancepadImg->SetAlignment(0, 4);
InfoWindow.Append(dancepadImg); InfoWindow.Append(dancepadImg);
intputX += (Settings.widescreen ? dancepadImg->GetWidth() * .8 : dancepadImg->GetWidth()) + 5; intputX += (Settings.widescreen ? dancepadImg->GetWidth() * Settings.WSFactor : dancepadImg->GetWidth()) + 5;
} }
if (balanceboard == 1) if (balanceboard == 1)
{ {
@ -515,7 +515,7 @@ static int InternalShowGameInfo(char *ID)
balanceboardImg->SetPosition(intputX, inputY); balanceboardImg->SetPosition(intputX, inputY);
balanceboardImg->SetAlignment(0, 4); balanceboardImg->SetAlignment(0, 4);
InfoWindow.Append(balanceboardImg); InfoWindow.Append(balanceboardImg);
intputX += (Settings.widescreen ? balanceboardImg->GetWidth() * .8 : balanceboardImg->GetWidth()) + 5; intputX += (Settings.widescreen ? balanceboardImg->GetWidth() * Settings.WSFactor : balanceboardImg->GetWidth()) + 5;
} }
// # online players // # online players
@ -547,7 +547,7 @@ static int InternalShowGameInfo(char *ID)
wifiplayersImg->SetPosition(intputX, inputY); wifiplayersImg->SetPosition(intputX, inputY);
wifiplayersImg->SetAlignment(0, 4); wifiplayersImg->SetAlignment(0, 4);
InfoWindow.Append(wifiplayersImg); InfoWindow.Append(wifiplayersImg);
intputX += (Settings.widescreen ? wifiplayersImg->GetWidth() * .8 : wifiplayersImg->GetWidth()) + 5; intputX += (Settings.widescreen ? wifiplayersImg->GetWidth() * Settings.WSFactor : wifiplayersImg->GetWidth()) + 5;
} }
// ratings // ratings
@ -614,7 +614,7 @@ static int InternalShowGameInfo(char *ID)
ratingImg->SetPosition(-25, inputY); ratingImg->SetPosition(-25, inputY);
ratingImg->SetAlignment(1, 4); ratingImg->SetAlignment(1, 4);
InfoWindow.Append(ratingImg); InfoWindow.Append(ratingImg);
intputX += (Settings.widescreen ? ratingImg->GetWidth() * .8 : ratingImg->GetWidth()) + 5; intputX += (Settings.widescreen ? ratingImg->GetWidth() * Settings.WSFactor : ratingImg->GetWidth()) + 5;
} }
// title // title
@ -680,7 +680,7 @@ static int InternalShowGameInfo(char *ID)
char linebuf[300]; char linebuf[300];
snprintf(linebuf, sizeof(linebuf), "%s : %s%i", tr( "Released" ), linebuf2, year); snprintf(linebuf, sizeof(linebuf), "%s : %s%i", tr( "Released" ), linebuf2, year);
releasedTxt = new GuiText(linebuf, 16, ( GXColor ) {0, 0, 0, 255}); releasedTxt = new GuiText(linebuf, 16, ( GXColor ) {0, 0, 0, 255});
if (releasedTxt->GetWidth() > 300) newline = 2; if (releasedTxt->GetTextWidth() > 300) newline = 2;
releasedTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); releasedTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
releasedTxt->SetPosition(-17, 12 + indexy); releasedTxt->SetPosition(-17, 12 + indexy);
indexy += (20 * newline); indexy += (20 * newline);
@ -693,7 +693,7 @@ static int InternalShowGameInfo(char *ID)
{ {
snprintf(linebuf2, sizeof(linebuf2), "%s %s", tr( "Published by" ), GameInfo.Publisher.c_str()); snprintf(linebuf2, sizeof(linebuf2), "%s %s", tr( "Published by" ), GameInfo.Publisher.c_str());
publisherTxt = new GuiText(linebuf2, 16, ( GXColor ) {0, 0, 0, 255}); publisherTxt = new GuiText(linebuf2, 16, ( GXColor ) {0, 0, 0, 255});
if (publisherTxt->GetWidth() > 250) newline = 2; if (publisherTxt->GetTextWidth() > 250) newline = 2;
publisherTxt->SetMaxWidth(250, WRAP); publisherTxt->SetMaxWidth(250, WRAP);
publisherTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); publisherTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
publisherTxt->SetPosition(-17, 12 + indexy); publisherTxt->SetPosition(-17, 12 + indexy);
@ -707,7 +707,7 @@ static int InternalShowGameInfo(char *ID)
{ {
snprintf(linebuf2, sizeof(linebuf2), "%s %s", tr( "Developed by" ), GameInfo.Developer.c_str()); snprintf(linebuf2, sizeof(linebuf2), "%s %s", tr( "Developed by" ), GameInfo.Developer.c_str());
developerTxt = new GuiText(linebuf2, 16, ( GXColor ) {0, 0, 0, 255}); developerTxt = new GuiText(linebuf2, 16, ( GXColor ) {0, 0, 0, 255});
if (developerTxt->GetWidth() > 250) newline = 2; if (developerTxt->GetTextWidth() > 250) newline = 2;
developerTxt->SetMaxWidth(250, WRAP); developerTxt->SetMaxWidth(250, WRAP);
developerTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); developerTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP);
developerTxt->SetPosition(-17, 12 + indexy); developerTxt->SetPosition(-17, 12 + indexy);

View File

@ -116,6 +116,8 @@ void CSettings::SetDefault()
MultiplePartitions = OFF; MultiplePartitions = OFF;
USBPort = 0; USBPort = 0;
CacheTitles = ON; CacheTitles = ON;
WSFactor = 0.8f; //actually should be 0.75 for real widescreen
FontScaleFactor = 1.0f;
} }
bool CSettings::Load() bool CSettings::Load()
@ -259,6 +261,8 @@ bool CSettings::Save()
fprintf(file, "MultiplePartitions = %d\n ", MultiplePartitions); fprintf(file, "MultiplePartitions = %d\n ", MultiplePartitions);
fprintf(file, "USBPort = %d\n ", USBPort); fprintf(file, "USBPort = %d\n ", USBPort);
fprintf(file, "CacheTitles = %d\n ", CacheTitles); fprintf(file, "CacheTitles = %d\n ", CacheTitles);
fprintf(file, "WSFactor = %0.3f\n ", WSFactor);
fprintf(file, "FontScaleFactor = %0.3f\n ", FontScaleFactor);
fclose(file); fclose(file);
return true; return true;
@ -516,6 +520,16 @@ bool CSettings::SetSetting(char *name, char *value)
InstallPartitions = strtoul(value, 0, 16); InstallPartitions = strtoul(value, 0, 16);
return true; return true;
} }
else if (strcmp(name, "WSFactor") == 0)
{
WSFactor = atof(value);
return true;
}
else if (strcmp(name, "FontScaleFactor") == 0)
{
FontScaleFactor = atof(value);
return true;
}
else if (strcmp(name, "ParentalBlocks") == 0) else if (strcmp(name, "ParentalBlocks") == 0)
{ {
ParentalBlocks = strtoul(value, 0, 16); ParentalBlocks = strtoul(value, 0, 16);

View File

@ -115,6 +115,8 @@ class CSettings
short CacheTitles; short CacheTitles;
u32 InstallPartitions; u32 InstallPartitions;
u32 ParentalBlocks; u32 ParentalBlocks;
f32 WSFactor;
f32 FontScaleFactor;
protected: protected:
bool ValidVersion(FILE * file); bool ValidVersion(FILE * file);
bool SetSetting(char *name, char *value); bool SetSetting(char *name, char *value);

View File

@ -111,6 +111,8 @@ GuiSettingsMenu::GuiSettingsMenu()
Options->SetName(Idx++, "%s", tr( "Tooltips" )); Options->SetName(Idx++, "%s", tr( "Tooltips" ));
Options->SetName(Idx++, "%s", tr( "Flip-X" )); Options->SetName(Idx++, "%s", tr( "Flip-X" ));
Options->SetName(Idx++, "%s", tr( "Prompts Buttons" )); Options->SetName(Idx++, "%s", tr( "Prompts Buttons" ));
Options->SetName(Idx++, "%s", tr( "Widescreen Factor" ));
Options->SetName(Idx++, "%s", tr( "Font Scale Factor" ));
Options->SetName(Idx++, "%s", tr( "Keyboard" )); Options->SetName(Idx++, "%s", tr( "Keyboard" ));
Options->SetName(Idx++, "%s", tr( "Disc Artwork Download" )); Options->SetName(Idx++, "%s", tr( "Disc Artwork Download" ));
Options->SetName(Idx++, "%s", tr( "Wiilight" )); Options->SetName(Idx++, "%s", tr( "Wiilight" ));
@ -168,6 +170,12 @@ void GuiSettingsMenu::SetOptionValues()
//! Settings: Prompts Buttons //! Settings: Prompts Buttons
Options->SetValue(Idx++, "%s", tr( PromptButtonsText[Settings.wsprompt] )); Options->SetValue(Idx++, "%s", tr( PromptButtonsText[Settings.wsprompt] ));
//! Settings: Widescreen Factor
Options->SetValue(Idx++, "%0.3f", Settings.WSFactor);
//! Settings: Font Scale Factor
Options->SetValue(Idx++, "%0.3f", Settings.FontScaleFactor);
//! Settings: Keyboard //! Settings: Keyboard
Options->SetValue(Idx++, "%s", KeyboardText[Settings.keyset]); Options->SetValue(Idx++, "%s", KeyboardText[Settings.keyset]);
@ -281,6 +289,26 @@ int GuiSettingsMenu::GetMenuInternal()
if (++Settings.wsprompt >= MAX_ON_OFF) Settings.wsprompt = 0; if (++Settings.wsprompt >= MAX_ON_OFF) Settings.wsprompt = 0;
} }
//! Settings: Widescreen Factor
else if (ret == ++Idx)
{
char entrie[20];
snprintf(entrie, sizeof(entrie), "%0.3f", Settings.WSFactor);
int ret = OnScreenKeyboard(entrie, sizeof(entrie), 0);
if(ret)
Settings.WSFactor = atof(entrie);
}
//! Settings: Font Scale Factor
else if (ret == ++Idx)
{
char entrie[20];
snprintf(entrie, sizeof(entrie), "%0.3f", Settings.FontScaleFactor);
int ret = OnScreenKeyboard(entrie, sizeof(entrie), 0);
if(ret)
Settings.FontScaleFactor = atof(entrie);
}
//! Settings: Keyboard //! Settings: Keyboard
else if (ret == ++Idx) else if (ret == ++Idx)
{ {

View File

@ -423,12 +423,16 @@ s32 Wbfs_Fat::GetHeadersCount()
// usb:/wbfs/TITLE[GAMEID]/GAMEID.wbfs // usb:/wbfs/TITLE[GAMEID]/GAMEID.wbfs
lay_b = 1; lay_b = 1;
} }
else if (fname[6] == '_' && is_gameid((char*) id)) else if (fname[6] == '_')
{ {
// usb:/wbfs/GAMEID_TITLE/GAMEID.wbfs // usb:/wbfs/GAMEID_TITLE/GAMEID.wbfs
lay_a = 1;
memcpy(id, fname, 6); memcpy(id, fname, 6);
snprintf(fname_title, sizeof(fname_title), &fname[7]);
if(is_gameid((char*) id))
{
lay_a = 1;
snprintf(fname_title, sizeof(fname_title), &fname[7]);
}
} }
if (!lay_a && !lay_b) continue; if (!lay_a && !lay_b) continue;