225 :
TPave(
x1,
y1,
x2,
y2,4,
option),
TAttText(12,0,1,
gStyle->GetLegendFont(),0)
228 if (header && strlen(header) > 0) {
259 :
TPave(
w,
h,
w,
h,4,
option),
TAttText(12,0,1,
gStyle->GetLegendFont(),0)
262 if (header && strlen(header) > 0) {
283 legend.TLegend::Copy(*
this);
292 lg.TLegend::Copy(*
this);
321 const char *lab = label;
323 if (obj && (!label || strlen(label)==0)) lab = obj->
GetTitle();
345 Error(
"AddEntry",
"need to create a canvas first");
354 TList *lop =
gPad->GetListOfPrimitives();
357 while(
auto o = next()) {
389 auto &tgt =
static_cast<TLegend &
> (obj);
396 if (tgt.fPrimitives) {
397 tgt.fPrimitives->Delete();
398 delete tgt.fPrimitives;
399 tgt.fPrimitives =
nullptr;
402 tgt.fPrimitives =
new TList();
416 if ( !entry )
return;
435 if ( !entry )
return;
436 gROOT->SetSelectedPrimitive( entry );
446 if ( !entry )
return;
447 gROOT->SetSelectedPrimitive( entry );
457 if ( !entry )
return;
458 gROOT->SetSelectedPrimitive( entry );
468 if ( !entry )
return;
469 gROOT->SetSelectedPrimitive( entry );
480 Error(
"GetEntry",
"need to create a canvas first");
494 if (nColumns > 0) xspace = (
fX2 -
fX1)/nColumns;
497 if (xspace > 0.) ix = (
Int_t)(xmouse/xspace)+1;
498 if (ix > nColumns) ix = nColumns;
502 if (iy > nRows) iy = nRows;
510 for (
Int_t i=1; i<= nloops; i++)
525 TString opt = first->GetOption();
527 if ( opt.
Contains(
"h") )
return first->GetLabel();
538 Error(
"InsertEntry",
"need to create a canvas first");
568 Warning(
"Paint",
"Legend too large to be automatically placed; a default position is used");
589 if ( nEntries == 0 )
return 0;
608 Warning(
"TLegend::SetNColumns",
"illegal value nColumns = %d; keeping fNColumns = %d", nColumns,
fNColumns);
620 if ( nRows == 0 )
return;
643 std::vector<Double_t> columnWidths(
fNColumns, 0.);
650 Double_t maxentrywidth = 0, maxentryheight = 0;
659 if (tfont%10 == 3) --tfont;
662 if ( entrytex.
GetYsize() > maxentryheight ) {
663 maxentryheight = entrytex.
GetYsize();
668 if ( entrytex.
GetXsize() > maxentrywidth ) {
669 maxentrywidth = entrytex.
GetXsize();
672 if ( entrytex.
GetXsize() > columnWidths[iColumn] ) {
673 columnWidths[iColumn] = entrytex.
GetXsize();
679 for(
int i=0; i<
fNColumns; i++) tmpMaxWidth += columnWidths[i];
680 if ( tmpMaxWidth > maxentrywidth) maxentrywidth = tmpMaxWidth;
698 columnWidths[k] = 0.;
700 TLatex entrytex( 0, 0, entry->GetLabel() );
702 Style_t tfont = entry->GetTextFont();
704 if (autosize && tfont%10 == 3) --tfont;
707 TString opt = entry->GetOption();
710 if ( entrytex.
GetXsize() > columnWidths[iColumn] ) {
711 columnWidths[iColumn] = entrytex.
GetXsize();
717 double totalWidth = 0.0;
718 for(
int i=0; i<
fNColumns; i++) totalWidth += columnWidths[i];
720 else totalWidth /= (1.0 -
fMargin);
722 columnWidths[i] = columnWidths[i]/totalWidth*(
x2-
x1) + margin;
733 if(iColumn == 0) ytext -= yspace;
748 if (autosize && tfont%10 == 3) --tfont;
761 if ( opt.
Contains(
"h") ) entrymargin = margin/10.;
764 x2 =
x1 + columnWidths[iColumn];
768 if (halign == 1)
x =
x1 + entrymargin;
769 if (halign == 2)
x = 0.5*( (
x1+entrymargin) +
x2 );
770 if (halign == 3)
x =
x2 - entrymargin/10.;
781 if (yspace2 < tsizepad) {
791 entry->TAttText::Copy(entrytex);
816 if (opt.
Contains(
"|>")) endcaps = 3;
819 float arrow_shift = 0.3;
820 if (endcaps == 3) arrow_shift = 0.2;
840 entry->TAttFill::Modify();
843 yf[0] = ysym - wl*yspace*0.35;
847 yf[2] = ysym + wu*yspace*0.35;
850 for (
Int_t i=0;i<4;i++) {
851 xf[i] =
gPad->GetX1() + xf[i]*(
gPad->GetX2()-
gPad->GetX1());
852 yf[i] =
gPad->GetY1() + yf[i]*(
gPad->GetY2()-
gPad->GetY1());
854 gPad->PaintFillArea(4,xf,yf);
860 TMarker entrymarker(xsym, ysym, 0);
863 std::vector<Double_t> segmx, segmy;
871 entry->TAttMarker::Copy(entrymarker);
877 segmx.emplace_back(sx1);
878 segmy.emplace_back(sy1);
879 segmx.emplace_back(sx2);
880 segmy.emplace_back(sy2);
883 auto paint_segments = [&]() {
884 if (segmx.size() > 0) {
885 entry->TAttLine::Modify();
886 gPad->PaintSegmentsNDC(segmx.size()/2, segmx.data(), segmy.data());
893 auto draw_error_mark = [&]() {
895 add_segment(xsym, ysym - yspace*arrow_shift, xsym, ysym + yspace*arrow_shift);
898 add_segment(xsym, ysym + sy, xsym, ysym + yspace*arrow_shift);
899 add_segment(xsym, ysym - sy, xsym, ysym - yspace*arrow_shift);
902 add_segment(xsym-barw, ysym + yspace*0.30, xsym+barw, ysym + yspace*0.30);
903 add_segment(xsym-barw, ysym - yspace*0.30, xsym+barw, ysym - yspace*0.30);
904 }
else if (endcaps == 2) {
905 add_segment(xsym-barw, ysym+yspace*0.20, xsym, ysym + yspace*0.30);
906 add_segment(xsym, ysym + yspace*0.30, xsym+barw, ysym+yspace*0.20);
907 add_segment(xsym-barw, ysym-yspace*0.20, xsym, ysym - yspace*0.30);
908 add_segment(xsym, ysym - yspace*0.30, xsym+barw,ysym-yspace*0.20);
909 }
else if (endcaps == 3) {
914 Double_t xe1[3] = {xsym-barw, xsym ,xsym+barw};
915 Double_t ye1[3] = {ysym+yspace*0.20, ysym + yspace*0.30 ,ysym+yspace*0.20};
916 Double_t xe2[3] = {xsym-barw, xsym ,xsym+barw};
917 Double_t ye2[3] = {ysym-yspace*0.20, ysym - yspace*0.30 ,ysym-yspace*0.20};
918 for (
Int_t i=0;i<3;i++) {
919 xe1[i] =
gPad->GetX1() + xe1[i]*(
gPad->GetX2()-
gPad->GetX1());
920 ye1[i] =
gPad->GetY1() + ye1[i]*(
gPad->GetY2()-
gPad->GetY1());
921 xe2[i] =
gPad->GetX1() + xe2[i]*(
gPad->GetX2()-
gPad->GetX1());
922 ye2[i] =
gPad->GetY1() + ye2[i]*(
gPad->GetY2()-
gPad->GetY1());
956 add_segment(xsym - boxw, ysym + yspace*0.35,
957 xsym + boxw, ysym + yspace*0.35);
958 add_segment(xsym - boxw, ysym - yspace*0.35,
959 xsym + boxw, ysym - yspace*0.35);
960 add_segment(xsym + boxw, ysym - yspace*0.35,
961 xsym + boxw, ysym + yspace*0.35);
962 add_segment(xsym - boxw, ysym - yspace*0.35,
963 xsym - boxw, ysym + yspace*0.35);
965 add_segment(xsym - boxw, ysym, xsym + boxw, ysym );
1003 if (entry->GetObject() == obj)
1004 entry->SetObject((
TObject *)
nullptr);
1016 if (strcmp(
GetName(),
"TPave"))
1017 out <<
" leg->SetName(\"" <<
GetName() <<
"\");\n";
1019 out <<
" leg->SetBorderSize(" <<
fBorderSize <<
");\n";
1025 while (
auto entry =
static_cast<TLegendEntry *
>(next()))
1026 entry->SaveEntry(out,
"leg");
1038 if ( entry ) entry->
SetLabel( label );
short Style_t
Style number (short)
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
short Color_t
Color number (short)
float Size_t
Attribute size (float)
float Float_t
Float 4 bytes (float)
short Short_t
Signed Short integer 2 bytes (short)
double Double_t
Double 8 bytes.
const char Option_t
Option string (const char)
Option_t Option_t SetFillStyle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void w
Option_t Option_t SetTextSize
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t textsize
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t SetFillColor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize fs
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TStyle * gStyle
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
TAttFill()
AttFill default constructor.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillAttributes()
Invoke the DialogCanvas Fill attributes.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
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 Width_t GetLineWidth() const
Return the line width.
virtual void SetLineAttributes()
Invoke the DialogCanvas Line attributes.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
TAttLine()
AttLine default constructor.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
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 Style_t GetMarkerStyle() const
Return the marker style.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerAttributes()
Invoke the DialogCanvas Marker attributes.
virtual Float_t GetTextSize() const
Return the text size.
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
virtual Short_t GetTextAlign() const
Return the text alignment.
virtual Font_t GetTextFont() const
Return the text font.
TAttText()
AttText default constructor.
virtual Color_t GetTextColor() const
Return the text color.
virtual void SetTextAngle(Float_t tangle=0)
Set the text angle.
virtual Float_t GetTextAngle() const
Return the text angle.
virtual void SetTextAttributes()
Invoke the DialogCanvas Text attributes.
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
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.
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
void Copy(TAttText &atttext) const
Copy this text attributes to a new TAttText.
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.
The Histogram stack class.
To draw Mathematical Formula.
Double_t GetXsize()
Return size of the formula along X in pad coordinates when the text precision is smaller than 3.
Double_t GetYsize()
Return size of the formula along Y in pad coordinates when the text precision is smaller than 3.
void Paint(Option_t *option="") override
Paint.
Storage class for one entry of a TLegend.
virtual TObject * GetObject() const
virtual void SetLabel(const char *label="")
virtual void SetOption(Option_t *option="lpf")
virtual const char * GetLabel() const
Option_t * GetOption() const override
void Copy(TObject &obj) const override
Copy this legend into "obj".
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
void SetNColumns(Int_t nColumns)
Set the number of columns for the legend.
void Draw(Option_t *option="") override
Draw this legend with its current attributes.
virtual void SetHeader(const char *header="", Option_t *option="")
Sets the header, which is the "title" that appears at the top of the legend.
virtual void DeleteEntry()
Delete entry at the mouse position.
TLegendEntry * GetEntry() const
Get entry pointed to by the mouse.
void Clear(Option_t *option="") override
Clear all entries in this legend, including the header.
Float_t fEntrySeparation
Separation between entries, as a fraction of The space allocated to one entry.
virtual void EditEntryAttMarker()
Edit the marker attributes for the entry pointed by the mouse.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save this legend as C++ statements on output stream out to be used with the SaveAs ....
virtual void EditEntryAttText()
Edit the text attributes for the entry pointed by the mouse.
void Paint(Option_t *option="") override
Paint this legend with its current attributes.
Int_t GetNColumns() const
void RecursiveRemove(TObject *obj) override
Reset the legend entries pointing to "obj".
Float_t fMargin
Fraction of total width used for symbol.
Int_t GetNRows() const
Get the number of rows.
TList * fPrimitives
List of TLegendEntries.
Int_t fNColumns
Number of columns in the legend.
Float_t fColumnSeparation
Separation between columns, as a fraction of The space allowed to one column.
TLegend()
Default constructor.
virtual void EditEntryAttLine()
Edit the line attributes for the entry pointed by the mouse.
~TLegend() override
Default destructor.
virtual void SetEntryOption(Option_t *option)
Edit the option of the entry pointed to by the mouse.
TLegend & operator=(const TLegend &)
Assignment operator.
virtual void SetEntryLabel(const char *label)
Edit the label of the entry pointed to by the mouse.
void Print(Option_t *option="") const override
Dump this TLegend and its contents.
virtual void PaintPrimitives()
Paint the entries (list of primitives) for this legend.
virtual void EditEntryAttFill()
Edit the fill attributes for the entry pointed by the mouse.
virtual const char * GetHeader() const
Returns the header, which is the title that appears at the top of the legend.
virtual void InsertEntry(const char *objectName="", const char *label="", Option_t *option="lpf")
Add a new entry before the entry at the mouse position.
Use the TLine constructor to create a simple line.
@ kLineNDC
Use NDC coordinates.
TObject * FindObject(const char *name) const override
Find an object in this list using its name.
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
void Paint(Option_t *option="") override
Paint this marker with its current attributes.
A TMultiGraph is a collection of TGraph (or derived) objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * GetTitle() const
Returns title of object.
static void SavePrimitiveDraw(std::ostream &out, const char *variable_name, Option_t *option=nullptr)
Save invocation of primitive Draw() method Skipped if option contains "nodraw" string.
TObject()
TObject constructor.
static void SavePrimitiveConstructor(std::ostream &out, TClass *cl, const char *variable_name, const char *constructor_agrs="", Bool_t empty_line=kTRUE)
Save object constructor in the output stream "out".
TPave()
Pave default constructor.
void Print(Option_t *option="") const override
Dump this pave with its attributes.
Int_t GetBorderSize() const
virtual void ConvertNDCtoPad()
Convert pave coordinates from NDC to Pad coordinates.
const char * GetName() const override
Returns name of object.
TString GetSavePaveArgs(const char *extra_arg=nullptr, Bool_t save_option=kTRUE)
Returns arguments which should be used when saving primitive constructor Check if coordinates are ini...
void Copy(TObject &pave) const override
Copy this pave to pave.
Int_t fBorderSize
window box bordersize in pixels
Double_t fX2NDC
X2 point in NDC coordinates.
virtual void SetBorderSize(Int_t bordersize=4)
Sets the border size of the TPave box and shadow.
Double_t fY2NDC
Y2 point in NDC coordinates.
Double_t fX1NDC
X1 point in NDC coordinates.
Double_t fY1NDC
Y1 point in NDC coordinates.
virtual void PaintPave(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Int_t bordersize=4, Option_t *option="br")
Draw this pave with new coordinates.
Defined by an array on N points in a 2-D space.
void Paint(Option_t *option="") override
Paint this polyline with its current attributes.
void ToLower()
Change string to lower-case.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual void SetNDC(Bool_t isNDC=kTRUE)
Set NDC mode on if isNDC = kTRUE, off otherwise.
Double_t Ceil(Double_t x)
Rounds x upward, returning the smallest integral value that is not less than x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.