@@ -690,7 +690,7 @@ End_Macro
690690// //////////////////////////////////////////////////////////////////////////////
691691// / TGaxis default constructor.
692692
693- TGaxis::TGaxis (): TLine(), TAttText(11 ,0 ,1 ,62 ,0.040 )
693+ TGaxis::TGaxis (): TLine(), TAttText(11 ,0 ,1 ,62 ,0.040 ), fRefLength( 0 )
694694{
695695
696696 fGridLength = 0 .;
@@ -721,7 +721,7 @@ TGaxis::TGaxis(): TLine(), TAttText(11,0,1,62,0.040)
721721TGaxis::TGaxis (Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax,
722722 Double_t wmin, Double_t wmax, Int_t ndiv, Option_t *chopt,
723723 Double_t gridlength)
724- : TLine(xmin,ymin,xmax,ymax), TAttText(11 ,0 ,1 ,62 ,0.040 )
724+ : TLine(xmin,ymin,xmax,ymax), TAttText(11 ,0 ,1 ,62 ,0.040 ), fRefLength( 0 )
725725{
726726
727727 fWmin = wmin;
@@ -758,7 +758,7 @@ TGaxis::TGaxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax,
758758TGaxis::TGaxis (Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax,
759759 const char *funcname, Int_t ndiv, Option_t *chopt,
760760 Double_t gridlength)
761- : TLine(xmin,ymin,xmax,ymax), TAttText(11 ,0 ,1 ,62 ,0.040 )
761+ : TLine(xmin,ymin,xmax,ymax), TAttText(11 ,0 ,1 ,62 ,0.040 ), fRefLength( 0 )
762762{
763763
764764 fFunction = (TF1*)gROOT ->GetFunction (funcname);
@@ -795,6 +795,7 @@ TGaxis::TGaxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax,
795795TGaxis::TGaxis (const TGaxis& ax) :
796796 TLine(ax),
797797 TAttText(ax),
798+ fRefLength(ax.fRefLength ),
798799 fWmin(ax.fWmin ),
799800 fWmax(ax.fWmax ),
800801 fGridLength(ax.fGridLength ),
@@ -830,6 +831,7 @@ TGaxis& TGaxis::operator=(const TGaxis& ax)
830831 if (this !=&ax) {
831832 TLine::operator =(ax);
832833 TAttText::operator =(ax);
834+ fRefLength = ax.fRefLength ;
833835 fWmin =ax.fWmin ;
834836 fWmax =ax.fWmax ;
835837 fGridLength =ax.fGridLength ;
@@ -977,6 +979,7 @@ void TGaxis::ImportAxisAttributes(TAxis *axis)
977979 SetBit (TAxis::kMoreLogLabels , axis->TestBit (TAxis::kMoreLogLabels ));
978980 if (axis->GetDecimals ()) SetBit (TAxis::kDecimals ); // the bit is in TAxis::fAxis2
979981 SetTimeFormat (axis->GetTimeFormat ());
982+ SetRefLength (axis->GetRefLength ());
980983}
981984
982985// //////////////////////////////////////////////////////////////////////////////
@@ -1082,6 +1085,42 @@ void TGaxis::PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t yma
10821085
10831086 Double_t rwmi = wmin;
10841087 Double_t rwma = wmax;
1088+
1089+ struct AttributeRestorer {
1090+ TGaxis *fAxis ;
1091+ Float_t fLabelSize , fTitleSize , fTickSize , fLabelOffset , fTitleOffset ;
1092+ AttributeRestorer (TGaxis *ax) : fAxis (ax),
1093+ fLabelSize (ax->GetLabelSize ()), fTitleSize(ax->GetTitleSize ()),
1094+ fTickSize(ax->GetTickSize ()), fLabelOffset(ax->GetLabelOffset ()),
1095+ fTitleOffset(ax->GetTitleOffset ()) {}
1096+ ~AttributeRestorer () {
1097+ fAxis ->SetLabelSize (fLabelSize );
1098+ fAxis ->SetTitleSize (fTitleSize );
1099+ fAxis ->SetTickSize (fTickSize );
1100+ fAxis ->SetLabelOffset (fLabelOffset );
1101+ fAxis ->SetTitleOffset (fTitleOffset );
1102+ }
1103+ };
1104+ AttributeRestorer restorer (this );
1105+
1106+ Double_t scale = 1.0 ;
1107+
1108+ if (fRefLength > 0 && gPad ) {
1109+ Double_t curH = gPad ->GetWh () * gPad ->GetAbsHNDC ();
1110+ if (curH > 0 ) scale = fRefLength / curH;
1111+ }
1112+
1113+ if (scale != 1.0 ) {
1114+ // Only scale if precision is 2 (relative sizing). Precision 3 (pixels) ignores this.
1115+ if (GetLabelFont ()%10 < 3 ) fLabelSize *= scale;
1116+ if (GetTextFont ()%10 < 3 ) fTitleSize *= scale;
1117+
1118+ fTickSize *= scale;
1119+ fLabelOffset *= scale;
1120+ }
1121+
1122+
1123+
10851124 chtemp = &kchtemp[0 ];
10861125 label = &chlabel[0 ];
10871126
0 commit comments