// @(#)root/gpad:$Id$
// Author: Rene Brun   12/12/94

/*************************************************************************
 * 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.             *
 *************************************************************************/

#include <string.h>
#include <stdlib.h>

#include "Riostream.h"
#include "TROOT.h"
#include "TCanvas.h"
#include "TClass.h"
#include "TStyle.h"
#include "TText.h"
#include "TBox.h"
#include "TCanvasImp.h"
#include "TDialogCanvas.h"
#include "TGuiFactory.h"
#include "TEnv.h"
#include "TError.h"
#include "TContextMenu.h"
#include "TControlBar.h"
#include "TInterpreter.h"
#include "TApplication.h"
#include "TColor.h"
#include "TVirtualPadEditor.h"
#include "TVirtualViewer3D.h"
#include "TPadPainter.h"
#include "TVirtualGL.h"
#include "TVirtualPS.h"
#include "TObjectSpy.h"
#include "TAxis.h"
#include "TView.h"

#include "TVirtualMutex.h"

class TCanvasInit {
public:
   TCanvasInit() { TApplication::NeedGraphicsLibs(); }
};
static TCanvasInit gCanvasInit;


//*-*x16 macros/layout_canvas

Bool_t TCanvas::fgIsFolder = kFALSE;

const Size_t kDefaultCanvasSize   = 20;

ClassImpQ(TCanvas)


//______________________________________________________________________________
/* Begin_Html
<center><h2>The Canvas class</h2></center>

A Canvas is an area mapped to a window directly under the control of the display
manager. A ROOT session may have several canvases open at any given time.
<p>
A Canvas may be subdivided into independent graphical areas: the <b>Pads</b>.
A canvas has a default pad which has the name of the canvas itself.
An example of a Canvas layout is sketched in the picture below.

<pre>
     ***********************************************************************
     *                       Menus bar for Canvas                          *
     ***********************************************************************
     *                                                                     *
     *  ************************************    *************************  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *              Pad 1               *    *        Pad 2          *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  *                                  *    *                       *  *
     *  ************************************    *************************  *
     *                                                                     *
     ***********************************************************************
</pre>

This canvas contains two pads named P1 and P2. Both Canvas, P1 and P2 can be
moved, grown, shrinked using the normal rules of the Display manager.
<p>
The image below shows a canvas with 4 pads:

<center>
<img src="gif/canvas_layout.gif">
</center>

Once objects have been drawn in a canvas, they can be edited/moved by pointing
directly to them. The cursor shape is changed to suggest the type of action that
one can do on this object. Clicking with the right mouse button on an object
pops-up a contextmenu with a complete list of actions possible on this object.
<p>
A graphical editor may be started from the canvas "View" menu under the menu
entry "Toolbar".
<p>
An interactive HELP is available by clicking on the HELP button at the top right
of the canvas. It gives a short explanation about the canvas' menus.
<p>
A canvas may be automatically divided into pads via <tt>TPad::Divide</tt>.
<p>
At creation time, in interactive mode, the canvas size defines the size of the
canvas window (including the window manager's decoration). To define precisely
the graphics area size of a canvas, the following four lines of code should be
used:
<pre>
   {
      Double_t w = 600;
      Double_t h = 600;
      TCanvas * c1 = new TCanvas("c", "c", w, h);
      c->SetWindowSize(w + (w - c->GetWw()), h + (h - c->GetWh()));
   }
</pre>
in batch mode simply do:
<pre>
      c->SetCanvasSize(w,h);
</pre>
End_Html */


//______________________________________________________________________________
TCanvas::TCanvas(Bool_t build) : TPad(), fDoubleBuffer(0)
{
   // Canvas default constructor.

   fPainter      = 0;
   fWindowTopX   = 0;
   fWindowTopY   = 0;
   fWindowWidth  = 0;
   fWindowHeight = 0;
   fCw           = 0;
   fCh           = 0;

   fUseGL = gStyle->GetCanvasPreferGL();

   if (!build || TClass::IsCallingNew() != TClass::kRealNew) {
      Constructor();
   } else {
      const char *defcanvas = gROOT->GetDefCanvasName();
      char *cdef;

      TList *lc = (TList*)gROOT->GetListOfCanvases();
      if (lc->FindObject(defcanvas)) {
         Int_t n = lc->GetSize()+1;
         while (lc->FindObject(Form("%s_n%d",defcanvas,n))) n++;
         cdef = StrDup(Form("%s_n%d",defcanvas,n));
      } else {
         cdef = StrDup(Form("%s",defcanvas));
      }
      Constructor(cdef, cdef, 1);
      delete [] cdef;
   }
}

//______________________________________________________________________________
void TCanvas::Constructor()
{
   // Canvas default constructor

   if (gThreadXAR) {
      void *arr[2];
      arr[1] = this;
      if ((*gThreadXAR)("CANV", 2, arr, 0)) return;
   }

   Init();

   fCanvas    = 0;
   fCanvasID  = -1;
   fCanvasImp = 0;
   fBatch     = kTRUE;
   fUpdating  = kFALSE;

   fContextMenu   = 0;
   fSelected      = 0;
   fClickSelected = 0;
   fSelectedPad   = 0;
   fClickSelectedPad = 0;
   fPadSave       = 0;
   SetBit(kAutoExec);
   SetBit(kShowEditor);
   SetBit(kShowToolBar);
}

//______________________________________________________________________________
TCanvas::TCanvas(const char *name, Int_t ww, Int_t wh, Int_t winid) : TPad(), fDoubleBuffer(0)
{
   // Create an embedded canvas, i.e. a canvas that is in a TGCanvas widget
   // which is placed in a TGFrame. This ctor is only called via the
   // TRootEmbeddedCanvas class.
   //
   //  If "name" starts with "gl" the canvas is ready to receive GL output.

   fPainter = 0;
   Init();

   fCanvasID     = winid;
   fWindowTopX   = 0;
   fWindowTopY   = 0;
   fWindowWidth  = ww;
   fWindowHeight = wh;
   fCw           = ww + 4;
   fCh           = wh +28;
   fBatch        = kFALSE;
   fUpdating     = kFALSE;

   //This is a very special ctor. A window exists already!
   //Can create painter now.
   fUseGL = gStyle->GetCanvasPreferGL();

   if (fUseGL) {
      fGLDevice = gGLManager->CreateGLContext(winid);
      if (fGLDevice == -1)
         fUseGL = kFALSE;
   }

   CreatePainter();

   fCanvasImp    = gBatchGuiFactory->CreateCanvasImp(this, name, fCw, fCh);
   if (!fCanvasImp) return;
   SetName(name);
   Build();
}

//_____________________________________________________________________________
TCanvas::TCanvas(const char *name, const char *title, Int_t form) : TPad(), fDoubleBuffer(0)
{
   //  Create a new canvas with a predefined size form.
   //  If form < 0  the menubar is not shown.
   //
   //  form = 1    700x500 at 10,10 (set by TStyle::SetCanvasDefH,W,X,Y)
   //  form = 2    500x500 at 20,20
   //  form = 3    500x500 at 30,30
   //  form = 4    500x500 at 40,40
   //  form = 5    500x500 at 50,50
   //
   //  If "name" starts with "gl" the canvas is ready to receive GL output.

   fPainter = 0;
   fUseGL = gStyle->GetCanvasPreferGL();

   Constructor(name, title, form);
}

//_____________________________________________________________________________
void TCanvas::Constructor(const char *name, const char *title, Int_t form)
{
   //  Create a new canvas with a predefined size form.
   //  If form < 0  the menubar is not shown.
   //
   //  form = 1    700x500 at 10,10 (set by TStyle::SetCanvasDefH,W,X,Y)
   //  form = 2    500x500 at 20,20
   //  form = 3    500x500 at 30,30
   //  form = 4    500x500 at 40,40
   //  form = 5    500x500 at 50,50

   if (gThreadXAR) {
      void *arr[6];
      static Int_t ww = 500;
      static Int_t wh = 500;
      arr[1] = this; arr[2] = (void*)name; arr[3] = (void*)title; arr[4] =&ww; arr[5] = &wh;
      if ((*gThreadXAR)("CANV", 6, arr, 0)) return;
   }

   Init();
   SetBit(kMenuBar,1);
   if (form < 0) {
      form     = -form;
      SetBit(kMenuBar,0);
   }

   fCanvas = this;

   fCanvasID = -1;
   TCanvas *old = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(name);
   if (old && old->IsOnHeap()) {
      Warning("Constructor","Deleting canvas with same name: %s",name);
      delete old;
   }
   if (!name[0] || gROOT->IsBatch()) {   //We are in Batch mode
      fWindowTopX = fWindowTopY = 0;
      if (form == 1) {
         fWindowWidth  = gStyle->GetCanvasDefW();
         fWindowHeight = gStyle->GetCanvasDefH();
      } else {
         fWindowWidth  = 500;
         fWindowHeight = 500;
      }
      fCw           = fWindowWidth;
      fCh           = fWindowHeight;
      fCanvasImp    = gBatchGuiFactory->CreateCanvasImp(this, name, fCw, fCh);
      if (!fCanvasImp) return;
      fBatch        = kTRUE;
   } else {                  //normal mode with a screen window
      Float_t cx = gStyle->GetScreenFactor();
      if (form < 1 || form > 5) form = 1;
      if (form == 1) {
         UInt_t uh = UInt_t(cx*gStyle->GetCanvasDefH());
         UInt_t uw = UInt_t(cx*gStyle->GetCanvasDefW());
         Int_t  ux = Int_t(cx*gStyle->GetCanvasDefX());
         Int_t  uy = Int_t(cx*gStyle->GetCanvasDefY());
         fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, ux, uy, uw, uh);
      }
      fCw = 500;
      fCh = 500;
      if (form == 2) fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, 20, 20, UInt_t(cx*500), UInt_t(cx*500));
      if (form == 3) fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, 30, 30, UInt_t(cx*500), UInt_t(cx*500));
      if (form == 4) fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, 40, 40, UInt_t(cx*500), UInt_t(cx*500));
      if (form == 5) fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, 50, 50, UInt_t(cx*500), UInt_t(cx*500));
      if (!fCanvasImp) return;

      if (!gROOT->IsBatch() && fCanvasID == -1)
         fCanvasID = fCanvasImp->InitWindow();

      fCanvasImp->ShowMenuBar(TestBit(kMenuBar));
      fBatch = kFALSE;
   }

   CreatePainter();

   SetName(name);
   SetTitle(title); // requires fCanvasImp set
   Build();

   // Popup canvas
   fCanvasImp->Show();
}

//_____________________________________________________________________________
TCanvas::TCanvas(const char *name, const char *title, Int_t ww, Int_t wh) : TPad(), fDoubleBuffer(0)
{
   //  Create a new canvas at a random position.
   //
   //  ww is the canvas size in pixels along X
   //      (if ww < 0  the menubar is not shown)
   //  wh is the canvas size in pixels along Y
   //
   //  If "name" starts with "gl" the canvas is ready to receive GL output.
   fPainter = 0;
   fUseGL = gStyle->GetCanvasPreferGL();

   Constructor(name, title, ww, wh);
}

//_____________________________________________________________________________
void TCanvas::Constructor(const char *name, const char *title, Int_t ww, Int_t wh)
{
   //  Create a new canvas at a random position.
   //
   //  ww is the canvas size in pixels along X
   //      (if ww < 0  the menubar is not shown)
   //  wh is the canvas size in pixels along Y

   if (gThreadXAR) {
      void *arr[6];
      arr[1] = this; arr[2] = (void*)name; arr[3] = (void*)title; arr[4] =&ww; arr[5] = &wh;
      if ((*gThreadXAR)("CANV", 6, arr, 0)) return;
   }

   Init();
   SetBit(kMenuBar,1);
   if (ww < 0) {
      ww       = -ww;
      SetBit(kMenuBar,0);
   }
   fCw       = ww;
   fCh       = wh;
   fCanvasID = -1;
   TCanvas *old = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(name);
   if (old && old->IsOnHeap()) {
      Warning("Constructor","Deleting canvas with same name: %s",name);
      delete old;
   }
   if (!name[0] || gROOT->IsBatch()) {   //We are in Batch mode
      fWindowTopX   = fWindowTopY = 0;
      fWindowWidth  = ww;
      fWindowHeight = wh;
      fCw           = ww;
      fCh           = wh;
      fCanvasImp    = gBatchGuiFactory->CreateCanvasImp(this, name, fCw, fCh);
      if (!fCanvasImp) return;
      fBatch        = kTRUE;
   } else {
      Float_t cx = gStyle->GetScreenFactor();
      fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, UInt_t(cx*ww), UInt_t(cx*wh));
      if (!fCanvasImp) return;

      if (!gROOT->IsBatch() && fCanvasID == -1)
         fCanvasID = fCanvasImp->InitWindow();

      fCanvasImp->ShowMenuBar(TestBit(kMenuBar));
      fBatch = kFALSE;
   }

   CreatePainter();

   SetName(name);
   SetTitle(title); // requires fCanvasImp set
   Build();

   // Popup canvas
   fCanvasImp->Show();
}

//_____________________________________________________________________________
TCanvas::TCanvas(const char *name, const char *title, Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh)
        : TPad(), fDoubleBuffer(0)
{
   //  Create a new canvas.
   //
   //  wtopx,wtopy are the pixel coordinates of the top left corner of
   //  the canvas (if wtopx < 0) the menubar is not shown)
   //  ww is the canvas size in pixels along X
   //  wh is the canvas size in pixels along Y
   //
   //  If "name" starts with "gl" the canvas is ready to receive GL output.

   fPainter = 0;
   fUseGL = gStyle->GetCanvasPreferGL();

   Constructor(name, title, wtopx, wtopy, ww, wh);
}

//_____________________________________________________________________________
void TCanvas::Constructor(const char *name, const char *title, Int_t wtopx,
                          Int_t wtopy, Int_t ww, Int_t wh)
{
   //  Create a new canvas.
   //
   //  wtopx,wtopy are the pixel coordinates of the top left corner of
   //  the canvas (if wtopx < 0) the menubar is not shown)
   //  ww is the canvas size in pixels along X
   //  wh is the canvas size in pixels along Y

   if (gThreadXAR) {
      void *arr[8];
      arr[1] = this;   arr[2] = (void*)name;   arr[3] = (void*)title;
      arr[4] = &wtopx; arr[5] = &wtopy; arr[6] = &ww; arr[7] = &wh;
      if ((*gThreadXAR)("CANV", 8, arr, 0)) return;
   }

   Init();
   SetBit(kMenuBar,1);
   if (wtopx < 0) {
      wtopx    = -wtopx;
      SetBit(kMenuBar,0);
   }
   fCw       = ww;
   fCh       = wh;
   fCanvasID = -1;
   TCanvas *old = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(name);
   if (old && old->IsOnHeap()) {
      Warning("Constructor","Deleting canvas with same name: %s",name);
      delete old;
   }
   if (!name[0] || gROOT->IsBatch()) {   //We are in Batch mode
      fWindowTopX   = fWindowTopY = 0;
      fWindowWidth  = ww;
      fWindowHeight = wh;
      fCw           = ww;
      fCh           = wh;
      fCanvasImp    = gBatchGuiFactory->CreateCanvasImp(this, name, fCw, fCh);
      if (!fCanvasImp) return;
      fBatch        = kTRUE;
   } else {                   //normal mode with a screen window
      Float_t cx = gStyle->GetScreenFactor();
      fCanvasImp = gGuiFactory->CreateCanvasImp(this, name, Int_t(cx*wtopx), Int_t(cx*wtopy), UInt_t(cx*ww), UInt_t(cx*wh));
      if (!fCanvasImp) return;

      if (!gROOT->IsBatch() && fCanvasID == -1)
         fCanvasID = fCanvasImp->InitWindow();

      fCanvasImp->ShowMenuBar(TestBit(kMenuBar));
      fBatch = kFALSE;
   }

   CreatePainter();

   SetName(name);
   SetTitle(title); // requires fCanvasImp set
   Build();

   // Popup canvas
   fCanvasImp->Show();
}

//_____________________________________________________________________________
void TCanvas::Init()
{
   // Initialize the TCanvas members. Called by all constructors.

   // Make sure the application environment exists. It is need for graphics
   // (colors are initialized in the TApplication ctor).
   if (!gApplication)
      TApplication::CreateApplication();

   // Load and initialize graphics libraries if
   // TApplication::NeedGraphicsLibs() has been called by a
   // library static initializer.
   if (gApplication)
      gApplication->InitializeGraphics();

   // Get some default from .rootrc. Used in fCanvasImp->InitWindow().
   fHighLightColor     = gEnv->GetValue("Canvas.HighLightColor", kRed);
   SetBit(kMoveOpaque,   gEnv->GetValue("Canvas.MoveOpaque", 0));
   SetBit(kResizeOpaque, gEnv->GetValue("Canvas.ResizeOpaque", 0));
   if (gEnv->GetValue("Canvas.ShowEventStatus", kFALSE)) SetBit(kShowEventStatus);
   if (gEnv->GetValue("Canvas.ShowToolTips", kFALSE)) SetBit(kShowToolTips);
   if (gEnv->GetValue("Canvas.ShowToolBar", kFALSE)) SetBit(kShowToolBar);
   if (gEnv->GetValue("Canvas.ShowEditor", kFALSE)) SetBit(kShowEditor);
   if (gEnv->GetValue("Canvas.AutoExec", kTRUE)) SetBit(kAutoExec);

   // Fill canvas ROOT data structure
   fXsizeUser = 0;
   fYsizeUser = 0;
   fXsizeReal = kDefaultCanvasSize;
   fYsizeReal = kDefaultCanvasSize;

   fDISPLAY         = "$DISPLAY";
   fUpdating        = kFALSE;
   fRetained        = kTRUE;
   fSelected        = 0;
   fClickSelected   = 0;
   fSelectedX       = 0;
   fSelectedY       = 0;
   fSelectedPad     = 0;
   fClickSelectedPad= 0;
   fPadSave         = 0;
   fEvent           = -1;
   fEventX          = -1;
   fEventY          = -1;
   fContextMenu     = 0;
}

