00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "Riostream.h"
00013 #include "TROOT.h"
00014 #include "Strlen.h"
00015 #include "TWbox.h"
00016 #include "TColor.h"
00017 #include "TVirtualPad.h"
00018 #include "TVirtualX.h"
00019 #include "TPoint.h"
00020
00021
00022 ClassImp(TWbox)
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 TWbox::TWbox(): TBox()
00038 {
00039
00040
00041 fBorderSize = 0;
00042 fBorderMode = 0;
00043 }
00044
00045
00046
00047 TWbox::TWbox(Double_t x1, Double_t y1,Double_t x2, Double_t y2,
00048 Color_t color ,Short_t bordersize ,Short_t bordermode)
00049 :TBox(x1,y1,x2,y2)
00050 {
00051
00052
00053
00054
00055
00056
00057
00058
00059 fBorderSize = bordersize;
00060 fBorderMode = bordermode;
00061 SetFillColor(color);
00062 SetFillStyle(1001);
00063 }
00064
00065
00066
00067 TWbox::~TWbox()
00068 {
00069
00070 }
00071
00072
00073
00074 TWbox::TWbox(const TWbox &wbox) : TBox(wbox)
00075 {
00076
00077
00078 fBorderSize = 0;
00079 fBorderMode = 0;
00080 ((TWbox&)wbox).Copy(*this);
00081 }
00082
00083
00084
00085 void TWbox::Copy(TObject &obj) const
00086 {
00087
00088
00089 TBox::Copy(obj);
00090 ((TWbox&)obj).fBorderSize = fBorderSize;
00091 ((TWbox&)obj).fBorderMode = fBorderMode;
00092 }
00093
00094
00095
00096 void TWbox::Draw(Option_t *option)
00097 {
00098
00099
00100 AppendPad(option);
00101 }
00102
00103
00104
00105 void TWbox::DrawWbox(Double_t x1, Double_t y1,Double_t x2, Double_t y2,
00106 Color_t color ,Short_t bordersize ,Short_t bordermode)
00107 {
00108
00109
00110 TWbox *newwbox = new TWbox(x1,y1,x2,y2,color,bordersize,bordermode);
00111 newwbox->SetBit(kCanDelete);
00112 newwbox->AppendPad();
00113 }
00114
00115
00116
00117 void TWbox::ExecuteEvent(Int_t event, Int_t px, Int_t py)
00118 {
00119
00120
00121
00122
00123 TBox::ExecuteEvent(event, px, py);
00124 }
00125
00126
00127
00128 void TWbox::Paint(Option_t *)
00129 {
00130
00131
00132 PaintWbox(fX1, fY1, fX2, fY2, GetFillColor(), fBorderSize, fBorderMode);
00133 }
00134
00135
00136
00137 void TWbox::PaintWbox(Double_t x1, Double_t y1, Double_t x2, Double_t y2,
00138 Color_t color, Short_t bordersize, Short_t bordermode)
00139 {
00140
00141
00142
00143 TBox::PaintBox(x1, y1, x2, y2);
00144
00145
00146 if (!IsTransparent())
00147 PaintFrame(x1, y1, x2, y2, color, bordersize, bordermode, kTRUE);
00148 }
00149
00150
00151
00152 void TWbox::PaintFrame(Double_t x1, Double_t y1,Double_t x2, Double_t y2,
00153 Color_t color, Short_t bordersize, Short_t bordermode,
00154 Bool_t tops)
00155 {
00156
00157
00158 if (bordermode == 0) return;
00159 if (bordersize <= 0) bordersize = 2;
00160
00161 Short_t pxl,pyl,pxt,pyt,px1,py1,px2,py2;
00162 Double_t xl, xt, yl, yt;
00163
00164
00165 px1 = gPad->XtoPixel(x1); py1 = gPad->YtoPixel(y1);
00166 px2 = gPad->XtoPixel(x2); py2 = gPad->YtoPixel(y2);
00167 if (px1 < px2) {pxl = px1; pxt = px2; xl = x1; xt = x2; }
00168 else {pxl = px2; pxt = px1; xl = x2; xt = x1;}
00169 if (py1 > py2) {pyl = py1; pyt = py2; yl = y1; yt = y2;}
00170 else {pyl = py2; pyt = py1; yl = y2; yt = y1;}
00171
00172 if (!gPad->IsBatch()) {
00173 TPoint frame[7];
00174
00175
00176 Color_t oldcolor = GetFillColor();
00177 SetFillColor(color);
00178 TAttFill::Modify();
00179
00180
00181 frame[0].fX = pxl; frame[0].fY = pyl;
00182 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
00183 frame[2].fX = frame[1].fX; frame[2].fY = pyt + bordersize;
00184 frame[3].fX = pxt - bordersize; frame[3].fY = frame[2].fY;
00185 frame[4].fX = pxt; frame[4].fY = pyt;
00186 frame[5].fX = pxl; frame[5].fY = pyt;
00187 frame[6].fX = pxl; frame[6].fY = pyl;
00188
00189 if (bordermode == -1) gVirtualX->SetFillColor(GetDarkColor());
00190 else gVirtualX->SetFillColor(GetLightColor());
00191 gVirtualX->DrawFillArea(7, frame);
00192
00193
00194 frame[0].fX = pxl; frame[0].fY = pyl;
00195 frame[1].fX = pxl + bordersize; frame[1].fY = pyl - bordersize;
00196 frame[2].fX = pxt - bordersize; frame[2].fY = frame[1].fY;
00197 frame[3].fX = frame[2].fX; frame[3].fY = pyt + bordersize;
00198 frame[4].fX = pxt; frame[4].fY = pyt;
00199 frame[5].fX = pxt; frame[5].fY = pyl;
00200 frame[6].fX = pxl; frame[6].fY = pyl;
00201
00202 if (bordermode == -1) gVirtualX->SetFillColor(TColor::GetColorBright(GetFillColor()));
00203 else gVirtualX->SetFillColor(TColor::GetColorDark(GetFillColor()));
00204 gVirtualX->DrawFillArea(7, frame);
00205
00206 gVirtualX->SetFillColor(-1);
00207 SetFillColor(oldcolor);
00208 }
00209
00210 if (!tops) return;
00211
00212
00213
00214
00215
00216 gPad->PaintBorderPS(xl, yl, xt, yt, bordermode, bordersize,
00217 GetDarkColor(), GetLightColor());
00218 }
00219
00220
00221
00222 void TWbox::SavePrimitive(ostream &out, Option_t * )
00223 {
00224
00225
00226 if (gROOT->ClassSaved(TWbox::Class())) {
00227 out<<" ";
00228 } else {
00229 out<<" TWbox *";
00230 }
00231 out<<"wbox = new TWbox("<<fX1<<","<<fY1<<","<<fX2<<","<<fY2<<");"<<endl;
00232
00233 SaveFillAttributes(out,"wbox",0,1001);
00234 SaveLineAttributes(out,"wbox",1,1,1);
00235
00236 out<<" wbox->Draw();"<<endl;
00237 }