summaryrefslogtreecommitdiff
blob: 18b80281e5bbd7f341391d66cfe973b0e92602fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
This patch is from
https://bugzilla.mozilla.org/show_bug.cgi?id=234035#c65 to enable
linking against freetype-2.1.8+.  It disables the experimental
freetype caching.  I modified this patch slightly to apply to 1.7.3;
some things had moved around in the files since the original patch.

Note this is the same patch as we apply to mozilla-firefox-1.0

15 Nov 2004 agriffis

--- gfx/idl/nsIFreeType2.idl.agriffis	2004-04-15 21:09:33.000000000 -0400
+++ gfx/idl/nsIFreeType2.idl	2004-11-15 13:29:05.120343408 -0500
@@ -98,8 +98,6 @@
 {
 
     readonly attribute FT_Library library;
-    readonly attribute FTC_Manager FTCacheManager;
-    readonly attribute FTC_Image_Cache ImageCache;
 
     void    doneFace(in FT_Face face);
     void    doneFreeType(in FT_Library lib);
@@ -114,17 +112,8 @@
                     in FT_Long face_num, out FT_Face face);
     void    outlineDecompose(in FT_Outline_p outline,
                              in const_FT_Outline_Funcs_p funcs, in voidPtr p);
+    void    setPixelSizes(in FT_Face face, in FT_UInt width, in FT_UInt height); 
     void    setCharmap(in FT_Face face, in FT_CharMap charmap);
-    void    imageCacheLookup(in FTC_Image_Cache cache, in FTC_Image_Desc_p desc,
-                             in FT_UInt gindex, out FT_Glyph glyph);
-    void    managerLookupSize(in FTC_Manager manager, in FTC_Font font,
-                              out FT_Face face, out FT_Size size);
-    void    managerDone(in FTC_Manager manager);
-    void    managerNew(in FT_Library lib, in FT_UInt max_faces,
-                       in FT_UInt max_sizes, in FT_ULong max_bytes,
-                       in FTC_Face_Requester requester, in FT_Pointer req_data,
-                       out FTC_Manager manager);
-    void    imageCacheNew(in FTC_Manager manager, out FTC_Image_Cache cache);
 /* #ifdef MOZ_SVG */
     void glyphTransform(in FT_Glyph glyph, in FT_Matrix_p matrix,
                         in FT_Vector_p delta);
--- gfx/src/ps/nsFontMetricsPS.h.agriffis	2003-04-22 12:25:09.000000000 -0400
+++ gfx/src/ps/nsFontMetricsPS.h	2004-11-15 13:37:58.431267824 -0500
@@ -320,7 +320,8 @@
   nsCOMPtr<nsITrueTypeFontCatalogEntry> mFaceID;
   nsCOMPtr<nsIFreeType2> mFt2;
   PRUint16        mPixelSize;
-  FTC_Image_Desc  mImageDesc;
+  FT_Face         mFace; 
+  FT_Library      mFreeTypeLibrary;
 
 
   static PRBool AddUserPref(nsIAtom *aLang, const nsFont& aFont,
@@ -363,7 +364,8 @@
 protected:
   nsCOMPtr<nsITrueTypeFontCatalogEntry> mEntry;
   nsCOMPtr<nsIFreeType2> mFt2;
-  FTC_Image_Desc  mImageDesc;
+  FT_Face         mFace; 
+  FT_Library      mFreeTypeLibrary;
 };
 #endif
 
--- gfx/src/ps/nsFontMetricsPS.cpp.agriffis	2004-02-04 20:57:05.000000000 -0500
+++ gfx/src/ps/nsFontMetricsPS.cpp	2004-11-15 13:29:05.123342952 -0500
@@ -1141,21 +1141,26 @@
   
   mPixelSize = NSToIntRound(app2dev * mFont->size);
 
