mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-01 00:55:06 +01:00
-rewrote the font fix of r960 to hopefully fix issues for some people
-fixed two very minor bugs
This commit is contained in:
parent
66a2b21cee
commit
32946bef84
@ -192,8 +192,9 @@ void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu,
|
||||
stat(isopath, &st);
|
||||
FILE *f = fopen(isopath, "rb");
|
||||
gprintf("Devolution: ISO Header %s\n", isopath);
|
||||
fread((u8*)0x80000000, 1, 32, f);
|
||||
fread((u8*)Disc_ID, 1, 32, f);
|
||||
fclose(f);
|
||||
f = NULL;
|
||||
|
||||
// fill out the Devolution config struct
|
||||
memset(DEVO_CONFIG, 0, sizeof(gconfig));
|
||||
@ -227,14 +228,13 @@ void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu,
|
||||
f = fopen(iso2path, "rb");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(f != NULL)
|
||||
{
|
||||
gprintf("Devolution: 2nd ISO File for Multi DVD Game %s\n", iso2path);
|
||||
stat(iso2path, &st);
|
||||
DEVO_CONFIG->disc2_cluster = st.st_ino;
|
||||
fclose(f);
|
||||
if(f != NULL)
|
||||
{
|
||||
gprintf("Devolution: 2nd ISO File for Multi DVD Game %s\n", iso2path);
|
||||
stat(iso2path, &st);
|
||||
DEVO_CONFIG->disc2_cluster = st.st_ino;
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
// make sure these directories exist, they are required for Devolution to function correctly
|
||||
@ -285,7 +285,7 @@ void DEVO_SetOptions(const char *isopath, const char *gameID, bool memcard_emu,
|
||||
DEVO_CONFIG->memcard_cluster = st.st_ino;
|
||||
|
||||
// flush disc ID and Devolution config out to memory
|
||||
DCFlushRange((void*)0x80000000, 64);
|
||||
DCFlushRange((void*)Disc_ID, 64);
|
||||
|
||||
DeviceHandle.UnMountDevolution();
|
||||
}
|
||||
|
@ -164,11 +164,11 @@ void SFont::ClearData(void)
|
||||
dataSize = 0;
|
||||
}
|
||||
|
||||
bool SFont::fromBuffer(const u8 *buffer, const u32 bufferSize, u32 size, u32 lspacing, u32 w, u32 idx, const char *)
|
||||
bool SFont::fromBuffer(const u8 *buffer, const u32 bufferSize, u32 size, u32 lspacing, u32 w, u32 idx, const char *fontname)
|
||||
{
|
||||
if(buffer == NULL)
|
||||
return false;
|
||||
size = min(max(6u, size), 1000u);
|
||||
fSize = min(max(6u, size), 1000u);
|
||||
lineSpacing = min(max(6u, lspacing), 1000u);
|
||||
weight = min(w, 32u);
|
||||
index = idx;
|
||||
@ -182,14 +182,15 @@ bool SFont::fromBuffer(const u8 *buffer, const u32 bufferSize, u32 size, u32 lsp
|
||||
memcpy(data, buffer, bufferSize);
|
||||
DCFlushRange(data, dataSize);
|
||||
|
||||
memcpy(name, fontname, 127);
|
||||
font = new FreeTypeGX();
|
||||
font->loadFont(data, dataSize, size, weight, index, false);
|
||||
font->loadFont(data, dataSize, fSize, weight, index, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SFont::fromFile(const char *filename, u32 size, u32 lspacing, u32 w, u32 idx)
|
||||
bool SFont::fromFile(const char *path, u32 size, u32 lspacing, u32 w, u32 idx, const char *fontname)
|
||||
{
|
||||
size = min(max(6u, size), 1000u);
|
||||
fSize = min(max(6u, size), 1000u);
|
||||
weight = min(w, 32u);
|
||||
index = idx = 0;
|
||||
|
||||
@ -197,14 +198,15 @@ bool SFont::fromFile(const char *filename, u32 size, u32 lspacing, u32 w, u32 id
|
||||
|
||||
if(data != NULL)
|
||||
free(data);
|
||||
data = fsop_ReadFile(filename, &dataSize);
|
||||
data = fsop_ReadFile(path, &dataSize);
|
||||
if(data == NULL)
|
||||
return false;
|
||||
|
||||
DCFlushRange(data, dataSize);
|
||||
|
||||
memcpy(name, fontname, 127);
|
||||
font = new FreeTypeGX();
|
||||
font->loadFont(data, dataSize, size, weight, index, false);
|
||||
font->loadFont(data, dataSize, fSize, weight, index, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -15,15 +15,17 @@ using namespace std;
|
||||
class SFont
|
||||
{
|
||||
public:
|
||||
SFont(void) : font(NULL), lineSpacing(0), weight(0), index(0), data(NULL), dataSize(0) { }
|
||||
SFont(void) : font(NULL), fSize(0), lineSpacing(0), weight(0), index(0), data(NULL), dataSize(0) { memset(name, 0, 128); };
|
||||
~SFont(void) { };
|
||||
void ClearData(void);
|
||||
bool fromBuffer(const u8 *buffer, const u32 bufferSize, u32 size, u32 lspacing, u32 w = 0, u32 idx = 0, const char *genKey = NULL);
|
||||
bool fromFile(const char *filename, u32 size, u32 lspacing, u32 w = 0, u32 idx = 0);
|
||||
bool fromBuffer(const u8 *buffer, const u32 bufferSize, u32 size, u32 lspacing, u32 w = 0, u32 idx = 0, const char *fontname = "");
|
||||
bool fromFile(const char *path, u32 size, u32 lspacing, u32 w = 0, u32 idx = 0, const char *fontname = "");
|
||||
FreeTypeGX *font;
|
||||
u32 fSize;
|
||||
u32 lineSpacing;
|
||||
u32 weight;
|
||||
u32 index;
|
||||
char name[128];
|
||||
private:
|
||||
u8 *data;
|
||||
size_t dataSize;
|
||||
|
@ -619,8 +619,8 @@ void CMenu::_Theme_Cleanup(void)
|
||||
/* Other Theme Stuff */
|
||||
for(TexSet::iterator texture = theme.texSet.begin(); texture != theme.texSet.end(); ++texture)
|
||||
TexHandle.Cleanup(texture->second);
|
||||
for(FontSet::iterator font = theme.fontSet.begin(); font != theme.fontSet.end(); ++font)
|
||||
font->second.ClearData();
|
||||
for(vector<SFont>::iterator font = theme.fontSet.begin(); font != theme.fontSet.end(); ++font)
|
||||
font->ClearData();
|
||||
for(SoundSet::iterator sound = theme.soundSet.begin(); sound != theme.soundSet.end(); ++sound)
|
||||
sound->second->FreeMemory();
|
||||
theme.texSet.clear();
|
||||
@ -679,7 +679,7 @@ void CMenu::_loadCFCfg()
|
||||
string texNoCoverFlat = fmt("%s/%s", m_themeDataDir.c_str(), m_theme.getString(domain, "missing_cover_flat").c_str());
|
||||
CoverFlow.setTextures(texLoading, texLoadingFlat, texNoCover, texNoCoverFlat);
|
||||
// Font
|
||||
CoverFlow.setFont(_font(theme.fontSet, domain, "font", TITLEFONT), m_theme.getColor(domain, "font_color", CColor(0xFFFFFFFF)));
|
||||
CoverFlow.setFont(_font(domain, "font", TITLEFONT), m_theme.getColor(domain, "font_color", CColor(0xFFFFFFFF)));
|
||||
// Coverflow Count
|
||||
m_numCFVersions = min(max(2, m_theme.getInt("_COVERFLOW", "number_of_modes", 2)), 15);
|
||||
}
|
||||
@ -959,16 +959,16 @@ void CMenu::_loadCFLayout(int version, bool forceAA, bool otherScrnFmt)
|
||||
void CMenu::_buildMenus(void)
|
||||
{
|
||||
// Default fonts
|
||||
theme.btnFont = _font(theme.fontSet, "GENERAL", "button_font", BUTTONFONT);
|
||||
theme.btnFont = _font("GENERAL", "button_font", BUTTONFONT);
|
||||
theme.btnFontColor = m_theme.getColor("GENERAL", "button_font_color", 0xD0BFDFFF);
|
||||
|
||||
theme.lblFont = _font(theme.fontSet, "GENERAL", "label_font", LABELFONT);
|
||||
theme.lblFont = _font("GENERAL", "label_font", LABELFONT);
|
||||
theme.lblFontColor = m_theme.getColor("GENERAL", "label_font_color", 0xD0BFDFFF);
|
||||
|
||||
theme.titleFont = _font(theme.fontSet, "GENERAL", "title_font", TITLEFONT);
|
||||
theme.titleFont = _font("GENERAL", "title_font", TITLEFONT);
|
||||
theme.titleFontColor = m_theme.getColor("GENERAL", "title_font_color", 0xFFFFFFFF);
|
||||
|
||||
theme.txtFont = _font(theme.fontSet, "GENERAL", "text_font", TEXTFONT);
|
||||
theme.txtFont = _font("GENERAL", "text_font", TEXTFONT);
|
||||
theme.txtFontColor = m_theme.getColor("GENERAL", "text_font_color", 0xFFFFFFFF);
|
||||
|
||||
// Default Sounds
|
||||
@ -1186,9 +1186,9 @@ typedef struct
|
||||
u32 res;
|
||||
} FontHolder;
|
||||
|
||||
SFont CMenu::_font(CMenu::FontSet &fontSet, const char *domain, const char *key, u32 fontSize, u32 lineSpacing, u32 weight, u32 index, const char *genKey)
|
||||
SFont CMenu::_font(const char *domain, const char *key, u32 fontSize, u32 lineSpacing, u32 weight, u32 index, const char *genKey)
|
||||
{
|
||||
string filename = "";
|
||||
string filename;
|
||||
bool general = strncmp(domain, "GENERAL", 7) == 0;
|
||||
FontHolder fonts[3] = {{ "_size", 6u, 300u, fontSize, 0 }, { "_line_height", 6u, 300u, lineSpacing, 0 }, { "_weight", 1u, 32u, weight, 0 }};
|
||||
|
||||
@ -1214,27 +1214,28 @@ SFont CMenu::_font(CMenu::FontSet &fontSet, const char *domain, const char *key,
|
||||
}
|
||||
|
||||
/* ONLY return the font if spacing and weight are the same */
|
||||
fnt_type font_req;
|
||||
font_req.name = upperCase(filename.c_str());
|
||||
font_req.t1 = fonts[0].res;
|
||||
font_req.t2 = fonts[1].res;
|
||||
font_req.t3 = fonts[2].res;
|
||||
FontSet::iterator i = fontSet.find(font_req);
|
||||
if (i != fontSet.end()) return i->second;
|
||||
std::vector<SFont>::iterator font_itr;
|
||||
for(font_itr = theme.fontSet.begin(); font_itr != theme.fontSet.end(); ++font_itr)
|
||||
{
|
||||
if(strncmp(filename.c_str(), font_itr->name, 127) == 0 && font_itr->fSize == fonts[0].res &&
|
||||
font_itr->lineSpacing == fonts[1].res && font_itr->weight && fonts[2].res)
|
||||
break;
|
||||
}
|
||||
if (font_itr != theme.fontSet.end()) return *font_itr;
|
||||
|
||||
// TTF not found in memory, load it to create a new font
|
||||
SFont retFont;
|
||||
if (!useDefault && retFont.fromFile(fmt("%s/%s", m_themeDataDir.c_str(), filename.c_str()), fonts[0].res, fonts[1].res, fonts[2].res, index))
|
||||
if(!useDefault && retFont.fromFile(fmt("%s/%s", m_themeDataDir.c_str(), filename.c_str()), fonts[0].res, fonts[1].res, fonts[2].res, index, filename.c_str()))
|
||||
{
|
||||
// Theme Font
|
||||
fontSet[font_req] = retFont;
|
||||
theme.fontSet.push_back(retFont);
|
||||
return retFont;
|
||||
}
|
||||
/* Fallback to default font */
|
||||
if(retFont.fromBuffer(m_base_font, m_base_font_size, fonts[0].res, fonts[1].res, fonts[2].res, index))
|
||||
if(retFont.fromBuffer(m_base_font, m_base_font_size, fonts[0].res, fonts[1].res, fonts[2].res, index, filename.c_str()))
|
||||
{
|
||||
// Default font
|
||||
fontSet[font_req] = retFont;
|
||||
theme.fontSet.push_back(retFont);
|
||||
return retFont;
|
||||
}
|
||||
return retFont;
|
||||
@ -1386,7 +1387,7 @@ s16 CMenu::_addButton(const char *domain, SFont font, const wstringEx &text, int
|
||||
btnTexSet.leftSel = _texture(domain, "texture_left_selected", theme.btnTexLS, false);
|
||||
btnTexSet.rightSel = _texture(domain, "texture_right_selected", theme.btnTexRS, false);
|
||||
btnTexSet.centerSel = _texture(domain, "texture_center_selected", theme.btnTexCS, false);
|
||||
font = _font(theme.fontSet, domain, "font", BUTTONFONT);
|
||||
font = _font(domain, "font", BUTTONFONT);
|
||||
GuiSound *clickSound = _sound(theme.soundSet, domain, "click_sound", theme.clickSound->GetName());
|
||||
GuiSound *hoverSound = _sound(theme.soundSet, domain, "hover_sound", theme.hoverSound->GetName());
|
||||
return m_btnMgr.addButton(font, text, x, y, width, height, c, btnTexSet, clickSound, hoverSound);
|
||||
@ -1414,7 +1415,7 @@ s16 CMenu::_addTitle(const char *domain, SFont font, const wstringEx &text, int
|
||||
y = m_theme.getInt(domain, "y", y);
|
||||
width = m_theme.getInt(domain, "width", width);
|
||||
height = m_theme.getInt(domain, "height", height);
|
||||
font = _font(theme.fontSet, domain, "font", TITLEFONT);
|
||||
font = _font(domain, "font", TITLEFONT);
|
||||
style = _textStyle(domain, "style", style);
|
||||
return m_btnMgr.addLabel(font, text, x, y, width, height, c, style);
|
||||
}
|
||||
@ -1428,7 +1429,7 @@ s16 CMenu::_addText(const char *domain, SFont font, const wstringEx &text, int x
|
||||
y = m_theme.getInt(domain, "y", y);
|
||||
width = m_theme.getInt(domain, "width", width);
|
||||
height = m_theme.getInt(domain, "height", height);
|
||||
font = _font(theme.fontSet, domain, "font", TEXTFONT);
|
||||
font = _font(domain, "font", TEXTFONT);
|
||||
style = _textStyle(domain, "style", style);
|
||||
return m_btnMgr.addLabel(font, text, x, y, width, height, c, style);
|
||||
}
|
||||
@ -1442,7 +1443,7 @@ s16 CMenu::_addLabel(const char *domain, SFont font, const wstringEx &text, int
|
||||
y = m_theme.getInt(domain, "y", y);
|
||||
width = m_theme.getInt(domain, "width", width);
|
||||
height = m_theme.getInt(domain, "height", height);
|
||||
font = _font(theme.fontSet, domain, "font", LABELFONT);
|
||||
font = _font(domain, "font", LABELFONT);
|
||||
style = _textStyle(domain, "style", style);
|
||||
return m_btnMgr.addLabel(font, text, x, y, width, height, c, style);
|
||||
}
|
||||
@ -1456,7 +1457,7 @@ s16 CMenu::_addLabel(const char *domain, SFont font, const wstringEx &text, int
|
||||
y = m_theme.getInt(domain, "y", y);
|
||||
width = m_theme.getInt(domain, "width", width);
|
||||
height = m_theme.getInt(domain, "height", height);
|
||||
font = _font(theme.fontSet, domain, "font", BUTTONFONT);
|
||||
font = _font(domain, "font", BUTTONFONT);
|
||||
TexData texBg = _texture(domain, "background_texture", bg, false);
|
||||
style = _textStyle(domain, "style", style);
|
||||
return m_btnMgr.addLabel(font, text, x, y, width, height, c, style, texBg);
|
||||
|
@ -701,33 +701,12 @@ private:
|
||||
WO_FORMAT,
|
||||
WO_COPY_GAME,
|
||||
};
|
||||
struct fnt_type {
|
||||
string name;
|
||||
u32 t1;
|
||||
u32 t2;
|
||||
u32 t3;
|
||||
};
|
||||
struct cmp_fnt_type {
|
||||
bool operator()(const fnt_type& l, const fnt_type& r)
|
||||
{
|
||||
if (l.name < r.name) return true;
|
||||
if (l.name > r.name) return false;
|
||||
if (l.t1 < r.t1) return true;
|
||||
if (l.t1 > r.t1) return false;
|
||||
if (l.t2 < r.t2) return true;
|
||||
if (l.t2 > r.t2) return false;
|
||||
if (l.t3 < r.t3) return true;
|
||||
if (l.t3 > r.t3) return false;
|
||||
return false;
|
||||
}
|
||||
};
|
||||
typedef map<fnt_type, SFont, cmp_fnt_type> FontSet;
|
||||
typedef map<string, TexData> TexSet;
|
||||
typedef map<string, GuiSound*> SoundSet;
|
||||
struct SThemeData
|
||||
{
|
||||
TexSet texSet;
|
||||
FontSet fontSet;
|
||||
vector<SFont> fontSet;
|
||||
SoundSet soundSet;
|
||||
SFont btnFont;
|
||||
SFont lblFont;
|
||||
@ -1072,7 +1051,7 @@ private:
|
||||
void UpdateCache(u32 view = COVERFLOW_MAX);
|
||||
void MIOSisDML();
|
||||
void RemoveCover(const char *id);
|
||||
SFont _font(CMenu::FontSet &fontSet, const char *domain, const char *key, u32 fontSize, u32 lineSpacing, u32 weight, u32 index, const char *genKey);
|
||||
SFont _font(const char *domain, const char *key, u32 fontSize, u32 lineSpacing, u32 weight, u32 index, const char *genKey);
|
||||
TexData _texture(const char *domain, const char *key, TexData &def, bool freeDef = true);
|
||||
vector<TexData> _textures(const char *domain, const char *key);
|
||||
void _showWaitMessage();
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "SoundHandler.hpp"
|
||||
#include "MusicPlayer.hpp"
|
||||
#include "WavDecoder.hpp"
|
||||
#include "fileOps/fileOps.h"
|
||||
#include "loader/sys.h"
|
||||
#include "banner/AnimatedBanner.h"
|
||||
#include "memory/mem2.hpp"
|
||||
@ -166,8 +167,7 @@ bool GuiSound::Load(const char *path)
|
||||
if(path == NULL || path[strlen(path)-1] == '/')
|
||||
return false;
|
||||
|
||||
FILE *f = fopen(path, "rb");
|
||||
if(!f)
|
||||
if(!fsop_FileExist(path))
|
||||
{
|
||||
gprintf("gui_sound.cpp: Failed to load file %s!!\n", path);
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user