//_____________________________________________________________________________
void TCanvas::Build()
{
   // Build a canvas. Called by all constructors.

   // Get window identifier
   if (fCanvasID == -1 && fCanvasImp)
      fCanvasID = fCanvasImp->InitWindow();
   if (fCanvasID == -1) return;

   if (fCw !=0 && fCh !=0) {
      if (fCw < fCh) fXsizeReal = fYsizeReal*Float_t(fCw)/Float_t(fCh);
      else           fYsizeReal = fXsizeReal*Float_t(fCh)/Float_t(fCw);
   }

   // Set Pad parameters
   gPad            = this;
   fCanvas         = this;
   fMother         = (TPad*)gPad;

   if (!IsBatch()) {    //normal mode with a screen window
      // Set default physical canvas attributes
      //Should be done via gVirtualX, not via fPainter (at least now). No changes here.
      gVirtualX->SelectWindow(fCanvasID);
      gVirtualX->SetFillColor(1);         //Set color index for fill area
      gVirtualX->SetLineColor(1);         //Set color index for lines
      gVirtualX->SetMarkerColor(1);       //Set color index for markers
      gVirtualX->SetTextColor(1);         //Set color index for text
      // Clear workstation
      gVirtualX->ClearWindow();

      // Set Double Buffer on by default
      SetDoubleBuffer(1);

      // Get effective window parameters (with borders and menubar)
      fCanvasImp->GetWindowGeometry(fWindowTopX, fWindowTopY,
                                    fWindowWidth, fWindowHeight);

      // Get effective canvas parameters without borders
      Int_t dum1, dum2;
      gVirtualX->GetGeometry(fCanvasID, dum1, dum2, fCw, fCh);

      fContextMenu = new TContextMenu("ContextMenu");
   } else {
      // Make sure that batch interactive canvas sizes are the same
      fCw -= 4;
      fCh -= 28;
   }
   gROOT->GetListOfCanvases()->Add(this);

   if (!fPrimitives) {
      fPrimitives     = new TList;
      SetFillColor(gStyle->GetCanvasColor());
      SetFillStyle(1001);
      SetGrid(gStyle->GetPadGridX(),gStyle->GetPadGridY());
      SetTicks(gStyle->GetPadTickX(),gStyle->GetPadTickY());
      SetLogx(gStyle->GetOptLogx());
      SetLogy(gStyle->GetOptLogy());
      SetLogz(gStyle->GetOptLogz());
      SetBottomMargin(gStyle->GetPadBottomMargin());
      SetTopMargin(gStyle->GetPadTopMargin());
      SetLeftMargin(gStyle->GetPadLeftMargin());
      SetRightMargin(gStyle->GetPadRightMargin());
      SetBorderSize(gStyle->GetCanvasBorderSize());
      SetBorderMode(gStyle->GetCanvasBorderMode());
      fBorderMode=gStyle->GetCanvasBorderMode(); // do not call SetBorderMode (function redefined in TCanvas)
      SetPad(0, 0, 1, 1);
      Range(0, 0, 1, 1);   //pad range is set by default to [0,1] in x and y

      TVirtualPadPainter *vpp = GetCanvasPainter();
      if (vpp) vpp->SelectDrawable(fPixmapID);//gVirtualX->SelectPixmap(fPixmapID);    //pixmap must be selected
      PaintBorder(GetFillColor(), kTRUE);    //paint background
   }

   // transient canvases have typically no menubar and should not get
   // by default the event status bar (if set by default)
   if (TestBit(kMenuBar) && fCanvasImp) {
      if (TestBit(kShowEventStatus)) fCanvasImp->ShowStatusBar(kTRUE);
      // ... and toolbar + editor
      if (TestBit(kShowToolBar))     fCanvasImp->ShowToolBar(kTRUE);
      if (TestBit(kShowEditor))      fCanvasImp->ShowEditor(kTRUE);
      if (TestBit(kShowToolTips))    fCanvasImp->ShowToolTips(kTRUE);
   }
}

//______________________________________________________________________________
TCanvas::~TCanvas()
{
   // Canvas destructor

   Destructor();
}

//______________________________________________________________________________
void TCanvas::Browse(TBrowser *b)
{
   // Browse.

   Draw();
   cd();
   if (fgIsFolder) fPrimitives->Browse(b);
}

//______________________________________________________________________________
void TCanvas::Destructor()
{
   // Actual canvas destructor.

   if (gThreadXAR) {
      void *arr[2];
      arr[1] = this;
      if ((*gThreadXAR)("CDEL", 2, arr, 0)) return;
   }

   if (!TestBit(kNotDeleted)) return;

   if (fContextMenu) { delete fContextMenu; fContextMenu = 0; }
   if (!gPad) return;

   Close();

   //If not yet (batch mode?).
   delete fPainter;
}

//______________________________________________________________________________
TVirtualPad *TCanvas::cd(Int_t subpadnumber)
{
   // Set current canvas & pad. Returns the new current pad,
   // or 0 in case of failure.
   // See TPad::cd() for an explanation of the parameter.

   if (fCanvasID == -1) return 0;

   TPad::cd(subpadnumber);

   // in case doublebuffer is off, draw directly onto display window
   if (!IsBatch()) {
      if (!fDoubleBuffer)
         gVirtualX->SelectWindow(fCanvasID);//Ok, does not matter for glpad.
   }
   return gPad;
}

//______________________________________________________________________________
void TCanvas::Clear(Option_t *option)
{
   // Remove all primitives from the canvas.
   // If option "D" is specified, direct subpads are cleared but not deleted.
   // This option is not recursive, i.e. pads in direct subpads are deleted.

   if (fCanvasID == -1) return;

   R__LOCKGUARD2(gROOTMutex);

   TString opt = option;
   opt.ToLower();
   if (opt.Contains("d")) {
      // clear subpads, but do not delete pads in case the canvas
      // has been divided (note: option "D" is propagated so could cause
      // conflicts for primitives using option "D" for something else)
      if (fPrimitives) {
         TIter next(fPrimitives);
         TObject *obj;
         while ((obj=next())) {
            obj->Clear(option);
         }
      }
   } else {
      //default, clear everything in the canvas. Subpads are deleted
      TPad::Clear(option);   //Remove primitives from pad
   }

   fSelected      = 0;
   fClickSelected = 0;
   fSelectedPad   = 0;
   fClickSelectedPad = 0;
}

//______________________________________________________________________________
void TCanvas::Cleared(TVirtualPad *pad)
{
   // Emit pad Cleared signal.

   Emit("Cleared(TVirtualPad*)", (Long_t)pad);
}

//______________________________________________________________________________
void TCanvas::Closed()
{
   // Emit Closed signal.

   Emit("Closed()");
}

//______________________________________________________________________________
void TCanvas::Close(Option_t *option)
{
   // Close canvas.
   //
   //  Delete window/pads data structure

   TPad    *padsave = (TPad*)gPad;
   TCanvas *cansave = 0;
   if (padsave) cansave = (TCanvas*)gPad->GetCanvas();

   if (fCanvasID != -1) {

      if ((!gROOT->IsLineProcessing()) && (!gVirtualX->IsCmdThread())) {
         gInterpreter->Execute(this, IsA(), "Close", option);
         return;
      }

      R__LOCKGUARD2(gROOTMutex);

      FeedbackMode(kFALSE);

      cd();
      TPad::Close(option);

      if (!IsBatch()) {
         gVirtualX->SelectWindow(fCanvasID);    //select current canvas

         DeleteCanvasPainter();

         if (fCanvasImp) fCanvasImp->Close();
      }
      fCanvasID = -1;
      fBatch    = kTRUE;

      gROOT->GetListOfCanvases()->Remove(this);

      // Close actual window on screen
      SafeDelete(fCanvasImp);
   }

   if (cansave == this) {
      gPad = (TCanvas *) gROOT->GetListOfCanvases()->First();
   } else {
      gPad = padsave;
   }

   Closed();
}

//______________________________________________________________________________
void TCanvas::CopyPixmaps()
{
   // Copy the canvas pixmap of the pad to the canvas.

   if (!IsBatch()) {
      CopyPixmap();
      TPad::CopyPixmaps();
   }
}

//______________________________________________________________________________
void TCanvas::Draw(Option_t *)
{
   //  Draw a canvas.
   //  If a canvas with the name is already on the screen, the canvas is repainted.
   //  This function is useful when a canvas object has been saved in a Root file.
   //  One can then do:
   //     Root > Tfile f("file.root");
   //     Root > canvas.Draw();

   // Load and initialize graphics libraries if
   // TApplication::NeedGraphicsLibs() has been called by a
   // library static initializer.
   if (gApplication)
      gApplication->InitializeGraphics();

   TCanvas *old = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(GetName());
   if (old == this) {
      Paint();
      return;
   }
   if (old) { gROOT->GetListOfCanvases()->Remove(old); delete old;}

   if (fWindowWidth  == 0) {
      if (fCw !=0) fWindowWidth = fCw+4;
      else         fWindowWidth = 800;
   }
   if (fWindowHeight == 0) {
      if (fCh !=0) fWindowHeight = fCh+28;
      else         fWindowHeight = 600;
   }
   if (gROOT->IsBatch()) {   //We are in Batch mode
      fCanvasImp  = gBatchGuiFactory->CreateCanvasImp(this, GetName(), fWindowWidth, fWindowHeight);
      if (!fCanvasImp) return;
      fBatch = kTRUE;

   } else {                   //normal mode with a screen window
      fCanvasImp = gGuiFactory->CreateCanvasImp(this, GetName(), fWindowTopX, fWindowTopY,
                                                fWindowWidth, fWindowHeight);
      if (!fCanvasImp) return;
      fCanvasImp->ShowMenuBar(TestBit(kMenuBar));
   }
   Build();
   ResizePad();
   fCanvasImp->Show();
   Modified();
}

//______________________________________________________________________________
TObject *TCanvas::DrawClone(Option_t *option) const
{
   // Draw a clone of this canvas
   // A new canvas is created that is a clone of this canvas

   const char *defcanvas = gROOT->GetDefCanvasName();
   char *cdef;

   TList *lc = (TList*)gROOT->GetListOfCanvases();
   if (lc->FindObject(defcanvas))
      cdef = Form("%s_n%d",defcanvas,lc->GetSize()+1);
   else
      cdef = Form("%s",defcanvas);

   TCanvas *newCanvas = (TCanvas*)Clone();
   newCanvas->SetName(cdef);

   newCanvas->Draw(option);
   newCanvas->Update();
   return newCanvas;
}

//______________________________________________________________________________
TObject *TCanvas::DrawClonePad()
{
   // Draw a clone of this canvas into the current pad
   // In an interactive session, select the destination/current pad
   // with the middle mouse button, then point to the canvas area to select
   // the canvas context menu item DrawClonePad.
   // Note that the original canvas may have subpads.

   TPad *padsav = (TPad*)gPad;
   TPad *selpad = (TPad*)gROOT->GetSelectedPad();
   TPad *pad = padsav;
   if (pad == this) pad = selpad;
   if (padsav == 0 || pad == 0 || pad == this) {
      TCanvas *newCanvas = (TCanvas*)DrawClone();
      newCanvas->SetWindowSize(GetWindowWidth(),GetWindowHeight());
      return newCanvas;
   }
   if (fCanvasID == -1) {
      fCanvasImp = gGuiFactory->CreateCanvasImp(this, GetName(), fWindowTopX, fWindowTopY,
                                             fWindowWidth, fWindowHeight);
      if (!fCanvasImp) return 0;
      fCanvasImp->ShowMenuBar(TestBit(kMenuBar));
      fCanvasID = fCanvasImp->InitWindow();
   }
   this->cd();
   TObject *obj, *clone;
   //copy pad attributes
   pad->Range(fX1,fY1,fX2,fY2);
   pad->SetTickx(GetTickx());
   pad->SetTicky(GetTicky());
   pad->SetGridx(GetGridx());
   pad->SetGridy(GetGridy());
   pad->SetLogx(GetLogx());
   pad->SetLogy(GetLogy());
   pad->SetLogz(GetLogz());
   pad->SetBorderSize(GetBorderSize());
   pad->SetBorderMode(GetBorderMode());
   TAttLine::Copy((TAttLine&)*pad);
   TAttFill::Copy((TAttFill&)*pad);
   TAttPad::Copy((TAttPad&)*pad);

   //copy primitives
   TIter next(GetListOfPrimitives());
   while ((obj=next())) {
      pad->cd();
      clone = obj->Clone();
      pad->GetListOfPrimitives()->Add(clone,next.GetOption());
   }
   pad->ResizePad();
   pad->Modified();
   pad->Update();
   if (padsav) padsav->cd();
   return 0;
}

//______________________________________________________________________________
void TCanvas::DrawEventStatus(Int_t event, Int_t px, Int_t py, TObject *selected)
{
   // Report name and title of primitive below the cursor.
   //
   //    This function is called when the option "Event Status"
   //    in the canvas menu "Options" is selected.

   const Int_t kTMAX=256;
   static char atext[kTMAX];

   if (!TestBit(kShowEventStatus) || !selected) return;

   if (!fCanvasImp) return; //this may happen when closing a TAttCanvas

   TVirtualPad* savepad;
   savepad = gPad;
   gPad = GetSelectedPad();

   fCanvasImp->SetStatusText(selected->GetTitle(),0);
   fCanvasImp->SetStatusText(selected->GetName(),1);
   if (event == kKeyPress)
      snprintf(atext, kTMAX, "%c", (char) px);
   else
      snprintf(atext, kTMAX, "%d,%d", px, py);
   fCanvasImp->SetStatusText(atext,2);
   fCanvasImp->SetStatusText(selected->GetObjectInfo(px,py),3);
   gPad = savepad;
}

//______________________________________________________________________________
void TCanvas::EditorBar()
{
   // Get editor bar.

   TVirtualPadEditor::GetPadEditor();
}

//______________________________________________________________________________
void TCanvas::EmbedInto(Int_t winid, Int_t ww, Int_t wh)
{
   // Embedded a canvas into a TRootEmbeddedCanvas. This method is only called
   // via TRootEmbeddedCanvas::AdoptCanvas.

   // If fCanvasImp already exists, no need to go further.
   if(fCanvasImp) return;

   fCanvasID     = winid;
   fWindowTopX   = 0;
   fWindowTopY   = 0;
   fWindowWidth  = ww;
   fWindowHeight = wh;
   fCw           = ww;
   fCh           = wh;
   fBatch        = kFALSE;
   fUpdating     = kFALSE;

   fCanvasImp    = gBatchGuiFactory->CreateCanvasImp(this, GetName(), fCw, fCh);
   if (!fCanvasImp) return;
   Build();
   Resize();
}

//______________________________________________________________________________
void TCanvas::EnterLeave(TPad *prevSelPad, TObject *prevSelObj)
{
   // Generate kMouseEnter and kMouseLeave events depending on the previously
   // selected object and the currently selected object. Does nothing if the
   // selected object does not change.

   if (prevSelObj == fSelected) return;

   TPad *padsav = (TPad *)gPad;
   Int_t sevent = fEvent;

   if (prevSelObj) {
      gPad = prevSelPad;
      prevSelObj->ExecuteEvent(kMouseLeave, fEventX, fEventY);
      fEvent = kMouseLeave;
      RunAutoExec();
      ProcessedEvent(kMouseLeave, fEventX, fEventY, prevSelObj);  // emit signal
   }

   gPad = fSelectedPad;

   if (fSelected) {
      fSelected->ExecuteEvent(kMouseEnter, fEventX, fEventY);
      fEvent = kMouseEnter;
      RunAutoExec();
      ProcessedEvent(kMouseEnter, fEventX, fEventY, fSelected);  // emit signal
   }

   fEvent = sevent;
   gPad   = padsav;
}

//______________________________________________________________________________
void TCanvas::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
   // Execute action corresponding to one event.
   //
   //  This member function must be implemented to realize the action
   //  corresponding to the mouse click on the object in the canvas
   //
   //  Only handle mouse motion events in TCanvas, all other events are
   //  ignored for the time being

   if (gROOT->GetEditorMode()) {
      TPad::ExecuteEvent(event,px,py);
      return;
   }

   switch (event) {

   case kMouseMotion:
      SetCursor(kCross);
      break;
   }
}

//______________________________________________________________________________
void TCanvas::FeedbackMode(Bool_t set)
{
   // Turn rubberband feedback mode on or off.

   if (set) {
      SetDoubleBuffer(0);             // turn off double buffer mode
      gVirtualX->SetDrawMode(TVirtualX::kInvert);  // set the drawing mode to XOR mode
   } else {
      SetDoubleBuffer(1);             // turn on double buffer mode
      gVirtualX->SetDrawMode(TVirtualX::kCopy); // set drawing mode back to normal (copy) mode
   }
}

//______________________________________________________________________________
void TCanvas::Flush()
{
   // Flush canvas buffers.

   if (fCanvasID == -1) return;

   TPad *padsav = (TPad*)gPad;
   cd();
   if (!IsBatch()) {
      if (!UseGL()) {
         gVirtualX->SelectWindow(fCanvasID);
         gPad = padsav; //don't do cd() because than also the pixmap is changed
         CopyPixmaps();
         gVirtualX->UpdateWindow(1);
      } else {
         TVirtualPS *tvps = gVirtualPS;
         gVirtualPS = 0;
         gGLManager->MakeCurrent(fGLDevice);
         fPainter->InitPainter();
         Paint();
         if (padsav && padsav->GetCanvas() == this) {
            padsav->cd();
            padsav->HighLight(padsav->GetHighLightColor());
            //cd();
         }
         fPainter->LockPainter();
         gGLManager->Flush(fGLDevice);
         gVirtualPS = tvps;
      }
   }
   if (padsav) padsav->cd();
}

//______________________________________________________________________________
void TCanvas::UseCurrentStyle()
{
   // Force a copy of current style for all objects in canvas.

   if ((!gROOT->IsLineProcessing()) && (!gVirtualX->IsCmdThread())) {
      gInterpreter->Execute(this, IsA(), "UseCurrentStyle", "");
      return;
   }

   R__LOCKGUARD2(gROOTMutex);

   TPad::UseCurrentStyle();

   if (gStyle->IsReading()) {
      SetFillColor(gStyle->GetCanvasColor());
      fBorderSize = gStyle->GetCanvasBorderSize();
      fBorderMode = gStyle->GetCanvasBorderMode();
   } else {
      gStyle->SetCanvasColor(GetFillColor());
      gStyle->SetCanvasBorderSize(fBorderSize);
      gStyle->SetCanvasBorderMode(fBorderMode);
   }
}

//______________________________________________________________________________
Int_t TCanvas::GetWindowTopX()
{
   // Returns current top x position of window on screen.

   if (fCanvasImp) fCanvasImp->GetWindowGeometry(fWindowTopX, fWindowTopY,
                                                 fWindowWidth,fWindowHeight);

   return fWindowTopX;
}

//______________________________________________________________________________
Int_t TCanvas::GetWindowTopY()
{
   // Returns current top y position of window on screen.

   if (fCanvasImp) fCanvasImp->GetWindowGeometry(fWindowTopX, fWindowTopY,
                                                 fWindowWidth,fWindowHeight);

   return fWindowTopY;
}

