#  Copyright (c) 1990-1992 The Regents of the University of California.
#  Copyright (c) 1994 Sun Microsystems, Inc.
#  See the file "license.terms" for information on usage and redistribution
#  of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#  @(#) GetFontStr.3 1.8 95/05/06 15:29:34

=head1 NAME

Tk_GetFontStruct, Tk_NameOfFontStruct, Tk_FreeFontStruct - maintain database of fonts

=for category C Programming


B<#include E<lt>tk.hE<gt>>

XFontStruct *
B<Tk_GetFontStruct(>I<interp, tkwin, nameId>B<)>

char *



=over 4

=item Tcl_Interp *interp (in)

Interpreter to use for error reporting.

=item Tk_Window tkwin (in)

Token for window in which font will be used.

=item Tk_Uid nameId (in)

Name of desired font.

=item XFontStruct *fontStructPtr (in)

Font structure to return name for or delete.



B<Tk_GetFont> loads the font indicated
by I<nameId> and returns a pointer to information about the
font.  The pointer returned by B<Tk_GetFont>
will remain valid until B<Tk_FreeFont>
is called to release it.
I<NameId> can be either a font name or pattern;  any
value that could be passed to B<XLoadQueryFont> may be
passed to B<Tk_GetFont>.  If B<Tk_GetFont> is unsuccessful
(because, for example, there is no font corresponding to
I<nameId>) then it returns B<NULL> and stores an error
message in I<interp-E<gt>result>.

B<Tk_GetFont> maintains a database of all fonts it has allocated.
If the same I<nameId> is requested multiple times (e.g. by
different windows or for different purposes), then additional
calls for the same I<nameId> will be handled very quickly, without
involving the X server.  For this reason, it is generally better
to use B<Tk_GetFont> in place of X library procedures like

The procedure B<Tk_NameOfFontStruct> is roughly the inverse of
B<Tk_GetFontStruct>.  If its I<fontStructPtr> argument was created
by B<Tk_GetFontStruct>, then the return value is the I<nameId>
argument that was passed to B<Tk_GetFontStruct> to create the
font.  If I<fontStructPtr> was not created by a call
to B<Tk_GetFontStruct>, then the return value is a hexadecimal string
giving the X identifier for the associated font.
Note:  the string returned by B<Tk_NameOfFontStruct> is
only guaranteed to persist until the next call to B<Tk_NameOfFontStruct>.

When a font returned by B<Tk_GetFont> is no longer
needed, B<Tk_FreeFont> should be called to release it.
There should be exactly one call to B<Tk_FreeFont> for
each call to B<Tk_GetFont>.  When a font is no longer in
use anywhere (i.e. it has been freed as many times as it has been gotten)
B<Tk_FreeFont> will release it to the X server and delete it from
the database.