Code for changing fonts and fontsizes for FLTK 1.1 and 1.3
Often the user wants to set up windows for his own style, older ones
need larger texts, the younger stylish fonts. Also it should be
possible, that text follows size of window, when resizing.
Basics
All FLTK widgets and windows are based on class Fl_Widget. So it is
easy to change labelfont and labelsize, because every widget
provides the methods labelfont(Fl_Font) and labelsize(Fl_Fontsize).
When there is a window it is just necessary to go through all
widgets and tell them new labelfont and labelsize.
Because not every widget provides text, the methods textfont() and
textsize() are not methods of basic Fl_Widget. That's a pity, but
not a real problem. When there is a Fl_Widget* the function tries to
cast it to a class, that provides textfont() and textsize() and then
uses this class. Because most of FLTK widgets derive from a few
basic classe this is not a serious amount of casting. When there is
a window, it is only necessary to go through all widgets and tell
them textfont and textsize, when they use text.
All functionality regarding to font and fontsize is inside of files
"f_font_size.h" and "f_font_size.cpp". The following functions and
interfaces are defined in these files. To use them, you must
#include "f_font_size.h"
Functions
There are four functions inside of namespace f_font_size:
void Resize_Fonts(Fl_Widget*
pWdg, int Labelsize, int Textsize);
Resizes labelsize and textsize for pWdg and all
widgets inside of pWdg, in case pWdg is derived from Fl_Group.
void Set_Fonts(Fl_Widget*
pWdg, Fl_Font Lbl_Font, Fl_Font Txt_Font);
Sets labelfont and textfont for pWdg and all
widgets inside of pWdg, in case pWdg is derived from Fl_Group.
void Resize_Fonts(int
Labelsize, int Textsize);
Sets Labelsize and Textsize to all visible
windows
void Set_Fonts(Fl_Font
Lbl_Font, Fl_Font Txt_Font);
Sets Labelfont and Textfont to all visible
windows
Be aware, there is no check for
valid parameters. Invalid fonts and sizes can vanish all
texts of the applications.
Special Demands
It's a good start to be able to set all fonts and sizes of an
application, but there are some demands missing, so there are some
special classes:
i_basic_font_size
i_basic_font_size adds font control to any
widget or group, but normally it will be assigned to the Fl_Window
to control all widgets inside of it.
i_local_font_size
assigns current settings to a group or
window. This is ment for intitialising not resizable
windows. It not only assigns the fonts, it also adjusts the size
of the window, to meet general settings.
When there is a main window resized to double size and also using
larger fonts and a subwindow is going to be opened, it also will
be set to double size. Now the subwindow matches to larger fonts
of main window and all windows are consistent
i_font_size
must be used to make user defined
widgets accessable by font_size classes and functions.
Example
The example demonstrates how to use the font_size classes.
f_font_size.h, f_font_size.cpp
classes for managing fonts and
textsizes
fld_fonts.fld, fld_fonts.h,
fld_fonts.cpp
definition of font dialog mask
Fl_Fonts_Dialog.h, Fl_Fonts_Dialog.cpp
these files provide the methods to
choose fonts and to change size of labels and texts. fld_fonts is
used by this dialog. The code comes from the FLTK fonts example.
Fl_Font_Window.h
this is an inheritance from
Fl_Double_Window and connects font_size methods to resizing of a
window. It can be used to add the functionality to existing
applications by replacing e.g. FL_Double_Window by Fl_Font_Window.
Fl_Example.fld, Fl_Example.h,
Fl_Example.cpp
definition of example dialog mask
Fl_Sub_Dlg.fld, Fl_Sub_Dlg.h,
Fl_Sub_Dlg.cpp
definition of sub dialog
Main.cpp
contains dlg_example which provides
the methods for Fl_Example
contains main loop
[ i_basic_font_size ] [ i_local_font_size ] [ i_font_size ]