Re: Label Size

Rene Brun (Rene.Brun@cern.ch)
Mon, 24 Nov 1997 15:51:39 +0100


ROHLFS Reiner wrote:

> Hi ROOTers,
>
> I want to draw the labels of the axis always in the same size in pixels units
> independent of the size of the pad.
>
> My idea to do this is to get notified from ROOT every time the pad is resized.
> Now I could recalculate the size of the labels if the function TPad::YtoPixel()
> already calculates with the new size of the pad.
>
> Is there a virtual function of TPad that I can use to recalculate the size of
> the labels?
> And is the new size of the pad already set while this function is called from
> ROOT?
>
> I assume ExecuteEvent is only called at a mouse event but not at a resize
> event.

You can use a combination of the following TPad functions:
GetWh(); returns canvas size in pixels
GetAbsHNDC(); returns relative size (in Y) of this pad in canvas
==> size of pad in pixels = pad->GetWh()*pad->GetAbsHNDC()

Now, text sizes are always expressed as a fraction of the pad size.
If you want your text size to be (say 18 pixels in Y),
float textsize = 18/(pad->GetWh()*pad->GetAbsHNDC());
To set the Y axis label sizes, you can do;
TAxis *yaxis = hist->GetYaxis();
yaxis->SetLabelSize(textsize);

Currently, no user functions can be called when a pad is resized.
I remember discussing this possibility some time ago !!

Rene Brun