Re: Changing font sizes

Onuchin Valeriy (onuchin@sirius.ihep.su)
Fri, 16 Jul 1999 16:09:02 +0400


Laurent.Aphecetche@subatech.in2p3.fr wrote:
> Hi,
>
> I know that using the .rootrc resources Gui.xFont (where
> x=Bold,Normal,Small or Proportional) one
> can change the default fonts used by the TG* Classes.
>
> What I would like to know is if it's possible to dynamically change the
> fonts of widgets that are
> already shown in a window. The functionality I would like to have is
> the following : having all the
> labels, texts, and so on becoming either bigger or smaller when I click
> on a button. Is that possible ?
>
> Thanks.

There is nothing impossible because you can overload TG* Classses
methods.

The following is an example how to implement the button with 2-state
(On/Off) pictures.
(for example Qt's QToolButton = http://www.troll.no/qt/qtoolbutton.html
can be displayed as one of the 6 pictures
smallOff,smallOn,smallDisabled,largeOn,largeOff,largeDisabled )

//////////////////////////////////////////////////////////////////////////////
class MyButton : public QTGPictureButton
{
protected:
const TGPicture* fOn; // picture displayed when button is On
const TGPicture* fOff // picture displayed when button is Off

Bool_t IsDown() const { return !(fOptions & kRaisedFrame); }
public:
MyButton(const TGWindow *p, Int_t id, const TGPicture *Off, const
TGPicture *On);
~MyButton();
virtual void SetState(EButtonState state);

ClassDef(MyButton,0) // 2 state picture button
};

ClassImp(MyButton)

//______________________________________________________________________________
MyButton::MyButton(const TGWindow* p, Int_t id,const TGPicture *Off,
const TGPicture *On ):
TGPictureButton(p,Off,id)
{
// ctor

fState = kButtonUp;
fPic = fOff;

// supposed fOff/fOn pictures has the same size
// comment : settings of button's sizes are different from
TGPictureButton's ( you can play with it)

fTWidth = fPic->GetWidth();
fTHeight = fPic->GetHeight();

Resize(fTWidth+1,fTHeight+1);
fClient->NeedRedraw(this);
}

//______________________________________________________________________________
MyButton::~MyButton()
{
// dtor

if(fOn) fClient->FreePicture(fOn);
if(fOff) fClient->FreePicture(fOff);
}

//______________________________________________________________________________
void MyButton::SetState(EButtonState state)
{
// we need overload only this method

TGPictureButton::SetState(state);

if(fState == kButtonDisable) return;
fPic= IsDown() ? fOn : fOff;
}

////////////////////////////////////////////////////////////////////////////////

Hope these hints could help,

with best regards . Valery