-  mImageDesc.font.face_id    = (void*)mEntry;
-  mImageDesc.font.pix_width  = mPixelSize;
-  mImageDesc.font.pix_height = mPixelSize;
-  mImageDesc.image_type = 0;
-
   nsresult rv;
   mFt2 = do_GetService(NS_FREETYPE2_CONTRACTID, &rv);
   if (NS_FAILED(rv)) {
+    NS_ERROR("failed to get ft2 service");
+    return NS_ERROR_FAILURE;
+  }
+
+  if (NS_FAILED(mFt2->GetLibrary(&mFreeTypeLibrary))) {
+    NS_ERROR("failed to get ft2 library");
     return NS_ERROR_FAILURE;
   }
+
+  mFace = nsnull; 
   return NS_OK;
 }
 
 nsFontPSFreeType::~nsFontPSFreeType()
 {
+  if (mFace) 
+    mFt2->DoneFace(mFace);
   mEntry = nsnull;
 }
 
@@ -1180,32 +1185,26 @@
 nscoord
 nsFontPSFreeType::GetWidth(const PRUnichar* aString, PRUint32 aLength)
 {
-  FT_UInt glyph_index;
-  FT_Glyph glyph;
-  double origin_x = 0;
-
   // get the face/size from the FreeType cache
   FT_Face face = getFTFace();
   NS_ASSERTION(face, "failed to get face/size");
   if (!face)
     return 0;
 
-  FTC_Image_Cache iCache;
-  nsresult rv = mFt2->GetImageCache(&iCache);
-  if (NS_FAILED(rv)) {
-    NS_ERROR("Failed to get Image Cache");
-    return 0;
-  }
+  FT_UInt glyph_index;
+  FT_Glyph glyph;
+  double origin_x = 0;
 
+  // XXX : we might need some caching here
   for (PRUint32 i=0; i<aLength; i++) {
-    mFt2->GetCharIndex((FT_Face)face, aString[i], &glyph_index);
-    nsresult rv = mFt2->ImageCacheLookup(iCache, &mImageDesc,
-                                         glyph_index, &glyph);
-    if (NS_FAILED(rv)) {
+    mFt2->GetCharIndex(face, aString[i], &glyph_index);
+    if (NS_FAILED(mFt2->LoadGlyph(face, glyph_index, FT_LOAD_DEFAULT)) ||
+        NS_FAILED(mFt2->GetGlyph(face->glyph, &glyph))) {     
       origin_x += FT_REG_TO_16_16(face->size->metrics.x_ppem/2 + 2);
       continue;
     }
     origin_x += glyph->advance.x;
+    mFt2->DoneGlyph(glyph);
   }
 
   NS_ENSURE_TRUE(mFontMetrics, 0);
@@ -1224,16 +1223,26 @@
 FT_Face
 nsFontPSFreeType::getFTFace()
 {
-  FT_Face face = nsnull;
-  
-  FTC_Manager cManager;
-  mFt2->GetFTCacheManager(&cManager);
-  nsresult rv = mFt2->ManagerLookupSize(cManager, &mImageDesc.font,
-                                        &face, nsnull);
+  if (mFace) return mFace;
+
+  nsCAutoString fileName;
+  PRInt16       faceIndex; 
+  mEntry->GetFileName(fileName);
+  mEntry->GetFaceIndex(&faceIndex);
+
+  nsresult rv = 
+    mFt2->NewFace(mFreeTypeLibrary, fileName.get(), faceIndex, &mFace);
+
   NS_ASSERTION(rv==0, "failed to get face/size");
-  if (rv)
-    return nsnull;
-  return face;
+  if (NS_FAILED(rv)) {
+    return nsnull; 
+  }
+
+  if (NS_FAILED(mFt2->SetPixelSizes(mFace, mPixelSize, 0))) {
+    return nsnull; 
+  }
+
+  return mFace; 
 }
 
 nscoord
@@ -1618,26 +1627,23 @@
 
 void nsFT2Type8Generator::GeneratePSFont(FILE* aFile)
 {
-  nsCAutoString fontName, styleName;
-  mEntry->GetFamilyName(fontName);
-  mEntry->GetStyleName(styleName);
-  
-  mImageDesc.font.face_id    = (void*)mEntry;
-  // TT glyph has no relation to size
-  mImageDesc.font.pix_width  = 16;
-  mImageDesc.font.pix_height = 16;
-  mImageDesc.image_type = 0;
-  FT_Face face = nsnull;
-  FTC_Manager cManager;
-  mFt2->GetFTCacheManager(&cManager);
-  nsresult rv = mFt2->ManagerLookupSize(cManager, &mImageDesc.font,
-                                        &face, nsnull);
-  if (NS_FAILED(rv))
-    return;
+  if (mFace == nsnull) {
+    nsCAutoString fileName;
+    PRInt16       faceIndex; 
+
+    mEntry->GetFileName(fileName);
+    mEntry->GetFaceIndex(&faceIndex);
+    if (NS_FAILED(mFt2->
+          NewFace(mFreeTypeLibrary, fileName.get(), faceIndex, &mFace))) {
+      return;
+    }
+    NS_ASSERTION(mFace != nsnull, "mFace is null");
+  }
+
  
   int wmode = 0;
   if (!mSubset.IsEmpty())
-    FT2SubsetToType8(face, mSubset.get(), mSubset.Length(), wmode, aFile);
+    FT2SubsetToType8(mFace, mSubset.get(), mSubset.Length(), wmode, aFile);
 }
 #endif //MOZ_ENABLE_FREETYPE2
 
--- gfx/src/x11shared/nsFontFreeType.cpp.agriffis	2003-12-25 03:24:52.000000000 -0500
+++ gfx/src/x11shared/nsFontFreeType.cpp	2004-11-15 13:29:05.125342648 -0500
@@ -173,15 +173,22 @@
 FT_Face
 nsFreeTypeFont::getFTFace()
 {
-  FT_Face face = nsnull;
-  FTC_Manager mgr;
+  if (mFace) return mFace;
+
+  nsCAutoString fileName;
+  PRInt16       faceIndex; 
+  mFaceID->GetFileName(fileName);
+  mFaceID->GetFaceIndex(&faceIndex);
+
   nsresult rv;
-  mFt2->GetFTCacheManager(&mgr);
-  rv = mFt2->ManagerLookupSize(mgr, &mImageDesc.font, &face, nsnull);
+  rv = mFt2->NewFace(mFreeTypeLibrary, fileName.get(), faceIndex, &mFace);
   NS_ASSERTION(NS_SUCCEEDED(rv), "failed to get face/size");
   if (NS_FAILED(rv))
     return nsnull;
-  return face;
+  rv = mFt2->SetPixelSizes(mFace, mPixelSize, 0);
+  if (NS_FAILED(rv))
+    return nsnull;
+  return mFace;
 }
 
 nsFreeTypeFont::nsFreeTypeFont(nsITrueTypeFontCatalogEntry *aFaceID,
@@ -191,21 +198,20 @@
   PRBool embedded_bimap = PR_FALSE;
   mFaceID = aFaceID;
   mPixelSize = aPixelSize;
-  mImageDesc.font.face_id    = (void*)mFaceID;
-  mImageDesc.font.pix_width  = aPixelSize;
-  mImageDesc.font.pix_height = aPixelSize;
-  mImageDesc.image_type = 0;
+//mLoadFlag = FT_LOAD_RENDER;
+  mLoadFlag = 0;
+  mFace = nsnull;
 
   if (aPixelSize < nsFreeType2::gAntiAliasMinimum) {
-    mImageDesc.image_type |= ftc_image_mono;
+    mLoadFlag |= FT_LOAD_MONOCHROME; 
     anti_alias = PR_FALSE;
   }
 
   if (nsFreeType2::gFreeType2Autohinted)
-    mImageDesc.image_type |= ftc_image_flag_autohinted;
+    mLoadFlag |= FT_LOAD_FORCE_AUTOHINT;
 
   if (nsFreeType2::gFreeType2Unhinted)
-    mImageDesc.image_type |= ftc_image_flag_unhinted;
+    mLoadFlag |= FT_LOAD_NO_HINTING;
 
   PRUint32  num_embedded_bitmaps, i;
   PRInt32*  embedded_bitmapheights;
@@ -218,7 +224,7 @@
         if (embedded_bitmapheights[i] == aPixelSize) {
           embedded_bimap = PR_TRUE;
           // unhinted must be set for embedded bitmaps to be used
-          mImageDesc.image_type |= ftc_image_flag_unhinted;
+          mLoadFlag |= FT_LOAD_NO_HINTING;
           break;
         }
       }
@@ -230,6 +236,11 @@
   mFt2 = do_GetService(NS_FREETYPE2_CONTRACTID, &rv);
   NS_ASSERTION(NS_SUCCEEDED(rv), "failed to find FreeType routines");
 
+  if (mFt2) {
+    rv = mFt2->GetLibrary(&mFreeTypeLibrary); 
+    NS_ASSERTION(NS_SUCCEEDED(rv), "failed to find FreeType library");
+  }
+
   FREETYPE_FONT_PRINTF(("anti_alias=%d, embedded_bitmap=%d, "
                         "AutoHinted=%d, gFreeType2Unhinted = %d, "
                         "size=%dpx, \"%s\"",
@@ -288,8 +299,6 @@
                                      PRInt32* aDescent,
                                      PRInt32* aWidth)
 {
-  nsresult rv;
-
   *aLeftBearing = 0;
   *aRightBearing = 0;
   *aAscent = 0;
@@ -312,11 +321,6 @@
   if (!face)
     return NS_ERROR_FAILURE;
 
-  FTC_Image_Cache icache;
-  mFt2->GetImageCache(&icache);
-  if (!icache)
-    return NS_ERROR_FAILURE;
-
   // get the text size
   PRUint32 i, extraSurrogateLength;
   for (i=0; i<aLength; i+=1+extraSurrogateLength) {
@@ -337,16 +341,17 @@
     }
     mFt2->GetCharIndex(face, code_point, &glyph_index);
 
-    //NS_ASSERTION(glyph_index,"failed to get glyph");
-    if (glyph_index) {
-      rv = mFt2->ImageCacheLookup(icache, &mImageDesc, glyph_index, &glyph);
-      NS_ASSERTION(NS_SUCCEEDED(rv),"error loading glyph");
-    }
-    if ((glyph_index) && (NS_SUCCEEDED(rv))) {
+    // XXX : we need some caching here
+    if (glyph_index && 
+        NS_SUCCEEDED(mFt2->LoadGlyph(face, glyph_index, mLoadFlag)) &&
+//      NS_SUCCEEDED(mFt2->LoadGlyph(face, glyph_index, FT_LOAD_DEFAULT)) &&
+        NS_SUCCEEDED(mFt2->GetGlyph(face->glyph, &glyph))) {
       mFt2->GlyphGetCBox(glyph, ft_glyph_bbox_pixels, &glyph_bbox);
       advance = FT_16_16_TO_REG(glyph->advance.x);
+      mFt2->DoneGlyph(glyph);
     }
     else {
+      NS_ERROR("failed to get or load glyph");
       // allocate space to draw an empty box in
       GetFallbackGlyphMetrics(&glyph_bbox, face);
       advance = glyph_bbox.xMax + 1;
@@ -401,11 +406,6 @@
   if (!face)
     return 0;
 
-  FTC_Image_Cache icache;
-  mFt2->GetImageCache(&icache);
-  if (!icache)
-    return 0;
-
   PRUint32 i, extraSurrogateLength;
   for (i=0; i<aLength; i+=1+extraSurrogateLength) {
     extraSurrogateLength=0;
@@ -418,15 +418,18 @@
       // skip aString[i+1], it is already used as low surrogate
       extraSurrogateLength = 1;
     }
+
+    // XXX : we need some caching here
     mFt2->GetCharIndex((FT_Face)face, code_point, &glyph_index);
-    nsresult rv;
-    rv = mFt2->ImageCacheLookup(icache, &mImageDesc, glyph_index, &glyph);
-    NS_ASSERTION(NS_SUCCEEDED(rv),"error loading glyph");
-    if (NS_FAILED(rv)) {
+    if (NS_FAILED(mFt2->LoadGlyph(face, glyph_index, mLoadFlag)) ||
+//  if (NS_FAILED(mFt2->LoadGlyph(face, glyph_index, FT_LOAD_DEFAULT)) ||
+          NS_FAILED(mFt2->GetGlyph(face->glyph, &glyph))) {
+      NS_ERROR("error loading glyph");
       origin_x += face->size->metrics.x_ppem/2 + 2;
       continue;
     }
     origin_x += FT_16_16_TO_REG(glyph->advance.x);
+    mFt2->DoneGlyph(glyph);
   }
 
   return origin_x;
@@ -723,11 +726,6 @@
     if (y%4==0) (*blendPixelFunc)(sub_image, y, ascent-1, black, 255/2);
 #endif
 
-  FTC_Image_Cache icache;
-  mFt2->GetImageCache(&icache);
-  if (!icache)
-    return 0;
-
   //
   // Get aa glyphs and blend with background
   //
@@ -736,7 +734,6 @@
   for (i=0; i<aLength; i+=1+extraSurrogateLength) {
     FT_UInt glyph_index;
     FT_Glyph glyph;
-    nsresult rv;
     FT_BBox glyph_bbox;
     FT_ULong code_point = aString[i];
     extraSurrogateLength = 0;
@@ -750,11 +747,12 @@
       extraSurrogateLength = 1;
     }
 
+    // XXX : we need some caching here
     mFt2->GetCharIndex(face, code_point, &glyph_index);
-    if (glyph_index) {
-      rv = mFt2->ImageCacheLookup(icache, &mImageDesc, glyph_index, &glyph);
-    }
-    if ((glyph_index) && (NS_SUCCEEDED(rv))) {
+    if (glyph_index && 
+        NS_SUCCEEDED(mFt2->LoadGlyph(face, glyph_index, mLoadFlag)) &&
+//      NS_SUCCEEDED(mFt2->LoadGlyph(face, glyph_index, FT_LOAD_DEFAULT)) &&
+        NS_SUCCEEDED(mFt2->GetGlyph(face->glyph, &glyph))) {
       mFt2->GlyphGetCBox(glyph, ft_glyph_bbox_pixels, &glyph_bbox);
     }
     else {
@@ -775,13 +773,26 @@
       continue;
     }
 
-    FT_BitmapGlyph slot = (FT_BitmapGlyph)glyph;
+    FT_BitmapGlyph slot;
+
+    if (glyph->format != FT_GLYPH_FORMAT_BITMAP) 
+    {
+      if (mFt2->GlyphToBitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
+        NS_ERROR("failed to convert outline to bitmap ");
+        XDestroyImage(sub_image);
+        mFt2->DoneGlyph(glyph);
+        return 0;
+      }
+    }
+
+    slot = (FT_BitmapGlyph)glyph;
     nsAntiAliasedGlyph aaglyph(glyph_bbox.xMax-glyph_bbox.xMin,
                                glyph_bbox.yMax-glyph_bbox.yMin, 0);
     PRUint8 buf[IMAGE_BUFFER_SIZE]; // try to use the stack for data
     if (!aaglyph.WrapFreeType(&glyph_bbox, slot, buf, IMAGE_BUFFER_SIZE)) {
       NS_ERROR("failed to wrap freetype image");
       XDestroyImage(sub_image);
+      mFt2->DoneGlyph(glyph);
       return 0;
     }
 
@@ -815,6 +826,7 @@
                   x_pos + aaglyph.GetLBearing(), ascent-glyph_bbox.yMax);
 
     x_pos += aaglyph.GetAdvance();
+    mFt2->DoneGlyph(glyph);
   }
 
   //
--- gfx/src/x11shared/nsFontFreeType.h.agriffis	2003-04-22 12:25:13.000000000 -0400
+++ gfx/src/x11shared/nsFontFreeType.h	2004-11-15 13:29:05.125342648 -0500
@@ -110,8 +110,10 @@
   XImage *GetXImage(PRUint32 width, PRUint32 height);
   nsITrueTypeFontCatalogEntry *mFaceID;
   PRUint16        mPixelSize;
-  FTC_Image_Desc  mImageDesc;
   nsCOMPtr<nsIFreeType2> mFt2;
+  FT_Face         mFace;
+  FT_Int32        mLoadFlag;
+  FT_Library      mFreeTypeLibrary;
 };
 
 void WeightTableInitCorrection(PRUint8*, PRUint8, double);
--- gfx/src/freetype/nsFreeType.cpp.agriffis	2004-02-07 10:22:30.000000000 -0500
+++ gfx/src/freetype/nsFreeType.cpp	2004-11-15 13:29:05.121343256 -0500
@@ -109,12 +109,8 @@
   {"FT_Load_Glyph",           NS_FT2_OFFSET(nsFT_Load_Glyph),           PR_TRUE},
   {"FT_New_Face",             NS_FT2_OFFSET(nsFT_New_Face),             PR_TRUE},
   {"FT_Outline_Decompose",    NS_FT2_OFFSET(nsFT_Outline_Decompose),    PR_TRUE},
+  {"FT_Set_Pixel_Sizes",      NS_FT2_OFFSET(nsFT_Set_Pixel_Sizes),      PR_TRUE},
   {"FT_Set_Charmap",          NS_FT2_OFFSET(nsFT_Set_Charmap),          PR_TRUE},
-  {"FTC_Image_Cache_Lookup",  NS_FT2_OFFSET(nsFTC_Image_Cache_Lookup),  PR_TRUE},
-  {"FTC_Manager_Lookup_Size", NS_FT2_OFFSET(nsFTC_Manager_Lookup_Size), PR_TRUE},
-  {"FTC_Manager_Done",        NS_FT2_OFFSET(nsFTC_Manager_Done),        PR_TRUE},
-  {"FTC_Manager_New",         NS_FT2_OFFSET(nsFTC_Manager_New),         PR_TRUE},
-  {"FTC_Image_Cache_New",     NS_FT2_OFFSET(nsFTC_Image_Cache_New),     PR_TRUE},
 // #ifdef MOZ_SVG
   {"FT_Glyph_Transform",      NS_FT2_OFFSET(nsFT_Glyph_Transform),      PR_TRUE},
   {"FT_Get_Kerning",          NS_FT2_OFFSET(nsFT_Get_Kerning),          PR_TRUE},
@@ -274,59 +270,21 @@
 } 
  
 NS_IMETHODIMP
-nsFreeType2::SetCharmap(FT_Face face, FT_CharMap  charmap)
-{ 
-  // call the FreeType2 function via the function pointer
-  FT_Error error = nsFT_Set_Charmap(face, charmap);
-  return error ? NS_ERROR_FAILURE : NS_OK;
-} 
- 
-NS_IMETHODIMP
-nsFreeType2::ImageCacheLookup(FTC_Image_Cache cache, FTC_Image_Desc *desc,
-                              FT_UInt glyphID, FT_Glyph *glyph)
-{ 
-  // call the FreeType2 function via the function pointer
-  FT_Error error = nsFTC_Image_Cache_Lookup(cache, desc, glyphID, glyph);
-  return error ? NS_ERROR_FAILURE : NS_OK;
-} 
- 
-NS_IMETHODIMP
-nsFreeType2::ManagerLookupSize(FTC_Manager manager, FTC_Font font,
-                               FT_Face *face, FT_Size *size)
+nsFreeType2::SetPixelSizes(FT_Face face, FT_UInt width, FT_UInt height)
 { 
   // call the FreeType2 function via the function pointer
-  FT_Error error = nsFTC_Manager_Lookup_Size(manager, font, face, size);
+  FT_Error error = nsFT_Set_Pixel_Sizes(face, width, height); 
   return error ? NS_ERROR_FAILURE : NS_OK;
 } 
- 
-NS_IMETHODIMP
-nsFreeType2::ManagerDone(FTC_Manager manager)
-{ 
-  // call the FreeType2 function via the function pointer
-  nsFTC_Manager_Done(manager);
-  return NS_OK;
-} 
- 
+
 NS_IMETHODIMP
-nsFreeType2::ManagerNew(FT_Library library, FT_UInt max_faces,
-                        FT_UInt max_sizes, FT_ULong max_bytes,
-                        FTC_Face_Requester requester, FT_Pointer req_data,
-                        FTC_Manager *manager)
+nsFreeType2::SetCharmap(FT_Face face, FT_CharMap  charmap)
 { 
   // call the FreeType2 function via the function pointer
-  FT_Error error = nsFTC_Manager_New(library, max_faces, max_sizes, max_bytes,
-                                     requester, req_data, manager);
+  FT_Error error = nsFT_Set_Charmap(face, charmap);
   return error ? NS_ERROR_FAILURE : NS_OK;
 } 
  
-NS_IMETHODIMP
-nsFreeType2::ImageCacheNew(FTC_Manager manager, FTC_Image_Cache *cache)
-{ 
-  // call the FreeType2 function via the function pointer
-  FT_Error error = nsFTC_Image_Cache_New(manager, cache);
-  return error ? NS_ERROR_FAILURE : NS_OK;
-} 
-
 // #ifdef MOZ_SVG
 NS_IMETHODIMP
 nsFreeType2::GlyphTransform(FT_Glyph glyph, FT_Matrix * matrix, FT_Vector * delta)
@@ -389,20 +347,6 @@
 } 
  
 NS_IMETHODIMP
-nsFreeType2::GetImageCache(FTC_Image_Cache *aCache)
-{
-  *aCache = mImageCache;
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsFreeType2::GetFTCacheManager(FTC_Manager *aManager)
-{ 
-  *aManager = mFTCacheManager;
-  return NS_OK;
-} 
- 
-NS_IMETHODIMP
 nsFreeType2::GetLibrary(FT_Library *aLibrary)
 { 
   *aLibrary = mFreeTypeLibrary;
@@ -425,8 +369,6 @@
 {
   mSharedLib = nsnull;
   mFreeTypeLibrary = nsnull;
-  mFTCacheManager  = nsnull;
-  mImageCache      = nsnull;
 }
 
 // I would like to make this a static member function but the compilier 
@@ -456,12 +398,6 @@
     delete gFreeTypeFaces;
     gFreeTypeFaces = nsnull;
   }
-  // mImageCache released by cache manager
-  if (mFTCacheManager) {
-    // use "this->" to make sure it is obivious we are calling the member func
-    this->ManagerDone(mFTCacheManager);
-    mFTCacheManager = nsnull;
-  }
   if (mFreeTypeLibrary) {
     // use "this->" to make sure it is obivious we are calling the member func
     this->DoneFreeType(mFreeTypeLibrary);
@@ -658,17 +594,6 @@
     mFreeTypeLibrary = nsnull;
     goto cleanup_and_return;
   }
-  // use "this->" to make sure it is obivious we are calling the member func
-  rv = this->ManagerNew(mFreeTypeLibrary, 0, 0, 0, nsFreeTypeFaceRequester,
-                         this, &mFTCacheManager);
-  NS_ASSERTION(NS_SUCCEEDED(rv), "failed to create FreeType Cache manager");
-  if (NS_FAILED(rv))
-    goto cleanup_and_return;
-  // use "this->" to make sure it is obivious we are calling the member func
-  rv = this->ImageCacheNew(mFTCacheManager, &mImageCache);
-  NS_ASSERTION(NS_SUCCEEDED(rv), "failed to create FreeType image cache");
-  if (NS_FAILED(rv))
-    goto cleanup_and_return;
   return PR_TRUE;
 
 cleanup_and_return:
--- gfx/src/freetype/nsFreeType.h.agriffis	2004-04-16 17:31:42.000000000 -0400
+++ gfx/src/freetype/nsFreeType.h	2004-11-15 13:29:05.122343104 -0500
@@ -102,15 +102,8 @@
 typedef FT_Error (*FT_Outline_Decompose_t)
                       (FT_Outline*, const FT_Outline_Funcs*, void*);
 typedef FT_Error (*FT_New_Face_t)(FT_Library, const char*, FT_Long, FT_Face*);
+typedef FT_Error (*FT_Set_Pixel_Sizes_t)(FT_Face face, FT_UInt, FT_UInt);
 typedef FT_Error (*FT_Set_Charmap_t)(FT_Face face, FT_CharMap  charmap);
-typedef FT_Error (*FTC_Image_Cache_Lookup_t)
-                      (FTC_Image_Cache, FTC_Image_Desc*, FT_UInt, FT_Glyph*);
-typedef FT_Error (*FTC_Manager_Lookup_Size_t)
-                      (FTC_Manager, FTC_Font, FT_Face*, FT_Size*);
-typedef FT_Error (*FTC_Manager_Done_t)(FTC_Manager);
-typedef FT_Error (*FTC_Manager_New_t)(FT_Library, FT_UInt, FT_UInt, FT_ULong,
-                       FTC_Face_Requester, FT_Pointer, FTC_Manager*);
-typedef FT_Error (*FTC_Image_Cache_New_t)(FTC_Manager, FTC_Image_Cache*);
 // #ifdef MOZ_SVG
 typedef FT_Error (*FT_Glyph_Transform_t)(FT_Glyph, FT_Matrix*, FT_Vector*);
 typedef FT_Error (*FT_Get_Kerning_t)
@@ -163,12 +156,8 @@
   FT_Load_Glyph_t           nsFT_Load_Glyph;
   FT_New_Face_t             nsFT_New_Face;
   FT_Outline_Decompose_t    nsFT_Outline_Decompose;
+  FT_Set_Pixel_Sizes_t      nsFT_Set_Pixel_Sizes;
   FT_Set_Charmap_t          nsFT_Set_Charmap;
-  FTC_Image_Cache_Lookup_t  nsFTC_Image_Cache_Lookup;
-  FTC_Manager_Lookup_Size_t nsFTC_Manager_Lookup_Size;
-  FTC_Manager_Done_t        nsFTC_Manager_Done;
-  FTC_Manager_New_t         nsFTC_Manager_New;
-  FTC_Image_Cache_New_t     nsFTC_Image_Cache_New;
 // #ifdef MOZ_SVG
   FT_Glyph_Transform_t      nsFT_Glyph_Transform;
   FT_Get_Kerning_t          nsFT_Get_Kerning;
@@ -181,9 +170,9 @@
   // this array needs to be big enough to hold all the function pointers
   // plus one extra for the null at the end
 // #ifdef MOZ_SVG
-  static FtFuncList FtFuncs[24];
+  static FtFuncList FtFuncs[20];
 // #else
-//  static FtFuncList FtFuncs[20];
+//  static FtFuncList FtFuncs[17];
 // #endif
   
 protected:
@@ -212,8 +201,6 @@
 
   PRLibrary      *mSharedLib;
   FT_Library      mFreeTypeLibrary;
-  FTC_Manager     mFTCacheManager;
-  FTC_Image_Cache mImageCache;
 
   static nsHashtable   *sFontFamilies;
   static nsHashtable   *sRange1CharSetNames;