113   const Int_t kMaxDiff = 5;
 
  114   const Int_t kMinSize = 20;
 
  116   static Int_t px1, px2, py1, py2, pxl, pyl, pxt, pyt, pxold, pyold;
 
  117   static Int_t px1p, px2p, py1p, py2p;
 
  118   static Int_t pTx,pTy,pLx,pLy,pRx,pRy,pBx,pBy;
 
  120   static Bool_t pTop, pL, pR, pBot, pINSIDE;
 
  127   if (!
gPad->IsEditable()) 
return;
 
  173      pTx = pBx = (pxl+pxt)/2;
 
  174      pLy = pRy = (pyl+pyt)/2;
 
  180      pTop = pL = pR = pBot = pINSIDE = 
kFALSE;
 
  182      if ((
TMath::Abs(px-(pxl+pxt)/2) < kMaxDiff) &&
 
  184         pxold = pxl; pyold = pyl; pTop = 
kTRUE;
 
  188      if ((
TMath::Abs(px-(pxl+pxt)/2) < kMaxDiff) &&
 
  190         pxold = pxt; pyold = pyt; pBot = 
kTRUE;
 
  194      if ((
TMath::Abs(py-(pyl+pyt)/2) < kMaxDiff) &&
 
  196         pxold = pxl; pyold = pyl; pL = 
kTRUE;
 
  200      if ((
TMath::Abs(py-(pyl+pyt)/2) < kMaxDiff) &&
 
  202         pxold = pxt; pyold = pyt; pR = 
kTRUE;
 
  206      x1c = (py-pTy)*(pTx-pLx)/(pTy-pLy)+pTx;
 
  207      x2c = (py-pTy)*(pRx-pTx)/(pRy-pTy)+pTx;
 
  208      x3c = (py-pRy)*(pRx-pBx)/(pRy-pBy)+pRx;
 
  209      x4c = (py-pBy)*(pBx-pLx)/(pBy-pLy)+pBx;
 
  211      if (px > x1c+kMaxDiff && px < x2c-kMaxDiff &&
 
  212          px > x4c+kMaxDiff && px < x3c-kMaxDiff) {    
 
  213         pxold = px; pyold = py; pINSIDE = 
kTRUE;
 
  221      if (pTop || pL || pR || pBot)
 
  224      if (!pTop && !pL && !pR && !pBot && !pINSIDE)
 
  233      x[0] = 
x[2] = 
x[4] = (px1+px2)/2;
 
  238      y[1] = 
y[3] = (py1+py2)/2;
 
  240         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  242         if (py2 > py1-kMinSize) { py2 = py1-kMinSize; wy = py2; }
 
  243         if (py2 < py2p) { py2 = py2p; wy = py2; }
 
  245         y[1] = 
y[3] = (py1+py2)/2;
 
  246         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  249         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  251         if (py1 < py2+kMinSize) { py1 = py2+kMinSize; wy = py1; }
 
  252         if (py1 > py1p) { py1 = py1p; wy = py1; }
 
  254         y[1] = 
y[3] = (py1+py2)/2;
 
  255         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  258         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  260         if (px1 > px2-kMinSize) { px1 = px2-kMinSize; wx = px1; }
 
  261         if (px1 < px1p) { px1 = px1p; wx = px1; }
 
  263         x[0] = 
x[2] = 
x[4] = (px1+px2)/2;
 
  264         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  267         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  269         if (px2 < px1+kMinSize) { px2 = px1+kMinSize; wx = px2; }
 
  270         if (px2 > px2p) { px2 = px2p; wx = px2; }
 
  272         x[0] = 
x[2] = 
x[4] = (px1+px2)/2;
 
  273         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  276         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  277         Int_t dx = px - pxold;
 
  278         Int_t dy = py - pyold;
 
  279         px1 += dx; py1 += dy; px2 += dx; py2 += dy;
 
  280         if (px1 < px1p) { dx = px1p - px1; px1 += dx; px2 += dx; wx = px+dx; }
 
  281         if (px2 > px2p) { dx = px2 - px2p; px1 -= dx; px2 -= dx; wx = px-dx; }
 
  282         if (py1 > py1p) { dy = py1 - py1p; py1 -= dy; py2 -= dy; wy = py-dy; }
 
  283         if (py2 < py2p) { dy = py2p - py2; py1 += dy; py2 += dy; wy = py+dy; }
 
  284         x[0] = 
x[2] = 
x[4] = (px1+px2)/2;
 
  289         y[1] = 
y[3] = (py1+py2)/2;
 
  290         for (i=0;i<4;i++) 
gVirtualX->DrawLine(
x[i], 
y[i], 
x[i+1], 
y[i+1]);
 
  302      if ((pINSIDE && opaque) || (
fResizing && ropaque)) {
 
  303         if (pTop || pBot || pL || pR) {
 
  319         if (pINSIDE) 
gPad->ShowGuidelines(
this, 
event, 
'i', 
true);
 
  320         if (pTop) 
gPad->ShowGuidelines(
this, 
event, 
't', 
true);
 
  321         if (pBot) 
gPad->ShowGuidelines(
this, 
event, 
'b', 
true);
 
  322         if (pL) 
gPad->ShowGuidelines(
this, 
event, 
'l', 
true);
 
  323         if (pR) 
gPad->ShowGuidelines(
this, 
event, 
'r', 
true);
 
  325         if (pTop || pL || pR || pBot)
 
  336         if (pTop || pBot || pL || pR || pINSIDE) {
 
  350      if (pTop || pL || pR || pBot) 
gPad->Modified(
kTRUE);
 
  365         event = 
gVirtualX->RequestLocator(1, 1, px, py);
 
  406      x[0] = 
x[2] = (
x1+
x2)/2+depx;
 
  411      y[1] = 
y[3] =(
y1+
y2)/2+depy;
 
  412      x[4] = 
x[0]; 
y[4] = 
y[0];
 
  416      gPad->PaintFillArea(4,
x,
y);
 
  424   x[4] = 
x[0]; 
y[4] =
y[0];
 
  429   gPad->PaintFillArea(4,
x,
y);
 
  430   gPad->PaintPolyLine(5,
x,
y);
 
  447   out<<
"diamond = new TDiamond("<<
fX1<<
","<<
fY1<<
","<<
fX2<<
","<<
fY2<<
");"<<std::endl;
 
  454   out<<
"   diamond->Draw();"<<std::endl;
 
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t SetFillStyle
Option_t Option_t SetLineColor
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t SetFillColor
Option_t Option_t TPoint TPoint const char y1
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void Modify()
Change current fill area attributes if necessary.
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.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void Modify()
Change current line attributes if necessary.
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.
virtual void SaveTextAttributes(std::ostream &out, const char *name, Int_t alidef=12, Float_t angdef=0, Int_t coldef=1, Int_t fondef=61, Float_t sizdef=1)
Save text attributes as C++ statement(s) on output stream out.
Double_t fX1
X of 1st point.
Double_t fY2
Y of 2nd point.
Double_t fX2
X of 2nd point.
Double_t fY1
Y of 1st point.
Bool_t fResizing
! True if box is being resized
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
TDiamond()
Diamond default constructor.
void Draw(Option_t *option="") override
Draw this diamond with its current attributes.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute action corresponding to one event.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save primitive as a C++ statement(s) on output stream out.
virtual ~TDiamond()
Diamond destructor.
void Paint(Option_t *option="") override
Paint this diamond with its current attributes.
void Streamer(TBuffer &) override
Stream an object of class TBox.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Compute distance from point px,py to a diamond.
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
Computes distance from point (px,py) to the object.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
A Pave (see TPave) with text, lines or/and boxes inside.
virtual void PaintPrimitives(Int_t mode)
Paint list of primitives in this pavetext.
virtual void SaveLines(std::ostream &out, const char *name, Bool_t saved)
Save lines of this pavetext as C++ statements on output stream out.
Int_t fBorderSize
window box bordersize in pixels
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual Int_t YtoAbsPixel(Double_t y) const =0
virtual Double_t GetX2() const =0
virtual Int_t XtoAbsPixel(Double_t x) const =0
virtual Double_t GetY1() const =0
virtual Double_t GetY2() const =0
virtual Short_t GetBorderSize() const =0
virtual Double_t GetX1() const =0
void Streamer(TBuffer &) override
Stream an object of class TObject.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.