From e8d76e79ee8b58d9947c05eb9dcb53c3d0b4ec19 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 25 Mar 2009 20:01:34 +0000 Subject: (svn r15849) -Codechange: provide easy access to the real height of the used fonts --- src/fontcache.cpp | 29 ++++++++++++++++++++++++++--- src/fontcache.h | 6 ++++-- src/gfx.cpp | 2 +- src/gfx_func.h | 13 +++++++------ 4 files changed, 38 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/fontcache.cpp b/src/fontcache.cpp index ac9adffc5..287a281d0 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -27,6 +27,9 @@ static FT_Face _face_small = NULL; static FT_Face _face_medium = NULL; static FT_Face _face_large = NULL; +/** Semi-constant for the height of the different sizes of fonts. */ +int _font_height[FS_END]; + FreeTypeSettings _freetype; enum { @@ -529,6 +532,8 @@ static void LoadFreeTypeFont(const char *font_name, FT_Face *face, const char *t void InitFreeType() { + ResetFontSizes(); + if (StrEmpty(_freetype.small_font) && StrEmpty(_freetype.medium_font) && StrEmpty(_freetype.large_font)) { DEBUG(freetype, 1, "No font faces specified, using sprite fonts instead"); return; @@ -547,9 +552,18 @@ void InitFreeType() LoadFreeTypeFont(_freetype.large_font, &_face_large, "large"); /* Set each font size */ - if (_face_small != NULL) FT_Set_Pixel_Sizes(_face_small, 0, _freetype.small_size); - if (_face_medium != NULL) FT_Set_Pixel_Sizes(_face_medium, 0, _freetype.medium_size); - if (_face_large != NULL) FT_Set_Pixel_Sizes(_face_large, 0, _freetype.large_size); + if (_face_small != NULL) { + FT_Set_Pixel_Sizes(_face_small, 0, _freetype.small_size); + _font_height[FS_SMALL] = _freetype.small_size; + } + if (_face_medium != NULL) { + FT_Set_Pixel_Sizes(_face_medium, 0, _freetype.medium_size); + _font_height[FS_NORMAL] = _freetype.medium_size; + } + if (_face_large != NULL) { + FT_Set_Pixel_Sizes(_face_large, 0, _freetype.large_size); + _font_height[FS_LARGE] = _freetype.large_size; + } } static void ResetGlyphCache(); @@ -571,6 +585,7 @@ static void UnloadFace(FT_Face *face) */ void UninitFreeType() { + ResetFontSizes(); ResetGlyphCache(); UnloadFace(&_face_small); @@ -783,6 +798,14 @@ uint GetGlyphWidth(FontSize size, WChar key) #endif /* WITH_FREETYPE */ +/** Reset the font sizes to the defaults of the sprite based fonts. */ +void ResetFontSizes() +{ + _font_height[FS_SMALL] = 6; + _font_height[FS_NORMAL] = 10; + _font_height[FS_LARGE] = 18; +} + /* Sprite based glyph mapping */ #include "table/unicode.h" diff --git a/src/fontcache.h b/src/fontcache.h index e72fc8225..3ff4b256f 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -16,6 +16,8 @@ void SetUnicodeGlyph(FontSize size, uint32 key, SpriteID sprite); /** Initialize the glyph map */ void InitializeUnicodeGlyphMap(); +void ResetFontSizes(); + #ifdef WITH_FREETYPE struct FreeTypeSettings { @@ -51,8 +53,8 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i #else /* Stub for initializiation */ -static inline void InitFreeType() {} -static inline void UninitFreeType() {} +static inline void InitFreeType() { ResetFontSizes(); } +static inline void UninitFreeType() { ResetFontSizes(); } /** Get the Sprite for a glyph */ static inline const Sprite *GetGlyph(FontSize size, uint32 key) diff --git a/src/gfx.cpp b/src/gfx.cpp index c334d24db..4880ffd08 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -816,7 +816,7 @@ static int ReallyDoDrawString(const char *string, int x, int y, TextColour colou * So if the string cannot be drawn, return the original start to say so.*/ if (x >= dpi->left + dpi->width || y >= dpi->top + dpi->height) return x; - if (colour != TC_INVALID) { // the invalid colour flag test should not really occur. But better be safe + if (colour != TC_INVALID) { // the invalid colour flag test should not really occur. But better be safe switch_colour:; SetColourRemap(colour); } diff --git a/src/gfx_func.h b/src/gfx_func.h index 139056df3..ceecc45e8 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -158,14 +158,15 @@ byte GetCharacterWidth(FontSize size, uint32 key); */ static inline byte GetCharacterHeight(FontSize size) { - switch (size) { - default: NOT_REACHED(); - case FS_NORMAL: return 10; - case FS_SMALL: return 6; - case FS_LARGE: return 18; - } + assert(size < FS_END); + extern int _font_height[FS_END]; + return _font_height[size]; } +#define FONT_HEIGHT_SMALL (GetCharacterHeight(FS_SMALL)) +#define FONT_HEIGHT_NORMAL (GetCharacterHeight(FS_NORMAL)) +#define FONT_HEIGHT_LARGE (GetCharacterHeight(FS_LARGE)) + extern DrawPixelInfo *_cur_dpi; /** -- cgit v1.2.3-54-g00ecf