#ifndef ROOT_TGLPadPainter
#define ROOT_TGLPadPainter
#include <deque>
#ifndef ROOT_TVirtualPadPainter
#include "TVirtualPadPainter.h"
#endif
#ifndef ROOT_TGLFontmanager
#include "TGLFontManager.h"
#endif
#ifndef ROOT_TGLPadUtils
#include "TGLPadUtils.h"
#endif
#ifndef ROOT_TPoint
#include "TPoint.h"
#endif
class TLinearGradient;
class TRadialGradient;
class TGLPadPainter : public TVirtualPadPainter {
private:
Rgl::Pad::PolygonStippleSet fSSet;
Rgl::Pad::Tesselator fTess;
Rgl::Pad::MarkerPainter fMarker;
Rgl::Pad::GLLimits fLimits;
std::vector<Double_t> fVs;
TGLFontManager fFM;
TGLFont fF;
Int_t fVp[4];
std::vector<TPoint> fPoly;
Bool_t fIsHollowArea;
Bool_t fLocked;
template<class Char_t>
void DrawTextHelper(Double_t x, Double_t y, const Char_t *text, ETextMode mode);
public:
TGLPadPainter();
Color_t GetLineColor() const;
Style_t GetLineStyle() const;
Width_t GetLineWidth() const;
void SetLineColor(Color_t lcolor);
void SetLineStyle(Style_t lstyle);
void SetLineWidth(Width_t lwidth);
Color_t GetFillColor() const;
Style_t GetFillStyle() const;
Bool_t IsTransparent() const;
void SetFillColor(Color_t fcolor);
void SetFillStyle(Style_t fstyle);
void SetOpacity(Int_t percent);
Short_t GetTextAlign() const;
Float_t GetTextAngle() const;
Color_t GetTextColor() const;
Font_t GetTextFont() const;
Float_t GetTextSize() const;
Float_t GetTextMagnitude() const;
void SetTextAlign(Short_t align);
void SetTextAngle(Float_t tangle);
void SetTextColor(Color_t tcolor);
void SetTextFont(Font_t tfont);
void SetTextSize(Float_t tsize);
void SetTextSizePixels(Int_t npixels);
Int_t CreateDrawable(UInt_t w, UInt_t h);
void ClearDrawable();
void CopyDrawable(Int_t id, Int_t px, Int_t py);
void DestroyDrawable();
void SelectDrawable(Int_t device);
void InitPainter();
void InvalidateCS();
void LockPainter();
void DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2);
void DrawLineNDC(Double_t u1, Double_t v1, Double_t u2, Double_t v2);
void DrawBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, EBoxMode mode);
void DrawFillArea(Int_t n, const Double_t *x, const Double_t *y);
void DrawFillArea(Int_t n, const Float_t *x, const Float_t *y);
void DrawPolyLine(Int_t n, const Double_t *x, const Double_t *y);
void DrawPolyLine(Int_t n, const Float_t *x, const Float_t *y);
void DrawPolyLineNDC(Int_t n, const Double_t *u, const Double_t *v);
void DrawPolyMarker(Int_t n, const Double_t *x, const Double_t *y);
void DrawPolyMarker(Int_t n, const Float_t *x, const Float_t *y);
void DrawText(Double_t x, Double_t y, const char *text, ETextMode mode);
void DrawText(Double_t, Double_t, const wchar_t *, ETextMode);
void DrawTextNDC(Double_t x, Double_t y, const char *text, ETextMode mode);
void DrawTextNDC(Double_t, Double_t, const wchar_t *, ETextMode);
void SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const;
void DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height,
Int_t dstX, Int_t dstY, Bool_t enableBlending);
private:
void SaveProjectionMatrix()const;
void RestoreProjectionMatrix()const;
void SaveModelviewMatrix()const;
void RestoreModelviewMatrix()const;
void SaveViewport();
void RestoreViewport();
void DrawPolyMarker();
void DrawPolygonWithGradient(Int_t n, const Double_t *x, const Double_t *y);
void DrawGradient(const TLinearGradient *gradient, Int_t n, const Double_t *x, const Double_t *y);
void DrawGradient(const TRadialGradient *gradient, Int_t n, const Double_t *x, const Double_t *y);
void DrawTesselation(Int_t n, const Double_t *x, const Double_t *y);
TGLPadPainter(const TGLPadPainter &rhs);
TGLPadPainter & operator = (const TGLPadPainter &rhs);
ClassDef(TGLPadPainter, 0)
};
#endif