ROOT logo
// @(#)root/gpad:$Id$
// Author:  Olivier Couet, Timur Pocheptsov  06/05/2009

/*************************************************************************
 * Copyright (C) 1995-2009, 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_TPadPainter
#define ROOT_TPadPainter

#ifndef ROOT_TVirtualPadPainter
#include "TVirtualPadPainter.h"
#endif

/*
TVirtualPadPainter is an attempt to abstract
painting operation furthermore. gVirtualX can
be X11 or GDI, but pad painter can be gVirtualX (X11 or GDI),
or gl pad painter.
*/

class TVirtualPad;

class TPadPainter : public TVirtualPadPainter {
public:
   TPadPainter();
   //Final overriders for TVirtualPadPainter pure virtual functions.
   //1. Part, which simply delegates to TVirtualX.
   //Line attributes.
   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);
   //Fill attributes.
   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);
   //Text attributes.
   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);
   //2. "Off-screen management" part.
   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);
   
   //TASImage support (noop for a non-gl pad).
   void     DrawPixels(const unsigned char *pixelData, UInt_t width, UInt_t height,
                       Int_t dstX, Int_t dstY, Bool_t enableBlending);
   

   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);
   //TPad needs double and float versions.
   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);
   
   //TPad needs both double and float versions of DrawPolyLine.
   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);
   
   //TPad needs both versions.
   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 x, Double_t y, const wchar_t *text, ETextMode mode);
   void     DrawTextNDC(Double_t u, Double_t v, const char *text, ETextMode mode);
   void     DrawTextNDC(Double_t u, Double_t v, const wchar_t *text, ETextMode mode);
   
   //jpg, png, bmp, gif output.
   void     SaveImage(TVirtualPad *pad, const char *fileName, Int_t type) const;

private:
   TPadPainter(const TPadPainter &rhs);
   TPadPainter & operator = (const TPadPainter &rhs);
   
   ClassDef(TPadPainter, 0) //Abstract interface for painting in TPad
};

#endif
 TPadPainter.h:1
 TPadPainter.h:2
 TPadPainter.h:3
 TPadPainter.h:4
 TPadPainter.h:5
 TPadPainter.h:6
 TPadPainter.h:7
 TPadPainter.h:8
 TPadPainter.h:9
 TPadPainter.h:10
 TPadPainter.h:11
 TPadPainter.h:12
 TPadPainter.h:13
 TPadPainter.h:14
 TPadPainter.h:15
 TPadPainter.h:16
 TPadPainter.h:17
 TPadPainter.h:18
 TPadPainter.h:19
 TPadPainter.h:20
 TPadPainter.h:21
 TPadPainter.h:22
 TPadPainter.h:23
 TPadPainter.h:24
 TPadPainter.h:25
 TPadPainter.h:26
 TPadPainter.h:27
 TPadPainter.h:28
 TPadPainter.h:29
 TPadPainter.h:30
 TPadPainter.h:31
 TPadPainter.h:32
 TPadPainter.h:33
 TPadPainter.h:34
 TPadPainter.h:35
 TPadPainter.h:36
 TPadPainter.h:37
 TPadPainter.h:38
 TPadPainter.h:39
 TPadPainter.h:40
 TPadPainter.h:41
 TPadPainter.h:42
 TPadPainter.h:43
 TPadPainter.h:44
 TPadPainter.h:45
 TPadPainter.h:46
 TPadPainter.h:47
 TPadPainter.h:48
 TPadPainter.h:49
 TPadPainter.h:50
 TPadPainter.h:51
 TPadPainter.h:52
 TPadPainter.h:53
 TPadPainter.h:54
 TPadPainter.h:55
 TPadPainter.h:56
 TPadPainter.h:57
 TPadPainter.h:58
 TPadPainter.h:59
 TPadPainter.h:60
 TPadPainter.h:61
 TPadPainter.h:62
 TPadPainter.h:63
 TPadPainter.h:64
 TPadPainter.h:65
 TPadPainter.h:66
 TPadPainter.h:67
 TPadPainter.h:68
 TPadPainter.h:69
 TPadPainter.h:70
 TPadPainter.h:71
 TPadPainter.h:72
 TPadPainter.h:73
 TPadPainter.h:74
 TPadPainter.h:75
 TPadPainter.h:76
 TPadPainter.h:77
 TPadPainter.h:78
 TPadPainter.h:79
 TPadPainter.h:80
 TPadPainter.h:81
 TPadPainter.h:82
 TPadPainter.h:83
 TPadPainter.h:84
 TPadPainter.h:85
 TPadPainter.h:86
 TPadPainter.h:87
 TPadPainter.h:88
 TPadPainter.h:89
 TPadPainter.h:90
 TPadPainter.h:91
 TPadPainter.h:92
 TPadPainter.h:93
 TPadPainter.h:94
 TPadPainter.h:95
 TPadPainter.h:96
 TPadPainter.h:97
 TPadPainter.h:98
 TPadPainter.h:99
 TPadPainter.h:100
 TPadPainter.h:101
 TPadPainter.h:102
 TPadPainter.h:103
 TPadPainter.h:104
 TPadPainter.h:105
 TPadPainter.h:106
 TPadPainter.h:107