summaryrefslogtreecommitdiff
path: root/src/fontcache.cpp
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2011-10-18 17:57:42 +0000
committerpeter1138 <peter1138@openttd.org>2011-10-18 17:57:42 +0000
commitf0ef9a09ff125e1dc737d1dd74cefbadbc9918f3 (patch)
tree79e88063056698775ec6bd727baa3ff896715d1a /src/fontcache.cpp
parent7f90fcb5e6411bc5aa3ef2e3d99463d37d4a082b (diff)
downloadopenttd-f0ef9a09ff125e1dc737d1dd74cefbadbc9918f3.tar.xz
(svn r23038) -Fix: Check that the selected font size is valid the font face in use and choose the nearest size to that selected if not. Font metrics should then just work.
Diffstat (limited to 'src/fontcache.cpp')
-rw-r--r--src/fontcache.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 8b00ab5cc..820287caf 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -746,18 +746,25 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
static void SetFontGeometry(FT_Face face, FontSize size, int pixels)
{
- FT_Set_Pixel_Sizes(face, 0, pixels);
-
- if (FT_IS_SCALABLE(face)) {
- int asc = face->ascender * pixels / face->units_per_EM;
- int dec = face->descender * pixels / face->units_per_EM;
+ FT_Error err = FT_Set_Pixel_Sizes(face, 0, pixels);
+ if (err == FT_Err_Invalid_Pixel_Size) {
+
+ /* Find nearest size to that requested */
+ FT_Bitmap_Size *bs = face->available_sizes;
+ int i = face->num_fixed_sizes;
+ int n = bs->height;
+ for (; --i; bs++) {
+ if (abs(pixels - bs->height) < abs(pixels - n)) n = bs->height;
+ }
- _ascender[size] = asc;
- _font_height[size] = asc - dec;
- } else {
- _ascender[size] = pixels;
- _font_height[size] = pixels;
+ FT_Set_Pixel_Sizes(face, 0, n);
}
+
+ int asc = face->size->metrics.ascender >> 6;
+ int dec = face->size->metrics.descender >> 6;
+
+ _ascender[size] = asc;
+ _font_height[size] = asc - dec;
}
/**