#ifndef ROOT_TTF
#define ROOT_TTF
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif
#ifndef __CINT__
# include <ft2build.h>
# include FT_FREETYPE_H
# include FT_GLYPH_H
#else
typedef void* FT_Library;
typedef void* FT_Face;
typedef void* FT_CharMap;
typedef void* FT_Glyph;
typedef signed long FT_Pos;
struct FT_Vector { FT_Pos x, y; };
struct FT_BBox { FT_Pos xMin, yMin, xMax, yMax; };
struct FT_Matrix;
struct FT_Bitmap;
#endif
class TTGlyph {
public:
UInt_t fIndex;
FT_Vector fPos;
FT_Glyph fImage;
};
class TGX11TTF;
class TGWin32;
class TMathTextRenderer;
class TTF {
friend class TGX11TTF;
friend class TGWin32;
friend class TMathTextRenderer;
protected:
enum { kTTMaxFonts = 32, kMaxGlyphs = 1024 };
static Int_t fgAscent;
static FT_BBox fgCBox;
static FT_CharMap fgCharMap[kTTMaxFonts];
static Int_t fgCurFontIdx;
static Int_t fgSymbItaFontIdx;
static Int_t fgFontCount;
static char *fgFontName[kTTMaxFonts];
static FT_Face fgFace[kTTMaxFonts];
static TTGlyph fgGlyphs[kMaxGlyphs];
static Bool_t fgHinting;
static Bool_t fgInit;
static Bool_t fgKerning;
static FT_Library fgLibrary;
static Int_t fgNumGlyphs;
static FT_Matrix *fgRotMatrix;
static Bool_t fgSmoothing;
static Int_t fgTBlankW;
static Int_t fgWidth;
public:
static Short_t CharToUnicode(UInt_t code);
static void LayoutGlyphs();
static void PrepareString(const char *string);
static void PrepareString(const wchar_t *string);
static void SetRotationMatrix(Float_t angle);
public:
TTF() { }
virtual ~TTF();
static void Init();
static void Cleanup();
static Int_t GetAscent();
static const FT_BBox &GetBox();
static TTGlyph *GetGlyphs();
static Bool_t GetHinting();
static Bool_t GetKerning();
static Int_t GetNumGlyphs();
static FT_Matrix *GetRotMatrix();
static Bool_t GetSmoothing();
static Int_t GetWidth();
static void SetHinting(Bool_t state);
static void SetKerning(Bool_t state);
static void SetSmoothing(Bool_t state);
static void GetTextExtent(UInt_t &w, UInt_t &h, char *text);
static void GetTextExtent(UInt_t &w, UInt_t &h, wchar_t *text);
static void GetTextAdvance(UInt_t &a, char *text);
static void SetTextFont(Font_t fontnumber);
static Int_t SetTextFont(const char *fontname, Int_t italic=0);
static void SetTextSize(Float_t textsize);
static Bool_t IsInitialized();
static void Version(Int_t &major, Int_t &minor, Int_t &patch);
ClassDef(TTF,0)
};
#endif