ROOT logo
// @(#)root/gui:$Id: TGPicture.cxx 23115 2008-04-10 13:35:37Z rdm $
// Author: Fons Rademakers   01/01/98

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

    This source is based on Xclass95, a Win95-looking GUI toolkit.
    Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.

    Xclass95 is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

**************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGPicture & TGPicturePool                                            //
//                                                                      //
// The TGPicture class implements pictures and icons used in the        //
// different GUI elements and widgets. The TGPicturePool class          //
// implements a TGPicture cache. TGPictures are created, managed and    //
// destroyed by the TGPicturePool.                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGPicture.h"
#include "TGResourcePool.h"
#include "THashTable.h"
#include "TSystem.h"
#include "TGWindow.h"
#include "TVirtualX.h"
#include "TImage.h"
#include <stdlib.h>

TGGC *TGSelectedPicture::fgSelectedGC = 0;

ClassImp(TGPicture)
ClassImp(TGSelectedPicture)
ClassImp(TGPicturePool)


//______________________________________________________________________________
TGPicturePool::TGPicturePool(const TGPicturePool& pp) :
  TObject(pp),
  fClient(pp.fClient),
  fPath(pp.fPath),
  fPicList(pp.fPicList)
{ 
   //copy constructor
}

//______________________________________________________________________________
TGPicturePool& TGPicturePool::operator=(const TGPicturePool& pp) 
{
   //assignment operator
   if(this!=&pp) {
      TObject::operator=(pp);
      fClient=pp.fClient;
      fPath=pp.fPath;
      fPicList=pp.fPicList;
   } 
   return *this;
}

//______________________________________________________________________________
const TGPicture *TGPicturePool::GetPicture(const char *name)
{
   // Get a picture from the picture pool. Picture must be freed using
   // TGPicturePool::FreePicture(). If picture is not found 0 is returned.

   if (!fPicList)
      fPicList = new THashTable(50);

   TString pname = name;
   pname.Strip();
   TString ext = strrchr(pname, '.');
   ext.ToLower();

   if (ext.Length()) { // ".xpm", ".gif" etc
      char *pxname = gSystem->ExpandPathName(gSystem->UnixPathName(pname));
      pname = pxname;
      delete [] pxname;
   }

   TGPicture *pic = (TGPicture *)fPicList->FindObject(pname);
   if (pic && !pic->IsScaled()) {
      if (pic->fPic == kNone)
         return 0;
      pic->AddReference();
      return pic;
   }

   char *picnam = gSystem->Which(fPath, pname, kReadPermission);
   if (!picnam) {
      pic = new TGPicture(pname);
      pic->fAttributes.fColormap  = fClient->GetDefaultColormap();
      pic->fAttributes.fCloseness = 40000; // Allow for "similar" colors
      pic->fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
      fPicList->Add(pic);
      return 0;
   }

   TImage *img = TImage::Open(picnam);
   if (!img) {
      pic = new TGPicture(pname);
      pic->fAttributes.fColormap  = fClient->GetDefaultColormap();
      pic->fAttributes.fCloseness = 40000; // Allow for "similar" colors
      pic->fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
      fPicList->Add(pic);
      delete [] picnam;
      return 0;
   }

   pic = new TGPicture(pname, img->GetPixmap(), img->GetMask());
   delete [] picnam;
   delete img;
   fPicList->Add(pic);
   return pic;
}

