4 * Copyright © 2000 Keith Packard
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of Keith Packard not be used in
11 * advertising or publicity pertaining to distribution of the software without
12 * specific, written prior permission. Keith Packard makes no
13 * representations about the suitability of this software for any purpose. It
14 * is provided "as is" without express or implied warranty.
16 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
18 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
19 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
20 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
21 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22 * PERFORMANCE OF THIS SOFTWARE.
29 FcFontSetCreate (void)
33 s = (FcFontSet *) malloc (sizeof (FcFontSet));
36 FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet));
44 FcFontSetDestroy (FcFontSet *s)
48 for (i = 0; i < s->nfont; i++)
49 FcPatternDestroy (s->fonts[i]);
52 FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
55 FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet));
60 FcFontSetAdd (FcFontSet *s, FcPattern *font)
65 if (s->nfont == s->sfont)
67 sfont = s->sfont + 32;
69 f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *));
71 f = (FcPattern **) malloc (sfont * sizeof (FcPattern *));
75 FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
76 FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *));
80 s->fonts[s->nfont++] = font;
84 static int * fcfs_pat_count;
87 FcFontSetNewBank (void)
94 FcFontSetNeededBytes (FcFontSet *s)
98 for (i = 0; i < s->nfont; i++)
100 c = FcPatternNeededBytes(s->fonts[i]);
107 return cum + sizeof(int);
113 FcFontSetDistributeBytes (FcCache * metadata, void * block_ptr)
115 fcfs_pat_count = (int *)block_ptr;
116 block_ptr = (int *)block_ptr + 1;
117 // we don't consume any bytes for the fontset itself,
118 // since we don't allocate it statically.
119 block_ptr = FcPatternDistributeBytes (metadata, block_ptr);
121 // for good measure, write out the object ids used for
122 // this bank to the file.
123 return FcObjectDistributeBytes (metadata, block_ptr);
127 FcFontSetSerialize (int bank, FcFontSet * s)
131 *fcfs_pat_count = s->nfont;
133 for (i = 0; i < s->nfont; i++)
135 p = FcPatternSerialize (bank, s->fonts[i]);
136 if (!p) return FcFalse;
137 FcPatternDestroy (s->fonts[i]);
146 FcFontSetUnserialize(FcCache metadata, FcFontSet * s, void * block_ptr)
151 nfont = *(int *)block_ptr;
152 block_ptr = (int *)block_ptr + 1;
154 if (s->sfont < s->nfont + nfont)
156 int sfont = s->nfont + nfont;
158 pp = realloc (s->fonts, sfont * sizeof (FcPattern));
169 FcPattern * p = FcPatternUnserialize (metadata, block_ptr);
170 for (i = 0; i < nfont; i++)
171 s->fonts[n + i] = p+i;