Logo ROOT   6.16/01
Reference Guide
TWbox.cxx
Go to the documentation of this file.
1// @(#)root/graf:$Id$
2// Author: Rene Brun 12/12/94
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
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#include "Riostream.h"
13#include "TROOT.h"
14#include "Strlen.h"
15#include "TWbox.h"
16#include "TColor.h"
17#include "TVirtualPad.h"
18#include "TVirtualX.h"
19#include "TPoint.h"
20
22
23/** \class TWbox
24\ingroup BasicGraphics
25
26A TBox with a bordersize and a bordermode.
27Example:
28Begin_Macro(source)
29{
30 TWbox *twb = new TWbox(.1,.1,.9,.9,kRed+2,5,1);
31 twb->Draw();
32}
33End_Macro
34*/
35
36////////////////////////////////////////////////////////////////////////////////
37/// wbox default constructor.
38
40{
41 fBorderSize = 0;
42 fBorderMode = 0;
43}
44
45////////////////////////////////////////////////////////////////////////////////
46/// wbox normal constructor.
47///
48/// a WBOX is a box with a bordersize and a bordermode
49/// the bordersize is in pixels
50/// - bordermode = -1 box looks as it is behind the screen
51/// - bordermode = 0 no special effects
52/// - bordermode = 1 box looks as it is in front of the screen
53
55 Color_t color ,Short_t bordersize ,Short_t bordermode)
56 :TBox(x1,y1,x2,y2)
57{
58 fBorderSize = bordersize;
59 fBorderMode = bordermode;
60 SetFillColor(color);
61 SetFillStyle(1001);
62}
63
64////////////////////////////////////////////////////////////////////////////////
65/// wbox default destructor.
66
68{
69}
70
71////////////////////////////////////////////////////////////////////////////////
72/// wbox copy constructor.
73
74TWbox::TWbox(const TWbox &wbox) : TBox(wbox)
75{
76 fBorderSize = 0;
77 fBorderMode = 0;
78 ((TWbox&)wbox).Copy(*this);
79}
80
81////////////////////////////////////////////////////////////////////////////////
82/// Copy this wbox to wbox.
83
84void TWbox::Copy(TObject &obj) const
85{
86 TBox::Copy(obj);
87 ((TWbox&)obj).fBorderSize = fBorderSize;
88 ((TWbox&)obj).fBorderMode = fBorderMode;
89}
90
91////////////////////////////////////////////////////////////////////////////////
92/// Draw this wbox with its current attributes.
93
94void TWbox::Draw(Option_t *option)
95{
96 AppendPad(option);
97}
98
99////////////////////////////////////////////////////////////////////////////////
100/// Draw this wbox with new coordinates.
101
103 Color_t color ,Short_t bordersize ,Short_t bordermode)
104{
105 TWbox *newwbox = new TWbox(x1,y1,x2,y2,color,bordersize,bordermode);
106 newwbox->SetBit(kCanDelete);
107 newwbox->AppendPad();
108}
109
110////////////////////////////////////////////////////////////////////////////////
111/// Execute action corresponding to one event.
112///
113/// This member function is called when a WBOX object is clicked.
114
116{
117 TBox::ExecuteEvent(event, px, py);
118}
119
120////////////////////////////////////////////////////////////////////////////////
121/// Paint this wbox with its current attributes.
122
124{
126}
127
128////////////////////////////////////////////////////////////////////////////////
129/// Draw this wbox with new coordinates.
130
132 Color_t color, Short_t bordersize, Short_t bordermode)
133{
134 // Draw first wbox as a normal filled box
135 TBox::PaintBox(x1, y1, x2, y2);
136
137 // then paint 3d frame (depending on bordermode)
138 if (!IsTransparent())
139 PaintFrame(x1, y1, x2, y2, color, bordersize, bordermode, kTRUE);
140}
141
142////////////////////////////////////////////////////////////////////////////////
143/// Paint a 3D frame around a box.
144
146 Color_t color, Short_t bordersize, Short_t bordermode,
147 Bool_t tops)
148{
149 if (bordermode == 0) return;
150 if (bordersize <= 0) bordersize = 2;
151
152 Short_t pxl,pyl,pxt,pyt,px1,py1,px2,py2;
153 Double_t xl, xt, yl, yt;
154
155 // Compute real left bottom & top right of the box in pixels
156 px1 = gPad->XtoPixel(x1); py1 = gPad->YtoPixel(y1);
157 px2 = gPad->XtoPixel(x2); py2 = gPad->YtoPixel(y2);
158 if (px1 < px2) {pxl = px1; pxt = px2; xl = x1; xt = x2; }
159 else {pxl = px2; pxt = px1; xl = x2; xt = x1;}
160 if (py1 > py2) {pyl = py1; pyt = py2; yl = y1; yt = y2;}
161 else {pyl = py2; pyt = py1; yl = y2; yt = y1;}
162
163 if (!gPad->IsBatch()) {
164 TPoint frame[7];
165
166 // GetDarkColor() and GetLightColor() use GetFillColor()
167 Color_t oldcolor = GetFillColor();
168 SetFillColor(color);
170
171 // Draw top&left part of the box
172 frame[0].fX = pxl; frame[0].fY = pyl;
173 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
174 frame[2].fX = frame[1].fX; frame[2].fY = pyt + bordersize;
175 frame[3].fX = pxt - bordersize; frame[3].fY = frame[2].fY;
176 frame[4].fX = pxt; frame[4].fY = pyt;
177 frame[5].fX = pxl; frame[5].fY = pyt;
178 frame[6].fX = pxl; frame[6].fY = pyl;
179
180 if (bordermode == -1) gVirtualX->SetFillColor(GetDarkColor());
181 else gVirtualX->SetFillColor(GetLightColor());
182 gVirtualX->DrawFillArea(7, frame);
183
184 // Draw bottom&right part of the box
185 frame[0].fX = pxl; frame[0].fY = pyl;
186 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
187 frame[2].fX = pxt - bordersize; frame[2].fY = frame[1].fY;
188 frame[3].fX = frame[2].fX; frame[3].fY = pyt + bordersize;
189 frame[4].fX = pxt; frame[4].fY = pyt;
190 frame[5].fX = pxt; frame[5].fY = pyl;
191 frame[6].fX = pxl; frame[6].fY = pyl;
192
193 if (bordermode == -1) gVirtualX->SetFillColor(TColor::GetColorBright(GetFillColor()));
194 else gVirtualX->SetFillColor(TColor::GetColorDark(GetFillColor()));
195 gVirtualX->DrawFillArea(7, frame);
196
197 gVirtualX->SetFillColor(-1);
198 SetFillColor(oldcolor);
199 }
200
201 if (!tops) return;
202
203 // same for PostScript
204 // Double_t dx = (xt - xl) *Double_t(bordersize)/Double_t(pxt - pxl);
205 // Int_t border = gVirtualPS->XtoPS(xt) - gVirtualPS->XtoPS(xt-dx);
206
207 gPad->PaintBorderPS(xl, yl, xt, yt, bordermode, bordersize,
209}
210
211////////////////////////////////////////////////////////////////////////////////
212/// Save primitive as a C++ statement(s) on output stream out
213
214void TWbox::SavePrimitive(std::ostream &out, Option_t * /*= ""*/)
215{
216 if (gROOT->ClassSaved(TWbox::Class())) {
217 out<<" ";
218 } else {
219 out<<" TWbox *";
220 }
221 out<<"wbox = new TWbox("<<fX1<<","<<fY1<<","<<fX2<<","<<fY2<<");"<<std::endl;
222
223 SaveFillAttributes(out,"wbox",0,1001);
224 SaveLineAttributes(out,"wbox",1,1,1);
225
226 out<<" wbox->Draw();"<<std::endl;
227}
void Class()
Definition: Class.C:29
static const double x2[5]
static const double x1[5]
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
short Short_t
Definition: RtypesCore.h:35
double Double_t
Definition: RtypesCore.h:55
short Color_t
Definition: RtypesCore.h:79
const Bool_t kTRUE
Definition: RtypesCore.h:87
const char Option_t
Definition: RtypesCore.h:62
#define ClassImp(name)
Definition: Rtypes.h:363
#define gROOT
Definition: TROOT.h:410
#define gPad
Definition: TVirtualPad.h:286
#define gVirtualX
Definition: TVirtualX.h:345
virtual Color_t GetFillColor() const
Return the fill area color.
Definition: TAttFill.h:30
virtual void Modify()
Change current fill area attributes if necessary.
Definition: TAttFill.cxx:210
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:37
virtual Bool_t IsTransparent() const
Definition: TAttFill.h:44
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
Definition: TAttFill.h:39
virtual void SaveFillAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1001)
Save fill attributes as C++ statement(s) on output stream out.
Definition: TAttFill.cxx:233
virtual void SaveLineAttributes(std::ostream &out, const char *name, Int_t coldef=1, Int_t stydef=1, Int_t widdef=1)
Save line attributes as C++ statement(s) on output stream out.
Definition: TAttLine.cxx:262
Create a Box.
Definition: TBox.h:24
virtual void PaintBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Option_t *option="")
Draw this box with new coordinates.
Definition: TBox.cxx:627
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
Definition: TBox.cxx:216
Double_t fX1
X of 1st point.
Definition: TBox.h:30
void Copy(TObject &box) const
Copy a Box.
Definition: TBox.cxx:111
Double_t fY2
Y of 2nd point.
Definition: TBox.h:33
Double_t fX2
X of 2nd point.
Definition: TBox.h:32
Double_t fY1
Y of 1st point.
Definition: TBox.h:31
static Int_t GetColorBright(Int_t color)
Static function: Returns the bright color number corresponding to n If the TColor object does not exi...
Definition: TColor.cxx:1897
static Int_t GetColorDark(Int_t color)
Static function: Returns the dark color number corresponding to n If the TColor object does not exist...
Definition: TColor.cxx:1929
Mother of all ROOT objects.
Definition: TObject.h:37
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
Definition: TObject.cxx:105
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Definition: TObject.cxx:694
@ kCanDelete
if object in a list can be deleted
Definition: TObject.h:58
Definition: TPoint.h:31
SCoord_t fY
Definition: TPoint.h:36
SCoord_t fX
Definition: TPoint.h:35
A TBox with a bordersize and a bordermode.
Definition: TWbox.h:20
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save primitive as a C++ statement(s) on output stream out.
Definition: TWbox.cxx:214
virtual void DrawWbox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Color_t color=33, Short_t bordersize=5, Short_t bordermode=-1)
Draw this wbox with new coordinates.
Definition: TWbox.cxx:102
TWbox()
wbox default constructor.
Definition: TWbox.cxx:39
virtual void PaintFrame(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Color_t color, Short_t bordersize, Short_t bordermode, Bool_t tops)
Paint a 3D frame around a box.
Definition: TWbox.cxx:145
virtual void PaintWbox(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Color_t color=33, Short_t bordersize=5, Short_t bordermode=-1)
Draw this wbox with new coordinates.
Definition: TWbox.cxx:131
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
Definition: TWbox.cxx:115
Int_t GetDarkColor() const
Definition: TWbox.h:40
virtual ~TWbox()
wbox default destructor.
Definition: TWbox.cxx:67
Int_t GetLightColor() const
Definition: TWbox.h:41
virtual void Paint(Option_t *option="")
Paint this wbox with its current attributes.
Definition: TWbox.cxx:123
Short_t fBorderSize
window box bordersize in pixels
Definition: TWbox.h:23
Short_t fBorderMode
Bordermode (-1=down, 0 = no border, 1=up)
Definition: TWbox.h:24
void Copy(TObject &wbox) const
Copy this wbox to wbox.
Definition: TWbox.cxx:84
virtual void Draw(Option_t *option="")
Draw this wbox with its current attributes.
Definition: TWbox.cxx:94