# fontcache.h

Go to the documentation of this file.

    00001 /* $Id: fontcache.h 25502 2013-06-28 19:44:28Z rubidium $ */
    00002
    00003 /*
    00004  * This file is part of OpenTTD.
    00005  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
    00006  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    00007  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
    00008  */
    00009
    00012 #ifndef FONTCACHE_H
    00013 #define FONTCACHE_H
    00014
    00015 #include "string_type.h"
    00016 #include "spritecache.h"
    00017
    00019 typedef uint32 GlyphID;
    00020 static const GlyphID SPRITE_GLYPH = 1U << 30;
    00021
    00023 class FontCache {
    00024 private:
    00025   static FontCache *caches[FS_END];
    00026 protected:
    00027   FontCache *parent;
    00028   const FontSize fs;
    00029   int height;
    00030   int ascender;
    00031   int descender;
    00032   int units_per_em;
    00033 public:
    00034   FontCache(FontSize fs);
    00035   virtual ~FontCache();
    00036
    00041   inline FontSize GetSize() const { return this->fs; }
    00042
    00047   inline int GetHeight() const { return this->height; }
    00048
    00053   inline int GetAscender() const { return this->ascender; }
    00054
    00059   inline int GetDescender() const{ return this->descender; }
    00060
    00065   inline int GetUnitsPerEM() const { return this->units_per_em; }
    00066
    00072   virtual SpriteID GetUnicodeGlyph(WChar key) = 0;
    00073
    00079   virtual void SetUnicodeGlyph(WChar key, SpriteID sprite) = 0;
    00080
    00082   virtual void InitializeUnicodeGlyphMap() = 0;
    00083
    00085   virtual void ClearFontCache() = 0;
    00086
    00092   virtual const Sprite *GetGlyph(GlyphID key) = 0;
    00093
    00099   virtual uint GetGlyphWidth(GlyphID key) = 0;
    00100
    00105   virtual bool GetDrawGlyphShadow() = 0;
    00106
    00112   virtual GlyphID MapCharToGlyph(WChar key) = 0;
    00113
    00120   virtual const void *GetFontTable(uint32 tag, size_t &length) = 0;
    00121
    00127   static inline FontCache *Get(FontSize fs)
    00128   {
    00129     assert(fs < FS_END);
    00130     return FontCache::caches[fs];
    00131   }
    00132
    00136   inline bool HasParent()
    00137   {
    00138     return this->parent != NULL;
    00139   }
    00140 };
    00141
    00143 static inline SpriteID GetUnicodeGlyph(FontSize size, WChar key)
    00144 {
    00145   return FontCache::Get(size)->GetUnicodeGlyph(key);
    00146 }
    00147
    00149 static inline void SetUnicodeGlyph(FontSize size, WChar key, SpriteID sprite)
    00150 {
    00151   FontCache::Get(size)->SetUnicodeGlyph(key, sprite);
    00152 }
    00153
    00155 static inline void InitializeUnicodeGlyphMap()
    00156 {
    00157   for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
    00158     FontCache::Get(fs)->InitializeUnicodeGlyphMap();
    00159   }
    00160 }
    00161
    00162 static inline void ClearFontCache() {
    00163   for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
    00164     FontCache::Get(fs)->ClearFontCache();
    00165   }
    00166 }
    00167
    00169 static inline const Sprite *GetGlyph(FontSize size, WChar key)
    00170 {
    00171   FontCache *fc = FontCache::Get(size);
    00172   return fc->GetGlyph(fc->MapCharToGlyph(key));
    00173 }
    00174
    00176 static inline uint GetGlyphWidth(FontSize size, WChar key)
    00177 {
    00178   FontCache *fc = FontCache::Get(size);
    00179   return fc->GetGlyphWidth(fc->MapCharToGlyph(key));
    00180 }
    00181
    00182 static inline bool GetDrawGlyphShadow(FontSize size)
    00183 {
    00184   return FontCache::Get(size)->GetDrawGlyphShadow();
    00185 }
    00186
    00187 #ifdef WITH_FREETYPE
    00188
    00190 struct FreeTypeSubSetting {
    00191   char font[MAX_PATH];
    00192   uint size;
    00193   bool aa;
    00194 };
    00195
    00197 struct FreeTypeSettings {
    00198   FreeTypeSubSetting small;
    00199   FreeTypeSubSetting medium;
    00200   FreeTypeSubSetting large;
    00201   FreeTypeSubSetting mono;
    00202 };
    00203
    00204 extern FreeTypeSettings _freetype;
    00205
    00206 #endif /* WITH_FREETYPE */
    00207
    00208 void InitFreeType(bool monospace);
    00209 void UninitFreeType();
    00210
    00211 #endif /* FONTCACHE_H */