mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7362) -Fix (r7337): Free the freetype face after any possible error. For win32 do not use the
last font in the registry if no suitable font is found.
This commit is contained in:
parent
34a92a6bf7
commit
43eb27c7a1
11
fontcache.c
11
fontcache.c
|
@ -68,7 +68,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
|||
DWORD dbuflen = lengthof(dbuffer);
|
||||
|
||||
ret = RegEnumValue(hKey, index, vbuffer, &vbuflen, NULL, NULL, dbuffer, &dbuflen);
|
||||
if (ret != ERROR_SUCCESS) break;
|
||||
if (ret != ERROR_SUCCESS) goto registry_no_font_found;
|
||||
|
||||
/* The font names in the registry are of the following 3 forms:
|
||||
* - ADMUI3.fon
|
||||
|
@ -97,7 +97,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
|||
/* Some fonts are contained in .ttc files, TrueType Collection fonts. These
|
||||
* contain multiple fonts inside this single file. GetFontData however
|
||||
* returns the whole file, so we need to check each font inside to get the
|
||||
* proper font. If not found, we will use the last font in the ttc.
|
||||
* proper font.
|
||||
* Also note that FreeType does not support UNICODE filesnames! */
|
||||
#if defined(UNICODE)
|
||||
font_path = malloc(MAX_PATH);
|
||||
|
@ -123,6 +123,7 @@ static FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
|||
#endif
|
||||
|
||||
folder_error:
|
||||
registry_no_font_found:
|
||||
RegCloseKey(hKey);
|
||||
return err;
|
||||
}
|
||||
|
@ -241,11 +242,11 @@ static void LoadFreeTypeFont(const char *font_name, FT_Face *face, const char *t
|
|||
if (error == FT_Err_Ok) return;
|
||||
}
|
||||
}
|
||||
|
||||
FT_Done_Face(*face);
|
||||
*face = NULL;
|
||||
}
|
||||
|
||||
FT_Done_Face(*face);
|
||||
*face = NULL;
|
||||
|
||||
ShowInfoF("Unable to use '%s' for %s font, FreeType reported error 0x%X, using sprite font instead", font_name, type, error);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue