Removed hardcoded font names

This commit is contained in:
jsalmon3 2004-03-27 19:17:54 +00:00
parent b1bdb9201a
commit 39447c977e
4 changed files with 89 additions and 73 deletions

View file

@ -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);

View file

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

View file

@ -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");

View file

@ -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")) {