//______________________________________________________________________________
void TCanvas::HandleInput(EEventType event, Int_t px, Int_t py)
{
   // Handle Input Events.
   //
   //  Handle input events, like button up/down in current canvas.

   TPad    *pad;
   TPad    *prevSelPad = (TPad*) fSelectedPad;
   TObject *prevSelObj = fSelected;

   fPadSave = (TPad*)gPad;
   cd();        // make sure this canvas is the current canvas

   fEvent  = event;
   fEventX = px;
   fEventY = py;

   switch (event) {

   case kMouseMotion:
      // highlight object tracked over
      pad = Pick(px, py, prevSelObj);
      if (!pad) return;

      EnterLeave(prevSelPad, prevSelObj);

      gPad = pad;   // don't use cd() we will use the current
                    // canvas via the GetCanvas member and not via
                    // gPad->GetCanvas

      if (fSelected) {
         fSelected->ExecuteEvent(event, px, py);
         RunAutoExec();
      }

      break;

   case kMouseEnter:
      // mouse enters canvas
      if (!fDoubleBuffer) FeedbackMode(kTRUE);
      break;

   case kMouseLeave:
      // mouse leaves canvas
      {
         // force popdown of tooltips
         TObject *sobj = fSelected;
         TPad    *spad = fSelectedPad;
         fSelected     = 0;
         fSelectedPad  = 0;
         EnterLeave(prevSelPad, prevSelObj);
         fSelected     = sobj;
         fSelectedPad  = spad;
         if (!fDoubleBuffer) FeedbackMode(kFALSE);
      }
      break;

   case kButton1Double:
      // triggered on the second button down within 350ms and within
      // 3x3 pixels of the first button down, button up finishes action

   case kButton1Down:
      // find pad in which input occured
      pad = Pick(px, py, prevSelObj);
      if (!pad) return;

      gPad = pad;   // don't use cd() because we won't draw in pad
                    // we will only use its coordinate system

      if (fSelected) {
         FeedbackMode(kTRUE);   // to draw in rubberband mode
         fSelected->ExecuteEvent(event, px, py);

         RunAutoExec();
      }

      break;

   case kArrowKeyPress:
   case kArrowKeyRelease:
   case kButton1Motion:
   case kButton1ShiftMotion: //8 == kButton1Motion + shift modifier
      if (fSelected) {
         gPad = fSelectedPad;

         fSelected->ExecuteEvent(event, px, py);
         gVirtualX->Update();

         if (!fSelected->InheritsFrom(TAxis::Class())) {
            Bool_t resize = kFALSE;
            if (fSelected->InheritsFrom(TBox::Class()))
               resize = ((TBox*)fSelected)->IsBeingResized();
            if (fSelected->InheritsFrom(TVirtualPad::Class()))
               resize = ((TVirtualPad*)fSelected)->IsBeingResized();

            if ((!resize && TestBit(kMoveOpaque)) || (resize && TestBit(kResizeOpaque))) {
               gPad = fPadSave;
               Update();
               FeedbackMode(kTRUE);
            }
         }

         RunAutoExec();
      }

      break;

   case kButton1Up:

      if (fSelected) {
         gPad = fSelectedPad;

         fSelected->ExecuteEvent(event, px, py);

         RunAutoExec();

         if (fPadSave)
            gPad = fPadSave;
         else {
            gPad     = this;
            fPadSave = this;
         }

         Update();    // before calling update make sure gPad is reset
      }
      break;

//*-*----------------------------------------------------------------------

   case kButton2Down:
      // find pad in which input occured
      pad = Pick(px, py, prevSelObj);
      if (!pad) return;

      gPad = pad;   // don't use cd() because we won't draw in pad
                    // we will only use its coordinate system

      FeedbackMode(kTRUE);

      if (fSelected) fSelected->Pop();  // pop object to foreground
      pad->cd();                        // and make its pad the current pad
      if (gDebug)
         printf("Current Pad: %s / %s\n", pad->GetName(), pad->GetTitle());

      // loop over all canvases to make sure that only one pad is highlighted
      {
         TIter next(gROOT->GetListOfCanvases());
         TCanvas *tc;
         while ((tc = (TCanvas *)next()))
            tc->Update();
      }

      //if (pad->GetGLDevice() != -1 && fSelected)
      //   fSelected->ExecuteEvent(event, px, py);

      break;   // don't want fPadSave->cd() to be executed at the end

   case kButton2Motion:
      //was empty!
   case kButton2Up:
      if (fSelected) {
         gPad = fSelectedPad;

         fSelected->ExecuteEvent(event, px, py);
         RunAutoExec();
      }
      break;

   case kButton2Double:
      break;

//*-*----------------------------------------------------------------------

   case kButton3Down:
      // popup context menu
      pad = Pick(px, py, prevSelObj);
      if (!pad) return;

      if (!fDoubleBuffer) FeedbackMode(kFALSE);

      if (fContextMenu && fSelected && !fSelected->TestBit(kNoContextMenu) &&
         !pad->TestBit(kNoContextMenu) && !TestBit(kNoContextMenu))
         fContextMenu->Popup(px, py, fSelected, this, pad);

      break;

   case kButton3Motion:
      break;

   case kButton3Up:
      if (!fDoubleBuffer) FeedbackMode(kTRUE);
      break;

   case kButton3Double:
      break;

   case kKeyPress:
      if (!fSelectedPad || !fSelected) return;
      gPad = fSelectedPad;   // don't use cd() because we won't draw in pad
                    // we will only use its coordinate system
      fSelected->ExecuteEvent(event, px, py);

      RunAutoExec();

      break;

   case kButton1Shift:
      // Try to select
      pad = Pick(px, py, prevSelObj);

      if (!pad) return;

      EnterLeave(prevSelPad, prevSelObj);

      gPad = pad;   // don't use cd() we will use the current
                    // canvas via the GetCanvas member and not via
                    // gPad->GetCanvas
      if (fSelected) {
         fSelected->ExecuteEvent(event, px, py);
         RunAutoExec();
      }
      break;

   case kWheelUp:
   case kWheelDown:
      pad = Pick(px, py, prevSelObj);
      if (!pad) return;

      gPad = pad;
      if (fSelected)
         fSelected->ExecuteEvent(event, px, py);
      break;

   default:
      break;
   }

   if (fPadSave && event != kButton2Down)
      fPadSave->cd();

   if (event != kMouseLeave) { // signal was already emitted for this event
      ProcessedEvent(event, px, py, fSelected);  // emit signal
      DrawEventStatus(event, px, py, fSelected);
   }
}

//______________________________________________________________________________
Bool_t TCanvas::IsFolder() const
{
   // Is folder ?

   return fgIsFolder;
}

//______________________________________________________________________________
void TCanvas::ls(Option_t *option) const
{
   // List all pads.

   TROOT::IndentLevel();
   std::cout <<"Canvas Name=" <<GetName()<<" Title="<<GetTitle()<<" Option="<<option<<std::endl;
   TROOT::IncreaseDirLevel();
   TPad::ls(option);
   TROOT::DecreaseDirLevel();
}

//______________________________________________________________________________
TCanvas *TCanvas::MakeDefCanvas()
{
   // Static function to build a default canvas.

   const char *defcanvas = gROOT->GetDefCanvasName();
   char *cdef;

   TList *lc = (TList*)gROOT->GetListOfCanvases();
   if (lc->FindObject(defcanvas)) {
      Int_t n = lc->GetSize() + 1;
      cdef = new char[strlen(defcanvas)+15];
      do {
         strlcpy(cdef,Form("%s_n%d", defcanvas, n++),strlen(defcanvas)+15);
      } while (lc->FindObject(cdef));
   } else
      cdef = StrDup(Form("%s",defcanvas));

   TCanvas *c = new TCanvas(cdef, cdef, 1);

   ::Info("TCanvas::MakeDefCanvas"," created default TCanvas with name %s",cdef);
   delete [] cdef;
   return c;
}

//______________________________________________________________________________
void TCanvas::MoveOpaque(Int_t set)
{
   // Set option to move objects/pads in a canvas.
   //
   //  if set = 1 (default) graphics objects are moved in opaque mode
   //         = 0 only the outline of objects is drawn when moving them
   //  The option opaque produces the best effect. It requires however a
   //  a reasonably fast workstation or response time.

   SetBit(kMoveOpaque,set);
}

//______________________________________________________________________________
void TCanvas::Paint(Option_t *option)
{
   // Paint canvas.

   if (fCanvas) TPad::Paint(option);
}

//______________________________________________________________________________
TPad *TCanvas::Pick(Int_t px, Int_t py, TObject *prevSelObj)
{
   // Prepare for pick, call TPad::Pick() and when selected object
   // is different from previous then emit Picked() signal.

   TObjLink *pickobj = 0;

   fSelected    = 0;
   fSelectedOpt = "";
   fSelectedPad = 0;

   TPad *pad = Pick(px, py, pickobj);
   if (!pad) return 0;

   if (!pickobj) {
      fSelected    = pad;
      fSelectedOpt = "";
   } else {
      if (!fSelected) {   // can be set via TCanvas::SetSelected()
         fSelected    = pickobj->GetObject();
         fSelectedOpt = pickobj->GetOption();
      }
   }
   fSelectedPad = pad;

   if (fSelected != prevSelObj)
      Picked(fSelectedPad, fSelected, fEvent);  // emit signal

   if ((fEvent == kButton1Down) || (fEvent == kButton2Down) || (fEvent == kButton3Down)) {
      if (fSelected && !fSelected->InheritsFrom(TView::Class())) {
         fClickSelected = fSelected;
         fClickSelectedPad = fSelectedPad;
         Selected(fSelectedPad, fSelected, fEvent);  // emit signal
         fSelectedX = px;
         fSelectedY = py;
      }
   }
   return pad;
}

//______________________________________________________________________________
void TCanvas::Picked(TPad *pad, TObject *obj, Int_t event)
{
   // Emit Picked() signal.

   Long_t args[3];

   args[0] = (Long_t) pad;
   args[1] = (Long_t) obj;
   args[2] = event;

   Emit("Picked(TPad*,TObject*,Int_t)", args);
}

//______________________________________________________________________________
void TCanvas::Selected(TVirtualPad *pad, TObject *obj, Int_t event)
{
   // Emit Selected() signal.

   Long_t args[3];

   args[0] = (Long_t) pad;
   args[1] = (Long_t) obj;
   args[2] = event;

   Emit("Selected(TVirtualPad*,TObject*,Int_t)", args);
}

//______________________________________________________________________________
void TCanvas::ProcessedEvent(Int_t event, Int_t x, Int_t y, TObject *obj)
{
   // Emit ProcessedEvent() signal.

   Long_t args[4];

   args[0] = event;
   args[1] = x;
   args[2] = y;
   args[3] = (Long_t) obj;

   Emit("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)", args);
}

//______________________________________________________________________________
void TCanvas::Resize(Option_t *)
{
   // Recompute canvas parameters following a X11 Resize.

   if (fCanvasID == -1) return;

   if ((!gROOT->IsLineProcessing()) && (!gVirtualX->IsCmdThread())) {
      gInterpreter->Execute(this, IsA(), "Resize", "");
      return;
   }

   R__LOCKGUARD2(gROOTMutex);

   TPad *padsav  = (TPad*)gPad;
   cd();

   if (!IsBatch()) {
      gVirtualX->SelectWindow(fCanvasID);      //select current canvas
      gVirtualX->ResizeWindow(fCanvasID);      //resize canvas and off-screen buffer

      // Get effective window parameters including menubar and borders
      fCanvasImp->GetWindowGeometry(fWindowTopX, fWindowTopY,
                                    fWindowWidth, fWindowHeight);

      // Get effective canvas parameters without borders
      Int_t dum1, dum2;
      gVirtualX->GetGeometry(fCanvasID, dum1, dum2, fCw, fCh);
   }

   if (fXsizeUser && fYsizeUser) {
      UInt_t nwh = fCh;
      UInt_t nww = fCw;
      Double_t rxy = fXsizeUser/fYsizeUser;
      if (rxy < 1) {
         UInt_t twh = UInt_t(Double_t(fCw)/rxy);
         if (twh > fCh)
            nww = UInt_t(Double_t(fCh)*rxy);
         else
            nwh = twh;
         if (nww > fCw) {
            nww = fCw; nwh = twh;
         }
         if (nwh > fCh) {
            nwh = fCh; nww = UInt_t(Double_t(fCh)/rxy);
         }
      } else {
         UInt_t twh = UInt_t(Double_t(fCw)*rxy);
         if (twh > fCh)
            nwh = UInt_t(Double_t(fCw)/rxy);
         else
            nww = twh;
         if (nww > fCw) {
            nww = fCw; nwh = twh;
         }
         if (nwh > fCh) {
            nwh = fCh; nww = UInt_t(Double_t(fCh)*rxy);
         }
      }
      fCw = nww;
      fCh = nwh;
   }

   if (fCw < fCh) {
      fYsizeReal = kDefaultCanvasSize;
      fXsizeReal = fYsizeReal*Double_t(fCw)/Double_t(fCh);
   }
   else {
      fXsizeReal = kDefaultCanvasSize;
      fYsizeReal = fXsizeReal*Double_t(fCh)/Double_t(fCw);
   }

//*-*- Loop on all pads to recompute conversion coefficients
   TPad::ResizePad();

   if (padsav) padsav->cd();
}

//______________________________________________________________________________
void TCanvas::ResizeOpaque(Int_t set)
{
   // Set option to resize objects/pads in a canvas.
   //
   //  if set = 1 (default) graphics objects are resized in opaque mode
   //         = 0 only the outline of objects is drawn when resizing them
   //  The option opaque produces the best effect. It requires however a
   //  a reasonably fast workstation or response time.

   SetBit(kResizeOpaque,set);
}

//______________________________________________________________________________
void TCanvas::RunAutoExec()
{
   // Execute the list of TExecs in the current pad.

   if (!TestBit(kAutoExec)) return;
   if (!gPad) return;
   ((TPad*)gPad)->AutoExec();
}


//______________________________________________________________________________
void TCanvas::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
   // Save primitives in this canvas in C++ macro file with GUI.

   // Write canvas options (in $TROOT or $TStyle)
   if (gStyle->GetOptFit()) {
      out<<"   gStyle->SetOptFit(1);"<<std::endl;
   }
   if (!gStyle->GetOptStat()) {
      out<<"   gStyle->SetOptStat(0);"<<std::endl;
   }
   if (!gStyle->GetOptTitle()) {
      out<<"   gStyle->SetOptTitle(0);"<<std::endl;
   }
   if (gROOT->GetEditHistograms()) {
      out<<"   gROOT->SetEditHistograms();"<<std::endl;
   }
   if (GetShowEventStatus()) {
      out<<"   "<<GetName()<<"->ToggleEventStatus();"<<std::endl;
   }
   if (GetShowToolTips()) {
      out<<"   "<<GetName()<<"->ToggleToolTips();"<<std::endl;
   }
   if (GetShowToolBar()) {
      out<<"   "<<GetName()<<"->ToggleToolBar();"<<std::endl;
   }
   if (GetHighLightColor() != 5) {
      if (GetHighLightColor() > 228) {
         TColor::SaveColor(out, GetHighLightColor());
         out<<"   "<<GetName()<<"->SetHighLightColor(ci);" << std::endl;
      } else
         out<<"   "<<GetName()<<"->SetHighLightColor("<<GetHighLightColor()<<");"<<std::endl;
   }

   // Now recursively scan all pads of this canvas
   cd();
   TPad::SavePrimitive(out,option);
}

//______________________________________________________________________________
void TCanvas::SaveSource(const char *filename, Option_t *option)
{
   // Save primitives in this canvas as a C++ macro file.
   // This function loops on all the canvas primitives and for each primitive
   // calls the object SavePrimitive function.
   // When outputing floating point numbers, the default precision is 7 digits.
   // The precision can be changed (via system.rootrc) by changing the value
   // of the environment variable "Canvas.SavePrecision"

   //    reset bit TClass::kClassSaved for all classes
   TIter next(gROOT->GetListOfClasses());
   TClass *cl;
   while((cl = (TClass*)next())) {
      cl->ResetBit(TClass::kClassSaved);
   }

   char quote = '"';
   std::ofstream out;
   Int_t lenfile = strlen(filename);
   char * fname;
   char lcname[10];
   const char *cname = GetName();
   Bool_t invalid = kFALSE;
   //    if filename is given, open this file, otherwise create a file
   //    with a name equal to the canvasname.C
   if (lenfile) {
      fname = (char*)filename;
      out.open(fname, std::ios::out);
   } else {
      Int_t nch = strlen(cname);
      if (nch < 10) {
         strlcpy(lcname,cname,10);
         for (Int_t k=1;k<=nch;k++) {if (lcname[nch-k] == ' ') lcname[nch-k] = 0;}
         if (lcname[0] == 0) {invalid = kTRUE; strlcpy(lcname,"c1",10); nch = 2;}
         cname = lcname;
      }
      fname = new char[nch+3];
      strlcpy(fname,cname,nch+3);
      strncat(fname,".C",2);
      out.open(fname, std::ios::out);
   }
   if (!out.good ()) {
      Error("SaveSource", "Cannot open file: %s",fname);
      if (!lenfile) delete [] fname;
      return;
   }

   //set precision
   Int_t precision = gEnv->GetValue("Canvas.SavePrecision",7);
   out.precision(precision);

   //   Write macro header and date/time stamp
   TDatime t;
   Float_t cx = gStyle->GetScreenFactor();
   Int_t topx,topy;
   UInt_t w, h;
   if (!fCanvasImp) {
      Error("SaveSource", "Cannot open TCanvas");
      return;
   }
   UInt_t editorWidth = fCanvasImp->GetWindowGeometry(topx,topy,w,h);
   w = UInt_t((fWindowWidth - editorWidth)/cx);
   h = UInt_t((fWindowHeight)/cx);
   topx = GetWindowTopX();
   topy = GetWindowTopY();

   if (w == 0) {
      w = GetWw()+4; h = GetWh()+4;
      topx = 1;    topy = 1;
   }

   TString mname(fname);
   Int_t p = mname.Last('.');
   Int_t s = mname.Last('/')+1;
   out <<"void " << mname(s,p-s) << "()" <<std::endl;
   out <<"{"<<std::endl;
   out <<"//=========Macro generated from canvas: "<<GetName()<<"/"<<GetTitle()<<std::endl;
   out <<"//=========  ("<<t.AsString()<<") by ROOT version"<<gROOT->GetVersion()<<std::endl;

   if (gStyle->GetCanvasPreferGL())
      out <<std::endl<<"   gStyle->SetCanvasPreferGL(kTRUE);"<<std::endl<<std::endl;

   //   Write canvas parameters (TDialogCanvas case)
   if (InheritsFrom(TDialogCanvas::Class())) {
      out<<"   "<<ClassName()<<" *"<<cname<<" = new "<<ClassName()<<"("<<quote<<GetName()
         <<quote<<", "<<quote<<GetTitle()<<quote<<","<<w<<","<<h<<");"<<std::endl;
   } else {
   //   Write canvas parameters (TCanvas case)
      out<<"   TCanvas *"<<cname<<" = new TCanvas("<<quote<<GetName()<<quote<<", "<<quote<<GetTitle()
         <<quote;
      if (!HasMenuBar())
         out<<",-"<<topx<<","<<topy<<","<<w<<","<<h<<");"<<std::endl;
      else
         out<<","<<topx<<","<<topy<<","<<w<<","<<h<<");"<<std::endl;
   }
   //   Write canvas options (in $TROOT or $TStyle)
   if (gStyle->GetOptFit()) {
      out<<"   gStyle->SetOptFit(1);"<<std::endl;
   }
   if (!gStyle->GetOptStat()) {
      out<<"   gStyle->SetOptStat(0);"<<std::endl;
   }
   if (!gStyle->GetOptTitle()) {
      out<<"   gStyle->SetOptTitle(0);"<<std::endl;
   }
   if (gROOT->GetEditHistograms()) {
      out<<"   gROOT->SetEditHistograms();"<<std::endl;
   }
   if (GetShowEventStatus()) {
      out<<"   "<<GetName()<<"->ToggleEventStatus();"<<std::endl;
   }
   if (GetShowToolTips()) {
      out<<"   "<<GetName()<<"->ToggleToolTips();"<<std::endl;
   }
   if (GetHighLightColor() != 5) {
      if (GetHighLightColor() > 228) {
         TColor::SaveColor(out, GetHighLightColor());
         out<<"   "<<GetName()<<"->SetHighLightColor(ci);" << std::endl;
      } else
         out<<"   "<<GetName()<<"->SetHighLightColor("<<GetHighLightColor()<<");"<<std::endl;
   }

   //   Now recursively scan all pads of this canvas
   cd();
   if (invalid) SetName("c1");
   TPad::SavePrimitive(out,option);
   //   Write canvas options related to pad editor
   out<<"   "<<GetName()<<"->SetSelected("<<GetName()<<");"<<std::endl;
   if (GetShowToolBar()) {
      out<<"   "<<GetName()<<"->ToggleToolBar();"<<std::endl;
   }
   if (invalid) SetName(" ");

   out <<"}"<<std::endl;
   out.close();
   Info("SaveSource","C++ Macro file: %s has been generated", fname);

   //    reset bit TClass::kClassSaved for all classes
   next.Reset();
   while((cl = (TClass*)next())) {
      cl->ResetBit(TClass::kClassSaved);
   }
   if (!lenfile) delete [] fname;
}

