forked from root-project/root
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TCanvas.h
253 lines (228 loc) · 12.2 KB
/
TCanvas.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
// @(#)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. *
*************************************************************************/
#ifndef ROOT_TCanvas
#define ROOT_TCanvas
//////////////////////////////////////////////////////////////////////////
// //
// TCanvas //
// //
// Graphics canvas. //
// //
//////////////////////////////////////////////////////////////////////////
#ifndef ROOT_TPad
#include "TPad.h"
#endif
#ifndef ROOT_TAttCanvas
#include "TAttCanvas.h"
#endif
#ifndef ROOT_TVirtualX
#include "TVirtualX.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TCanvasImp
#include "TCanvasImp.h"
#endif
class TContextMenu;
class TControlBar;
class TBrowser;
class TCanvas : public TPad {
friend class TCanvasImp;
friend class TThread;
friend class TInterpreter;
protected:
TAttCanvas fCatt; //Canvas attributes
TString fDISPLAY; //Name of destination screen
Size_t fXsizeUser; //User specified size of canvas along X in CM
Size_t fYsizeUser; //User specified size of canvas along Y in CM
Size_t fXsizeReal; //Current size of canvas along X in CM
Size_t fYsizeReal; //Current size of canvas along Y in CM
Color_t fHighLightColor; //Highlight color of active pad
Int_t fDoubleBuffer; //Double buffer flag (0=off, 1=on)
Int_t fWindowTopX; //Top X position of window (in pixels)
Int_t fWindowTopY; //Top Y position of window (in pixels)
UInt_t fWindowWidth; //Width of window (including borders, etc.)
UInt_t fWindowHeight; //Height of window (including menubar, borders, etc.)
UInt_t fCw; //Width of the canvas along X (pixels)
UInt_t fCh; //Height of the canvas along Y (pixels)
Int_t fEvent; //!Type of current or last handled event
Int_t fEventX; //!Last X mouse position in canvas
Int_t fEventY; //!Last Y mouse position in canvas
Int_t fCanvasID; //!Canvas identifier
TObject *fSelected; //!Currently selected object
TObject *fClickSelected; //!Currently click-selected object
Int_t fSelectedX; //!X of selected object
Int_t fSelectedY; //!Y of selected object
TString fSelectedOpt; //!Drawing option of selected object
TPad *fSelectedPad; //!Pad containing currently selected object
TPad *fClickSelectedPad;//!Pad containing currently click-selected object
TPad *fPadSave; //!Pointer to saved pad in HandleInput
TCanvasImp *fCanvasImp; //!Window system specific canvas implementation
TContextMenu *fContextMenu; //!Context menu pointer
Bool_t fBatch; //!True when in batchmode
Bool_t fUpdating; //!True when Updating the canvas
Bool_t fRetained; //Retain structure flag
Bool_t fUseGL; //!True when rendering is with GL
Bool_t fDrawn; //!Set to True when the Draw method is called
//
TVirtualPadPainter *fPainter; //!Canvas (pad) painter.
static Bool_t fgIsFolder; //Indicates if canvas can be browsed as a folder
private:
TCanvas(const TCanvas &canvas); // cannot copy canvas, use TObject::Clone()
TCanvas &operator=(const TCanvas &rhs); // idem
void Build();
void CopyPixmaps();
void DrawEventStatus(Int_t event, Int_t x, Int_t y, TObject *selected);
void RunAutoExec();
//Initialize PadPainter.
void CreatePainter();
protected:
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
//-- used by friend TThread class
void Init();
public:
// TCanvas status bits
enum {
kShowEventStatus = BIT(15),
kAutoExec = BIT(16),
kMenuBar = BIT(17),
kShowToolBar = BIT(18),
kShowEditor = BIT(19),
kMoveOpaque = BIT(20),
kResizeOpaque = BIT(21),
kIsGrayscale = BIT(22),
kShowToolTips = BIT(23)
};
TCanvas(Bool_t build=kTRUE);
TCanvas(const char *name, const char *title="", Int_t form=1);
TCanvas(const char *name, const char *title, Int_t ww, Int_t wh);
TCanvas(const char *name, const char *title, Int_t wtopx, Int_t wtopy,
Int_t ww, Int_t wh);
TCanvas(const char *name, Int_t ww, Int_t wh, Int_t winid);
virtual ~TCanvas();
//-- used by friend TThread class
void Constructor();
void Constructor(const char *name, const char *title, Int_t form);
void Constructor(const char *name, const char *title, Int_t ww, Int_t wh);
void Constructor(const char *name, const char *title,
Int_t wtopx, Int_t wtopy, Int_t ww, Int_t wh);
void Destructor();
TVirtualPad *cd(Int_t subpadnumber=0);
virtual void Browse(TBrowser *b);
void Clear(Option_t *option="");
void Close(Option_t *option="");
virtual void Delete(Option_t * = "") { MayNotUse("Delete()"); }
void DisconnectWidget(); // used by TCanvasImp
virtual void Draw(Option_t *option="");
virtual TObject *DrawClone(Option_t *option="") const; // *MENU*
virtual TObject *DrawClonePad(); // *MENU*
virtual void EditorBar();
void EmbedInto(Int_t winid, Int_t ww, Int_t wh);
void EnterLeave(TPad *prevSelPad, TObject *prevSelObj);
void FeedbackMode(Bool_t set);
void Flush();
void UseCurrentStyle(); // *MENU*
void ForceUpdate() { fCanvasImp->ForceUpdate(); }
const char *GetDISPLAY() const {return fDISPLAY.Data();}
TContextMenu *GetContextMenu() const {return fContextMenu;};
Int_t GetDoubleBuffer() const {return fDoubleBuffer;}
Int_t GetEvent() const { return fEvent; }
Int_t GetEventX() const { return fEventX; }
Int_t GetEventY() const { return fEventY; }
Color_t GetHighLightColor() const { return fHighLightColor; }
TVirtualPad *GetPadSave() const { return fPadSave; }
void ClearPadSave() { fPadSave = 0; }
TObject *GetSelected() const {return fSelected;}
TObject *GetClickSelected() const {return fClickSelected;}
Int_t GetSelectedX() const {return fSelectedX;}
Int_t GetSelectedY() const {return fSelectedY;}
Option_t *GetSelectedOpt() const {return fSelectedOpt.Data();}
TVirtualPad *GetSelectedPad() const { return fSelectedPad; }
TVirtualPad *GetClickSelectedPad() const { return fClickSelectedPad; }
Bool_t GetShowEventStatus() const { return TestBit(kShowEventStatus); }
Bool_t GetShowToolBar() const { return TestBit(kShowToolBar); }
Bool_t GetShowEditor() const { return TestBit(kShowEditor); }
Bool_t GetShowToolTips() const { return TestBit(kShowToolTips); }
Bool_t GetAutoExec() const { return TestBit(kAutoExec); }
Size_t GetXsizeUser() const {return fXsizeUser;}
Size_t GetYsizeUser() const {return fYsizeUser;}
Size_t GetXsizeReal() const {return fXsizeReal;}
Size_t GetYsizeReal() const {return fYsizeReal;}
Int_t GetCanvasID() const {return fCanvasID;}
TCanvasImp *GetCanvasImp() const {return fCanvasImp;}
Int_t GetWindowTopX();
Int_t GetWindowTopY();
UInt_t GetWindowWidth() const { return fWindowWidth; }
UInt_t GetWindowHeight() const { return fWindowHeight; }
UInt_t GetWw() const { return fCw; }
UInt_t GetWh() const { return fCh; }
virtual void GetCanvasPar(Int_t &wtopx, Int_t &wtopy, UInt_t &ww, UInt_t &wh)
{wtopx=GetWindowTopX(); wtopy=fWindowTopY; ww=fWindowWidth; wh=fWindowHeight;}
virtual void HandleInput(EEventType button, Int_t x, Int_t y);
Bool_t HasMenuBar() const { return TestBit(kMenuBar); }
void Iconify() { fCanvasImp->Iconify(); }
Bool_t IsBatch() const { return fBatch; }
Bool_t IsDrawn() { return fDrawn; }
Bool_t IsFolder() const;
Bool_t IsGrayscale();
Bool_t IsRetained() const { return fRetained; }
virtual void ls(Option_t *option="") const;
void MoveOpaque(Int_t set=1);
Bool_t OpaqueMoving() const { return TestBit(kMoveOpaque); }
Bool_t OpaqueResizing() const { return TestBit(kResizeOpaque); }
virtual void Paint(Option_t *option="");
virtual TPad *Pick(Int_t px, Int_t py, TObjLink *&pickobj) { return TPad::Pick(px, py, pickobj); }
virtual TPad *Pick(Int_t px, Int_t py, TObject *prevSelObj);
virtual void Picked(TPad *selpad, TObject *selected, Int_t event); // *SIGNAL*
virtual void ProcessedEvent(Int_t event, Int_t x, Int_t y, TObject *selected); // *SIGNAL*
virtual void Selected(TVirtualPad *pad, TObject *obj, Int_t event); // *SIGNAL*
virtual void Cleared(TVirtualPad *pad); // *SIGNAL*
virtual void Closed(); // *SIGNAL*
void RaiseWindow() { fCanvasImp->RaiseWindow(); }
void ResetDrawn() { fDrawn=kFALSE; }
virtual void Resize(Option_t *option="");
void ResizeOpaque(Int_t set=1);
void SaveSource(const char *filename="", Option_t *option="");
void SavePrimitive(std::ostream &out, Option_t *option = "");
virtual void SetCursor(ECursor cursor);
virtual void SetDoubleBuffer(Int_t mode=1);
virtual void SetFixedAspectRatio(Bool_t fixed = kTRUE); // *TOGGLE*
void SetGrayscale(Bool_t set = kTRUE); // *TOGGLE* *GETTER=IsGrayscale
void SetWindowPosition(Int_t x, Int_t y) { fCanvasImp->SetWindowPosition(x, y); }
void SetWindowSize(UInt_t ww, UInt_t wh) { fCanvasImp->SetWindowSize(ww, wh); }
void SetCanvasSize(UInt_t ww, UInt_t wh); // *MENU*
void SetHighLightColor(Color_t col) { fHighLightColor = col; }
void SetSelected(TObject *obj);
void SetClickSelected(TObject *obj) { fClickSelected = obj; }
void SetSelectedPad(TPad *pad) { fSelectedPad = pad; }
void SetClickSelectedPad(TPad *pad) { fClickSelectedPad = pad; }
void Show() { fCanvasImp->Show(); }
virtual void Size(Float_t xsizeuser=0, Float_t ysizeuser=0);
void SetBatch(Bool_t batch=kTRUE);
static void SetFolder(Bool_t isfolder=kTRUE);
void SetPadSave(TPad *pad) {fPadSave = pad;}
void SetRetained(Bool_t retained=kTRUE) { fRetained=retained;}
void SetTitle(const char *title="");
virtual void ToggleEventStatus();
virtual void ToggleAutoExec();
virtual void ToggleToolBar();
virtual void ToggleEditor();
virtual void ToggleToolTips();
virtual void Update();
Bool_t UseGL() const { return fUseGL; }
void SetSupportGL(Bool_t support) {fUseGL = support;}
TVirtualPadPainter *GetCanvasPainter();
void DeleteCanvasPainter();
static TCanvas *MakeDefCanvas();
static Bool_t SupportAlpha();
ClassDef(TCanvas,8) //Graphics canvas
};
#endif