Removed hardcoded font names
This commit is contained in:
parent
b1bdb9201a
commit
39447c977e
4 changed files with 89 additions and 73 deletions
src
|
@ -236,7 +236,7 @@ local void ParseShowPicture(lua_State* l, CampaignChapter* chapter)
|
|||
|
||||
if (!strcmp(value, "font")) {
|
||||
lua_rawgeti(l, -1, k + 1);
|
||||
(*text)->Font = CclFontByIdentifier(LuaToString(l, -1));
|
||||
(*text)->Font = FontByIdent(LuaToString(l, -1));
|
||||
lua_pop(l, 1);
|
||||
} else if (!strcmp(value, "x")) {
|
||||
lua_rawgeti(l, -1, k + 1);
|
||||
|
@ -573,7 +573,7 @@ global void SaveCampaign(CLFile* file)
|
|||
ch->Data.Picture.DisplayTime);
|
||||
for (text = ch->Data.Picture.Text; text; text = text->Next) {
|
||||
CLprintf(file, " \"text\", {\n");
|
||||
CLprintf(file, " \"font\", \"%s\",\n", FontNames[text->Font]);
|
||||
CLprintf(file, " \"font\", \"%s\",\n", FontName(text->Font));
|
||||
CLprintf(file, " \"x\", %d,\n", text->X);
|
||||
CLprintf(file, " \"y\", %d,\n", text->Y);
|
||||
CLprintf(file, " \"width\", %d,\n", text->Width);
|
||||
|
|
|
@ -103,6 +103,7 @@ typedef struct _color_font_ {
|
|||
|
||||
/**
|
||||
** Font selector for the font functions.
|
||||
** FIXME: should be removed
|
||||
*/
|
||||
enum _game_font_ {
|
||||
SmallFont, /// Small font used in stats
|
||||
|
@ -110,15 +111,10 @@ enum _game_font_ {
|
|||
LargeFont, /// Large font used in menus
|
||||
SmallTitleFont, /// Small font used in episoden titles
|
||||
LargeTitleFont, /// Large font used in episoden titles
|
||||
User1Font, /// User font 1
|
||||
User2Font, /// User font 2
|
||||
User3Font, /// User font 3
|
||||
User4Font, /// User font 4
|
||||
User5Font, /// User font 5
|
||||
// ... more to come or not
|
||||
MaxFonts, /// Number of fonts supported
|
||||
};
|
||||
|
||||
#define MaxFonts 10 /// Number of fonts supported
|
||||
|
||||
/**
|
||||
** Color selector for the font functions.
|
||||
*/
|
||||
|
@ -177,8 +173,10 @@ extern void FontsCclRegister(void);
|
|||
extern void CleanFonts(void);
|
||||
/// Check if font is loaded
|
||||
extern int IsFontLoaded(unsigned font);
|
||||
/// Font symbol to id
|
||||
extern int CclFontByIdentifier(const char* type);
|
||||
/// Find font by identifier
|
||||
extern int FontByIdent(const char* ident);
|
||||
// Find the name of a font.
|
||||
extern const char* FontName(int font);
|
||||
|
||||
//@}
|
||||
|
||||
|
|
|
@ -312,7 +312,7 @@ local int CclSetTitleScreens(lua_State* l)
|
|||
if (!strcmp(value, "Text")) {
|
||||
TitleScreens[j]->Labels[k]->Text = strdup(LuaToString(l, -1));
|
||||
} else if (!strcmp(value, "Font")) {
|
||||
TitleScreens[j]->Labels[k]->Font = CclFontByIdentifier(LuaToString(l, -1));
|
||||
TitleScreens[j]->Labels[k]->Font = FontByIdent(LuaToString(l, -1));
|
||||
} else if (!strcmp(value, "Pos")) {
|
||||
if (!lua_istable(l, -1) || luaL_getn(l, -1) != 2) {
|
||||
LuaError(l, "incorrect argument");
|
||||
|
@ -696,7 +696,7 @@ local void CclParseInfoText(lua_State* l, InfoText* text)
|
|||
lua_pop(l, 1);
|
||||
} else if (!strcmp(value, "font")) {
|
||||
lua_rawgeti(l, -1, j + 1);
|
||||
text->Font = CclFontByIdentifier(LuaToString(l, -1));
|
||||
text->Font = FontByIdent(LuaToString(l, -1));
|
||||
lua_pop(l, 1);
|
||||
} else if (!strcmp(value, "pos")) {
|
||||
lua_rawgeti(l, -1, j + 1);
|
||||
|
@ -1884,7 +1884,7 @@ local int CclDefineUI(lua_State* l)
|
|||
lua_pop(l, 1);
|
||||
} else if (!strcmp(value, "font")) {
|
||||
lua_rawgeti(l, j + 1, k + 1);
|
||||
ui->StatusLineFont = CclFontByIdentifier(LuaToString(l, -1));
|
||||
ui->StatusLineFont = FontByIdent(LuaToString(l, -1));
|
||||
lua_pop(l, 1);
|
||||
} else {
|
||||
LuaError(l, "Unsupported tag: %s" _C_ value);
|
||||
|
@ -2519,7 +2519,7 @@ local int CclDefineMenuItem(lua_State* l)
|
|||
}
|
||||
}
|
||||
} else if (!strcmp(value, "font")) {
|
||||
item->font = CclFontByIdentifier(LuaToString(l, j + 1));
|
||||
item->font = FontByIdent(LuaToString(l, j + 1));
|
||||
} else if (!strcmp(value, "init")) {
|
||||
if (!lua_isstring(l, j + 1) && !lua_isnil(l, j + 1)) {
|
||||
LuaError(l, "incorrect argument");
|
||||
|
|
|
@ -63,6 +63,15 @@ local FontColorMapping* FontColor;
|
|||
/// Font color mappings
|
||||
local FontColorMapping* FontColorMappings;
|
||||
|
||||
/// Font mapping
|
||||
typedef struct _font_mapping_ {
|
||||
char* Ident; /// Font name
|
||||
int Font; /// Ident number
|
||||
struct _font_mapping_* Next; /// Next pointer
|
||||
} FontMapping;
|
||||
|
||||
local FontMapping* FontMappings;
|
||||
|
||||
/**
|
||||
** Fonts table
|
||||
**
|
||||
|
@ -93,28 +102,10 @@ local int FontBitmapWidths[MaxFonts];
|
|||
local int CurrentFont;
|
||||
#endif
|
||||
|
||||
/**
|
||||
** FIXME: should use the names of the real fonts.
|
||||
*/
|
||||
global char* FontNames[] = {
|
||||
"small",
|
||||
"game",
|
||||
"large",
|
||||
"small-title",
|
||||
"large-title",
|
||||
"user1",
|
||||
"user2",
|
||||
"user3",
|
||||
"user4",
|
||||
"user5",
|
||||
};
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
-- Functions
|
||||
----------------------------------------------------------------------------*/
|
||||
|
||||
// FIXME: should use RLE encoded fonts, not color key fonts.
|
||||
|
||||
/**
|
||||
** Draw character with current color.
|
||||
**
|
||||
|
@ -188,7 +179,7 @@ local FontColorMapping* GetFontColorMapping(char* color)
|
|||
}
|
||||
fcm = fcm->Next;
|
||||
}
|
||||
fprintf(stderr, "Font mapping not found: '%s'\n", color);
|
||||
fprintf(stderr, "Font color mapping not found: '%s'\n", color);
|
||||
ExitFatal(1);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -250,8 +241,8 @@ global int VideoTextLength(unsigned font, const unsigned char* text)
|
|||
}
|
||||
}
|
||||
if (!isformat) {
|
||||
width += widths[*s - 32] + 1;
|
||||
}
|
||||
width += widths[*s - 32] + 1;
|
||||
}
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
@ -714,46 +705,56 @@ global void LoadFonts(void)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
** Find font by identifier.
|
||||
**
|
||||
** @param ident Font identifier
|
||||
**
|
||||
** @return Integer as font identifier.
|
||||
*/
|
||||
global int FontByIdent(const char* ident)
|
||||
{
|
||||
FontMapping* fm;
|
||||
|
||||
fm = FontMappings;
|
||||
while (fm) {
|
||||
if (!strcmp(fm->Ident, ident)) {
|
||||
return fm->Font;
|
||||
}
|
||||
fm = fm->Next;
|
||||
}
|
||||
fprintf(stderr, "Font not found: '%s'", ident);
|
||||
ExitFatal(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
** Find the name of a font.
|
||||
**
|
||||
** @param font Font identifier.
|
||||
**
|
||||
** @return Name of the font.
|
||||
*/
|
||||
global const char* FontName(int font)
|
||||
{
|
||||
FontMapping* fm;
|
||||
|
||||
fm = FontMappings;
|
||||
while (fm) {
|
||||
if (fm->Font == font) {
|
||||
return fm->Ident;
|
||||
}
|
||||
fm = fm->Next;
|
||||
}
|
||||
fprintf(stderr, "Font not found: %d", font);
|
||||
ExitFatal(1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------
|
||||
-- CCL
|
||||
----------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
** Font symbol to id.
|
||||
**
|
||||
** @param type Type of the font (game,small,...)
|
||||
**
|
||||
** @return Integer as font identifier.
|
||||
*/
|
||||
global int CclFontByIdentifier(const char* type)
|
||||
{
|
||||
if (!strcmp(type, "game")) {
|
||||
return GameFont;
|
||||
} else if (!strcmp(type, "small")) {
|
||||
return SmallFont;
|
||||
} else if (!strcmp(type, "large")) {
|
||||
return LargeFont;
|
||||
} else if (!strcmp(type, "small-title")) {
|
||||
return SmallTitleFont;
|
||||
} else if (!strcmp(type, "large-title")) {
|
||||
return LargeTitleFont;
|
||||
} else if (!strcmp(type, "user1")) {
|
||||
return User1Font;
|
||||
} else if (!strcmp(type, "user2")) {
|
||||
return User2Font;
|
||||
} else if (!strcmp(type, "user3")) {
|
||||
return User3Font;
|
||||
} else if (!strcmp(type, "user4")) {
|
||||
return User4Font;
|
||||
} else if (!strcmp(type, "user5")) {
|
||||
return User5Font;
|
||||
} else {
|
||||
fprintf(stderr, "Unsupported font tag: %s", type);
|
||||
exit(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
** Define the used fonts.
|
||||
**
|
||||
|
@ -766,6 +767,8 @@ local int CclDefineFont(lua_State* l)
|
|||
int w;
|
||||
int h;
|
||||
char* file;
|
||||
FontMapping** fm;
|
||||
const char* str;
|
||||
|
||||
if (lua_gettop(l) != 1 || !lua_istable(l, 1)) {
|
||||
LuaError(l, "incorrect argument");
|
||||
|
@ -777,7 +780,22 @@ local int CclDefineFont(lua_State* l)
|
|||
while (lua_next(l, 1)) {
|
||||
value = LuaToString(l, -2);
|
||||
if (!strcmp(value, "Name")) {
|
||||
i = CclFontByIdentifier(LuaToString(l, -1));
|
||||
str = LuaToString(l, -1);
|
||||
fm = &FontMappings;
|
||||
i = 0;
|
||||
while (*fm) {
|
||||
if (!strcmp((*fm)->Ident, str)) {
|
||||
break;
|
||||
}
|
||||
fm = &(*fm)->Next;
|
||||
++i;
|
||||
}
|
||||
if (!*fm) {
|
||||
*fm = malloc(sizeof(**fm));
|
||||
(*fm)->Ident = strdup(str);
|
||||
(*fm)->Font = i;
|
||||
(*fm)->Next = NULL;
|
||||
}
|
||||
} else if (!strcmp(value, "File")) {
|
||||
file = strdup(LuaToString(l, -1));
|
||||
} else if (!strcmp(value, "Size")) {
|
||||
|
|
Loading…
Add table
Reference in a new issue