| .TH SUBFONT 3 |
| .SH NAME |
| allocsubfont, freesubfont, installsubfont, lookupsubfont, uninstallsubfont, subfontname, readsubfont, readsubfonti, writesubfont, stringsubfont, strsubfontwidth, mkfont \- subfont manipulation |
| .SH SYNOPSIS |
| .B #include <u.h> |
| .br |
| .B #include <libc.h> |
| .br |
| .B #include <draw.h> |
| .PP |
| .ta \w'\fLSubfont* 'u |
| .B |
| Subfont* allocsubfont(char *name, int n, int height, int ascent, |
| .br |
| .B |
| Fontchar *info, Image *i) |
| .PP |
| .B |
| void freesubfont(Subfont *f) |
| .PP |
| .B |
| void installsubfont(char *name, Subfont *f) |
| .PP |
| .B |
| Subfont* lookupsubfont(Subfont *f) |
| .PP |
| .B |
| void uninstallsubfont(Subfont *f) |
| .PP |
| .B |
| Subfont* readsubfont(Display *d, char *name, int fd, int dolock) |
| .PP |
| .B |
| Subfont* readsubfonti(Display *d, char *name, int fd, Image *im, |
| .br |
| .B |
| int dolock) |
| .PP |
| .B |
| int writesubfont(int fd, Subfont *f) |
| .PP |
| .B |
| Point stringsubfont(Image *dst, Point p, Image *src, |
| .br |
| .B |
| Subfont *f, char *str) |
| .PP |
| .B |
| Point strsubfontwidth(Subfont *f, char *s) |
| .PP |
| .B |
| Font* mkfont(Subfont *f, Rune min) |
| .SH DESCRIPTION |
| Subfonts are the components of fonts that hold the character images. |
| A font comprises an array of subfonts; see |
| .IR cachechars (3). |
| A new |
| .B Subfont |
| is allocated and initialized with |
| .IR allocsubfont . |
| See |
| .IR cachechars (3) |
| for the meaning of |
| .IR n , |
| .IR height , |
| .IR ascent , |
| and |
| .IR info , |
| and the arrangement of characters in |
| image |
| .IR i . |
| The |
| .I name |
| is used to identify the subfont in the subfont cache; see the descriptions |
| .I lookupsubfont |
| and |
| .IR installsubfont |
| .RI ( q.v. ). |
| The appropriate fields of the returned |
| .B Subfont |
| structure are set to |
| the passed arguments, and the image is registered as a subfont |
| with the graphics device |
| .IR draw (3). |
| .I Allocsubfont |
| returns 0 on failure. |
| .PP |
| .I Freesubfont |
| frees a subfont and all its associated structure including the |
| associated image. |
| Since |
| .I freesbufont |
| calls |
| .I free |
| on |
| .BR f->info , |
| if |
| .B f->info |
| was not allocated by |
| .IR malloc (3) |
| it should be zeroed before calling |
| .IR subffree . |
| .PP |
| A number of subfonts are kept in external files. |
| The convention for naming subfont files is: |
| .IP |
| .B \*9/font/\fIname\fP/\fIclass\fP.\fIsize\fP.\fIdepth |
| .PD |
| .PP |
| where |
| .I size |
| is approximately the height in pixels of the lower case letters |
| (without ascenders or descenders). |
| If there is only one version of the subfont, the |
| .BI \&. depth |
| extension is elided. |
| .I Class |
| describes the range of runes encoded in the subfont: |
| .BR ascii , |
| .BR latin1 , |
| .BR greek , |
| etc. |
| .PP |
| Subfonts are cached within the program, so a subfont shared between fonts will be loaded only once. |
| .I Installsubfont |
| stores subfont |
| .I f |
| under the given |
| .IR name , |
| typically the file name from which it was read. |
| .I Uninstallsubfont |
| removes the subfont from the cache. |
| Finally, |
| .I lookupsubfont |
| searches for a subfont with the given |
| .I name |
| in the cache and returns it, or nil if no such subfont exists. |
| .PP |
| .I Subfontname |
| is used to locate subfonts given their names within the fonts. |
| The default version constructs a name given the |
| .IR cfname , |
| its name within the font, |
| .IR fname , |
| the name of the font, and the maximum depth suitable for this subfont. |
| This interface allows a partially specified name within a font to be resolved |
| at run-time to the name of a file holding a suitable subfont. |
| Although it is principally a routine internal to the library, |
| .I subfontname |
| may be substituted by the application to provide a less file-oriented subfont naming scheme. |
| .PP |
| The format of a subfont file is described in |
| .IR font (7). |
| Briefly, it contains a image with all the characters in it, |
| followed by a subfont header, followed by character information. |
| .I Readsubfont |
| reads a subfont from the file descriptor |
| .IR fd . |
| The |
| .I name |
| is used to identify the font in the cache. |
| The |
| .I dolock |
| argument specifies whether the routine should synchronize |
| use of the |
| .I Display |
| with other processes; for single-threaded applications it may |
| always be zero. |
| .I Readsubfonti |
| does the same for a subfont whose associated image is already in memory; it is passed as the |
| argument |
| .IR im . |
| In other words, |
| .I readsubfonti |
| reads only the header and character information from the file descriptor. |
| .PP |
| .I Writesubfont |
| writes on |
| .I fd |
| the part of a subfont file that comes after the image. It should be preceded by |
| a call to |
| .IR writeimage |
| (see |
| .IR allocimage (3)). |
| .PP |
| .I Stringsubfont |
| is analogous to |
| .B string |
| (see |
| .IR draw (3)) |
| for subfonts. Rather than use the underlying font caching primitives, |
| it calls |
| .B draw |
| for each character. |
| It is intended for stand-alone environments such as operating system kernels. |
| .I Strsubfontwidth |
| returns the width of the string |
| .I s |
| in |
| as it would appear if drawn with |
| .I stringsubfont |
| in |
| .B Subfont |
| .BR f . |
| .PP |
| .I Mkfont |
| takes as argument a |
| .B Subfont |
| .I s |
| and returns a pointer to a |
| .B Font |
| that maps the character images in |
| .I s |
| into the |
| .B Runes |
| .I min |
| to |
| .IB min + s ->n-1\f1. |
| .SH FILES |
| .TF \*9/font |
| .TP |
| .B \*9/font |
| bitmap font file tree |
| .SH SOURCE |
| .B \*9/src/libdraw |
| .SH SEE ALSO |
| .IR graphics (3), |
| .IR allocimage (3), |
| .IR draw (3), |
| .IR cachechars (3), |
| .IR image (7), |
| .IR font (7) |
| .SH DIAGNOSTICS |
| All of the functions use the graphics error function (see |
| .IR graphics (3)). |