> >
> > If this is possible, then this is *the* way to go.
>
> At least I know it is possible for gtk2 - I implemented dynamic fonts in
> one of my (C++, unfortunately) programs. The documentation seems to talk
> about the font code as something New and Improved (tm), so I'd say it's
> quite hard in gtk1.
Well I could find the documentation on how to do it, but the actual method
isn't implemented somewhere, it is not impossible that the PLACE where it is
missing is in the FPC units, but since those were autogenerated my gutt tells
me that it is more likely to be somewhere in the LCL.
I am not exactly sure how the GTK2 objects were turned into OP classes for the
LCL, I would have to look at the wrapper code first, my feeling however is
that the likely scenario is that somewhere an external declaration needs to
be added that can enable GTKWidget.Modify_font from the GTK2 libs.
GTK1 already has support for this, and if I I didn't REALLY need UTF-8 support
for text-out I would have just compiled my app for GTK1 instead but since I
don't know how, and it would be GREAT if this works, I am happy to help write
code to make it happen, if I can get help from some of the gtk2 guru's it
would just happen faster.
My current code:
In gtk2object.inc add this (I put mine just above TGTKWidget.SetCallBack):
Procedure TGTK2WidgetSet.SetWidgetFont(const AWidget: PGTK2Widget; const
Afont: tFont);
Var
PangoDescStr,DescOpts : String;
NewFontDescription : PPangoFontDescription;
Begin
{$IFDEF GTK2}
PangoDescStr := AFont.Name;
DescOpts := '';
If FSBold in AFont.Style then
DescOpts := DescOpts + ' bold';
If FSItalic in AFont.Style then
DescOpts := DescOpts + ' italic';
If FSUnderline in AFont.Style then
DescOpts := DescOpts + ' underline';
If FSStrikeOut in AFont.Style then
DescOpts := DescOpts + ' strikethrough';
PangoDescStr := PangoDescStr+DescOpts+' '+intToStr(Afont.Size);
//Pango does not appear to have a way to set the character set in the
//font description but seems to default to UTF-8 this probably
//requires some or other todo item.
try
NewFontDescription := PPangoFontDescription(PangoDescStr);
AWidget.Modify_Font(NewFontDescription);
except
debugln('COULD NOT SET FONT');
end;
{$ENDIF}
end;
In GTK2Int.pas change
protected
procedure AppendText(Sender: TObject; Str: PChar);
to:
protected
procedure SetWidgetFont(const AWidget: PGTK2Widget; const Afont: tFont);
procedure AppendText(Sender: TObject; Str: PChar);
Note that the current code DOES NOT COMPILE due to the missing Modify_Font.
PS. Thanks Darek, I managed to get THIS far by studying your patch and will
look at it again when doing the per-widget bits.
PPS. As you can see, right now tfont.color is NOT yet handled at all.
Ciao
A.J.
--
A.J. Venter
Chief Software Architect
OpenLab International
www.getopenlab.com
www.silentcoder.co.za
+27 82 726 5103
_________________________________________________________________
To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
archives at http://www.lazarus.freepascal.org/mailarchives