Logo ROOT   6.10/09
Reference Guide
TGLFontManager.h
Go to the documentation of this file.
1 // @(#)root/gl:$Id$
2 // Author: Alja Mrak-Tadel 2008
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TGLFontManager
13 #define ROOT_TGLFontManager
14 
15 #include "TObjArray.h"
16 #include <list>
17 #include <vector>
18 #include <map>
19 
20 class FTFont;
21 class TGLFontManager;
22 
23 class TGLFont
24 {
25 public:
26  enum EMode
27  {
28  kUndef = -1,
31  }; // Font-types of FTGL.
32 
35 
36 private:
37  TGLFont& operator=(const TGLFont& o); // Not implemented.
38 
39  FTFont *fFont; // FTGL font.
40  TGLFontManager *fManager; // Font manager.
41 
42  Float_t fDepth; // depth of extruded fonts, enforced at render time.
43 
44  template<class Char>
45  void RenderHelper(const Char *txt, Double_t x, Double_t y, Double_t angle, Double_t /*mgn*/) const;
46 
47 protected:
48  Int_t fSize; // free-type face size
49  Int_t fFile; // free-type file name
50  EMode fMode; // free-type FTGL class id
51 
52  mutable Int_t fTrashCount;
53 public:
54  TGLFont();
55  TGLFont(Int_t size, Int_t font, EMode mode, FTFont *f=0, TGLFontManager *mng=0);
56  TGLFont(const TGLFont& o); // Not implemented.
57  virtual ~TGLFont();
58 
59  void CopyAttributes(const TGLFont &o);
60 
61  Int_t GetSize() const { return fSize;}
62  Int_t GetFile() const { return fFile;}
63  EMode GetMode() const { return fMode;}
64 
65  Int_t GetTrashCount() const { return fTrashCount; }
66  void SetTrashCount(Int_t c) const { fTrashCount = c; }
67  Int_t IncTrashCount() const { return ++fTrashCount; }
68 
69  void SetFont(FTFont *f) { fFont =f;}
70  const FTFont* GetFont() const { return fFont; }
71  void SetManager(TGLFontManager *mng) { fManager = mng; }
72  const TGLFontManager* GetManager() const { return fManager; }
73 
74  Float_t GetDepth() const { return fDepth; }
75  void SetDepth(Float_t d) { fDepth = d; }
76 
77  // FTGL wrapper functions
78  Float_t GetAscent() const;
79  Float_t GetDescent() const;
80  Float_t GetLineHeight() const;
81  void MeasureBaseLineParams(Float_t& ascent, Float_t& descent, Float_t& line_height,
82  const char* txt="Xj") const;
83 
84  void BBox(const char* txt,
85  Float_t& llx, Float_t& lly, Float_t& llz,
86  Float_t& urx, Float_t& ury, Float_t& urz) const;
87  void BBox(const wchar_t* txt,
88  Float_t& llx, Float_t& lly, Float_t& llz,
89  Float_t& urx, Float_t& ury, Float_t& urz) const;
90 
91  void Render(const char* txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const;
92  void Render(const wchar_t* txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const;
93  void Render(const TString &txt) const;
94  void Render(const TString &txt, Float_t x, Float_t y, Float_t z, ETextAlignH_e alignH, ETextAlignV_e alignV) const;
95 
96  // helper gl draw functions
97  virtual void PreRender(Bool_t autoLight=kTRUE, Bool_t lightOn=kFALSE) const;
98  virtual void PostRender() const;
99 
100  Bool_t operator< (const TGLFont& o) const
101  {
102  if (fSize == o.fSize)
103  {
104  if(fFile == o.fFile)
105  {
106  return fMode < o.fMode;
107  }
108  return fFile < o.fFile;
109  }
110  return fSize < o.fSize;
111  }
112 
113  ClassDef(TGLFont, 0); // A wrapper class for FTFont.
114 };
115 
116 /******************************************************************************/
117 /******************************************************************************/
118 
120 {
121 public:
122  typedef std::vector<Int_t> FontSizeVec_t;
123 
124 private:
125  TGLFontManager(const TGLFontManager&); // Not implemented
126  TGLFontManager& operator=(const TGLFontManager&); // Not implemented
127 
128 protected:
129  typedef std::map<TGLFont, Int_t> FontMap_t;
130  typedef std::map<TGLFont, Int_t>::iterator FontMap_i;
131 
132  typedef std::list<const TGLFont*> FontList_t;
133  typedef std::list<const TGLFont*>::iterator FontList_i;
134  typedef std::list<const TGLFont*>::const_iterator FontList_ci;
135 
136  FontMap_t fFontMap; // map of created fonts
137  FontList_t fFontTrash; // fonts to purge
138 
139  static TObjArray fgFontFileArray; // map font-id to ttf-font-file
140  // Default fonts - for gl/eve, "extended" - for gl-pad
142 
143  static FontSizeVec_t fgFontSizeArray; // map of valid font-size
144  static Bool_t fgStaticInitDone; // global initialization flag
145  static void InitStatics();
146 
147 public:
148  TGLFontManager() : fFontMap(), fFontTrash() {}
149  virtual ~TGLFontManager();
150 
151  void RegisterFont(Int_t size, Int_t file, TGLFont::EMode mode, TGLFont& out);
152  void RegisterFont(Int_t size, const char* name, TGLFont::EMode mode, TGLFont& out);
153  void ReleaseFont(TGLFont& font);
154 
155  static TObjArray* GetFontFileArray();
156  static FontSizeVec_t* GetFontSizeArray();
157 
158  static Int_t GetExtendedFontStartIndex();
159  static Int_t GetFontSize(Int_t ds);
160  static Int_t GetFontSize(Int_t ds, Int_t min, Int_t max);
161  static const char* GetFontNameFromId(Int_t);
162 
163  void ClearFontTrash();
164 
165  ClassDef(TGLFontManager, 0); // A FreeType GL font manager.
166 };
167 
168 #endif
169 
Int_t IncTrashCount() const
std::map< TGLFont, Int_t > FontMap_t
Float_t GetAscent() const
Get font&#39;s ascent.
An array of TObjects.
Definition: TObjArray.h:37
virtual void PreRender(Bool_t autoLight=kTRUE, Bool_t lightOn=kFALSE) const
Set-up GL state before FTFont rendering.
Bool_t operator<(const TGLFont &o) const
void Render(const char *txt, Double_t x, Double_t y, Double_t angle, Double_t mgn) const
float Float_t
Definition: RtypesCore.h:53
Int_t fSize
void BBox(const char *txt, Float_t &llx, Float_t &lly, Float_t &llz, Float_t &urx, Float_t &ury, Float_t &urz) const
Get bounding box.
EMode GetMode() const
Int_t GetFile() const
FTFont * fFont
FontList_t fFontTrash
Basic string class.
Definition: TString.h:129
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const char * Char
void CopyAttributes(const TGLFont &o)
Assignment operator.
Float_t GetDepth() const
Double_t x[n]
Definition: legend1.C:17
static TObjArray fgFontFileArray
#define ClassDef(name, id)
Definition: Rtypes.h:297
std::vector< Int_t > FontSizeVec_t
std::list< const TGLFont * >::iterator FontList_i
Int_t GetSize() const
Int_t fTrashCount
std::list< const TGLFont * > FontList_t
Float_t GetDescent() const
Get font&#39;s descent. The returned value is positive.
void SetTrashCount(Int_t c) const
const TGLFontManager * GetManager() const
Float_t fDepth
static Int_t fgExtendedFontStart
Int_t fFile
Float_t GetLineHeight() const
Get font&#39;s line-height.
const Bool_t kFALSE
Definition: RtypesCore.h:92
void RenderHelper(const Char *txt, Double_t x, Double_t y, Double_t angle, Double_t) const
mgn is simply ignored, because ROOT&#39;s TVirtualX TGX11 are complete mess with painting attributes...
std::map< TGLFont, Int_t >::iterator FontMap_i
double f(double x)
double Double_t
Definition: RtypesCore.h:55
void SetManager(TGLFontManager *mng)
Double_t y[n]
Definition: legend1.C:17
Int_t GetTrashCount() const
const FTFont * GetFont() const
TGLFontManager * fManager
static Bool_t fgStaticInitDone
void SetFont(FTFont *f)
you should not use this method at all Int_t Int_t z
Definition: TRolke.cxx:630
FontMap_t fFontMap
EMode fMode
TGLFont & operator=(const TGLFont &o)
virtual void PostRender() const
Reset GL state after FTFont rendering.
Definition: file.py:1
A FreeType GL font manager.
TGLFont()
Constructor.
std::list< const TGLFont * >::const_iterator FontList_ci
static FontSizeVec_t fgFontSizeArray
A wrapper class for FTFont.
const Bool_t kTRUE
Definition: RtypesCore.h:91
void SetDepth(Float_t d)
virtual ~TGLFont()
Destructor.
void MeasureBaseLineParams(Float_t &ascent, Float_t &descent, Float_t &line_height, const char *txt="Xj") const
Measure font&#39;s base-line parameters from the passed text.