Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TGLPadPainter.h
Go to the documentation of this file.
1 // @(#)root/gl:$Id$
2 // Author: Timur Pocheptsov 06/05/2009
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2009, 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_TGLPadPainter
13 #define ROOT_TGLPadPainter
14 
15 #include <deque>
16 
17 #include "TVirtualPadPainter.h"
18 #include "TGLFontManager.h"
19 #include "TGLPadUtils.h"
20 #include "TPoint.h"
21 
22 class TLinearGradient;
23 class TRadialGradient;
24 /*
25 The _main_ purpose of TGLPadPainter is to enable 2d gl raphics
26 inside standard TPad/TCanvas.
27 */
28 class TGLPadPainter : public TVirtualPadPainter {
29 private:
30  Rgl::Pad::PolygonStippleSet fSSet;
31  Rgl::Pad::Tesselator fTess;
32  Rgl::Pad::MarkerPainter fMarker;
33  Rgl::Pad::GLLimits fLimits;
34 
35  std::vector<Double_t> fVs;//Vertex buffer for tesselator.
36 
37  TGLFontManager fFM;
38  TGLFont fF;
39 
40  Int_t fVp[4];
41 
42  std::vector<TPoint> fPoly;
43  Bool_t fIsHollowArea;
44 
45  Bool_t fLocked;
46 
47  template<class Char_t>
48  void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode);
49 public:
50  TGLPadPainter();
51 
52  //Final overriders for TVirtualPadPainter pure virtual functions.
53  //1. Part, which simply delegates to TVirtualX.
54  //Line attributes.
55  Color_t GetLineColor() const;
56  Style_t GetLineStyle() const;
57  Width_t GetLineWidth() const;
58 
59  void SetLineColor(Color_t lcolor);
60  void SetLineStyle(Style_t lstyle);
61  void SetLineWidth(Width_t lwidth);
62  //Fill attributes.
63  Color_t GetFillColor() const;
64  Style_t GetFillStyle() const;
65  Bool_t IsTransparent() const;
66 
67  void SetFillColor(Color_t fcolor);
68  void SetFillStyle(Style_t fstyle);
69  void SetOpacity(Int_t percent);
70  //Text attributes.
71  Short_t GetTextAlign() const;
72  Float_t GetTextAngle() const;
73  Color_t GetTextColor() const;
74  Font_t GetTextFont() const;
75  Float_t GetTextSize() const;
76  Float_t GetTextMagnitude() const;
77 
78  void SetTextAlign(Short_t align);
79  void SetTextAngle(Float_t tangle);
80  void SetTextColor(Color_t tcolor);
81  void SetTextFont(Font_t tfont);
82  void SetTextSize(Float_t tsize);
83  void SetTextSizePixels(Int_t npixels);
84 
85  //2. "Off-screen management" part.
86  Int_t CreateDrawable(UInt_t w, UInt_t h);
87  void ClearDrawable();
88  void CopyDrawable(Int_t device, Int_t px, Int_t py);
89  void DestroyDrawable(Int_t device);
90  void SelectDrawable(Int_t device);
91 
92  void InitPainter();
93  void InvalidateCS();
94  void LockPainter();
95 
96  void DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2);
97  void DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2);
98 
99  void DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode);
100  //TPad needs double and float versions.
101  void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y);
102  void DrawFillArea(Int_t n, const Float_t *x, const Float_t *y);
103 
104  //TPad needs both double and float versions of DrawPolyLine.
105  void DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y);
106  void DrawPolyLine(Int_t n, const Float_t *x, const Float_t *y);
107  void DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v);
108 
109  //TPad needs both versions.
110  void DrawPolyMarker(Int_t n, const Double_t *x, const Double_t *y);
111  void DrawPolyMarker(Int_t n, const Float_t *x, const Float_t *y);
112 
113  void DrawText(Double_t x, Double_t y, const char *text, ETextMode mode);
114  void DrawText(Double_t, Double_t, const wchar_t *, ETextMode);
115  void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode);
116  void DrawTextNDC(Double_t, Double_t, const wchar_t *, ETextMode);
117 
118  //jpg, png, gif and bmp output.
119  void SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const;
120 
121  //TASImage support.
122  void DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height,
123  Int_t dstX, Int_t dstY, Bool_t enableBlending);
124 
125 
126 private:
127 
128  //Attention! GL_PROJECTION will become
129  //the current matrix after these calls.
130  void SaveProjectionMatrix()const;
131  void RestoreProjectionMatrix()const;
132 
133  //Attention! GL_MODELVIEW will become the
134  //current matrix after these calls.
135  void SaveModelviewMatrix()const;
136  void RestoreModelviewMatrix()const;
137 
138  void SaveViewport();
139  void RestoreViewport();
140 
141  void DrawPolyMarker();
142 
143  //Aux. functions for a gradient and solid fill:
144  void DrawPolygonWithGradient(Int_t n, const Double_t *x, const Double_t *y);
145  //
146  void DrawGradient(const TLinearGradient *gradient, Int_t n, const Double_t *x, const Double_t *y);
147  void DrawGradient(const TRadialGradient *gradient, Int_t n, const Double_t *x, const Double_t *y);
148  //
149  void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y);
150 
151  TGLPadPainter(const TGLPadPainter &rhs);
152  TGLPadPainter & operator = (const TGLPadPainter &rhs);
153 
154  ClassDef(TGLPadPainter, 0)
155 };
156 
157 #endif
158