]>
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)
93 FcFontSetNeededBytes (FcFontSet
*s
)
97 for (i
= 0; i
< s
->nfont
; i
++)
99 c
= FcPatternNeededBytes(s
->fonts
[i
]);
106 return cum
+ sizeof(int) + FcObjectNeededBytes();
112 FcFontSetDistributeBytes (FcCache
* metadata
, void * block_ptr
)
114 fcfs_pat_count
= (int *)block_ptr
;
115 block_ptr
= (int *)block_ptr
+ 1;
116 // we don't consume any bytes for the fontset itself,
117 // since we don't allocate it statically.
118 block_ptr
= FcPatternDistributeBytes (metadata
, block_ptr
);
120 // for good measure, write out the object ids used for
121 // this bank to the file.
122 return FcObjectDistributeBytes (metadata
, block_ptr
);
126 FcFontSetSerialize (int bank
, FcFontSet
* s
)
130 *fcfs_pat_count
= s
->nfont
;
132 for (i
= 0; i
< s
->nfont
; i
++)
134 p
= FcPatternSerialize (bank
, s
->fonts
[i
]);
135 if (!p
) return FcFalse
;
143 FcFontSetUnserialize(FcCache metadata
, FcFontSet
* s
, void * block_ptr
)
148 nfont
= *(int *)block_ptr
;
149 block_ptr
= (int *)block_ptr
+ 1;
151 if (s
->sfont
< s
->nfont
+ nfont
)
153 int sfont
= s
->nfont
+ nfont
;
155 pp
= realloc (s
->fonts
, sfont
* sizeof (FcPattern
));
166 FcPattern
* p
= (FcPattern
*)block_ptr
;
167 block_ptr
= FcPatternUnserialize (metadata
, block_ptr
);
168 for (i
= 0; i
< nfont
; i
++)
169 s
->fonts
[n
+ i
] = p
+i
;
171 block_ptr
= FcObjectUnserialize (metadata
, block_ptr
);
174 return block_ptr
!= 0;