#include "Riostream.h"
#include "TROOT.h"
#include "TVirtualPad.h"
#include "TFrame.h"
#include "TStyle.h"
ClassImp(TFrame)
TFrame::TFrame(): TWbox()
{
}
TFrame::TFrame(Double_t x1, Double_t y1,Double_t x2, Double_t y2)
:TWbox(x1,y1,x2,y2)
{
}
TFrame::TFrame(const TFrame &frame) : TWbox(frame)
{
((TFrame&)frame).Copy(*this);
}
TFrame::~TFrame()
{
}
void TFrame::Copy(TObject &frame) const
{
TWbox::Copy(frame);
}
void TFrame::Draw(Option_t *option)
{
AppendPad(option);
}
void TFrame::ExecuteEvent(Int_t event, Int_t px, Int_t py)
{
if (!gPad->IsEditable()) return;
TWbox::ExecuteEvent(event, px, py);
if (event != kButton1Up) return;
Double_t xmin = gPad->GetUxmin();
Double_t xmax = gPad->GetUxmax();
Double_t ymin = gPad->GetUymin();
Double_t ymax = gPad->GetUymax();
Double_t dx = xmax-xmin;
Double_t dy = ymax-ymin;
Double_t leftMargin = (fX1-gPad->GetX1())/(gPad->GetX2()-gPad->GetX1());
Double_t topMargin = (gPad->GetY2()-fY2)/(gPad->GetY2()-gPad->GetY1());
Double_t rightMargin = (gPad->GetX2()-fX2)/(gPad->GetX2()-gPad->GetX1());
Double_t bottomMargin = (fY1-gPad->GetY1())/(gPad->GetY2()-gPad->GetY1());
if (leftMargin < 0) leftMargin = 0;
if (topMargin < 0) topMargin = 0;
if (rightMargin < 0) rightMargin = 0;
if (bottomMargin < 0) bottomMargin = 0;
gPad->SetLeftMargin(leftMargin);
gPad->SetRightMargin(rightMargin);
gPad->SetBottomMargin(bottomMargin);
gPad->SetTopMargin(topMargin);
Double_t dxr = dx/(1 - gPad->GetLeftMargin() - gPad->GetRightMargin());
Double_t dyr = dy/(1 - gPad->GetBottomMargin() - gPad->GetTopMargin());
gPad->Range(xmin - dxr*gPad->GetLeftMargin(),
ymin - dyr*gPad->GetBottomMargin(),
xmax + dxr*gPad->GetRightMargin(),
ymax + dyr*gPad->GetTopMargin());
gPad->RangeAxis(xmin, ymin, xmax, ymax);
fX1 = xmin;
fY1 = ymin;
fX2 = xmax;
fY2 = ymax;
}
void TFrame::Paint(Option_t *option)
{
TWbox::Paint(option);
gPad->PaintBox(fX1,fY1,fX2,fY2,"s");
}
void TFrame::Pop()
{
}
void TFrame::SavePrimitive(ostream &, Option_t * )
{
}
void TFrame::UseCurrentStyle()
{
if (gStyle->IsReading()) {
SetFillColor(gStyle->GetFrameFillColor());
SetLineColor(gStyle->GetFrameLineColor());
SetFillStyle(gStyle->GetFrameFillStyle());
SetLineStyle(gStyle->GetFrameLineStyle());
SetLineWidth(gStyle->GetFrameLineWidth());
SetBorderSize(gStyle->GetFrameBorderSize());
SetBorderMode(gStyle->GetFrameBorderMode());
} else {
gStyle->SetFrameFillColor(GetFillColor());
gStyle->SetFrameLineColor(GetLineColor());
gStyle->SetFrameFillStyle(GetFillStyle());
gStyle->SetFrameLineStyle(GetLineStyle());
gStyle->SetFrameLineWidth(GetLineWidth());
gStyle->SetFrameBorderSize(GetBorderSize());
gStyle->SetFrameBorderMode(GetBorderMode());
}
}