]> www.fi.muni.cz Git - evince.git/blob - pdf/xpdf/FTFont.h
Synched with Xpdf 1.01
[evince.git] / pdf / xpdf / FTFont.h
1 //========================================================================
2 //
3 // FTFont.h
4 //
5 // An X wrapper for the FreeType font rasterizer.
6 //
7 // Copyright 2001-2002 Glyph & Cog, LLC
8 //
9 //========================================================================
10
11 #ifndef FTFONT_H
12 #define FTFONT_H
13
14 #if FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)
15
16 #ifdef __GNUC__
17 #pragma interface
18 #endif
19
20 #include <freetype/freetype.h>
21 #include "CharTypes.h"
22 #include "SFont.h"
23
24 //------------------------------------------------------------------------
25
26 class FTFontEngine: public SFontEngine {
27 public:
28
29   FTFontEngine(Display *displayA, Visual *visualA, int depthA,
30                Colormap colormapA, GBool aaA);
31   GBool isOk() { return ok; }
32   virtual ~FTFontEngine();
33
34 private:
35
36   FT_Library lib;
37   GBool aa;
38   Gulong palette[5];
39   GBool ok;
40
41   friend class FTFontFile;
42   friend class FTFont;
43 };
44
45 //------------------------------------------------------------------------
46
47 enum FTFontIndexMode {
48   ftFontModeUnicode,
49   ftFontModeCharCode,
50   ftFontModeCharCodeOffset,
51   ftFontModeCodeMap,
52   ftFontModeCodeMapDirect,
53   ftFontModeCIDToGIDMap,
54   ftFontModeCFFCharset
55 };
56
57 class FTFontFile: public SFontFile {
58 public:
59
60   // 8-bit font, TrueType or Type 1/1C
61   FTFontFile(FTFontEngine *engineA, char *fontFileName,
62              char **fontEnc, GBool pdfFontHasEncoding);
63
64   // CID font, TrueType
65   FTFontFile(FTFontEngine *engineA, char *fontFileName,
66              Gushort *cidToGIDA, int cidToGIDLenA);
67
68   // CID font, Type 0C (CFF)
69   FTFontFile(FTFontEngine *engineA, char *fontFileName);
70
71   GBool isOk() { return ok; }
72   virtual ~FTFontFile();
73
74 private:
75
76   FTFontEngine *engine;
77   FT_Face face;
78   FTFontIndexMode mode;
79   int charMapOffset;
80   Guint *codeMap;
81   Gushort *cidToGID;
82   int cidToGIDLen;
83   GBool ok;
84
85   friend class FTFont;
86 };
87
88 //------------------------------------------------------------------------
89
90 struct FTFontCacheTag {
91   Gushort code;
92   Gushort mru;                  // valid bit (0x8000) and MRU index
93   int x, y, w, h;               // offset and size of glyph
94 };
95
96 class FTFont: public SFont {
97 public:
98
99   FTFont(FTFontFile *fontFileA, double *m);
100   GBool isOk() { return ok; }
101   virtual ~FTFont();
102   virtual GBool drawChar(Drawable d, int w, int h, GC gc,
103                          int x, int y, int r, int g, int b,
104                          CharCode c, Unicode u);
105   virtual GBool getCharPath(CharCode c, Unicode u, GfxState *state);
106
107 private:
108
109   Guchar *getGlyphPixmap(CharCode c, Unicode u,
110                          int *x, int *y, int *w, int *h);
111   static int charPathMoveTo(FT_Vector *pt, void *state);
112   static int charPathLineTo(FT_Vector *pt, void *state);
113   static int charPathConicTo(FT_Vector *ctrl, FT_Vector *pt, void *state);
114   static int charPathCubicTo(FT_Vector *ctrl1, FT_Vector *ctrl2,
115                              FT_Vector *pt, void *state);
116   FT_UInt getGlyphIndex(CharCode c, Unicode u);
117
118   FTFontFile *fontFile;
119   FT_Size sizeObj;
120   XImage *image;
121   FT_Matrix matrix;
122   int glyphW, glyphH;           // size of glyph pixmaps
123   int glyphSize;                // size of glyph pixmaps, in bytes
124   Guchar *cache;                // glyph pixmap cache
125   FTFontCacheTag *cacheTags;    // cache tags, i.e., char codes
126   int cacheSets;                // number of sets in cache
127   int cacheAssoc;               // cache associativity (glyphs per set)
128   GBool ok;
129 };
130
131 #endif // FREETYPE2 && (HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H)
132
133 #endif