1 //======================================================================== 2 // 3 // SplashFontEngine.h 4 // 5 // Copyright 2003-2013 Glyph & Cog, LLC 6 // 7 //======================================================================== 8 9 #ifndef SPLASHFONTENGINE_H 10 #define SPLASHFONTENGINE_H 11 12 #include <aconf.h> 13 14 #ifdef USE_GCC_PRAGMAS 15 #pragma interface 16 #endif 17 18 #include "gtypes.h" 19 class GString; 20 class GList; 21 22 class SplashFTFontEngine; 23 class SplashDTFontEngine; 24 class SplashDT4FontEngine; 25 class SplashFontFile; 26 class SplashFontFileID; 27 class SplashFont; 28 29 //------------------------------------------------------------------------ 30 31 #define splashFontCacheSize 16 32 33 #if HAVE_FREETYPE_H 34 #define splashFTNoHinting (1 << 0) 35 #endif 36 37 //------------------------------------------------------------------------ 38 // SplashFontEngine 39 //------------------------------------------------------------------------ 40 41 class SplashFontEngine { 42 public: 43 44 // Create a font engine. 45 SplashFontEngine( 46 #if HAVE_FREETYPE_H 47 GBool enableFreeType, 48 Guint freeTypeFlags, 49 #endif 50 GBool aa); 51 52 ~SplashFontEngine(); 53 54 // Get a font file from the cache. Returns NULL if there is no 55 // matching entry in the cache. 56 SplashFontFile *getFontFile(SplashFontFileID *id); 57 58 // Returns true if [id] refers to a bad font file, i.e., if one of 59 // the loadXXXFont functions has returned NULL for that ID. 60 GBool checkForBadFontFile(SplashFontFileID *id); 61 62 // Load fonts - these create new SplashFontFile objects. 63 SplashFontFile *loadType1Font(SplashFontFileID *idA, 64 #if LOAD_FONTS_FROM_MEM 65 GString *fontBuf, 66 #else 67 char *fileName, GBool deleteFile, 68 #endif 69 const char **enc); 70 SplashFontFile *loadType1CFont(SplashFontFileID *idA, 71 #if LOAD_FONTS_FROM_MEM 72 GString *fontBuf, 73 #else 74 char *fileName, GBool deleteFile, 75 #endif 76 int *codeToGID, const char **enc); 77 SplashFontFile *loadOpenTypeT1CFont(SplashFontFileID *idA, 78 #if LOAD_FONTS_FROM_MEM 79 GString *fontBuf, 80 #else 81 char *fileName, GBool deleteFile, 82 #endif 83 int *codeToGID, const char **enc); 84 SplashFontFile *loadCIDFont(SplashFontFileID *idA, 85 #if LOAD_FONTS_FROM_MEM 86 GString *fontBuf, 87 #else 88 char *fileName, GBool deleteFile, 89 #endif 90 int *codeToGID, int codeToGIDLen); 91 SplashFontFile *loadOpenTypeCFFFont(SplashFontFileID *idA, 92 #if LOAD_FONTS_FROM_MEM 93 GString *fontBuf, 94 #else 95 char *fileName, GBool deleteFile, 96 #endif 97 int *codeToGID, int codeToGIDLen); 98 SplashFontFile *loadTrueTypeFont(SplashFontFileID *idA, 99 #if LOAD_FONTS_FROM_MEM 100 GString *fontBuf, 101 #else 102 char *fileName, GBool deleteFile, 103 #endif 104 int fontNum, 105 int *codeToGID, int codeToGIDLen, 106 char *fontName); 107 108 // Get a font - this does a cache lookup first, and if not found, 109 // creates a new SplashFont object and adds it to the cache. The 110 // matrix, mat = textMat * ctm: 111 // [ mat[0] mat[1] ] 112 // [ mat[2] mat[3] ] 113 // specifies the font transform in PostScript style: 114 // [x' y'] = [x y] * mat 115 // Note that the Splash y axis points downward. 116 SplashFont *getFont(SplashFontFile *fontFile, 117 SplashCoord *textMat, SplashCoord *ctm); 118 119 private: 120 121 SplashFont *fontCache[splashFontCacheSize]; 122 GList *badFontFiles; // [SplashFontFileID] 123 124 #if HAVE_FREETYPE_H 125 SplashFTFontEngine *ftEngine; 126 #endif 127 }; 128 129 #endif 130