//______________________________________________________________________________
const TGPicture *TGPicturePool::GetPicture(const char *name,
                                           UInt_t new_width, UInt_t new_height)
{
   // Get picture with specified size from pool (picture will be scaled if
   // necessary). Picture must be freed using TGPicturePool::FreePicture(). If
   // picture is not found 0 is returned.

   if (!fPicList)
      fPicList = new THashTable(50);

   TString pname = name;
   pname.Strip();
   TString ext = strrchr(pname, '.');
   ext.ToLower();

   if (ext.Length()) { // ".xpm", ".gif" etc
      char *pxname = gSystem->ExpandPathName(gSystem->UnixPathName(pname));
      pname = pxname;
      delete [] pxname;
   }

   const char *hname = TGPicture::HashName(pname, new_width, new_height);
   TGPicture *pic = (TGPicture *)fPicList->FindObject(hname);
   if (pic && pic->GetWidth() == new_width && pic->GetHeight() == new_height) {
      if (pic->fPic == kNone)
         return 0;
      pic->AddReference();
      return pic;
   }

   char *picnam = gSystem->Which(fPath, pname, kReadPermission);
   if (!picnam) {
      pic = new TGPicture(hname, kTRUE);
      pic->fAttributes.fColormap  = fClient->GetDefaultColormap();
      pic->fAttributes.fCloseness = 40000; // Allow for "similar" colors
      pic->fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
      pic->fAttributes.fWidth  = new_width;
      pic->fAttributes.fHeight = new_height;
      fPicList->Add(pic);
      return 0;
   }

   TImage *img = TImage::Open(picnam);
   if (!img) {
      pic = new TGPicture(hname, kTRUE);
      pic->fAttributes.fColormap  = fClient->GetDefaultColormap();
      pic->fAttributes.fCloseness = 40000; // Allow for "similar" colors
      pic->fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
      pic->fAttributes.fWidth  = new_width;
      pic->fAttributes.fHeight = new_height;
      fPicList->Add(pic);
      delete [] picnam;
      return 0;
   }

   img->Scale(new_width, new_height);

   pic = new TGPicture(hname, img->GetPixmap(), img->GetMask());
   delete [] picnam;
   delete img;
   fPicList->Add(pic);
   return pic;
}

//______________________________________________________________________________
const TGPicture *TGPicturePool::GetPicture(const char *name, Pixmap_t pxmap,
                                           Pixmap_t mask)
{
   // Get picture with specified pixmap and mask from pool.
   // Picture must be freed using TGPicturePool::FreePicture().
   // If picture is not found 0 is returned.

   if (!fPicList)
      fPicList = new THashTable(50);

   Int_t xy;
   UInt_t w, h;

   gVirtualX->GetWindowSize(pxmap, xy, xy, w, h);

   const char *hname = TGPicture::HashName(name, w, h);
   TGPicture *pic = (TGPicture *)fPicList->FindObject(hname);

   if (pic) {
      pic->AddReference();
      return pic;
   }

   pic = new TGPicture(hname, pxmap, mask);
   fPicList->Add(pic);

   return pic;
}

//______________________________________________________________________________
const TGPicture *TGPicturePool::GetPicture(const char *name, char **xpm)
{
   // Create picture from XPM data.
   // Picture must be freed using TGPicturePool::FreePicture().
   // If picture creation failed 0 is returned.

   UInt_t w, h;

   if (!xpm || !*xpm) {
      return 0;
   }

   if (!fPicList) {
      fPicList = new THashTable(50);
   }
   char *ptr = xpm[0];
   while (isspace((int)*ptr)) ++ptr;
   w = atoi(ptr);

   while (isspace((int)*ptr)) ++ptr;
   h = atoi(ptr);

   const char *hname = TGPicture::HashName(name, w, h);
   TGPicture *pic = (TGPicture *)fPicList->FindObject(hname);
   if (pic) {
      pic->AddReference();
      return pic;
   }

   TImage *img = TImage::Open(xpm);
   if (!img) {
      pic = new TGPicture(hname, kTRUE);
      pic->fAttributes.fColormap  = fClient->GetDefaultColormap();
      pic->fAttributes.fCloseness = 40000; // Allow for "similar" colors
      pic->fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
      pic->fAttributes.fWidth  = w;
      pic->fAttributes.fHeight = h;
      fPicList->Add(pic);
      return 0;
   }

   pic = new TGPicture(hname, img->GetPixmap(), img->GetMask());
   delete img;
   return pic;
}

