// @(#)root/graf:$Id$ // Author: Olivier Couet 01/10/02 // Author: Fons Rademakers 21/11/98 /************************************************************************* * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef ROOT_TTF #define ROOT_TTF ////////////////////////////////////////////////////////////////////////// // // // TTF // // // // Interface to the Freetype 2 library. // // // ////////////////////////////////////////////////////////////////////////// #ifndef ROOT_Rtypes #include "Rtypes.h" #endif /// @cond DOXYGEN_IGNORE // Forward declare for the headers: // # include // # include FT_FREETYPE_H // # include FT_GLYPH_H extern "C" { struct FT_LibraryRec_; struct FT_FaceRec_; struct FT_CharMapRec_; struct FT_GlyphRec_; struct FT_Matrix_; struct FT_Bitmap_; typedef struct FT_LibraryRec_* FT_Library; typedef struct FT_FaceRec_* FT_Face; typedef struct FT_CharMapRec_* FT_CharMap; typedef struct FT_GlyphRec_* FT_Glyph; typedef struct FT_Matrix_ FT_Matrix; typedef struct FT_Bitmap_ FT_Bitmap; // Forward declared for TGX11TTF.h's benefit typedef signed long FT_Pos; #ifndef FT_FREETYPE_H struct FT_Vector_ { FT_Pos x, y; }; struct FT_BBox_ { FT_Pos xMin, yMin, xMax, yMax; }; #endif typedef struct FT_Vector_ FT_Vector; typedef struct FT_BBox_ FT_BBox; } /// @endcond class TGX11TTF; class TGWin32; class TMathTextRenderer; class TTF { friend class TGX11TTF; friend class TGWin32; friend class TMathTextRenderer; public: /** \class TTGlyph TTF helper class containing glyphs description. */ class TTGlyph { public: UInt_t fIndex; // glyph index in face FT_Vector fPos; // position of glyph origin FT_Glyph fImage; // glyph image }; protected: enum { kTTMaxFonts = 32, kMaxGlyphs = 1024 }; static Int_t fgAscent; // string ascent, used to compute Y alignment static FT_BBox fgCBox; // string control box static FT_CharMap fgCharMap[kTTMaxFonts]; // font character map static Int_t fgCurFontIdx; // current font index static Int_t fgSymbItaFontIdx; // Symbol italic font index static Int_t fgFontCount; // number of fonts loaded static char *fgFontName[kTTMaxFonts]; // font name static FT_Face fgFace[kTTMaxFonts]; // font face static TTF::TTGlyph fgGlyphs[kMaxGlyphs]; // glyphs static Bool_t fgHinting; // use hinting (true by default) static Bool_t fgInit; // true if the Init has been called static Bool_t fgKerning; // use kerning (true by default) static FT_Library fgLibrary; // FreeType font library static Int_t fgNumGlyphs; // number of glyphs in the string static FT_Matrix *fgRotMatrix; // rotation matrix static Bool_t fgSmoothing; // use anti-aliasing (true when >8 planes, false otherwise) static Int_t fgTBlankW; // trailing blanks width static Int_t fgWidth; // string width, used to compute X alignment 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) //Interface to TTF font handling }; #endif