1 //========================================================================
5 // An X wrapper for the FreeType font rasterizer.
7 // Copyright 2001-2002 Glyph & Cog, LLC
9 //========================================================================
16 #if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)
18 #ifdef USE_GCC_PRAGMAS
22 #include <freetype/freetype.h>
23 #include "CharTypes.h"
26 //------------------------------------------------------------------------
28 class FTFontEngine: public SFontEngine {
31 FTFontEngine(Display *displayA, Visual *visualA, int depthA,
32 Colormap colormapA, GBool aaA);
33 GBool isOk() { return ok; }
34 virtual ~FTFontEngine();
43 friend class FTFontFile;
47 //------------------------------------------------------------------------
49 enum FTFontIndexMode {
52 ftFontModeCharCodeOffset,
54 ftFontModeCodeMapDirect,
55 ftFontModeCIDToGIDMap,
60 class FTFontFile: public SFontFile {
63 // 8-bit font, TrueType or Type 1/1C
64 FTFontFile(FTFontEngine *engineA, char *fontFileName,
65 char **fontEnc, GBool pdfFontHasEncoding);
68 FTFontFile(FTFontEngine *engineA, char *fontFileName,
69 Gushort *cidToGIDA, int cidToGIDLenA);
71 // CID font, Type 0C (CFF)
72 FTFontFile(FTFontEngine *engineA, char *fontFileName);
74 GBool isOk() { return ok; }
75 virtual ~FTFontFile();
91 //------------------------------------------------------------------------
93 struct FTFontCacheTag {
95 Gushort mru; // valid bit (0x8000) and MRU index
96 int x, y, w, h; // offset and size of glyph
99 class FTFont: public SFont {
102 FTFont(FTFontFile *fontFileA, double *m);
103 GBool isOk() { return ok; }
105 virtual GBool drawChar(Drawable d, int w, int h, GC gc,
106 int x, int y, int r, int g, int b,
107 CharCode c, Unicode u);
108 virtual GBool getCharPath(CharCode c, Unicode u, GfxState *state);
112 Guchar *getGlyphPixmap(CharCode c, Unicode u,
113 int *x, int *y, int *w, int *h);
114 static int charPathMoveTo(FT_Vector *pt, void *state);
115 static int charPathLineTo(FT_Vector *pt, void *state);
116 static int charPathConicTo(FT_Vector *ctrl, FT_Vector *pt, void *state);
117 static int charPathCubicTo(FT_Vector *ctrl1, FT_Vector *ctrl2,
118 FT_Vector *pt, void *state);
119 FT_UInt getGlyphIndex(CharCode c, Unicode u);
121 FTFontFile *fontFile;
125 int glyphW, glyphH; // size of glyph pixmaps
126 int glyphSize; // size of glyph pixmaps, in bytes
127 Guchar *cache; // glyph pixmap cache
128 FTFontCacheTag *cacheTags; // cache tags, i.e., char codes
129 int cacheSets; // number of sets in cache
130 int cacheAssoc; // cache associativity (glyphs per set)
134 #endif // FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)