Logo ROOT   6.10/09
Reference Guide
TGApplication.cxx
Go to the documentation of this file.
1 // @(#)root/gui:$Id$
2 // Author: Guy Barrand 30/05/2001
3 
4 /*************************************************************************
5  * Copyright (C) 2001, Guy Barrand. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // TGApplication //
15 // //
16 // This class initialize the ROOT GUI toolkit. //
17 // This class must be instantiated exactly once in any given //
18 // application. //
19 // //
20 //////////////////////////////////////////////////////////////////////////
21 
22 #include "RConfigure.h"
23 
24 #include "TGApplication.h"
25 #include "TROOT.h"
26 #include "TSystem.h"
27 #include "TGClient.h"
28 #include "TPluginManager.h"
29 #include "TError.h"
30 #include "TEnv.h"
31 #include "TVirtualX.h"
32 #include "TStyle.h"
33 #include "TInterpreter.h"
34 #include "TColor.h"
35 
37 
38 ////////////////////////////////////////////////////////////////////////////////
39 /// Create a GUI application environment. Use this class if you only
40 /// want to use the ROOT GUI and no other services. In all other cases
41 /// use either TApplication or TRint.
42 
43 TGApplication::TGApplication(const char *appClassName,
44  int *argc, char **argv, void*, int)
45  : TApplication(), fDisplay(0), fClient(0)
46 {
47  if (gApplication) {
48  Error("TGApplication", "only one instance of TGApplication allowed");
49  return;
50  }
51 
52  if (!gROOT)
53  ::Fatal("TGApplication::TGApplication", "ROOT system not initialized");
54 
55  if (!gSystem)
56  ::Fatal("TGApplication::TGApplication", "gSystem not initialized");
57 
58  gApplication = this;
59  gROOT->SetApplication(this);
60  gROOT->SetName(appClassName);
61 
62  GetOptions(argc, argv);
63  if (argv && argv[0])
64  gSystem->SetProgname(argv[0]);
65 
66  // Tell TSystem the TApplication has been created
68 
69  // Enable autoloading
70  gInterpreter->EnableAutoLoading();
71 
72  LoadGraphicsLibs();
73 
74  if (!fDisplay) gSystem->SetDisplay();
75  fClient = new TGClient(fDisplay);
76 
77  if (fClient->IsZombie()) {
78  Error("TGApplication", "cannot switch to batch mode, exiting...");
79  gSystem->Exit(1);
80  }
81 
82  // a GUI application is never run in batch mode
83  gROOT->SetBatch(kFALSE);
84 
85  if (strcmp(appClassName, "proofserv")) {
86  const char *ttpath = gEnv->GetValue("Root.TTFontPath",
88  char *ttfont = gSystem->Which(ttpath, "arialbd.ttf", kReadPermission);
89  // Added by cholm for use of DFSG - fonts - based on fix by Kevin
90  if (!ttfont)
91  ttfont = gSystem->Which(ttpath, "FreeSansBold.ttf", kReadPermission);
92  if (ttfont && gEnv->GetValue("Root.UseTTFonts", 1)) {
94  if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", "x11ttf")))
95  if (h->LoadPlugin() == -1)
96  Info("TGApplication", "no TTF support");
97  }
98 
99  delete [] ttfont;
100  }
101 
102  // Create the canvas colors early so they are allocated before
103  // any color table expensive bitmaps get allocated in GUI routines (like
104  // creation of XPM bitmaps).
106 
107  // Set default screen factor (if not disabled in rc file)
108  if (gEnv->GetValue("Canvas.UseScreenFactor", 1)) {
109  Int_t x, y;
110  UInt_t w, h;
111  if (gVirtualX) {
112  gVirtualX->GetGeometry(-1, x, y, w, h);
113  if (h > 0 && h < 1000) gStyle->SetScreenFactor(0.0011*h);
114  }
115  }
116 
117  // Save current interpreter context
118  gInterpreter->SaveContext();
119  gInterpreter->SaveGlobalsContext();
120 
121  // to allow user to interact with TCanvas's under WIN32
122  gROOT->SetLineHasBeenProcessed();
123 }
124 
125 ////////////////////////////////////////////////////////////////////////////////
126 /// TGApplication dtor.
127 
129 {
130  delete fDisplay;
131  delete fClient;
132 }
133 
134 ////////////////////////////////////////////////////////////////////////////////
135 /// Load shared libs necessary for GUI.
136 
138 {
139  TString name;
140  TString title1 = "ROOT interface to ";
141  TString nativex, title;
142 #ifndef R__WIN32
143  nativex = "x11";
144  name = "X11";
145  title = title1 + "X11";
146 #else
147  nativex = "win32gdk";
148  name = "Win32gdk";
149  title = title1 + "Win32gdk";
150 #endif
151 
152  TString guiBackend(gEnv->GetValue("Gui.Backend", "native"));
153  guiBackend.ToLower();
154  if (guiBackend == "native") {
155  guiBackend = nativex;
156  } else {
157  name = guiBackend;
158  title = title1 + guiBackend;
159  }
160 
161  TPluginHandler *h;
162  if ((h = gROOT->GetPluginManager()->FindHandler("TVirtualX", guiBackend))) {
163  if (h->LoadPlugin() == -1)
164  return;
165  gVirtualX = (TVirtualX *) h->ExecPlugin(2, name.Data(), title.Data());
166  }
167 }
168 
169 ////////////////////////////////////////////////////////////////////////////////
170 /// Handle command line arguments. Arguments handled are removed from the
171 /// argument array. Currently only option "-display xserver" is considered.
172 
173 void TGApplication::GetOptions(Int_t *argc, char **argv)
174 {
175  if (!argc) return;
176 
177  int i, j;
178  for (i = 0; i < *argc; i++) {
179  if (!strcmp(argv[i], "-display")) {
180  if (argv[i+1] && strlen(argv[i+1]) && argv[i+1][0] != '-') {
181  fDisplay = StrDup(argv[i+1]);
182  argv[i] = 0;
183  argv[i+1] = 0;
184  i++;
185  }
186  }
187  }
188 
189  j = 0;
190  for (i = 0; i < *argc; i++) {
191  if (argv[i]) {
192  argv[j] = argv[i];
193  j++;
194  }
195  }
196 
197  *argc = j;
198 }
199 
static const TString & GetTTFFontDir()
Get the fonts directory in the installation. Static utility function.
Definition: TROOT.cxx:2928
Semi-Abstract base class defining a generic interface to the underlying, low level, native graphics backend (X11, Win32, MacOS, OpenGL...).
Definition: TVirtualX.h:58
virtual void NotifyApplicationCreated()
Hook to tell TSystem that the TApplication object has been created.
Definition: TSystem.cxx:318
void Fatal(const char *location, const char *msgfmt,...)
R__EXTERN TStyle * gStyle
Definition: TStyle.h:402
TH1 * h
Definition: legend2.C:5
#define gROOT
Definition: TROOT.h:375
virtual ~TGApplication()
TGApplication dtor.
Int_t LoadPlugin()
Load the plugin library for this handler.
Basic string class.
Definition: TString.h:129
void ToLower()
Change string to lower-case.
Definition: TString.cxx:1099
int Int_t
Definition: RtypesCore.h:41
#define gInterpreter
Definition: TInterpreter.h:499
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
Definition: TSystem.cxx:1518
R__EXTERN TApplication * gApplication
Definition: TApplication.h:165
Double_t x[n]
Definition: legend1.C:17
virtual void LoadGraphicsLibs()
Load shared libs necessary for GUI.
void Info(const char *location, const char *msgfmt,...)
virtual void SetDisplay()
Set DISPLAY environment variable based on utmp entry. Only for UNIX.
Definition: TSystem.cxx:238
TGClient * fClient
Definition: TGApplication.h:35
void Error(const char *location, const char *msgfmt,...)
virtual void GetOptions(Int_t *argc, char **argv)
Handle command line arguments.
R__EXTERN TSystem * gSystem
Definition: TSystem.h:539
Long_t ExecPlugin(int nargs, const T &... params)
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
Definition: TEnv.cxx:482
void SetScreenFactor(Float_t factor=1)
Definition: TStyle.h:294
unsigned int UInt_t
Definition: RtypesCore.h:42
#define gVirtualX
Definition: TVirtualX.h:350
char * StrDup(const char *str)
Duplicate the string str.
Definition: TString.cxx:2524
const Bool_t kFALSE
Definition: RtypesCore.h:92
#define ClassImp(name)
Definition: Rtypes.h:336
R__EXTERN TEnv * gEnv
Definition: TEnv.h:170
Double_t y[n]
Definition: legend1.C:17
virtual void SetProgname(const char *name)
Set the application name (from command line, argv[0]) and copy it in gProgName.
Definition: TSystem.cxx:230
virtual void Exit(int code, Bool_t mode=kTRUE)
Exit the application.
Definition: TSystem.cxx:723
static void InitializeColors()
Initialize colors used by the TCanvas based graphics (via TColor objects).
Definition: TColor.cxx:1049
This class creates the ROOT Application Environment that interfaces to the windowing system eventloop...
Definition: TApplication.h:39
const char * Data() const
Definition: TString.h:347