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