if (!Font_LoadFile(dpfnt->fallbacks[i], dpfnt->fallback_faces[i], &dpfnt->settings, fb))
{
- Con_Printf("Failed to allocate font for fallback %i of font %s\n", i, name);
+ if(!FS_FileExists(va("%s.tga", dpfnt->fallbacks[i])))
+ if(!FS_FileExists(va("%s.png", dpfnt->fallbacks[i])))
+ if(!FS_FileExists(va("%s.jpg", dpfnt->fallbacks[i])))
+ if(!FS_FileExists(va("%s.pcx", dpfnt->fallbacks[i])))
+ Con_Printf("Failed to load font %s for fallback %i of font %s\n", dpfnt->fallbacks[i], i, name);
Mem_Free(fb);
- break;
+ continue;
}
count = 0;
for (s = 0; s < MAX_FONT_SIZES && dpfnt->req_sizes[s] >= 0; ++s)
_face = 0;
status = qFT_New_Memory_Face(font_ft2lib, (FT_Bytes)data, datasize, 0, (FT_Face*)&font->face);
}
+ font->data = data;
if (status)
{
Con_Printf("ERROR: can't create face for %s\n"
int Font_IndexForSize(ft2_font_t *font, float _fsize, float *outw, float *outh)
{
int match = -1;
- int value = 1000000;
- int nval;
+ float value = 1000000;
+ float nval;
int matchsize = -10000;
int m;
float fsize_x, fsize_y;
if (!maps[m])
continue;
// "round up" to the bigger size if two equally-valued matches exist
- nval = 0.5 * (abs(maps[m]->size - fsize_x) + abs(maps[m]->size - fsize_y));
+ nval = 0.5 * (fabs(maps[m]->size - fsize_x) + fabs(maps[m]->size - fsize_y));
if (match == -1 || nval < value || (nval == value && matchsize < maps[m]->size))
{
value = nval;
void Font_UnloadFont(ft2_font_t *font)
{
int i;
+
+ // unload fallbacks
+ if(font->next)
+ Font_UnloadFont(font->next);
+
if (font->attachments && font->attachmentcount)
{
- for (i = 0; i < font->attachmentcount; ++i) {
+ for (i = 0; i < (int)font->attachmentcount; ++i) {
if (font->attachments[i].data)
Mem_Free(font->attachments[i].data);
}
font->face = NULL;
}
}
+ if (font->data) {
+ Mem_Free(font->data);
+ font->data = NULL;
+ }
}
static float Font_SearchSize(ft2_font_t *font, FT_Face fontface, float size)