move win32 font support in a new directory, and use Imager::Probe
[imager.git] / imext.c
1 #include "imexttypes.h"
2 #include "imager.h"
3
4 /*
5  DON'T ADD CASTS TO THESE
6 */
7 im_ext_funcs imager_function_table =
8   {
9     IMAGER_API_VERSION,
10     IMAGER_API_LEVEL,
11
12     mymalloc,
13     myfree,
14     myrealloc,
15
16     mymalloc_file_line,
17     myfree_file_line,
18     myrealloc_file_line,
19
20     i_img_8_new,
21     i_img_16_new,
22     i_img_double_new,
23     i_img_pal_new,
24     i_img_destroy,
25     i_sametype,
26     i_sametype_chans,
27     i_img_info,
28
29     i_ppix,
30     i_gpix,
31     i_ppixf,
32     i_gpixf,
33     i_plin,
34     i_glin,
35     i_plinf,
36     i_glinf,
37     i_gsamp,
38     i_gsampf,
39     i_gpal,
40     i_ppal,
41     i_addcolors,
42     i_getcolors,
43     i_colorcount,
44     i_maxcolors,
45     i_findcolor,
46     i_setcolors,
47
48     i_new_fill_solid,
49     i_new_fill_solidf,
50     i_new_fill_hatch,
51     i_new_fill_hatchf,
52     i_new_fill_image,
53     i_new_fill_fount,
54     i_fill_destroy,
55
56     i_quant_makemap,
57     i_quant_translate,
58     i_quant_transparent,
59
60     i_clear_error,
61     i_push_error,
62     i_push_errorf,
63     i_push_errorvf,
64
65     i_tags_new,
66     i_tags_set,
67     i_tags_setn,
68     i_tags_destroy,
69     i_tags_find,
70     i_tags_findn,
71     i_tags_delete,
72     i_tags_delbyname,
73     i_tags_delbycode,
74     i_tags_get_float,
75     i_tags_set_float,
76     i_tags_set_float2,
77     i_tags_get_int,
78     i_tags_get_string,
79     i_tags_get_color,
80     i_tags_set_color,
81
82     i_box,
83     i_box_filled,
84     i_box_cfill,
85     i_line,
86     i_line_aa,
87     i_arc,
88     i_arc_aa,
89     i_arc_cfill,
90     i_arc_aa_cfill,
91     i_circle_aa,
92     i_flood_fill,
93     i_flood_cfill,
94
95     i_copyto,
96     i_copyto_trans,
97     i_copy,
98     i_rubthru,
99
100     /* IMAGER_API_LEVEL 2 functions */
101     i_set_image_file_limits,
102     i_get_image_file_limits,
103     i_int_check_image_file_limits,
104
105     i_flood_fill_border,
106     i_flood_cfill_border,
107
108     /* IMAGER_API_LEVEL 3 functions */
109     i_img_setmask,
110     i_img_getmask,
111     i_img_getchannels,
112     i_img_get_width,
113     i_img_get_height,
114     i_lhead,
115     i_loog,
116
117     /* IMAGER_API_LEVEL 4 functions */
118     i_img_alloc,
119     i_img_init,
120
121     /* IMAGER_API_LEVEL 5 functions */
122     i_img_is_monochrome,
123     i_gsamp_bg,
124     i_gsampf_bg,
125     i_get_file_background,
126     i_get_file_backgroundf,
127     i_utf8_advance
128   };
129
130 /* in general these functions aren't called by Imager internally, but
131    only via the pointers above, since faster macros that call the
132    image vtable pointers are used.
133
134    () are used around the function names to prevent macro replacement
135    on the function names.
136 */
137
138 /*
139 =item i_ppix(im, x, y, color)
140
141 =category Drawing
142
143 Sets the pixel at (x,y) to I<color>.
144
145 Returns 0 if the pixel was drawn, or -1 if not.
146
147 Does no alpha blending, just copies the channels from the supplied
148 color to the image.
149
150 =cut
151 */
152
153 int 
154 (i_ppix)(i_img *im, int x, int y, const i_color *val) {
155   return i_ppix(im, x, y, val);
156 }
157
158 /*
159 =item i_gpix(im, C<x>, C<y>, C<color>)
160
161 =category Drawing
162
163 Retrieves the C<color> of the pixel (x,y).
164
165 Returns 0 if the pixel was retrieved, or -1 if not.
166
167 =cut
168 */
169
170 int
171 (i_gpix)(i_img *im,int x,int y,i_color *val) {
172   return i_gpix(im, x, y, val);
173 }
174
175 /*
176 =item i_ppixf(im, C<x>, C<y>, C<fcolor>)
177
178 =category Drawing
179
180 Sets the pixel at (C<x>,C<y>) to the floating point color C<fcolor>.
181
182 Returns 0 if the pixel was drawn, or -1 if not.
183
184 Does no alpha blending, just copies the channels from the supplied
185 color to the image.
186
187 =cut
188 */
189 int
190 (i_ppixf)(i_img *im, int x, int y, const i_fcolor *val) {
191   return i_ppixf(im, x, y, val);
192 }
193
194 /*
195 =item i_gpixf(im, C<x>, C<y>, C<fcolor>)
196
197 =category Drawing
198
199 Retrieves the color of the pixel (x,y) as a floating point color into
200 C<fcolor>.
201
202 Returns 0 if the pixel was retrieved, or -1 if not.
203
204 =cut
205 */
206
207 int
208 (i_gpixf)(i_img *im,int x,int y,i_fcolor *val) {
209   return i_gpixf(im, x, y, val);
210 }
211
212 /*
213 =item i_plin(im, l, r, y, colors)
214
215 =category Drawing
216
217 Sets (r-l) pixels starting from (l,y) using (r-l) values from
218 I<colors>.
219
220 Returns the number of pixels set.
221
222 =cut
223 */
224
225 int
226 (i_plin)(i_img *im, int l, int r, int y, const i_color *vals) {
227   return i_plin(im, l, r, y, vals);
228 }
229
230 /*
231 =item i_glin(im, l, r, y, colors)
232
233 =category Drawing
234
235 Retrieves (r-l) pixels starting from (l,y) into I<colors>.
236
237 Returns the number of pixels retrieved.
238
239 =cut
240 */
241
242 int
243 (i_glin)(i_img *im, int l, int r, int y, i_color *vals) {
244   return i_glin(im, l, r, y, vals);
245 }
246
247 /*
248 =item i_plinf(im, C<left>, C<right>, C<fcolors>)
249
250 =category Drawing
251
252 Sets (right-left) pixels starting from (left,y) using (right-left)
253 floating point colors from C<fcolors>.
254
255 Returns the number of pixels set.
256
257 =cut
258 */
259
260 int
261 (i_plinf)(i_img *im, int l, int r, int y, const i_fcolor *vals) {
262   return i_plinf(im, l, r, y, vals);
263 }
264
265 /*
266 =item i_glinf(im, l, r, y, colors)
267
268 =category Drawing
269
270 Retrieves (r-l) pixels starting from (l,y) into I<colors> as floating
271 point colors.
272
273 Returns the number of pixels retrieved.
274
275 =cut
276 */
277
278 int
279 (i_glinf)(i_img *im, int l, int r, int y, i_fcolor *vals) {
280   return i_glinf(im, l, r, y, vals);
281 }
282
283 /*
284 =item i_gsamp(im, left, right, y, samples, channels, channel_count)
285
286 =category Drawing
287
288 Reads sample values from C<im> for the horizontal line (left, y) to
289 (right-1,y) for the channels specified by C<channels>, an array of int
290 with C<channel_count> elements.
291
292 If channels is NULL then the first channels_count channels are retrieved for
293 each pixel.
294
295 Returns the number of samples read (which should be (right-left) *
296 channel_count)
297
298 =cut
299 */
300 int
301 (i_gsamp)(i_img *im, int l, int r, int y, i_sample_t *samp, 
302                    const int *chans, int chan_count) {
303   return i_gsamp(im, l, r, y, samp, chans, chan_count);
304 }
305
306 /*
307 =item i_gsampf(im, left, right, y, samples, channels, channel_count)
308
309 =category Drawing
310
311 Reads floating point sample values from C<im> for the horizontal line
312 (left, y) to (right-1,y) for the channels specified by C<channels>, an
313 array of int with channel_count elements.
314
315 If C<channels> is NULL then the first C<channel_count> channels are
316 retrieved for each pixel.
317
318 Returns the number of samples read (which should be (C<right>-C<left>)
319 * C<channel_count>)
320
321 =cut
322 */
323 int
324 (i_gsampf)(i_img *im, int l, int r, int y, i_fsample_t *samp, 
325            const int *chans, int chan_count) {
326   return i_gsampf(im, l, r, y, samp, chans, chan_count);
327 }
328
329 /*
330 =item i_gpal(im, left, right, y, indexes)
331
332 =category Drawing
333
334 Reads palette indexes for the horizontal line (left, y) to (right-1,
335 y) into C<indexes>.
336
337 Returns the number of indexes read.
338
339 Always returns 0 for direct color images.
340
341 =cut
342 */
343 int
344 (i_gpal)(i_img *im, int x, int r, int y, i_palidx *vals) {
345   return i_gpal(im, x, r, y, vals);
346 }
347
348 /*
349 =item i_ppal(im, left, right, y, indexes)
350
351 =category Drawing
352
353 Writes palette indexes for the horizontal line (left, y) to (right-1,
354 y) from C<indexes>.
355
356 Returns the number of indexes written.
357
358 Always returns 0 for direct color images.
359
360 =cut
361 */
362 int
363 (i_ppal)(i_img *im, int x, int r, int y, const i_palidx *vals) {
364   return i_ppal(im, x, r, y, vals);
365 }
366
367 /*
368 =item i_addcolors(im, colors, count)
369
370 =category Paletted images
371
372 Adds colors to the image's palette.
373
374 On success returns the index of the lowest color added.
375
376 On failure returns -1.
377
378 Always fails for direct color images.
379
380 =cut
381 */
382
383 int
384 (i_addcolors)(i_img *im, const i_color *colors, int count) {
385   return i_addcolors(im, colors, count);
386 }
387
388 /*
389 =item i_getcolors(im, index, colors, count)
390
391 =category Paletted images
392
393 Retrieves I<count> colors starting from I<index> in the image's
394 palette.
395
396 On success stores the colors into I<colors> and returns true.
397
398 On failure returns false.
399
400 Always fails for direct color images.
401
402 Fails if there are less than I<index>+I<count> colors in the image's
403 palette.
404
405 =cut
406 */
407
408 int
409 (i_getcolors)(i_img *im, int i, i_color *colors, int count) {
410   return i_getcolors(im, i, colors, count);
411 }
412
413 /*
414 =item i_colorcount(im)
415
416 =category Paletted images
417
418 Returns the number of colors in the image's palette.
419
420 Returns -1 for direct images.
421
422 =cut
423 */
424
425 int
426 (i_colorcount)(i_img *im) {
427   return i_colorcount(im);
428 }
429
430 /*
431 =item i_maxcolors(im)
432
433 =category Paletted images
434
435 Returns the maximum number of colors the palette can hold for the
436 image.
437
438 Returns -1 for direct color images.
439
440 =cut
441 */
442
443 int
444 (i_maxcolors)(i_img *im) {
445   return i_maxcolors(im);
446 }
447
448 /*
449 =item i_findcolor(im, color, &entry)
450
451 =category Paletted images
452
453 Searches the images palette for the given color.
454
455 On success sets *I<entry> to the index of the color, and returns true.
456
457 On failure returns false.
458
459 Always fails on direct color images.
460
461 =cut
462 */
463 int
464 (i_findcolor)(i_img *im, const i_color *color, i_palidx *entry) {
465   return i_findcolor(im, color, entry);
466 }
467
468 /*
469 =item i_setcolors(im, index, colors, count)
470
471 =category Paletted images
472
473 Sets I<count> colors starting from I<index> in the image's palette.
474
475 On success returns true.
476
477 On failure returns false.
478
479 The image must have at least I<index>+I<count> colors in it's palette
480 for this to succeed.
481
482 Always fails on direct color images.
483
484 =cut
485 */
486 int
487 (i_setcolors)(i_img *im, int index, const i_color *colors, int count) {
488   return i_setcolors(im, index, colors, count);
489 }
490