summaryrefslogtreecommitdiff
path: root/fontcache.c
diff options
context:
space:
mode:
authorDarkvater <Darkvater@openttd.org>2006-12-04 18:57:09 +0000
committerDarkvater <Darkvater@openttd.org>2006-12-04 18:57:09 +0000
commit0e465359c503ccc45396651ad9f5dc51601ae32b (patch)
treed89ee766e4c25147eced6d3e2eb68ff310196f3a /fontcache.c
parent9812cefbe935ce5dfb93cb5d37b72f9cf88a50d6 (diff)
downloadopenttd-0e465359c503ccc45396651ad9f5dc51601ae32b.tar.xz
(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.
Diffstat (limited to 'fontcache.c')
-rw-r--r--fontcache.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/fontcache.c b/fontcache.c
index 4ad0e68ae..df52b4b73 100644
--- a/fontcache.c
+++ b/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);
}