]>
git.wh0rd.org - fontconfig.git/blob - src/fcfs.c
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
;