//______________________________________________________________________________
void TCanvas::SetBatch(Bool_t batch)
{
   // Toggle batch mode. However, if the canvas is created without a window
   // then batch mode always stays set.

   if (gROOT->IsBatch())
      fBatch = kTRUE;
   else
      fBatch = batch;
}

//______________________________________________________________________________
void TCanvas::SetCanvasSize(UInt_t ww, UInt_t wh)
{
   // Set Width and Height of canvas to ww and wh respectively
   // If ww and/or wh are greater than the current canvas window
   // a scroll bar is automatically generated.
   // Use this function to zoom in a canvas and naviguate via
   // the scroll bars.

   if (fCanvasImp) {
      fCanvasImp->SetCanvasSize(ww, wh);
      fCw = ww;
      fCh = wh;
      ResizePad();
   }
}

//______________________________________________________________________________
void TCanvas::SetCursor(ECursor cursor)
{
   // Set cursor.

   if (IsBatch()) return;
   gVirtualX->SetCursor(fCanvasID, cursor);
}

//______________________________________________________________________________
void TCanvas::SetDoubleBuffer(Int_t mode)
{
   // Set Double Buffer On/Off.

   if (IsBatch()) return;
   fDoubleBuffer = mode;
   gVirtualX->SetDoubleBuffer(fCanvasID, mode);

   // depending of the buffer mode set the drawing window to either
   // the canvas pixmap or to the canvas on-screen window
   if (fDoubleBuffer) {
      if (fPixmapID != -1) fPainter->SelectDrawable(fPixmapID);
   } else
      if (fCanvasID != -1) fPainter->SelectDrawable(fCanvasID);
}

//______________________________________________________________________________
void TCanvas::SetFixedAspectRatio(Bool_t fixed)
{
   // Fix canvas aspect ratio to current value if fixed is true.

   if (fixed) {
      if (!fFixedAspectRatio) {
         if (fCh != 0)
            fAspectRatio = Double_t(fCw) / fCh;
         else {
            Error("SetAspectRatio", "cannot fix aspect ratio, height of canvas is 0");
            return;
         }
         fFixedAspectRatio = kTRUE;
      }
   } else {
      fFixedAspectRatio = kFALSE;
      fAspectRatio = 0;
   }
}

//______________________________________________________________________________
void TCanvas::SetFolder(Bool_t isfolder)
{
   // If isfolder=kTRUE, the canvas can be browsed like a folder
   // by default a canvas is not browsable.

   fgIsFolder = isfolder;
}

//______________________________________________________________________________
void TCanvas::SetSelected(TObject *obj)
{
   // Set selected canvas.

   fSelected = obj;
   if (obj) obj->SetBit(kMustCleanup);
}

//______________________________________________________________________________
void TCanvas::SetTitle(const char *title)
{
   // Set canvas title.

   fTitle = title;
   if (fCanvasImp) fCanvasImp->SetWindowTitle(title);
}

//______________________________________________________________________________
void TCanvas::Size(Float_t xsize, Float_t ysize)
{
   // Set the canvas scale in centimeters.
   //
   //  This information is used by PostScript to set the page size.
   //  xsize  = size of the canvas in centimeters along X
   //  ysize  = size of the canvas in centimeters along Y
   //   if xsize and ysize are not equal to 0, then the scale factors will
   //   be computed to keep the ratio ysize/xsize independently of the canvas
   //   size (parts of the physical canvas will be unused).
   //
   //   if xsize = 0 and ysize is not zero, then xsize will be computed
   //      to fit to the current canvas scale. If the canvas is resized,
   //      a new value for xsize will be recomputed. In this case the aspect
   //      ratio is not preserved.
   //
   //   if both xsize = 0 and ysize = 0, then the scaling is automatic.
   //   the largest dimension will be allocated a size of 20 centimeters.

   fXsizeUser = xsize;
   fYsizeUser = ysize;

   Resize();
}

//_______________________________________________________________________
void TCanvas::Streamer(TBuffer &b)
{
   // Stream a class object.

   UInt_t R__s, R__c;
   if (b.IsReading()) {
      Version_t v = b.ReadVersion(&R__s, &R__c);
      gPad    = this;
      fCanvas = this;
      if (v>7) b.ClassBegin(TCanvas::IsA());
      if (v>7) b.ClassMember("TPad");
      TPad::Streamer(b);
      gPad    = this;
      //restore the colors
      TObjArray *colors = (TObjArray*)fPrimitives->FindObject("ListOfColors");
      if (colors) {
         TIter next(colors);
         TColor *colold;
         while ((colold = (TColor*)next())) {
            if (colold) {
               Int_t cn = 0;
               if (colold) cn = colold->GetNumber();
               TColor *colcur = gROOT->GetColor(cn);
               if (colcur) {
                  colcur->SetRGB(colold->GetRed(),colold->GetGreen(),colold->GetBlue());
               } else {
                  colcur = new TColor(cn,colold->GetRed(),
                                        colold->GetGreen(),
                                        colold->GetBlue(),
                                        colold->GetName());
                  if (!colcur) return;
               }
            }
         }
         fPrimitives->Remove(colors);
         colors->Delete();
         delete colors;
      }
      if (v>7) b.ClassMember("fDISPLAY","TString");
      fDISPLAY.Streamer(b);
      if (v>7) b.ClassMember("fDoubleBuffer", "Int_t");
      b >> fDoubleBuffer;
      if (v>7) b.ClassMember("fRetained", "Bool_t");
      b >> fRetained;
      if (v>7) b.ClassMember("fXsizeUser", "Size_t");
      b >> fXsizeUser;
      if (v>7) b.ClassMember("fYsizeUser", "Size_t");
      b >> fYsizeUser;
      if (v>7) b.ClassMember("fXsizeReal", "Size_t");
      b >> fXsizeReal;
      if (v>7) b.ClassMember("fYsizeReal", "Size_t");
      b >> fYsizeReal;
      fCanvasID = -1;
      if (v>7) b.ClassMember("fWindowTopX", "Int_t");
      b >> fWindowTopX;
      if (v>7) b.ClassMember("fWindowTopY", "Int_t");
      b >> fWindowTopY;
      if (v > 2) {
         if (v>7) b.ClassMember("fWindowWidth", "UInt_t");
         b >> fWindowWidth;
         if (v>7) b.ClassMember("fWindowHeight", "UInt_t");
         b >> fWindowHeight;
      }
      if (v>7) b.ClassMember("fCw", "UInt_t");
      b >> fCw;
      if (v>7) b.ClassMember("fCh", "UInt_t");
      b >> fCh;
      if (v <= 2) {
         fWindowWidth  = fCw;
         fWindowHeight = fCh;
      }
      if (v>7) b.ClassMember("fCatt", "TAttCanvas");
      fCatt.Streamer(b);
      Bool_t dummy;
      if (v>7) b.ClassMember("kMoveOpaque", "Bool_t");
      b >> dummy; if (dummy) MoveOpaque(1);
      if (v>7) b.ClassMember("kResizeOpaque", "Bool_t");
      b >> dummy; if (dummy) ResizeOpaque(1);
      if (v>7) b.ClassMember("fHighLightColor", "Color_t");
      b >> fHighLightColor;
      if (v>7) b.ClassMember("fBatch", "Bool_t");
      b >> dummy; //was fBatch
      if (v < 2) return;
      if (v>7) b.ClassMember("kShowEventStatus", "Bool_t");
      b >> dummy; if (dummy) SetBit(kShowEventStatus);

      if (v > 3) {
         if (v>7) b.ClassMember("kAutoExec", "Bool_t");
         b >> dummy; if (dummy) SetBit(kAutoExec);
      }
      if (v>7) b.ClassMember("kMenuBar", "Bool_t");
      b >> dummy; if (dummy) SetBit(kMenuBar);
      fBatch = gROOT->IsBatch();
      if (v>7) b.ClassEnd(TCanvas::IsA());
      b.CheckByteCount(R__s, R__c, TCanvas::IsA());
   } else {
      //save list of colors
      //we must protect the case when two or more canvases are saved
      //in the same buffer. If the list of colors has already been saved
      //in the buffer, do not add the list of colors to the list of primitives.
      TObjArray *colors = 0;
      if (!b.CheckObject(gROOT->GetListOfColors(),TObjArray::Class())) {
         colors = (TObjArray*)gROOT->GetListOfColors();
         fPrimitives->Add(colors);
      }
      R__c = b.WriteVersion(TCanvas::IsA(), kTRUE);
      b.ClassBegin(TCanvas::IsA());
      b.ClassMember("TPad");
      TPad::Streamer(b);
      if(colors) fPrimitives->Remove(colors);
      b.ClassMember("fDISPLAY","TString");
      fDISPLAY.Streamer(b);
      b.ClassMember("fDoubleBuffer", "Int_t");
      b << fDoubleBuffer;
      b.ClassMember("fRetained", "Bool_t");
      b << fRetained;
      b.ClassMember("fXsizeUser", "Size_t");
      b << fXsizeUser;
      b.ClassMember("fYsizeUser", "Size_t");
      b << fYsizeUser;
      b.ClassMember("fXsizeReal", "Size_t");
      b << fXsizeReal;
      b.ClassMember("fYsizeReal", "Size_t");
      b << fYsizeReal;
      UInt_t w   = fWindowWidth,  h    = fWindowHeight;
      Int_t topx = fWindowTopX,   topy = fWindowTopY;
      UInt_t editorWidth = 0;
      if(fCanvasImp) editorWidth = fCanvasImp->GetWindowGeometry(topx,topy,w,h);
      b.ClassMember("fWindowTopX", "Int_t");
      b << topx;
      b.ClassMember("fWindowTopY", "Int_t");
      b << topy;
      b.ClassMember("fWindowWidth", "UInt_t");
      b << (UInt_t)(w-editorWidth);
      b.ClassMember("fWindowHeight", "UInt_t");
      b << h;
      b.ClassMember("fCw", "UInt_t");
      b << fCw;
      b.ClassMember("fCh", "UInt_t");
      b << fCh;
      b.ClassMember("fCatt", "TAttCanvas");
      fCatt.Streamer(b);
      b.ClassMember("kMoveOpaque", "Bool_t");
      b << TestBit(kMoveOpaque);      //please remove in ROOT version 6
      b.ClassMember("kResizeOpaque", "Bool_t");
      b << TestBit(kResizeOpaque);    //please remove in ROOT version 6
      b.ClassMember("fHighLightColor", "Color_t");
      b << fHighLightColor;
      b.ClassMember("fBatch", "Bool_t");
      b << fBatch;                    //please remove in ROOT version 6
      b.ClassMember("kShowEventStatus", "Bool_t");
      b << TestBit(kShowEventStatus); //please remove in ROOT version 6
      b.ClassMember("kAutoExec", "Bool_t");
      b << TestBit(kAutoExec);        //please remove in ROOT version 6
      b.ClassMember("kMenuBar", "Bool_t");
      b << TestBit(kMenuBar);         //please remove in ROOT version 6
      b.ClassEnd(TCanvas::IsA());
      b.SetByteCount(R__c, kTRUE);
   }
}

//______________________________________________________________________________
void TCanvas::ToggleAutoExec()
{
   // Toggle pad auto execution of list of TExecs.

   Bool_t autoExec = TestBit(kAutoExec);
   SetBit(kAutoExec,!autoExec);
}

//______________________________________________________________________________
void TCanvas::ToggleEventStatus()
{
   // Toggle event statusbar.

   Bool_t showEventStatus = !TestBit(kShowEventStatus);
   SetBit(kShowEventStatus,showEventStatus);

   if (fCanvasImp) fCanvasImp->ShowStatusBar(showEventStatus);
}

//______________________________________________________________________________
void TCanvas::ToggleToolBar()
{
   // Toggle toolbar.

   Bool_t showToolBar = !TestBit(kShowToolBar);
   SetBit(kShowToolBar,showToolBar);

   if (fCanvasImp) fCanvasImp->ShowToolBar(showToolBar);
}

//______________________________________________________________________________
void TCanvas::ToggleEditor()
{
   // Toggle editor.

   Bool_t showEditor = !TestBit(kShowEditor);
   SetBit(kShowEditor,showEditor);

   if (fCanvasImp) fCanvasImp->ShowEditor(showEditor);
}

//______________________________________________________________________________
void TCanvas::ToggleToolTips()
{
   // Toggle tooltip display.

   Bool_t showToolTips = !TestBit(kShowToolTips);
   SetBit(kShowToolTips, showToolTips);

   if (fCanvasImp) fCanvasImp->ShowToolTips(showToolTips);
}


//______________________________________________________________________________
Bool_t TCanvas::SupportAlpha()
{
   // Static function returning "true" if transparency is supported.
   return gPad && (gVirtualX->InheritsFrom("TGQuartz") ||
                   gPad->GetGLDevice() != -1);
}


//______________________________________________________________________________
void TCanvas::Update()
{
   // Update canvas pad buffers.

   if (fUpdating) return;

   if (fPixmapID == -1) return;

   if (gThreadXAR) {
      void *arr[2];
      arr[1] = this;
      if ((*gThreadXAR)("CUPD", 2, arr, 0)) return;
   }

   if (!fCanvasImp) return;

   if (!gVirtualX->IsCmdThread()) {
      gInterpreter->Execute(this, IsA(), "Update", "");
      return;
   }

   R__LOCKGUARD2(gROOTMutex);

   fUpdating = kTRUE;

   if (!IsBatch()) FeedbackMode(kFALSE);      // Goto double buffer mode

   if (!UseGL())
      PaintModified();           // Repaint all modified pad's

   Flush();                   // Copy all pad pixmaps to the screen

   SetCursor(kCross);
   fUpdating = kFALSE;
}

//______________________________________________________________________________
void TCanvas::DisconnectWidget()
{
   // Used by friend class TCanvasImp.

   fCanvasID    = 0;
   fContextMenu = 0;
}

//______________________________________________________________________________
Bool_t TCanvas::IsGrayscale()
{
   // Check whether this canvas is to be drawn in grayscale mode.

   return TestBit(kIsGrayscale);
}

//______________________________________________________________________________
void TCanvas::SetGrayscale(Bool_t set /*= kTRUE*/)
{
   // Set whether this canvas should be painted in grayscale, and re-paint
   // it if necessary.

   if (IsGrayscale() == set) return;
   SetBit(kIsGrayscale, set);
   Paint(); // update canvas and all sub-pads, unconditionally!
}

//______________________________________________________________________________
void TCanvas::CreatePainter()
{
   // Probably, TPadPainter must be placed in a separate ROOT module -
   // "padpainter" (the same as "histpainter"). But now, it's directly in a
   // gpad dir, so, in case of default painter, no *.so should be loaded,
   // no need in plugin managers.
   // May change in future.

   //Even for batch mode painter is still required, just to delegate
   //some calls to batch "virtual X".
   if (!UseGL() || fBatch)
      fPainter = new TPadPainter;//Do not need plugin manager for this!
   else {
      fPainter = TVirtualPadPainter::PadPainter("gl");
      if (!fPainter) {
         Error("CreatePainter", "GL Painter creation failed! Will use default!");
         fPainter = new TPadPainter;
         fUseGL = kFALSE;
      }
   }
}

//______________________________________________________________________________
TVirtualPadPainter *TCanvas::GetCanvasPainter()
{
   // Access and (probably) creation of pad painter.

   if (!fPainter) CreatePainter();
   return fPainter;
}


