source: trunk/poppler/mypoppler/splash/SplashFTFontFile.cc @ 2

Last change on this file since 2 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 3.1 KB
Line 
1//========================================================================
2//
3// SplashFTFontFile.cc
4//
5//========================================================================
6
7#include <config.h>
8
9#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H
10
11#ifdef USE_GCC_PRAGMAS
12#pragma implementation
13#endif
14
15#include "goo/gmem.h"
16#include "goo/GooString.h"
17#include "SplashFTFontEngine.h"
18#include "SplashFTFont.h"
19#include "SplashFTFontFile.h"
20
21//------------------------------------------------------------------------
22// SplashFTFontFile
23//------------------------------------------------------------------------
24
25SplashFontFile *SplashFTFontFile::loadType1Font(SplashFTFontEngine *engineA,
26                                                SplashFontFileID *idA,
27                                                SplashFontSrc *src,
28                                                char **encA) {
29  FT_Face faceA;
30  Gushort *codeToGIDA;
31  char *name;
32  int i;
33
34  if (src->isFile) {
35    if (FT_New_Face(engineA->lib, src->fileName->getCString(), 0, &faceA))
36      return NULL;
37  } else {
38    if (FT_New_Memory_Face(engineA->lib, (const FT_Byte *)src->buf, src->bufLen, 0, &faceA))
39      return NULL;
40  }
41  codeToGIDA = (Gushort *)gmallocn(256, sizeof(int));
42  for (i = 0; i < 256; ++i) {
43    codeToGIDA[i] = 0;
44    if ((name = encA[i])) {
45      codeToGIDA[i] = (Gushort)FT_Get_Name_Index(faceA, name);
46    }
47  }
48
49  return new SplashFTFontFile(engineA, idA, src,
50                              faceA, codeToGIDA, 256);
51}
52
53SplashFontFile *SplashFTFontFile::loadCIDFont(SplashFTFontEngine *engineA,
54                                              SplashFontFileID *idA,
55                                              SplashFontSrc *src,
56                                              Gushort *codeToGIDA,
57                                              int codeToGIDLenA) {
58  FT_Face faceA;
59
60  if (src->isFile) {
61    if (FT_New_Face(engineA->lib, src->fileName->getCString(), 0, &faceA))
62      return NULL;
63  } else {
64    if (FT_New_Memory_Face(engineA->lib, (const FT_Byte *)src->buf, src->bufLen, 0, &faceA))
65      return NULL;
66  }
67
68  return new SplashFTFontFile(engineA, idA, src,
69                              faceA, codeToGIDA, codeToGIDLenA);
70}
71
72SplashFontFile *SplashFTFontFile::loadTrueTypeFont(SplashFTFontEngine *engineA,
73                                                   SplashFontFileID *idA,
74                                                   SplashFontSrc *src,
75                                                   Gushort *codeToGIDA,
76                                                   int codeToGIDLenA,
77                                                   int faceIndexA) {
78  FT_Face faceA;
79
80  if (src->isFile) {
81    if (FT_New_Face(engineA->lib, src->fileName->getCString(), faceIndexA, &faceA))
82      return NULL;
83  } else {
84    if (FT_New_Memory_Face(engineA->lib, (const FT_Byte *)src->buf, src->bufLen, faceIndexA, &faceA))
85      return NULL;
86  }
87
88  return new SplashFTFontFile(engineA, idA, src,
89                              faceA, codeToGIDA, codeToGIDLenA);
90}
91
92SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA,
93                                   SplashFontFileID *idA,
94                                   SplashFontSrc *srcA,
95                                   FT_Face faceA,
96                                   Gushort *codeToGIDA, int codeToGIDLenA):
97  SplashFontFile(idA, srcA)
98{
99  engine = engineA;
100  face = faceA;
101  codeToGID = codeToGIDA;
102  codeToGIDLen = codeToGIDLenA;
103}
104
105SplashFTFontFile::~SplashFTFontFile() {
106  if (face) {
107    FT_Done_Face(face);
108  }
109  if (codeToGID) {
110    gfree(codeToGID);
111  }
112}
113
114SplashFont *SplashFTFontFile::makeFont(SplashCoord *mat) {
115  SplashFont *font;
116
117  font = new SplashFTFont(this, mat);
118  font->initCache();
119  return font;
120}
121
122#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H
Note: See TracBrowser for help on using the repository browser.