//______________________________________________________________________________
void TGPicturePool::FreePicture(const TGPicture *fpic)
{
   // Remove picture from cache if nobody is using it anymore.

   if (!fPicList) return;

   TGPicture *pic = (TGPicture *)fPicList->FindObject(fpic);
   if (pic) {
      if (pic->RemoveReference() == 0) {
         fPicList->Remove(pic);
         delete pic;
      }
   }
}

//______________________________________________________________________________
TGPicturePool::~TGPicturePool()
{
   // Delete picture cache.

   if (fPicList) {
      fPicList->Delete();
      delete fPicList;
   }
}

//______________________________________________________________________________
void TGPicturePool::Print(Option_t *) const
{
   // List all pictures in the pool.

   if (fPicList)
      fPicList->Print();
   else
      Info("Print", "no pictures in picture pool");
}

//______________________________________________________________________________
TGPicture::TGPicture(const char *name, Pixmap_t pxmap, Pixmap_t mask)
{
   // ctor. Important: both pixmaps pxmap and mask must be unique (not shared)

   fName   = name;
   fScaled = kFALSE;
   fPic    = pxmap;
   fMask   = mask;
   Int_t xy;

   fAttributes.fColormap  = gClient->GetDefaultColormap();
   fAttributes.fCloseness = 40000; // Allow for "similar" colors
   fAttributes.fMask      = kPASize | kPAColormap | kPACloseness;
   fAttributes.fPixels    = 0;

   gVirtualX->GetWindowSize(fPic, xy, xy, fAttributes.fWidth, fAttributes.fHeight);
   SetRefCount(1);
}

//______________________________________________________________________________
void TGPicture::Draw(Handle_t id, GContext_t gc, Int_t x, Int_t y) const
{
   // Draw a picture.

   GCValues_t gcv;

   gcv.fMask = kGCClipMask | kGCClipXOrigin | kGCClipYOrigin;
   gcv.fClipMask = fMask;
   gcv.fClipXOrigin = x;
   gcv.fClipYOrigin = y;
   gVirtualX->ChangeGC(gc, &gcv);
   gVirtualX->CopyArea(fPic, id, gc, 0, 0, fAttributes.fWidth, fAttributes.fHeight,
                  x, y);
   gcv.fMask = kGCClipMask;
   gcv.fClipMask = kNone;
   gVirtualX->ChangeGC(gc, &gcv);
}

//______________________________________________________________________________
TGPicture::~TGPicture()
{
   // Delete picture object.

   if (fPic != kNone)
      gVirtualX->DeletePixmap(fPic);
   if (fMask != kNone)
      gVirtualX->DeletePixmap(fMask);
   if (fAttributes.fPixels)
      delete [] fAttributes.fPixels;
}

//______________________________________________________________________________
const char *TGPicture::HashName(const char *name, Int_t width, Int_t height)
{
   // Static function returning a unique name used to look up a picture.
   // The unique name has the form "name__widthxheight".

   static TString hashName;

   hashName.Form("%s__%dx%d", name, width, height);
   return hashName.Data();
}

//______________________________________________________________________________
void TGPicture::Print(Option_t *) const
{
   // Print picture info.

   Printf("TGPicture: %s,%sref cnt = %u %d", GetName(),
          fScaled ? " scaled, " : " ", References(), fPic);
}


//______________________________________________________________________________
TGSelectedPicture::TGSelectedPicture(const TGClient *client, const TGPicture *p) :
   TGPicture("")
{
   // Create a "selected" looking picture based on the original TGPicture.

   GCValues_t gcv;
   UInt_t     w, h;

   fClient = client;
   Window_t root  = fClient->GetDefaultRoot()->GetId();

   w = p->GetWidth();
   h = p->GetHeight();

   fPic  = gVirtualX->CreatePixmap(root, w, h);
   fMask = p->GetMask();

   fAttributes.fWidth  = w;
   fAttributes.fHeight = h;

   gVirtualX->CopyArea(p->GetPicture(), fPic, GetSelectedGC()(), 0, 0, w, h, 0, 0);

   gcv.fMask = kGCClipMask | kGCClipXOrigin | kGCClipYOrigin;
   gcv.fClipMask = p->GetMask();
   gcv.fClipXOrigin = 0;
   gcv.fClipYOrigin = 0;
   GetSelectedGC().SetAttributes(&gcv);

   gVirtualX->FillRectangle(fPic, GetSelectedGC()(), 0, 0, w, h);

   GetSelectedGC().SetClipMask(kNone);
}