//______________________________________________________________________________
void TCanvas::DeleteCanvasPainter()
{
   //assert on IsBatch() == false?

   if (fGLDevice != -1) {
      //fPainter has a font manager.
      //Font manager will delete textures.
      //If context is wrong (we can have several canvases) -
      //wrong texture will be deleted, damaging some of our fonts.
      gGLManager->MakeCurrent(fGLDevice);
   }

   delete fPainter;
   fPainter = 0;

   if (fGLDevice != -1) {
      gGLManager->DeleteGLContext(fGLDevice);//?
      fGLDevice = -1;
   }
}
 TCanvas.cxx:1
 TCanvas.cxx:2
 TCanvas.cxx:3
 TCanvas.cxx:4
 TCanvas.cxx:5
 TCanvas.cxx:6
 TCanvas.cxx:7
 TCanvas.cxx:8
 TCanvas.cxx:9
 TCanvas.cxx:10
 TCanvas.cxx:11
 TCanvas.cxx:12
 TCanvas.cxx:13
 TCanvas.cxx:14
 TCanvas.cxx:15
 TCanvas.cxx:16
 TCanvas.cxx:17
 TCanvas.cxx:18
 TCanvas.cxx:19
 TCanvas.cxx:20
 TCanvas.cxx:21
 TCanvas.cxx:22
 TCanvas.cxx:23
 TCanvas.cxx:24
 TCanvas.cxx:25
 TCanvas.cxx:26
 TCanvas.cxx:27
 TCanvas.cxx:28
 TCanvas.cxx:29
 TCanvas.cxx:30
 TCanvas.cxx:31
 TCanvas.cxx:32
 TCanvas.cxx:33
 TCanvas.cxx:34
 TCanvas.cxx:35
 TCanvas.cxx:36
 TCanvas.cxx:37
 TCanvas.cxx:38
 TCanvas.cxx:39
 TCanvas.cxx:40
 TCanvas.cxx:41
 TCanvas.cxx:42
 TCanvas.cxx:43
 TCanvas.cxx:44
 TCanvas.cxx:45
 TCanvas.cxx:46
 TCanvas.cxx:47
 TCanvas.cxx:48
 TCanvas.cxx:49
 TCanvas.cxx:50
 TCanvas.cxx:51
 TCanvas.cxx:52
 TCanvas.cxx:53
 TCanvas.cxx:54
 TCanvas.cxx:55
 TCanvas.cxx:56
 TCanvas.cxx:57
 TCanvas.cxx:58
 TCanvas.cxx:59
 TCanvas.cxx:60
 TCanvas.cxx:61
 TCanvas.cxx:62
 TCanvas.cxx:63
 TCanvas.cxx:64
 TCanvas.cxx:65
 TCanvas.cxx:66
 TCanvas.cxx:67
 TCanvas.cxx:68
 TCanvas.cxx:69
 TCanvas.cxx:70
 TCanvas.cxx:71
 TCanvas.cxx:72
 TCanvas.cxx:73
 TCanvas.cxx:74
 TCanvas.cxx:75
 TCanvas.cxx:76
 TCanvas.cxx:77
 TCanvas.cxx:78
 TCanvas.cxx:79
 TCanvas.cxx:80
 TCanvas.cxx:81
 TCanvas.cxx:82
 TCanvas.cxx:83
 TCanvas.cxx:84
 TCanvas.cxx:85
 TCanvas.cxx:86
 TCanvas.cxx:87
 TCanvas.cxx:88
 TCanvas.cxx:89
 TCanvas.cxx:90
 TCanvas.cxx:91
 TCanvas.cxx:92
 TCanvas.cxx:93
 TCanvas.cxx:94
 TCanvas.cxx:95
 TCanvas.cxx:96
 TCanvas.cxx:97
 TCanvas.cxx:98
 TCanvas.cxx:99
 TCanvas.cxx:100
 TCanvas.cxx:101
 TCanvas.cxx:102
 TCanvas.cxx:103
 TCanvas.cxx:104
 TCanvas.cxx:105
 TCanvas.cxx:106
 TCanvas.cxx:107
 TCanvas.cxx:108
 TCanvas.cxx:109
 TCanvas.cxx:110
 TCanvas.cxx:111
 TCanvas.cxx:112
 TCanvas.cxx:113
 TCanvas.cxx:114
 TCanvas.cxx:115
 TCanvas.cxx:116
 TCanvas.cxx:117
 TCanvas.cxx:118
 TCanvas.cxx:119
 TCanvas.cxx:120
 TCanvas.cxx:121
 TCanvas.cxx:122
 TCanvas.cxx:123
 TCanvas.cxx:124
 TCanvas.cxx:125
 TCanvas.cxx:126
 TCanvas.cxx:127
 TCanvas.cxx:128
 TCanvas.cxx:129
 TCanvas.cxx:130
 TCanvas.cxx:131
 TCanvas.cxx:132
 TCanvas.cxx:133
 TCanvas.cxx:134
 TCanvas.cxx:135
 TCanvas.cxx:136
 TCanvas.cxx:137
 TCanvas.cxx:138
 TCanvas.cxx:139
 TCanvas.cxx:140
 TCanvas.cxx:141
 TCanvas.cxx:142
 TCanvas.cxx:143
 TCanvas.cxx:144
 TCanvas.cxx:145
 TCanvas.cxx:146
 TCanvas.cxx:147
 TCanvas.cxx:148
 TCanvas.cxx:149
 TCanvas.cxx:150
 TCanvas.cxx:151
 TCanvas.cxx:152
 TCanvas.cxx:153
 TCanvas.cxx:154
 TCanvas.cxx:155
 TCanvas.cxx:156
 TCanvas.cxx:157
 TCanvas.cxx:158
 TCanvas.cxx:159
 TCanvas.cxx:160
 TCanvas.cxx:161
 TCanvas.cxx:162
 TCanvas.cxx:163
 TCanvas.cxx:164
 TCanvas.cxx:165
 TCanvas.cxx:166
 TCanvas.cxx:167
 TCanvas.cxx:168
 TCanvas.cxx:169
 TCanvas.cxx:170
 TCanvas.cxx:171
 TCanvas.cxx:172
 TCanvas.cxx:173
 TCanvas.cxx:174
 TCanvas.cxx:175
 TCanvas.cxx:176
 TCanvas.cxx:177
 TCanvas.cxx:178
 TCanvas.cxx:179
 TCanvas.cxx:180
 TCanvas.cxx:181
 TCanvas.cxx:182
 TCanvas.cxx:183
 TCanvas.cxx:184
 TCanvas.cxx:185
 TCanvas.cxx:186
 TCanvas.cxx:187
 TCanvas.cxx:188
 TCanvas.cxx:189
 TCanvas.cxx:190
 TCanvas.cxx:191
 TCanvas.cxx:192
 TCanvas.cxx:193
 TCanvas.cxx:194
 TCanvas.cxx:195
 TCanvas.cxx:196
 TCanvas.cxx:197
 TCanvas.cxx:198
 TCanvas.cxx:199
 TCanvas.cxx:200
 TCanvas.cxx:201
 TCanvas.cxx:202
 TCanvas.cxx:203
 TCanvas.cxx:204
 TCanvas.cxx:205
 TCanvas.cxx:206
 TCanvas.cxx:207
 TCanvas.cxx:208
 TCanvas.cxx:209
 TCanvas.cxx:210
 TCanvas.cxx:211
 TCanvas.cxx:212
 TCanvas.cxx:213
 TCanvas.cxx:214
 TCanvas.cxx:215
 TCanvas.cxx:216
 TCanvas.cxx:217
 TCanvas.cxx:218
 TCanvas.cxx:219
 TCanvas.cxx:220
 TCanvas.cxx:221
 TCanvas.cxx:222
 TCanvas.cxx:223
 TCanvas.cxx:224
 TCanvas.cxx:225
 TCanvas.cxx:226
 TCanvas.cxx:227
 TCanvas.cxx:228
 TCanvas.cxx:229
 TCanvas.cxx:230
 TCanvas.cxx:231
 TCanvas.cxx:232
 TCanvas.cxx:233
 TCanvas.cxx:234
 TCanvas.cxx:235
 TCanvas.cxx:236
 TCanvas.cxx:237
 TCanvas.cxx:238
 TCanvas.cxx:239
 TCanvas.cxx:240
 TCanvas.cxx:241
 TCanvas.cxx:242
 TCanvas.cxx:243
 TCanvas.cxx:244
 TCanvas.cxx:245
 TCanvas.cxx:246
 TCanvas.cxx:247
 TCanvas.cxx:248
 TCanvas.cxx:249
 TCanvas.cxx:250
 TCanvas.cxx:251
 TCanvas.cxx:252
 TCanvas.cxx:253
 TCanvas.cxx:254
 TCanvas.cxx:255
 TCanvas.cxx:256
 TCanvas.cxx:257
 TCanvas.cxx:258
 TCanvas.cxx:259
 TCanvas.cxx:260
 TCanvas.cxx:261
 TCanvas.cxx:262
 TCanvas.cxx:263
 TCanvas.cxx:264
 TCanvas.cxx:265
 TCanvas.cxx:266
 TCanvas.cxx:267
 TCanvas.cxx:268
 TCanvas.cxx:269
 TCanvas.cxx:270
 TCanvas.cxx:271
 TCanvas.cxx:272
 TCanvas.cxx:273
 TCanvas.cxx:274
 TCanvas.cxx:275
 TCanvas.cxx:276
 TCanvas.cxx:277
 TCanvas.cxx:278
 TCanvas.cxx:279
 TCanvas.cxx:280
 TCanvas.cxx:281
 TCanvas.cxx:282
 TCanvas.cxx:283
 TCanvas.cxx:284
 TCanvas.cxx:285
 TCanvas.cxx:286
 TCanvas.cxx:287
 TCanvas.cxx:288
 TCanvas.cxx:289
 TCanvas.cxx:290
 TCanvas.cxx:291
 TCanvas.cxx:292
 TCanvas.cxx:293
 TCanvas.cxx:294
 TCanvas.cxx:295
 TCanvas.cxx:296
 TCanvas.cxx:297
 TCanvas.cxx:298
 TCanvas.cxx:299
 TCanvas.cxx:300
 TCanvas.cxx:301
 TCanvas.cxx:302
 TCanvas.cxx:303
 TCanvas.cxx:304
 TCanvas.cxx:305
 TCanvas.cxx:306
 TCanvas.cxx:307
 TCanvas.cxx:308
 TCanvas.cxx:309
 TCanvas.cxx:310
 TCanvas.cxx:311
 TCanvas.cxx:312
 TCanvas.cxx:313
 TCanvas.cxx:314
 TCanvas.cxx:315
 TCanvas.cxx:316
 TCanvas.cxx:317
 TCanvas.cxx:318
 TCanvas.cxx:319
 TCanvas.cxx:320
 TCanvas.cxx:321
 TCanvas.cxx:322
 TCanvas.cxx:323
 TCanvas.cxx:324
 TCanvas.cxx:325
 TCanvas.cxx:326
 TCanvas.cxx:327
 TCanvas.cxx:328
 TCanvas.cxx:329
 TCanvas.cxx:330
 TCanvas.cxx:331
 TCanvas.cxx:332
 TCanvas.cxx:333
 TCanvas.cxx:334
 TCanvas.cxx:335
 TCanvas.cxx:336
 TCanvas.cxx:337
 TCanvas.cxx:338
 TCanvas.cxx:339
 TCanvas.cxx:340
 TCanvas.cxx:341
 TCanvas.cxx:342
 TCanvas.cxx:343
 TCanvas.cxx:344
 TCanvas.cxx:345
 TCanvas.cxx:346
 TCanvas.cxx:347
 TCanvas.cxx:348
 TCanvas.cxx:349
 TCanvas.cxx:350
 TCanvas.cxx:351
 TCanvas.cxx:352
 TCanvas.cxx:353
 TCanvas.cxx:354
 TCanvas.cxx:355
 TCanvas.cxx:356
 TCanvas.cxx:357
 TCanvas.cxx:358
 TCanvas.cxx:359
 TCanvas.cxx:360
 TCanvas.cxx:361
 TCanvas.cxx:362
 TCanvas.cxx:363
 TCanvas.cxx:364
 TCanvas.cxx:365
 TCanvas.cxx:366
 TCanvas.cxx:367
 TCanvas.cxx:368
 TCanvas.cxx:369
 TCanvas.cxx:370
 TCanvas.cxx:371
 TCanvas.cxx:372
 TCanvas.cxx:373
 TCanvas.cxx:374
 TCanvas.cxx:375
 TCanvas.cxx:376
 TCanvas.cxx:377
 TCanvas.cxx:378
 TCanvas.cxx:379
 TCanvas.cxx:380
 TCanvas.cxx:381
 TCanvas.cxx:382
 TCanvas.cxx:383
 TCanvas.cxx:384
 TCanvas.cxx:385
 TCanvas.cxx:386
 TCanvas.cxx:387
 TCanvas.cxx:388
 TCanvas.cxx:389
 TCanvas.cxx:390
 TCanvas.cxx:391
 TCanvas.cxx:392
 TCanvas.cxx:393
 TCanvas.cxx:394
 TCanvas.cxx:395
 TCanvas.cxx:396
 TCanvas.cxx:397
 TCanvas.cxx:398
 TCanvas.cxx:399
 TCanvas.cxx:400
 TCanvas.cxx:401
 TCanvas.cxx:402
 TCanvas.cxx:403
 TCanvas.cxx:404
 TCanvas.cxx:405
 TCanvas.cxx:406
 TCanvas.cxx:407
 TCanvas.cxx:408
 TCanvas.cxx:409
 TCanvas.cxx:410
 TCanvas.cxx:411
 TCanvas.cxx:412
 TCanvas.cxx:413
 TCanvas.cxx:414
 TCanvas.cxx:415
 TCanvas.cxx:416
 TCanvas.cxx:417
 TCanvas.cxx:418
 TCanvas.cxx:419
 TCanvas.cxx:420
 TCanvas.cxx:421
 TCanvas.cxx:422
 TCanvas.cxx:423
 TCanvas.cxx:424
 TCanvas.cxx:425
 TCanvas.cxx:426
 TCanvas.cxx:427
 TCanvas.cxx:428
 TCanvas.cxx:429
 TCanvas.cxx:430
 TCanvas.cxx:431
 TCanvas.cxx:432
 TCanvas.cxx:433
 TCanvas.cxx:434
 TCanvas.cxx:435
 TCanvas.cxx:436
 TCanvas.cxx:437
 TCanvas.cxx:438
 TCanvas.cxx:439
 TCanvas.cxx:440
 TCanvas.cxx:441
 TCanvas.cxx:442
 TCanvas.cxx:443
 TCanvas.cxx:444
 TCanvas.cxx:445
 TCanvas.cxx:446
 TCanvas.cxx:447
 TCanvas.cxx:448
 TCanvas.cxx:449
 TCanvas.cxx:450
 TCanvas.cxx:451
 TCanvas.cxx:452
 TCanvas.cxx:453
 TCanvas.cxx:454
 TCanvas.cxx:455
 TCanvas.cxx:456
 TCanvas.cxx:457
 TCanvas.cxx:458
 TCanvas.cxx:459
 TCanvas.cxx:460
 TCanvas.cxx:461
 TCanvas.cxx:462
 TCanvas.cxx:463
 TCanvas.cxx:464
 TCanvas.cxx:465
 TCanvas.cxx:466
 TCanvas.cxx:467
 TCanvas.cxx:468
 TCanvas.cxx:469
 TCanvas.cxx:470
 TCanvas.cxx:471
 TCanvas.cxx:472
 TCanvas.cxx:473
 TCanvas.cxx:474
 TCanvas.cxx:475
 TCanvas.cxx:476
 TCanvas.cxx:477
 TCanvas.cxx:478
 TCanvas.cxx:479
 TCanvas.cxx:480
 TCanvas.cxx:481
 TCanvas.cxx:482
 TCanvas.cxx:483
 TCanvas.cxx:484
 TCanvas.cxx:485
 TCanvas.cxx:486
 TCanvas.cxx:487
 TCanvas.cxx:488
 TCanvas.cxx:489
 TCanvas.cxx:490
 TCanvas.cxx:491
 TCanvas.cxx:492
 TCanvas.cxx:493
 TCanvas.cxx:494
 TCanvas.cxx:495
 TCanvas.cxx:496
 TCanvas.cxx:497
 TCanvas.cxx:498
 TCanvas.cxx:499
 TCanvas.cxx:500
 TCanvas.cxx:501
 TCanvas.cxx:502
 TCanvas.cxx:503
 TCanvas.cxx:504
 TCanvas.cxx:505
 TCanvas.cxx:506
 TCanvas.cxx:507
 TCanvas.cxx:508
 TCanvas.cxx:509
 TCanvas.cxx:510
 TCanvas.cxx:511
 TCanvas.cxx:512
 TCanvas.cxx:513
 TCanvas.cxx:514
 TCanvas.cxx:515
 TCanvas.cxx:516
 TCanvas.cxx:517
 TCanvas.cxx:518
 TCanvas.cxx:519
 TCanvas.cxx:520
 TCanvas.cxx:521
 TCanvas.cxx:522
 TCanvas.cxx:523
 TCanvas.cxx:524
 TCanvas.cxx:525
 TCanvas.cxx:526
 TCanvas.cxx:527
 TCanvas.cxx:528
 TCanvas.cxx:529
 TCanvas.cxx:530
 TCanvas.cxx:531
 TCanvas.cxx:532
 TCanvas.cxx:533
 TCanvas.cxx:534
 TCanvas.cxx:535
 TCanvas.cxx:536
 TCanvas.cxx:537
 TCanvas.cxx:538
 TCanvas.cxx:539
 TCanvas.cxx:540
 TCanvas.cxx:541
 TCanvas.cxx:542
 TCanvas.cxx:543
 TCanvas.cxx:544
 TCanvas.cxx:545
 TCanvas.cxx:546
 TCanvas.cxx:547
 TCanvas.cxx:548
 TCanvas.cxx:549
 TCanvas.cxx:550
 TCanvas.cxx:551
 TCanvas.cxx:552
 TCanvas.cxx:553
 TCanvas.cxx:554
 TCanvas.cxx:555
 TCanvas.cxx:556
 TCanvas.cxx:557
 TCanvas.cxx:558
 TCanvas.cxx:559
 TCanvas.cxx:560
 TCanvas.cxx:561
 TCanvas.cxx:562
 TCanvas.cxx:563
 TCanvas.cxx:564
 TCanvas.cxx:565
 TCanvas.cxx:566
 TCanvas.cxx:567
 TCanvas.cxx:568
 TCanvas.cxx:569
 TCanvas.cxx:570
 TCanvas.cxx:571
 TCanvas.cxx:572
 TCanvas.cxx:573
 TCanvas.cxx:574
 TCanvas.cxx:575
 TCanvas.cxx:576
 TCanvas.cxx:577
 TCanvas.cxx:578
 TCanvas.cxx:579
 TCanvas.cxx:580
 TCanvas.cxx:581
 TCanvas.cxx:582
 TCanvas.cxx:583
 TCanvas.cxx:584
 TCanvas.cxx:585
 TCanvas.cxx:586
 TCanvas.cxx:587
 TCanvas.cxx:588
 TCanvas.cxx:589
 TCanvas.cxx:590
 TCanvas.cxx:591
 TCanvas.cxx:592
 TCanvas.cxx:593
 TCanvas.cxx:594
 TCanvas.cxx:595
 TCanvas.cxx:596
 TCanvas.cxx:597
 TCanvas.cxx:598
 TCanvas.cxx:599
 TCanvas.cxx:600
 TCanvas.cxx:601
 TCanvas.cxx:602
 TCanvas.cxx:603
 TCanvas.cxx:604
 TCanvas.cxx:605
 TCanvas.cxx:606
 TCanvas.cxx:607
 TCanvas.cxx:608
 TCanvas.cxx:609
 TCanvas.cxx:610
 TCanvas.cxx:611
 TCanvas.cxx:612
 TCanvas.cxx:613
 TCanvas.cxx:614
 TCanvas.cxx:615
 TCanvas.cxx:616
 TCanvas.cxx:617
 TCanvas.cxx:618
 TCanvas.cxx:619
 TCanvas.cxx:620
 TCanvas.cxx:621
 TCanvas.cxx:622
 TCanvas.cxx:623
 TCanvas.cxx:624
 TCanvas.cxx:625
 TCanvas.cxx:626
 TCanvas.cxx:627
 TCanvas.cxx:628
 TCanvas.cxx:629
 TCanvas.cxx:630
 TCanvas.cxx:631
 TCanvas.cxx:632
 TCanvas.cxx:633
 TCanvas.cxx:634
 TCanvas.cxx:635
 TCanvas.cxx:636
 TCanvas.cxx:637
 TCanvas.cxx:638
 TCanvas.cxx:639
 TCanvas.cxx:640
 TCanvas.cxx:641
 TCanvas.cxx:642
 TCanvas.cxx:643
 TCanvas.cxx:644
 TCanvas.cxx:645
 TCanvas.cxx:646
 TCanvas.cxx:647
 TCanvas.cxx:648
 TCanvas.cxx:649
 TCanvas.cxx:650
 TCanvas.cxx:651
 TCanvas.cxx:652
 TCanvas.cxx:653
 TCanvas.cxx:654
 TCanvas.cxx:655
 TCanvas.cxx:656
 TCanvas.cxx:657
 TCanvas.cxx:658
 TCanvas.cxx:659
 TCanvas.cxx:660
 TCanvas.cxx:661
 TCanvas.cxx:662
 TCanvas.cxx:663
 TCanvas.cxx:664
 TCanvas.cxx:665
 TCanvas.cxx:666
 TCanvas.cxx:667
 TCanvas.cxx:668
 TCanvas.cxx:669
 TCanvas.cxx:670
 TCanvas.cxx:671
 TCanvas.cxx:672
 TCanvas.cxx:673
 TCanvas.cxx:674
 TCanvas.cxx:675
 TCanvas.cxx:676
 TCanvas.cxx:677
 TCanvas.cxx:678
 TCanvas.cxx:679
 TCanvas.cxx:680
 TCanvas.cxx:681
 TCanvas.cxx:682
 TCanvas.cxx:683
 TCanvas.cxx:684
 TCanvas.cxx:685
 TCanvas.cxx:686
 TCanvas.cxx:687
 TCanvas.cxx:688
 TCanvas.cxx:689
 TCanvas.cxx:690
 TCanvas.cxx:691
 TCanvas.cxx:692
 TCanvas.cxx:693
 TCanvas.cxx:694
 TCanvas.cxx:695
 TCanvas.cxx:696
 TCanvas.cxx:697
 TCanvas.cxx:698
 TCanvas.cxx:699
 TCanvas.cxx:700
 TCanvas.cxx:701
 TCanvas.cxx:702
 TCanvas.cxx:703
 TCanvas.cxx:704
 TCanvas.cxx:705
 TCanvas.cxx:706
 TCanvas.cxx:707
 TCanvas.cxx:708
 TCanvas.cxx:709
 TCanvas.cxx:710
 TCanvas.cxx:711
 TCanvas.cxx:712
 TCanvas.cxx:713
 TCanvas.cxx:714
 TCanvas.cxx:715
 TCanvas.cxx:716
 TCanvas.cxx:717
 TCanvas.cxx:718
 TCanvas.cxx:719
 TCanvas.cxx:720
 TCanvas.cxx:721
 TCanvas.cxx:722
 TCanvas.cxx:723
 TCanvas.cxx:724
 TCanvas.cxx:725
 TCanvas.cxx:726
 TCanvas.cxx:727
 TCanvas.cxx:728
 TCanvas.cxx:729
 TCanvas.cxx:730
 TCanvas.cxx:731
 TCanvas.cxx:732
 TCanvas.cxx:733
 TCanvas.cxx:734
 TCanvas.cxx:735
 TCanvas.cxx:736
 TCanvas.cxx:737
 TCanvas.cxx:738
 TCanvas.cxx:739
 TCanvas.cxx:740
 TCanvas.cxx:741
 TCanvas.cxx:742
 TCanvas.cxx:743
 TCanvas.cxx:744
 TCanvas.cxx:745
 TCanvas.cxx:746
 TCanvas.cxx:747
 TCanvas.cxx:748
 TCanvas.cxx:749
 TCanvas.cxx:750
 TCanvas.cxx:751
 TCanvas.cxx:752
 TCanvas.cxx:753
 TCanvas.cxx:754
 TCanvas.cxx:755
 TCanvas.cxx:756
 TCanvas.cxx:757
 TCanvas.cxx:758
 TCanvas.cxx:759
 TCanvas.cxx:760
 TCanvas.cxx:761
 TCanvas.cxx:762
 TCanvas.cxx:763
 TCanvas.cxx:764
 TCanvas.cxx:765
 TCanvas.cxx:766
 TCanvas.cxx:767
 TCanvas.cxx:768
 TCanvas.cxx:769
 TCanvas.cxx:770
 TCanvas.cxx:771
 TCanvas.cxx:772
 TCanvas.cxx:773
 TCanvas.cxx:774
 TCanvas.cxx:775
 TCanvas.cxx:776
 TCanvas.cxx:777
 TCanvas.cxx:778
 TCanvas.cxx:779
 TCanvas.cxx:780
 TCanvas.cxx:781
 TCanvas.cxx:782
 TCanvas.cxx:783
 TCanvas.cxx:784
 TCanvas.cxx:785
 TCanvas.cxx:786
 TCanvas.cxx:787
 TCanvas.cxx:788
 TCanvas.cxx:789
 TCanvas.cxx:790
 TCanvas.cxx:791
 TCanvas.cxx:792
 TCanvas.cxx:793
 TCanvas.cxx:794
 TCanvas.cxx:795
 TCanvas.cxx:796
 TCanvas.cxx:797
 TCanvas.cxx:798
 TCanvas.cxx:799
 TCanvas.cxx:800
 TCanvas.cxx:801
 TCanvas.cxx:802
 TCanvas.cxx:803
 TCanvas.cxx:804
 TCanvas.cxx:805
 TCanvas.cxx:806
 TCanvas.cxx:807
 TCanvas.cxx:808
 TCanvas.cxx:809
 TCanvas.cxx:810
 TCanvas.cxx:811
 TCanvas.cxx:812
 TCanvas.cxx:813
 TCanvas.cxx:814
 TCanvas.cxx:815
 TCanvas.cxx:816
 TCanvas.cxx:817
 TCanvas.cxx:818
 TCanvas.cxx:819
 TCanvas.cxx:820
 TCanvas.cxx:821
 TCanvas.cxx:822
 TCanvas.cxx:823
 TCanvas.cxx:824
 TCanvas.cxx:825
 TCanvas.cxx:826
 TCanvas.cxx:827
 TCanvas.cxx:828
 TCanvas.cxx:829
 TCanvas.cxx:830
 TCanvas.cxx:831
 TCanvas.cxx:832
 TCanvas.cxx:833
 TCanvas.cxx:834
 TCanvas.cxx:835
 TCanvas.cxx:836
 TCanvas.cxx:837
 TCanvas.cxx:838
 TCanvas.cxx:839
 TCanvas.cxx:840
 TCanvas.cxx:841
 TCanvas.cxx:842
 TCanvas.cxx:843
 TCanvas.cxx:844
 TCanvas.cxx:845
 TCanvas.cxx:846
 TCanvas.cxx:847
 TCanvas.cxx:848
 TCanvas.cxx:849
 TCanvas.cxx:850
 TCanvas.cxx:851
 TCanvas.cxx:852
 TCanvas.cxx:853
 TCanvas.cxx:854
 TCanvas.cxx:855
 TCanvas.cxx:856
 TCanvas.cxx:857
 TCanvas.cxx:858
 TCanvas.cxx:859
 TCanvas.cxx:860
 TCanvas.cxx:861
 TCanvas.cxx:862
 TCanvas.cxx:863
 TCanvas.cxx:864
 TCanvas.cxx:865
 TCanvas.cxx:866
 TCanvas.cxx:867
 TCanvas.cxx:868
 TCanvas.cxx:869
 TCanvas.cxx:870
 TCanvas.cxx:871
 TCanvas.cxx:872
 TCanvas.cxx:873
 TCanvas.cxx:874
 TCanvas.cxx:875
 TCanvas.cxx:876
 TCanvas.cxx:877
 TCanvas.cxx:878
 TCanvas.cxx:879
 TCanvas.cxx:880
 TCanvas.cxx:881
 TCanvas.cxx:882
 TCanvas.cxx:883
 TCanvas.cxx:884
 TCanvas.cxx:885
 TCanvas.cxx:886
 TCanvas.cxx:887
 TCanvas.cxx:888
 TCanvas.cxx:889
 TCanvas.cxx:890
 TCanvas.cxx:891
 TCanvas.cxx:892
 TCanvas.cxx:893
 TCanvas.cxx:894
 TCanvas.cxx:895
 TCanvas.cxx:896
 TCanvas.cxx:897
 TCanvas.cxx:898
 TCanvas.cxx:899
 TCanvas.cxx:900
 TCanvas.cxx:901
 TCanvas.cxx:902
 TCanvas.cxx:903
 TCanvas.cxx:904
 TCanvas.cxx:905
 TCanvas.cxx:906
 TCanvas.cxx:907
 TCanvas.cxx:908
 TCanvas.cxx:909
 TCanvas.cxx:910
 TCanvas.cxx:911
 TCanvas.cxx:912
 TCanvas.cxx:913
 TCanvas.cxx:914
 TCanvas.cxx:915
 TCanvas.cxx:916
 TCanvas.cxx:917
 TCanvas.cxx:918
 TCanvas.cxx:919
 TCanvas.cxx:920
 TCanvas.cxx:921
 TCanvas.cxx:922
 TCanvas.cxx:923
 TCanvas.cxx:924
 TCanvas.cxx:925
 TCanvas.cxx:926
 TCanvas.cxx:927
 TCanvas.cxx:928
 TCanvas.cxx:929
 TCanvas.cxx:930
 TCanvas.cxx:931
 TCanvas.cxx:932
 TCanvas.cxx:933
 TCanvas.cxx:934
 TCanvas.cxx:935
 TCanvas.cxx:936
 TCanvas.cxx:937
 TCanvas.cxx:938
 TCanvas.cxx:939
 TCanvas.cxx:940
 TCanvas.cxx:941
 TCanvas.cxx:942
 TCanvas.cxx:943
 TCanvas.cxx:944
 TCanvas.cxx:945
 TCanvas.cxx:946
 TCanvas.cxx:947
 TCanvas.cxx:948
 TCanvas.cxx:949
 TCanvas.cxx:950
 TCanvas.cxx:951
 TCanvas.cxx:952
 TCanvas.cxx:953
 TCanvas.cxx:954
 TCanvas.cxx:955
 TCanvas.cxx:956
 TCanvas.cxx:957
 TCanvas.cxx:958
 TCanvas.cxx:959
 TCanvas.cxx:960
 TCanvas.cxx:961
 TCanvas.cxx:962
 TCanvas.cxx:963
 TCanvas.cxx:964
 TCanvas.cxx:965
 TCanvas.cxx:966
 TCanvas.cxx:967
 TCanvas.cxx:968
 TCanvas.cxx:969
 TCanvas.cxx:970
 TCanvas.cxx:971
 TCanvas.cxx:972
 TCanvas.cxx:973
 TCanvas.cxx:974
 TCanvas.cxx:975
 TCanvas.cxx:976
 TCanvas.cxx:977
 TCanvas.cxx:978
 TCanvas.cxx:979
 TCanvas.cxx:980
 TCanvas.cxx:981
 TCanvas.cxx:982
 TCanvas.cxx:983
 TCanvas.cxx:984
 TCanvas.cxx:985
 TCanvas.cxx:986
 TCanvas.cxx:987
 TCanvas.cxx:988
 TCanvas.cxx:989
 TCanvas.cxx:990
 TCanvas.cxx:991
 TCanvas.cxx:992
 TCanvas.cxx:993
 TCanvas.cxx:994
 TCanvas.cxx:995
 TCanvas.cxx:996
 TCanvas.cxx:997
 TCanvas.cxx:998
 TCanvas.cxx:999
 TCanvas.cxx:1000
 TCanvas.cxx:1001
 TCanvas.cxx:1002
 TCanvas.cxx:1003
 TCanvas.cxx:1004
 TCanvas.cxx:1005
 TCanvas.cxx:1006
 TCanvas.cxx:1007
 TCanvas.cxx:1008
 TCanvas.cxx:1009
 TCanvas.cxx:1010
 TCanvas.cxx:1011
 TCanvas.cxx:1012
 TCanvas.cxx:1013
 TCanvas.cxx:1014
 TCanvas.cxx:1015
 TCanvas.cxx:1016
 TCanvas.cxx:1017
 TCanvas.cxx:1018
 TCanvas.cxx:1019
 TCanvas.cxx:1020
 TCanvas.cxx:1021
 TCanvas.cxx:1022
 TCanvas.cxx:1023
 TCanvas.cxx:1024
 TCanvas.cxx:1025
 TCanvas.cxx:1026
 TCanvas.cxx:1027
 TCanvas.cxx:1028
 TCanvas.cxx:1029
 TCanvas.cxx:1030
 TCanvas.cxx:1031
 TCanvas.cxx:1032
 TCanvas.cxx:1033
 TCanvas.cxx:1034
 TCanvas.cxx:1035
 TCanvas.cxx:1036
 TCanvas.cxx:1037
 TCanvas.cxx:1038
 TCanvas.cxx:1039
 TCanvas.cxx:1040
 TCanvas.cxx:1041
 TCanvas.cxx:1042
 TCanvas.cxx:1043
 TCanvas.cxx:1044
 TCanvas.cxx:1045
 TCanvas.cxx:1046
 TCanvas.cxx:1047
 TCanvas.cxx:1048
 TCanvas.cxx:1049
 TCanvas.cxx:1050
 TCanvas.cxx:1051
 TCanvas.cxx:1052
 TCanvas.cxx:1053
 TCanvas.cxx:1054
 TCanvas.cxx:1055
 TCanvas.cxx:1056
 TCanvas.cxx:1057
 TCanvas.cxx:1058
 TCanvas.cxx:1059
 TCanvas.cxx:1060
 TCanvas.cxx:1061
 TCanvas.cxx:1062
 TCanvas.cxx:1063
 TCanvas.cxx:1064
 TCanvas.cxx:1065
 TCanvas.cxx:1066
 TCanvas.cxx:1067
 TCanvas.cxx:1068
 TCanvas.cxx:1069
 TCanvas.cxx:1070
 TCanvas.cxx:1071
 TCanvas.cxx:1072
 TCanvas.cxx:1073
 TCanvas.cxx:1074
 TCanvas.cxx:1075
 TCanvas.cxx:1076
 TCanvas.cxx:1077
 TCanvas.cxx:1078
 TCanvas.cxx:1079
 TCanvas.cxx:1080
 TCanvas.cxx:1081
 TCanvas.cxx:1082
 TCanvas.cxx:1083
 TCanvas.cxx:1084
 TCanvas.cxx:1085
 TCanvas.cxx:1086
 TCanvas.cxx:1087
 TCanvas.cxx:1088
 TCanvas.cxx:1089
 TCanvas.cxx:1090
 TCanvas.cxx:1091
 TCanvas.cxx:1092
 TCanvas.cxx:1093
 TCanvas.cxx:1094
 TCanvas.cxx:1095
 TCanvas.cxx:1096
 TCanvas.cxx:1097
 TCanvas.cxx:1098
 TCanvas.cxx:1099
 TCanvas.cxx:1100
 TCanvas.cxx:1101
 TCanvas.cxx:1102
 TCanvas.cxx:1103
 TCanvas.cxx:1104
 TCanvas.cxx:1105
 TCanvas.cxx:1106
 TCanvas.cxx:1107
 TCanvas.cxx:1108
 TCanvas.cxx:1109
 TCanvas.cxx:1110
 TCanvas.cxx:1111
 TCanvas.cxx:1112
 TCanvas.cxx:1113
 TCanvas.cxx:1114
 TCanvas.cxx:1115
 TCanvas.cxx:1116
 TCanvas.cxx:1117
 TCanvas.cxx:1118
 TCanvas.cxx:1119
 TCanvas.cxx:1120
 TCanvas.cxx:1121
 TCanvas.cxx:1122
 TCanvas.cxx:1123
 TCanvas.cxx:1124
 TCanvas.cxx:1125
 TCanvas.cxx:1126
 TCanvas.cxx:1127
 TCanvas.cxx:1128
 TCanvas.cxx:1129
 TCanvas.cxx:1130
 TCanvas.cxx:1131
 TCanvas.cxx:1132
 TCanvas.cxx:1133
 TCanvas.cxx:1134
 TCanvas.cxx:1135
 TCanvas.cxx:1136
 TCanvas.cxx:1137
 TCanvas.cxx:1138
 TCanvas.cxx:1139
 TCanvas.cxx:1140
 TCanvas.cxx:1141
 TCanvas.cxx:1142
 TCanvas.cxx:1143
 TCanvas.cxx:1144
 TCanvas.cxx:1145
 TCanvas.cxx:1146
 TCanvas.cxx:1147
 TCanvas.cxx:1148
 TCanvas.cxx:1149
 TCanvas.cxx:1150
 TCanvas.cxx:1151
 TCanvas.cxx:1152
 TCanvas.cxx:1153
 TCanvas.cxx:1154
 TCanvas.cxx:1155
 TCanvas.cxx:1156
 TCanvas.cxx:1157
 TCanvas.cxx:1158
 TCanvas.cxx:1159
 TCanvas.cxx:1160
 TCanvas.cxx:1161
 TCanvas.cxx:1162
 TCanvas.cxx:1163
 TCanvas.cxx:1164
 TCanvas.cxx:1165
 TCanvas.cxx:1166
 TCanvas.cxx:1167
 TCanvas.cxx:1168
 TCanvas.cxx:1169
 TCanvas.cxx:1170
 TCanvas.cxx:1171
 TCanvas.cxx:1172
 TCanvas.cxx:1173
 TCanvas.cxx:1174
 TCanvas.cxx:1175
 TCanvas.cxx:1176
 TCanvas.cxx:1177
 TCanvas.cxx:1178
 TCanvas.cxx:1179
 TCanvas.cxx:1180
 TCanvas.cxx:1181
 TCanvas.cxx:1182
 TCanvas.cxx:1183
 TCanvas.cxx:1184
 TCanvas.cxx:1185
 TCanvas.cxx:1186
 TCanvas.cxx:1187
 TCanvas.cxx:1188
 TCanvas.cxx:1189
 TCanvas.cxx:1190
 TCanvas.cxx:1191
 TCanvas.cxx:1192
 TCanvas.cxx:1193
 TCanvas.cxx:1194
 TCanvas.cxx:1195
 TCanvas.cxx:1196
 TCanvas.cxx:1197
 TCanvas.cxx:1198
 TCanvas.cxx:1199
 TCanvas.cxx:1200
 TCanvas.cxx:1201
 TCanvas.cxx:1202
 TCanvas.cxx:1203
 TCanvas.cxx:1204
 TCanvas.cxx:1205
 TCanvas.cxx:1206
 TCanvas.cxx:1207
 TCanvas.cxx:1208
 TCanvas.cxx:1209
 TCanvas.cxx:1210
 TCanvas.cxx:1211
 TCanvas.cxx:1212
 TCanvas.cxx:1213
 TCanvas.cxx:1214
 TCanvas.cxx:1215
 TCanvas.cxx:1216
 TCanvas.cxx:1217
 TCanvas.cxx:1218
 TCanvas.cxx:1219
 TCanvas.cxx:1220
 TCanvas.cxx:1221
 TCanvas.cxx:1222
 TCanvas.cxx:1223
 TCanvas.cxx:1224
 TCanvas.cxx:1225
 TCanvas.cxx:1226
 TCanvas.cxx:1227
 TCanvas.cxx:1228
 TCanvas.cxx:1229
 TCanvas.cxx:1230
 TCanvas.cxx:1231
 TCanvas.cxx:1232
 TCanvas.cxx:1233
 TCanvas.cxx:1234
 TCanvas.cxx:1235
 TCanvas.cxx:1236
 TCanvas.cxx:1237
 TCanvas.cxx:1238
 TCanvas.cxx:1239
 TCanvas.cxx:1240
 TCanvas.cxx:1241
 TCanvas.cxx:1242
 TCanvas.cxx:1243
 TCanvas.cxx:1244
 TCanvas.cxx:1245
 TCanvas.cxx:1246
 TCanvas.cxx:1247
 TCanvas.cxx:1248
 TCanvas.cxx:1249
 TCanvas.cxx:1250
 TCanvas.cxx:1251
 TCanvas.cxx:1252
 TCanvas.cxx:1253
 TCanvas.cxx:1254
 TCanvas.cxx:1255
 TCanvas.cxx:1256
 TCanvas.cxx:1257
 TCanvas.cxx:1258
 TCanvas.cxx:1259
 TCanvas.cxx:1260
 TCanvas.cxx:1261
 TCanvas.cxx:1262
 TCanvas.cxx:1263
 TCanvas.cxx:1264
 TCanvas.cxx:1265
 TCanvas.cxx:1266
 TCanvas.cxx:1267
 TCanvas.cxx:1268
 TCanvas.cxx:1269
 TCanvas.cxx:1270
 TCanvas.cxx:1271
 TCanvas.cxx:1272
 TCanvas.cxx:1273
 TCanvas.cxx:1274
 TCanvas.cxx:1275
 TCanvas.cxx:1276
 TCanvas.cxx:1277
 TCanvas.cxx:1278
 TCanvas.cxx:1279
 TCanvas.cxx:1280
 TCanvas.cxx:1281
 TCanvas.cxx:1282
 TCanvas.cxx:1283
 TCanvas.cxx:1284
 TCanvas.cxx:1285
 TCanvas.cxx:1286
 TCanvas.cxx:1287
 TCanvas.cxx:1288
 TCanvas.cxx:1289
 TCanvas.cxx:1290
 TCanvas.cxx:1291
 TCanvas.cxx:1292
 TCanvas.cxx:1293
 TCanvas.cxx:1294
 TCanvas.cxx:1295
 TCanvas.cxx:1296
 TCanvas.cxx:1297
 TCanvas.cxx:1298
 TCanvas.cxx:1299
 TCanvas.cxx:1300
 TCanvas.cxx:1301
 TCanvas.cxx:1302
 TCanvas.cxx:1303
 TCanvas.cxx:1304
 TCanvas.cxx:1305
 TCanvas.cxx:1306
 TCanvas.cxx:1307
 TCanvas.cxx:1308
 TCanvas.cxx:1309
 TCanvas.cxx:1310
 TCanvas.cxx:1311
 TCanvas.cxx:1312
 TCanvas.cxx:1313
 TCanvas.cxx:1314
 TCanvas.cxx:1315
 TCanvas.cxx:1316
 TCanvas.cxx:1317
 TCanvas.cxx:1318
 TCanvas.cxx:1319
 TCanvas.cxx:1320
 TCanvas.cxx:1321
 TCanvas.cxx:1322
 TCanvas.cxx:1323
 TCanvas.cxx:1324
 TCanvas.cxx:1325
 TCanvas.cxx:1326
 TCanvas.cxx:1327
 TCanvas.cxx:1328
 TCanvas.cxx:1329
 TCanvas.cxx:1330
 TCanvas.cxx:1331
 TCanvas.cxx:1332
 TCanvas.cxx:1333
 TCanvas.cxx:1334
 TCanvas.cxx:1335
 TCanvas.cxx:1336
 TCanvas.cxx:1337
 TCanvas.cxx:1338
 TCanvas.cxx:1339
 TCanvas.cxx:1340
 TCanvas.cxx:1341
 TCanvas.cxx:1342
 TCanvas.cxx:1343
 TCanvas.cxx:1344
 TCanvas.cxx:1345
 TCanvas.cxx:1346
 TCanvas.cxx:1347
 TCanvas.cxx:1348
 TCanvas.cxx:1349
 TCanvas.cxx:1350
 TCanvas.cxx:1351
 TCanvas.cxx:1352
 TCanvas.cxx:1353
 TCanvas.cxx:1354
 TCanvas.cxx:1355
 TCanvas.cxx:1356
 TCanvas.cxx:1357
 TCanvas.cxx:1358
 TCanvas.cxx:1359
 TCanvas.cxx:1360
 TCanvas.cxx:1361
 TCanvas.cxx:1362
 TCanvas.cxx:1363
 TCanvas.cxx:1364
 TCanvas.cxx:1365
 TCanvas.cxx:1366
 TCanvas.cxx:1367
 TCanvas.cxx:1368
 TCanvas.cxx:1369
 TCanvas.cxx:1370
 TCanvas.cxx:1371
 TCanvas.cxx:1372
 TCanvas.cxx:1373
 TCanvas.cxx:1374
 TCanvas.cxx:1375
 TCanvas.cxx:1376
 TCanvas.cxx:1377
 TCanvas.cxx:1378
 TCanvas.cxx:1379
 TCanvas.cxx:1380
 TCanvas.cxx:1381
 TCanvas.cxx:1382
 TCanvas.cxx:1383
 TCanvas.cxx:1384
 TCanvas.cxx:1385
 TCanvas.cxx:1386
 TCanvas.cxx:1387
 TCanvas.cxx:1388
 TCanvas.cxx:1389
 TCanvas.cxx:1390
 TCanvas.cxx:1391
 TCanvas.cxx:1392
 TCanvas.cxx:1393
 TCanvas.cxx:1394
 TCanvas.cxx:1395
 TCanvas.cxx:1396
 TCanvas.cxx:1397
 TCanvas.cxx:1398
 TCanvas.cxx:1399
 TCanvas.cxx:1400
 TCanvas.cxx:1401
 TCanvas.cxx:1402
 TCanvas.cxx:1403
 TCanvas.cxx:1404
 TCanvas.cxx:1405
 TCanvas.cxx:1406
 TCanvas.cxx:1407
 TCanvas.cxx:1408
 TCanvas.cxx:1409
 TCanvas.cxx:1410
 TCanvas.cxx:1411
 TCanvas.cxx:1412
 TCanvas.cxx:1413
 TCanvas.cxx:1414
 TCanvas.cxx:1415
 TCanvas.cxx:1416
 TCanvas.cxx:1417
 TCanvas.cxx:1418
 TCanvas.cxx:1419
 TCanvas.cxx:1420
 TCanvas.cxx:1421
 TCanvas.cxx:1422
 TCanvas.cxx:1423
 TCanvas.cxx:1424
 TCanvas.cxx:1425
 TCanvas.cxx:1426
 TCanvas.cxx:1427
 TCanvas.cxx:1428
 TCanvas.cxx:1429
 TCanvas.cxx:1430
 TCanvas.cxx:1431
 TCanvas.cxx:1432
 TCanvas.cxx:1433
 TCanvas.cxx:1434
 TCanvas.cxx:1435
 TCanvas.cxx:1436
 TCanvas.cxx:1437
 TCanvas.cxx:1438
 TCanvas.cxx:1439
 TCanvas.cxx:1440
 TCanvas.cxx:1441
 TCanvas.cxx:1442
 TCanvas.cxx:1443
 TCanvas.cxx:1444
 TCanvas.cxx:1445
 TCanvas.cxx:1446
 TCanvas.cxx:1447
 TCanvas.cxx:1448
 TCanvas.cxx:1449
 TCanvas.cxx:1450
 TCanvas.cxx:1451
 TCanvas.cxx:1452
 TCanvas.cxx:1453
 TCanvas.cxx:1454
 TCanvas.cxx:1455
 TCanvas.cxx:1456
 TCanvas.cxx:1457
 TCanvas.cxx:1458
 TCanvas.cxx:1459
 TCanvas.cxx:1460
 TCanvas.cxx:1461
 TCanvas.cxx:1462
 TCanvas.cxx:1463
 TCanvas.cxx:1464
 TCanvas.cxx:1465
 TCanvas.cxx:1466
 TCanvas.cxx:1467
 TCanvas.cxx:1468
 TCanvas.cxx:1469
 TCanvas.cxx:1470
 TCanvas.cxx:1471
 TCanvas.cxx:1472
 TCanvas.cxx:1473
 TCanvas.cxx:1474
 TCanvas.cxx:1475
 TCanvas.cxx:1476
 TCanvas.cxx:1477
 TCanvas.cxx:1478
 TCanvas.cxx:1479
 TCanvas.cxx:1480
 TCanvas.cxx:1481
 TCanvas.cxx:1482
 TCanvas.cxx:1483
 TCanvas.cxx:1484
 TCanvas.cxx:1485
 TCanvas.cxx:1486
 TCanvas.cxx:1487
 TCanvas.cxx:1488
 TCanvas.cxx:1489
 TCanvas.cxx:1490
 TCanvas.cxx:1491
 TCanvas.cxx:1492
 TCanvas.cxx:1493
 TCanvas.cxx:1494
 TCanvas.cxx:1495
 TCanvas.cxx:1496
 TCanvas.cxx:1497
 TCanvas.cxx:1498
 TCanvas.cxx:1499
 TCanvas.cxx:1500
 TCanvas.cxx:1501
 TCanvas.cxx:1502
 TCanvas.cxx:1503
 TCanvas.cxx:1504
 TCanvas.cxx:1505
 TCanvas.cxx:1506
 TCanvas.cxx:1507
 TCanvas.cxx:1508
 TCanvas.cxx:1509
 TCanvas.cxx:1510
 TCanvas.cxx:1511
 TCanvas.cxx:1512
 TCanvas.cxx:1513
 TCanvas.cxx:1514
 TCanvas.cxx:1515
 TCanvas.cxx:1516
 TCanvas.cxx:1517
 TCanvas.cxx:1518
 TCanvas.cxx:1519
 TCanvas.cxx:1520
 TCanvas.cxx:1521
 TCanvas.cxx:1522
 TCanvas.cxx:1523
 TCanvas.cxx:1524
 TCanvas.cxx:1525
 TCanvas.cxx:1526
 TCanvas.cxx:1527
 TCanvas.cxx:1528
 TCanvas.cxx:1529
 TCanvas.cxx:1530
 TCanvas.cxx:1531
 TCanvas.cxx:1532
 TCanvas.cxx:1533
 TCanvas.cxx:1534
 TCanvas.cxx:1535
 TCanvas.cxx:1536
 TCanvas.cxx:1537
 TCanvas.cxx:1538
 TCanvas.cxx:1539
 TCanvas.cxx:1540
 TCanvas.cxx:1541
 TCanvas.cxx:1542
 TCanvas.cxx:1543
 TCanvas.cxx:1544
 TCanvas.cxx:1545
 TCanvas.cxx:1546
 TCanvas.cxx:1547
 TCanvas.cxx:1548
 TCanvas.cxx:1549
 TCanvas.cxx:1550
 TCanvas.cxx:1551
 TCanvas.cxx:1552
 TCanvas.cxx:1553
 TCanvas.cxx:1554
 TCanvas.cxx:1555
 TCanvas.cxx:1556
 TCanvas.cxx:1557
 TCanvas.cxx:1558
 TCanvas.cxx:1559
 TCanvas.cxx:1560
 TCanvas.cxx:1561
 TCanvas.cxx:1562
 TCanvas.cxx:1563
 TCanvas.cxx:1564
 TCanvas.cxx:1565
 TCanvas.cxx:1566
 TCanvas.cxx:1567
 TCanvas.cxx:1568
 TCanvas.cxx:1569
 TCanvas.cxx:1570
 TCanvas.cxx:1571
 TCanvas.cxx:1572
 TCanvas.cxx:1573
 TCanvas.cxx:1574
 TCanvas.cxx:1575
 TCanvas.cxx:1576
 TCanvas.cxx:1577
 TCanvas.cxx:1578
 TCanvas.cxx:1579
 TCanvas.cxx:1580
 TCanvas.cxx:1581
 TCanvas.cxx:1582
 TCanvas.cxx:1583
 TCanvas.cxx:1584
 TCanvas.cxx:1585
 TCanvas.cxx:1586
 TCanvas.cxx:1587
 TCanvas.cxx:1588
 TCanvas.cxx:1589
 TCanvas.cxx:1590
 TCanvas.cxx:1591
 TCanvas.cxx:1592
 TCanvas.cxx:1593
 TCanvas.cxx:1594
 TCanvas.cxx:1595
 TCanvas.cxx:1596
 TCanvas.cxx:1597
 TCanvas.cxx:1598
 TCanvas.cxx:1599
 TCanvas.cxx:1600
 TCanvas.cxx:1601
 TCanvas.cxx:1602
 TCanvas.cxx:1603
 TCanvas.cxx:1604
 TCanvas.cxx:1605
 TCanvas.cxx:1606
 TCanvas.cxx:1607
 TCanvas.cxx:1608
 TCanvas.cxx:1609
 TCanvas.cxx:1610
 TCanvas.cxx:1611
 TCanvas.cxx:1612
 TCanvas.cxx:1613
 TCanvas.cxx:1614
 TCanvas.cxx:1615
 TCanvas.cxx:1616
 TCanvas.cxx:1617
 TCanvas.cxx:1618
 TCanvas.cxx:1619
 TCanvas.cxx:1620
 TCanvas.cxx:1621
 TCanvas.cxx:1622
 TCanvas.cxx:1623
 TCanvas.cxx:1624
 TCanvas.cxx:1625
 TCanvas.cxx:1626
 TCanvas.cxx:1627
 TCanvas.cxx:1628
 TCanvas.cxx:1629
 TCanvas.cxx:1630
 TCanvas.cxx:1631
 TCanvas.cxx:1632
 TCanvas.cxx:1633
 TCanvas.cxx:1634
 TCanvas.cxx:1635
 TCanvas.cxx:1636
 TCanvas.cxx:1637
 TCanvas.cxx:1638
 TCanvas.cxx:1639
 TCanvas.cxx:1640
 TCanvas.cxx:1641
 TCanvas.cxx:1642
 TCanvas.cxx:1643
 TCanvas.cxx:1644
 TCanvas.cxx:1645
 TCanvas.cxx:1646
 TCanvas.cxx:1647
 TCanvas.cxx:1648
 TCanvas.cxx:1649
 TCanvas.cxx:1650
 TCanvas.cxx:1651
 TCanvas.cxx:1652
 TCanvas.cxx:1653
 TCanvas.cxx:1654
 TCanvas.cxx:1655
 TCanvas.cxx:1656
 TCanvas.cxx:1657
 TCanvas.cxx:1658
 TCanvas.cxx:1659
 TCanvas.cxx:1660
 TCanvas.cxx:1661
 TCanvas.cxx:1662
 TCanvas.cxx:1663
 TCanvas.cxx:1664
 TCanvas.cxx:1665
 TCanvas.cxx:1666
 TCanvas.cxx:1667
 TCanvas.cxx:1668
 TCanvas.cxx:1669
 TCanvas.cxx:1670
 TCanvas.cxx:1671
 TCanvas.cxx:1672
 TCanvas.cxx:1673
 TCanvas.cxx:1674
 TCanvas.cxx:1675
 TCanvas.cxx:1676
 TCanvas.cxx:1677
 TCanvas.cxx:1678
 TCanvas.cxx:1679
 TCanvas.cxx:1680
 TCanvas.cxx:1681
 TCanvas.cxx:1682
 TCanvas.cxx:1683
 TCanvas.cxx:1684
 TCanvas.cxx:1685
 TCanvas.cxx:1686
 TCanvas.cxx:1687
 TCanvas.cxx:1688
 TCanvas.cxx:1689
 TCanvas.cxx:1690
 TCanvas.cxx:1691
 TCanvas.cxx:1692
 TCanvas.cxx:1693
 TCanvas.cxx:1694
 TCanvas.cxx:1695
 TCanvas.cxx:1696
 TCanvas.cxx:1697
 TCanvas.cxx:1698
 TCanvas.cxx:1699
 TCanvas.cxx:1700
 TCanvas.cxx:1701
 TCanvas.cxx:1702
 TCanvas.cxx:1703
 TCanvas.cxx:1704
 TCanvas.cxx:1705
 TCanvas.cxx:1706
 TCanvas.cxx:1707
 TCanvas.cxx:1708
 TCanvas.cxx:1709
 TCanvas.cxx:1710
 TCanvas.cxx:1711
 TCanvas.cxx:1712
 TCanvas.cxx:1713
 TCanvas.cxx:1714
 TCanvas.cxx:1715
 TCanvas.cxx:1716
 TCanvas.cxx:1717
 TCanvas.cxx:1718
 TCanvas.cxx:1719
 TCanvas.cxx:1720
 TCanvas.cxx:1721
 TCanvas.cxx:1722
 TCanvas.cxx:1723
 TCanvas.cxx:1724
 TCanvas.cxx:1725
 TCanvas.cxx:1726
 TCanvas.cxx:1727
 TCanvas.cxx:1728
 TCanvas.cxx:1729
 TCanvas.cxx:1730
 TCanvas.cxx:1731
 TCanvas.cxx:1732
 TCanvas.cxx:1733
 TCanvas.cxx:1734
 TCanvas.cxx:1735
 TCanvas.cxx:1736
 TCanvas.cxx:1737
 TCanvas.cxx:1738
 TCanvas.cxx:1739
 TCanvas.cxx:1740
 TCanvas.cxx:1741
 TCanvas.cxx:1742
 TCanvas.cxx:1743
 TCanvas.cxx:1744
 TCanvas.cxx:1745
 TCanvas.cxx:1746
 TCanvas.cxx:1747
 TCanvas.cxx:1748
 TCanvas.cxx:1749
 TCanvas.cxx:1750
 TCanvas.cxx:1751
 TCanvas.cxx:1752
 TCanvas.cxx:1753
 TCanvas.cxx:1754
 TCanvas.cxx:1755
 TCanvas.cxx:1756
 TCanvas.cxx:1757
 TCanvas.cxx:1758
 TCanvas.cxx:1759
 TCanvas.cxx:1760
 TCanvas.cxx:1761
 TCanvas.cxx:1762
 TCanvas.cxx:1763
 TCanvas.cxx:1764
 TCanvas.cxx:1765
 TCanvas.cxx:1766
 TCanvas.cxx:1767
 TCanvas.cxx:1768
 TCanvas.cxx:1769
 TCanvas.cxx:1770
 TCanvas.cxx:1771
 TCanvas.cxx:1772
 TCanvas.cxx:1773
 TCanvas.cxx:1774
 TCanvas.cxx:1775
 TCanvas.cxx:1776
 TCanvas.cxx:1777
 TCanvas.cxx:1778
 TCanvas.cxx:1779
 TCanvas.cxx:1780
 TCanvas.cxx:1781
 TCanvas.cxx:1782
 TCanvas.cxx:1783
 TCanvas.cxx:1784
 TCanvas.cxx:1785
 TCanvas.cxx:1786
 TCanvas.cxx:1787
 TCanvas.cxx:1788
 TCanvas.cxx:1789
 TCanvas.cxx:1790
 TCanvas.cxx:1791
 TCanvas.cxx:1792
 TCanvas.cxx:1793
 TCanvas.cxx:1794
 TCanvas.cxx:1795
 TCanvas.cxx:1796
 TCanvas.cxx:1797
 TCanvas.cxx:1798
 TCanvas.cxx:1799
 TCanvas.cxx:1800
 TCanvas.cxx:1801
 TCanvas.cxx:1802
 TCanvas.cxx:1803
 TCanvas.cxx:1804
 TCanvas.cxx:1805
 TCanvas.cxx:1806
 TCanvas.cxx:1807
 TCanvas.cxx:1808
 TCanvas.cxx:1809
 TCanvas.cxx:1810
 TCanvas.cxx:1811
 TCanvas.cxx:1812
 TCanvas.cxx:1813
 TCanvas.cxx:1814
 TCanvas.cxx:1815
 TCanvas.cxx:1816
 TCanvas.cxx:1817
 TCanvas.cxx:1818
 TCanvas.cxx:1819
 TCanvas.cxx:1820
 TCanvas.cxx:1821
 TCanvas.cxx:1822
 TCanvas.cxx:1823
 TCanvas.cxx:1824
 TCanvas.cxx:1825
 TCanvas.cxx:1826
 TCanvas.cxx:1827
 TCanvas.cxx:1828
 TCanvas.cxx:1829
 TCanvas.cxx:1830
 TCanvas.cxx:1831
 TCanvas.cxx:1832
 TCanvas.cxx:1833
 TCanvas.cxx:1834
 TCanvas.cxx:1835
 TCanvas.cxx:1836
 TCanvas.cxx:1837
 TCanvas.cxx:1838
 TCanvas.cxx:1839
 TCanvas.cxx:1840
 TCanvas.cxx:1841
 TCanvas.cxx:1842
 TCanvas.cxx:1843
 TCanvas.cxx:1844
 TCanvas.cxx:1845
 TCanvas.cxx:1846
 TCanvas.cxx:1847
 TCanvas.cxx:1848
 TCanvas.cxx:1849
 TCanvas.cxx:1850
 TCanvas.cxx:1851
 TCanvas.cxx:1852
 TCanvas.cxx:1853
 TCanvas.cxx:1854
 TCanvas.cxx:1855
 TCanvas.cxx:1856
 TCanvas.cxx:1857
 TCanvas.cxx:1858
 TCanvas.cxx:1859
 TCanvas.cxx:1860
 TCanvas.cxx:1861
 TCanvas.cxx:1862
 TCanvas.cxx:1863
 TCanvas.cxx:1864
 TCanvas.cxx:1865
 TCanvas.cxx:1866
 TCanvas.cxx:1867
 TCanvas.cxx:1868
 TCanvas.cxx:1869
 TCanvas.cxx:1870
 TCanvas.cxx:1871
 TCanvas.cxx:1872
 TCanvas.cxx:1873
 TCanvas.cxx:1874
 TCanvas.cxx:1875
 TCanvas.cxx:1876
 TCanvas.cxx:1877
 TCanvas.cxx:1878
 TCanvas.cxx:1879
 TCanvas.cxx:1880
 TCanvas.cxx:1881
 TCanvas.cxx:1882
 TCanvas.cxx:1883
 TCanvas.cxx:1884
 TCanvas.cxx:1885
 TCanvas.cxx:1886
 TCanvas.cxx:1887
 TCanvas.cxx:1888
 TCanvas.cxx:1889
 TCanvas.cxx:1890
 TCanvas.cxx:1891
 TCanvas.cxx:1892
 TCanvas.cxx:1893
 TCanvas.cxx:1894
 TCanvas.cxx:1895
 TCanvas.cxx:1896
 TCanvas.cxx:1897
 TCanvas.cxx:1898
 TCanvas.cxx:1899
 TCanvas.cxx:1900
 TCanvas.cxx:1901
 TCanvas.cxx:1902
 TCanvas.cxx:1903
 TCanvas.cxx:1904
 TCanvas.cxx:1905
 TCanvas.cxx:1906
 TCanvas.cxx:1907
 TCanvas.cxx:1908
 TCanvas.cxx:1909
 TCanvas.cxx:1910
 TCanvas.cxx:1911
 TCanvas.cxx:1912
 TCanvas.cxx:1913
 TCanvas.cxx:1914
 TCanvas.cxx:1915
 TCanvas.cxx:1916
 TCanvas.cxx:1917
 TCanvas.cxx:1918
 TCanvas.cxx:1919
 TCanvas.cxx:1920
 TCanvas.cxx:1921
 TCanvas.cxx:1922
 TCanvas.cxx:1923
 TCanvas.cxx:1924
 TCanvas.cxx:1925
 TCanvas.cxx:1926
 TCanvas.cxx:1927
 TCanvas.cxx:1928
 TCanvas.cxx:1929
 TCanvas.cxx:1930
 TCanvas.cxx:1931
 TCanvas.cxx:1932
 TCanvas.cxx:1933
 TCanvas.cxx:1934
 TCanvas.cxx:1935
 TCanvas.cxx:1936
 TCanvas.cxx:1937
 TCanvas.cxx:1938
 TCanvas.cxx:1939
 TCanvas.cxx:1940
 TCanvas.cxx:1941
 TCanvas.cxx:1942
 TCanvas.cxx:1943
 TCanvas.cxx:1944
 TCanvas.cxx:1945
 TCanvas.cxx:1946
 TCanvas.cxx:1947
 TCanvas.cxx:1948
 TCanvas.cxx:1949
 TCanvas.cxx:1950
 TCanvas.cxx:1951
 TCanvas.cxx:1952
 TCanvas.cxx:1953
 TCanvas.cxx:1954
 TCanvas.cxx:1955
 TCanvas.cxx:1956
 TCanvas.cxx:1957
 TCanvas.cxx:1958
 TCanvas.cxx:1959
 TCanvas.cxx:1960
 TCanvas.cxx:1961
 TCanvas.cxx:1962
 TCanvas.cxx:1963
 TCanvas.cxx:1964
 TCanvas.cxx:1965
 TCanvas.cxx:1966
 TCanvas.cxx:1967
 TCanvas.cxx:1968
 TCanvas.cxx:1969
 TCanvas.cxx:1970
 TCanvas.cxx:1971
 TCanvas.cxx:1972
 TCanvas.cxx:1973
 TCanvas.cxx:1974
 TCanvas.cxx:1975
 TCanvas.cxx:1976
 TCanvas.cxx:1977
 TCanvas.cxx:1978
 TCanvas.cxx:1979
 TCanvas.cxx:1980
 TCanvas.cxx:1981
 TCanvas.cxx:1982
 TCanvas.cxx:1983
 TCanvas.cxx:1984
 TCanvas.cxx:1985
 TCanvas.cxx:1986
 TCanvas.cxx:1987
 TCanvas.cxx:1988
 TCanvas.cxx:1989
 TCanvas.cxx:1990
 TCanvas.cxx:1991
 TCanvas.cxx:1992
 TCanvas.cxx:1993
 TCanvas.cxx:1994
 TCanvas.cxx:1995
 TCanvas.cxx:1996
 TCanvas.cxx:1997
 TCanvas.cxx:1998
 TCanvas.cxx:1999
 TCanvas.cxx:2000
 TCanvas.cxx:2001
 TCanvas.cxx:2002
 TCanvas.cxx:2003
 TCanvas.cxx:2004
 TCanvas.cxx:2005
 TCanvas.cxx:2006
 TCanvas.cxx:2007
 TCanvas.cxx:2008
 TCanvas.cxx:2009
 TCanvas.cxx:2010
 TCanvas.cxx:2011
 TCanvas.cxx:2012
 TCanvas.cxx:2013
 TCanvas.cxx:2014
 TCanvas.cxx:2015
 TCanvas.cxx:2016
 TCanvas.cxx:2017
 TCanvas.cxx:2018
 TCanvas.cxx:2019
 TCanvas.cxx:2020
 TCanvas.cxx:2021
 TCanvas.cxx:2022
 TCanvas.cxx:2023
 TCanvas.cxx:2024
 TCanvas.cxx:2025
 TCanvas.cxx:2026
 TCanvas.cxx:2027
 TCanvas.cxx:2028
 TCanvas.cxx:2029
 TCanvas.cxx:2030
 TCanvas.cxx:2031
 TCanvas.cxx:2032
 TCanvas.cxx:2033
 TCanvas.cxx:2034
 TCanvas.cxx:2035
 TCanvas.cxx:2036
 TCanvas.cxx:2037
 TCanvas.cxx:2038
 TCanvas.cxx:2039
 TCanvas.cxx:2040
 TCanvas.cxx:2041
 TCanvas.cxx:2042
 TCanvas.cxx:2043
 TCanvas.cxx:2044
 TCanvas.cxx:2045
 TCanvas.cxx:2046
 TCanvas.cxx:2047
 TCanvas.cxx:2048
 TCanvas.cxx:2049
 TCanvas.cxx:2050
 TCanvas.cxx:2051
 TCanvas.cxx:2052
 TCanvas.cxx:2053
 TCanvas.cxx:2054
 TCanvas.cxx:2055
 TCanvas.cxx:2056
 TCanvas.cxx:2057
 TCanvas.cxx:2058
 TCanvas.cxx:2059
 TCanvas.cxx:2060
 TCanvas.cxx:2061
 TCanvas.cxx:2062
 TCanvas.cxx:2063
 TCanvas.cxx:2064
 TCanvas.cxx:2065
 TCanvas.cxx:2066
 TCanvas.cxx:2067
 TCanvas.cxx:2068
 TCanvas.cxx:2069
 TCanvas.cxx:2070
 TCanvas.cxx:2071
 TCanvas.cxx:2072
 TCanvas.cxx:2073
 TCanvas.cxx:2074
 TCanvas.cxx:2075
 TCanvas.cxx:2076
 TCanvas.cxx:2077
 TCanvas.cxx:2078
 TCanvas.cxx:2079
 TCanvas.cxx:2080
 TCanvas.cxx:2081
 TCanvas.cxx:2082
 TCanvas.cxx:2083
 TCanvas.cxx:2084
 TCanvas.cxx:2085
 TCanvas.cxx:2086
 TCanvas.cxx:2087
 TCanvas.cxx:2088
 TCanvas.cxx:2089
 TCanvas.cxx:2090
 TCanvas.cxx:2091
 TCanvas.cxx:2092
 TCanvas.cxx:2093
 TCanvas.cxx:2094
 TCanvas.cxx:2095
 TCanvas.cxx:2096
 TCanvas.cxx:2097
 TCanvas.cxx:2098
 TCanvas.cxx:2099
 TCanvas.cxx:2100
 TCanvas.cxx:2101
 TCanvas.cxx:2102
 TCanvas.cxx:2103
 TCanvas.cxx:2104
 TCanvas.cxx:2105
 TCanvas.cxx:2106
 TCanvas.cxx:2107
 TCanvas.cxx:2108
 TCanvas.cxx:2109
 TCanvas.cxx:2110
 TCanvas.cxx:2111
 TCanvas.cxx:2112
 TCanvas.cxx:2113
 TCanvas.cxx:2114
 TCanvas.cxx:2115
 TCanvas.cxx:2116
 TCanvas.cxx:2117
 TCanvas.cxx:2118
 TCanvas.cxx:2119
 TCanvas.cxx:2120
 TCanvas.cxx:2121
 TCanvas.cxx:2122
 TCanvas.cxx:2123
 TCanvas.cxx:2124
 TCanvas.cxx:2125
 TCanvas.cxx:2126
 TCanvas.cxx:2127
 TCanvas.cxx:2128
 TCanvas.cxx:2129
 TCanvas.cxx:2130
 TCanvas.cxx:2131
 TCanvas.cxx:2132
 TCanvas.cxx:2133
 TCanvas.cxx:2134
 TCanvas.cxx:2135
 TCanvas.cxx:2136
 TCanvas.cxx:2137
 TCanvas.cxx:2138
 TCanvas.cxx:2139
 TCanvas.cxx:2140
 TCanvas.cxx:2141
 TCanvas.cxx:2142
 TCanvas.cxx:2143
 TCanvas.cxx:2144
 TCanvas.cxx:2145
 TCanvas.cxx:2146
 TCanvas.cxx:2147
 TCanvas.cxx:2148
 TCanvas.cxx:2149
 TCanvas.cxx:2150
 TCanvas.cxx:2151
 TCanvas.cxx:2152
 TCanvas.cxx:2153
 TCanvas.cxx:2154
 TCanvas.cxx:2155
 TCanvas.cxx:2156
 TCanvas.cxx:2157
 TCanvas.cxx:2158
 TCanvas.cxx:2159
 TCanvas.cxx:2160
 TCanvas.cxx:2161
 TCanvas.cxx:2162
 TCanvas.cxx:2163
 TCanvas.cxx:2164
 TCanvas.cxx:2165
 TCanvas.cxx:2166
 TCanvas.cxx:2167
 TCanvas.cxx:2168
 TCanvas.cxx:2169
 TCanvas.cxx:2170
 TCanvas.cxx:2171
 TCanvas.cxx:2172
 TCanvas.cxx:2173
 TCanvas.cxx:2174
 TCanvas.cxx:2175
 TCanvas.cxx:2176
 TCanvas.cxx:2177
 TCanvas.cxx:2178
 TCanvas.cxx:2179
 TCanvas.cxx:2180
 TCanvas.cxx:2181
 TCanvas.cxx:2182
 TCanvas.cxx:2183
 TCanvas.cxx:2184
 TCanvas.cxx:2185
 TCanvas.cxx:2186
 TCanvas.cxx:2187
 TCanvas.cxx:2188
 TCanvas.cxx:2189
 TCanvas.cxx:2190
 TCanvas.cxx:2191
 TCanvas.cxx:2192
 TCanvas.cxx:2193
 TCanvas.cxx:2194
 TCanvas.cxx:2195
 TCanvas.cxx:2196
 TCanvas.cxx:2197
 TCanvas.cxx:2198
 TCanvas.cxx:2199
 TCanvas.cxx:2200
 TCanvas.cxx:2201
 TCanvas.cxx:2202
 TCanvas.cxx:2203
 TCanvas.cxx:2204
 TCanvas.cxx:2205
 TCanvas.cxx:2206
 TCanvas.cxx:2207
 TCanvas.cxx:2208
 TCanvas.cxx:2209
 TCanvas.cxx:2210
 TCanvas.cxx:2211
 TCanvas.cxx:2212
 TCanvas.cxx:2213
 TCanvas.cxx:2214
 TCanvas.cxx:2215
 TCanvas.cxx:2216
 TCanvas.cxx:2217
 TCanvas.cxx:2218
 TCanvas.cxx:2219
 TCanvas.cxx:2220
 TCanvas.cxx:2221
 TCanvas.cxx:2222
 TCanvas.cxx:2223
 TCanvas.cxx:2224
 TCanvas.cxx:2225
 TCanvas.cxx:2226
 TCanvas.cxx:2227
 TCanvas.cxx:2228
 TCanvas.cxx:2229
 TCanvas.cxx:2230
 TCanvas.cxx:2231
 TCanvas.cxx:2232
 TCanvas.cxx:2233
 TCanvas.cxx:2234
 TCanvas.cxx:2235
 TCanvas.cxx:2236
 TCanvas.cxx:2237
 TCanvas.cxx:2238
 TCanvas.cxx:2239
 TCanvas.cxx:2240
 TCanvas.cxx:2241
 TCanvas.cxx:2242
 TCanvas.cxx:2243
 TCanvas.cxx:2244
 TCanvas.cxx:2245
 TCanvas.cxx:2246
 TCanvas.cxx:2247
 TCanvas.cxx:2248
 TCanvas.cxx:2249
 TCanvas.cxx:2250
 TCanvas.cxx:2251
 TCanvas.cxx:2252
 TCanvas.cxx:2253
 TCanvas.cxx:2254
 TCanvas.cxx:2255
 TCanvas.cxx:2256
 TCanvas.cxx:2257
 TCanvas.cxx:2258
 TCanvas.cxx:2259
 TCanvas.cxx:2260
 TCanvas.cxx:2261
 TCanvas.cxx:2262
 TCanvas.cxx:2263
 TCanvas.cxx:2264
 TCanvas.cxx:2265
 TCanvas.cxx:2266
 TCanvas.cxx:2267
 TCanvas.cxx:2268
 TCanvas.cxx:2269
 TCanvas.cxx:2270
 TCanvas.cxx:2271
 TCanvas.cxx:2272
 TCanvas.cxx:2273
 TCanvas.cxx:2274
 TCanvas.cxx:2275
 TCanvas.cxx:2276
 TCanvas.cxx:2277
 TCanvas.cxx:2278
 TCanvas.cxx:2279
 TCanvas.cxx:2280
 TCanvas.cxx:2281
 TCanvas.cxx:2282
 TCanvas.cxx:2283
 TCanvas.cxx:2284
 TCanvas.cxx:2285
 TCanvas.cxx:2286
 TCanvas.cxx:2287
 TCanvas.cxx:2288
 TCanvas.cxx:2289
 TCanvas.cxx:2290
 TCanvas.cxx:2291
 TCanvas.cxx:2292
 TCanvas.cxx:2293
 TCanvas.cxx:2294
 TCanvas.cxx:2295
 TCanvas.cxx:2296
 TCanvas.cxx:2297
 TCanvas.cxx:2298
 TCanvas.cxx:2299
 TCanvas.cxx:2300
 TCanvas.cxx:2301
 TCanvas.cxx:2302
 TCanvas.cxx:2303
 TCanvas.cxx:2304