CairoFontEngine.h 1.41 KB
Newer Older
Kristian Høgsberg's avatar
Kristian Høgsberg committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
//========================================================================
//
// CairoFontEngine.h
//
//========================================================================

#ifndef CAIROFONTENGINE_H
#define CAIROFONTENGINE_H

#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif

#include "goo/gtypes.h"
#include <cairo-ft.h>

#include "GfxFont.h"

class CairoFont {
public:
  CairoFont(GfxFont *gfxFont, XRef *xref, FT_Library lib);
  ~CairoFont();

  GBool matches(Ref &other);
25
  cairo_font_t *getFont(double a, double b, double c, double d);
Kristian Høgsberg's avatar
Kristian Høgsberg committed
26 27 28 29 30 31 32 33 34 35 36
  unsigned long getGlyph(CharCode code,
			 Unicode *u, int uLen);
  double getSubstitutionCorrection(GfxFont *gfxFont);
private:
  int substIdx;
  Ref ref;
  cairo_font_t *cairo_font;
  FT_Face face;

  Gushort *codeToGID;
  int codeToGIDLen;
37 38 39 40 41 42 43

  struct Instance {
    cairo_font_t *font;
    double a, b, c, d;
    Instance *next;
  };
  Instance *instance_list;
Kristian Høgsberg's avatar
Kristian Høgsberg committed
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
};

//------------------------------------------------------------------------

#define cairoFontCacheSize 16

//------------------------------------------------------------------------
// CairoFontEngine
//------------------------------------------------------------------------

class CairoFontEngine {
public:

  // Create a font engine.
  CairoFontEngine(FT_Library libA);
  ~CairoFontEngine();

  CairoFont *getFont(GfxFont *gfxFont, XRef *xref);

private:
  CairoFont *fontCache[cairoFontCacheSize];
  FT_Library lib;
};

#endif