//______________________________________________________________________________
TGSelectedPicture::~TGSelectedPicture()
{
   // Delete selected picture.

   // fMask was borrowed so should not be deleted by ~TGPicture.
   fMask = kNone;
}

//______________________________________________________________________________
TGGC &TGSelectedPicture::GetSelectedGC()
{
   // Return selection graphics context in use.
   
   if (!fgSelectedGC) {
      fgSelectedGC = new TGGC(*gClient->GetResourcePool()->GetFrameGC());
      fgSelectedGC->SetForeground(gClient->GetResourcePool()->GetSelectedBgndColor());
      fgSelectedGC->SetBackground(gClient->GetResourcePool()->GetBlackColor());
      fgSelectedGC->SetFillStyle(kFillStippled);
      fgSelectedGC->SetStipple(gClient->GetResourcePool()->GetCheckeredBitmap());
   }
   return *fgSelectedGC;
}
 TGPicture.cxx:1
 TGPicture.cxx:2
 TGPicture.cxx:3
 TGPicture.cxx:4
 TGPicture.cxx:5
 TGPicture.cxx:6
 TGPicture.cxx:7
 TGPicture.cxx:8
 TGPicture.cxx:9
 TGPicture.cxx:10
 TGPicture.cxx:11
 TGPicture.cxx:12
 TGPicture.cxx:13
 TGPicture.cxx:14
 TGPicture.cxx:15
 TGPicture.cxx:16
 TGPicture.cxx:17
 TGPicture.cxx:18
 TGPicture.cxx:19
 TGPicture.cxx:20
 TGPicture.cxx:21
 TGPicture.cxx:22
 TGPicture.cxx:23
 TGPicture.cxx:24
 TGPicture.cxx:25
 TGPicture.cxx:26
 TGPicture.cxx:27
 TGPicture.cxx:28
 TGPicture.cxx:29
 TGPicture.cxx:30
 TGPicture.cxx:31
 TGPicture.cxx:32
 TGPicture.cxx:33
 TGPicture.cxx:34
 TGPicture.cxx:35
 TGPicture.cxx:36
 TGPicture.cxx:37
 TGPicture.cxx:38
 TGPicture.cxx:39
 TGPicture.cxx:40
 TGPicture.cxx:41
 TGPicture.cxx:42
 TGPicture.cxx:43
 TGPicture.cxx:44
 TGPicture.cxx:45
 TGPicture.cxx:46
 TGPicture.cxx:47
 TGPicture.cxx:48
 TGPicture.cxx:49
 TGPicture.cxx:50
 TGPicture.cxx:51
 TGPicture.cxx:52
 TGPicture.cxx:53
 TGPicture.cxx:54
 TGPicture.cxx:55
 TGPicture.cxx:56
 TGPicture.cxx:57
 TGPicture.cxx:58
 TGPicture.cxx:59
 TGPicture.cxx:60
 TGPicture.cxx:61
 TGPicture.cxx:62
 TGPicture.cxx:63
 TGPicture.cxx:64
 TGPicture.cxx:65
 TGPicture.cxx:66
 TGPicture.cxx:67
 TGPicture.cxx:68
 TGPicture.cxx:69
 TGPicture.cxx:70
 TGPicture.cxx:71
 TGPicture.cxx:72
 TGPicture.cxx:73
 TGPicture.cxx:74
 TGPicture.cxx:75
 TGPicture.cxx:76
 TGPicture.cxx:77
 TGPicture.cxx:78
 TGPicture.cxx:79
 TGPicture.cxx:80
 TGPicture.cxx:81
 TGPicture.cxx:82
 TGPicture.cxx:83
 TGPicture.cxx:84
 TGPicture.cxx:85
 TGPicture.cxx:86
 TGPicture.cxx:87
 TGPicture.cxx:88
 TGPicture.cxx:89
 TGPicture.cxx:90
 TGPicture.cxx:91
 TGPicture.cxx:92
 TGPicture.cxx:93
 TGPicture.cxx:94
 TGPicture.cxx:95
 TGPicture.cxx:96
 TGPicture.cxx:97
 TGPicture.cxx:98
 TGPicture.cxx:99
 TGPicture.cxx:100
 TGPicture.cxx:101
 TGPicture.cxx:102
 TGPicture.cxx:103
 TGPicture.cxx:104
 TGPicture.cxx:105
 TGPicture.cxx:106
 TGPicture.cxx:107
 TGPicture.cxx:108
 TGPicture.cxx:109
 TGPicture.cxx:110
 TGPicture.cxx:111
 TGPicture.cxx:112
 TGPicture.cxx:113
 TGPicture.cxx:114
 TGPicture.cxx:115
 TGPicture.cxx:116
 TGPicture.cxx:117
 TGPicture.cxx:118
 TGPicture.cxx:119
 TGPicture.cxx:120
 TGPicture.cxx:121
 TGPicture.cxx:122
 TGPicture.cxx:123
 TGPicture.cxx:124
 TGPicture.cxx:125
 TGPicture.cxx:126
 TGPicture.cxx:127
 TGPicture.cxx:128
 TGPicture.cxx:129
 TGPicture.cxx:130
 TGPicture.cxx:131
 TGPicture.cxx:132
 TGPicture.cxx:133
 TGPicture.cxx:134
 TGPicture.cxx:135
 TGPicture.cxx:136
 TGPicture.cxx:137
 TGPicture.cxx:138
 TGPicture.cxx:139
 TGPicture.cxx:140
 TGPicture.cxx:141
 TGPicture.cxx:142
 TGPicture.cxx:143
 TGPicture.cxx:144
 TGPicture.cxx:145
 TGPicture.cxx:146
 TGPicture.cxx:147
 TGPicture.cxx:148
 TGPicture.cxx:149
 TGPicture.cxx:150
 TGPicture.cxx:151
 TGPicture.cxx:152
 TGPicture.cxx:153
 TGPicture.cxx:154
 TGPicture.cxx:155
 TGPicture.cxx:156
 TGPicture.cxx:157
 TGPicture.cxx:158
 TGPicture.cxx:159
 TGPicture.cxx:160
 TGPicture.cxx:161
 TGPicture.cxx:162
 TGPicture.cxx:163
 TGPicture.cxx:164
 TGPicture.cxx:165
 TGPicture.cxx:166
 TGPicture.cxx:167
 TGPicture.cxx:168
 TGPicture.cxx:169
 TGPicture.cxx:170
 TGPicture.cxx:171
 TGPicture.cxx:172
 TGPicture.cxx:173
 TGPicture.cxx:174
 TGPicture.cxx:175
 TGPicture.cxx:176
 TGPicture.cxx:177
 TGPicture.cxx:178
 TGPicture.cxx:179
 TGPicture.cxx:180
 TGPicture.cxx:181
 TGPicture.cxx:182
 TGPicture.cxx:183
 TGPicture.cxx:184
 TGPicture.cxx:185
 TGPicture.cxx:186
 TGPicture.cxx:187
 TGPicture.cxx:188
 TGPicture.cxx:189
 TGPicture.cxx:190
 TGPicture.cxx:191
 TGPicture.cxx:192
 TGPicture.cxx:193
 TGPicture.cxx:194
 TGPicture.cxx:195
 TGPicture.cxx:196
 TGPicture.cxx:197
 TGPicture.cxx:198
 TGPicture.cxx:199
 TGPicture.cxx:200
 TGPicture.cxx:201
 TGPicture.cxx:202
 TGPicture.cxx:203
 TGPicture.cxx:204
 TGPicture.cxx:205
 TGPicture.cxx:206
 TGPicture.cxx:207
 TGPicture.cxx:208
 TGPicture.cxx:209
 TGPicture.cxx:210
 TGPicture.cxx:211
 TGPicture.cxx:212
 TGPicture.cxx:213
 TGPicture.cxx:214
 TGPicture.cxx:215
 TGPicture.cxx:216
 TGPicture.cxx:217
 TGPicture.cxx:218
 TGPicture.cxx:219
 TGPicture.cxx:220
 TGPicture.cxx:221
 TGPicture.cxx:222
 TGPicture.cxx:223
 TGPicture.cxx:224
 TGPicture.cxx:225
 TGPicture.cxx:226
 TGPicture.cxx:227
 TGPicture.cxx:228
 TGPicture.cxx:229
 TGPicture.cxx:230
 TGPicture.cxx:231
 TGPicture.cxx:232
 TGPicture.cxx:233
 TGPicture.cxx:234
 TGPicture.cxx:235
 TGPicture.cxx:236
 TGPicture.cxx:237
 TGPicture.cxx:238
 TGPicture.cxx:239
 TGPicture.cxx:240
 TGPicture.cxx:241
 TGPicture.cxx:242
 TGPicture.cxx:243
 TGPicture.cxx:244
 TGPicture.cxx:245
 TGPicture.cxx:246
 TGPicture.cxx:247
 TGPicture.cxx:248
 TGPicture.cxx:249
 TGPicture.cxx:250
 TGPicture.cxx:251
 TGPicture.cxx:252
 TGPicture.cxx:253
 TGPicture.cxx:254
 TGPicture.cxx:255
 TGPicture.cxx:256
 TGPicture.cxx:257
 TGPicture.cxx:258
 TGPicture.cxx:259
 TGPicture.cxx:260
 TGPicture.cxx:261
 TGPicture.cxx:262
 TGPicture.cxx:263
 TGPicture.cxx:264
 TGPicture.cxx:265
 TGPicture.cxx:266
 TGPicture.cxx:267
 TGPicture.cxx:268
 TGPicture.cxx:269
 TGPicture.cxx:270
 TGPicture.cxx:271
 TGPicture.cxx:272
 TGPicture.cxx:273
 TGPicture.cxx:274
 TGPicture.cxx:275
 TGPicture.cxx:276
 TGPicture.cxx:277
 TGPicture.cxx:278
 TGPicture.cxx:279
 TGPicture.cxx:280
 TGPicture.cxx:281
 TGPicture.cxx:282
 TGPicture.cxx:283
 TGPicture.cxx:284
 TGPicture.cxx:285
 TGPicture.cxx:286
 TGPicture.cxx:287
 TGPicture.cxx:288
 TGPicture.cxx:289
 TGPicture.cxx:290
 TGPicture.cxx:291
 TGPicture.cxx:292
 TGPicture.cxx:293
 TGPicture.cxx:294
 TGPicture.cxx:295
 TGPicture.cxx:296
 TGPicture.cxx:297
 TGPicture.cxx:298
 TGPicture.cxx:299
 TGPicture.cxx:300
 TGPicture.cxx:301
 TGPicture.cxx:302
 TGPicture.cxx:303
 TGPicture.cxx:304
 TGPicture.cxx:305
 TGPicture.cxx:306
 TGPicture.cxx:307
 TGPicture.cxx:308
 TGPicture.cxx:309
 TGPicture.cxx:310
 TGPicture.cxx:311
 TGPicture.cxx:312
 TGPicture.cxx:313
 TGPicture.cxx:314
 TGPicture.cxx:315
 TGPicture.cxx:316
 TGPicture.cxx:317
 TGPicture.cxx:318
 TGPicture.cxx:319
 TGPicture.cxx:320
 TGPicture.cxx:321
 TGPicture.cxx:322
 TGPicture.cxx:323
 TGPicture.cxx:324
 TGPicture.cxx:325
 TGPicture.cxx:326
 TGPicture.cxx:327
 TGPicture.cxx:328
 TGPicture.cxx:329
 TGPicture.cxx:330
 TGPicture.cxx:331
 TGPicture.cxx:332
 TGPicture.cxx:333
 TGPicture.cxx:334
 TGPicture.cxx:335
 TGPicture.cxx:336
 TGPicture.cxx:337
 TGPicture.cxx:338
 TGPicture.cxx:339
 TGPicture.cxx:340
 TGPicture.cxx:341
 TGPicture.cxx:342
 TGPicture.cxx:343
 TGPicture.cxx:344
 TGPicture.cxx:345
 TGPicture.cxx:346
 TGPicture.cxx:347
 TGPicture.cxx:348
 TGPicture.cxx:349
 TGPicture.cxx:350
 TGPicture.cxx:351
 TGPicture.cxx:352
 TGPicture.cxx:353
 TGPicture.cxx:354
 TGPicture.cxx:355
 TGPicture.cxx:356
 TGPicture.cxx:357
 TGPicture.cxx:358
 TGPicture.cxx:359
 TGPicture.cxx:360
 TGPicture.cxx:361
 TGPicture.cxx:362
 TGPicture.cxx:363
 TGPicture.cxx:364
 TGPicture.cxx:365
 TGPicture.cxx:366
 TGPicture.cxx:367
 TGPicture.cxx:368
 TGPicture.cxx:369
 TGPicture.cxx:370
 TGPicture.cxx:371
 TGPicture.cxx:372
 TGPicture.cxx:373
 TGPicture.cxx:374
 TGPicture.cxx:375
 TGPicture.cxx:376
 TGPicture.cxx:377
 TGPicture.cxx:378
 TGPicture.cxx:379
 TGPicture.cxx:380
 TGPicture.cxx:381
 TGPicture.cxx:382
 TGPicture.cxx:383
 TGPicture.cxx:384
 TGPicture.cxx:385
 TGPicture.cxx:386
 TGPicture.cxx:387
 TGPicture.cxx:388
 TGPicture.cxx:389
 TGPicture.cxx:390
 TGPicture.cxx:391
 TGPicture.cxx:392
 TGPicture.cxx:393
 TGPicture.cxx:394
 TGPicture.cxx:395
 TGPicture.cxx:396
 TGPicture.cxx:397
 TGPicture.cxx:398
 TGPicture.cxx:399
 TGPicture.cxx:400
 TGPicture.cxx:401
 TGPicture.cxx:402
 TGPicture.cxx:403
 TGPicture.cxx:404
 TGPicture.cxx:405
 TGPicture.cxx:406
 TGPicture.cxx:407
 TGPicture.cxx:408
 TGPicture.cxx:409
 TGPicture.cxx:410
 TGPicture.cxx:411
 TGPicture.cxx:412
 TGPicture.cxx:413
 TGPicture.cxx:414
 TGPicture.cxx:415
 TGPicture.cxx:416
 TGPicture.cxx:417
 TGPicture.cxx:418
 TGPicture.cxx:419
 TGPicture.cxx:420
 TGPicture.cxx:421
 TGPicture.cxx:422
 TGPicture.cxx:423
 TGPicture.cxx:424
 TGPicture.cxx:425
 TGPicture.cxx:426
 TGPicture.cxx:427
 TGPicture.cxx:428
 TGPicture.cxx:429
 TGPicture.cxx:430
 TGPicture.cxx:431
 TGPicture.cxx:432
 TGPicture.cxx:433
 TGPicture.cxx:434
 TGPicture.cxx:435
 TGPicture.cxx:436
 TGPicture.cxx:437
 TGPicture.cxx:438
 TGPicture.cxx:439