]> git.imager.perl.org - imager.git/blame - imext.h
bump versions of sub-modules that have been updated
[imager.git] / imext.h
CommitLineData
92bda632
TC
1#ifndef IMAGER_IMEXT_H_
2#define IMAGER_IMEXT_H_
3
4#include "imexttypes.h"
bea65b1f 5#include "immacros.h"
92bda632
TC
6
7extern im_ext_funcs *imager_function_ext_table;
8
9#define DEFINE_IMAGER_CALLBACKS im_ext_funcs *imager_function_ext_table
10
d1f5892c
TC
11#ifndef IMAGER_MIN_API_LEVEL
12#define IMAGER_MIN_API_LEVEL IMAGER_API_LEVEL
13#endif
14
38742a13 15#define PERL_INITIALIZE_IMAGER_CALLBACKS_NAME(name) \
d1f5892c
TC
16 do { \
17 imager_function_ext_table = INT2PTR(im_ext_funcs *, SvIV(get_sv(PERL_FUNCTION_TABLE_NAME, 1))); \
18 if (!imager_function_ext_table) \
19 croak("Imager API function table not found!"); \
af7d3ef8 20 if (imager_function_ext_table->version != IMAGER_API_VERSION) { \
38742a13
TC
21 croak("Imager API version incorrect loaded %d vs expected %d in %s", \
22 imager_function_ext_table->version, IMAGER_API_VERSION, (name)); \
af7d3ef8 23 } \
d1f5892c 24 if (imager_function_ext_table->level < IMAGER_MIN_API_LEVEL) \
38742a13 25 croak("API level %d below minimum of %d in %s", imager_function_ext_table->level, IMAGER_MIN_API_LEVEL, (name)); \
d1f5892c 26 } while (0)
92bda632 27
38742a13
TC
28#define PERL_INITIALIZE_IMAGER_CALLBACKS PERL_INITIALIZE_IMAGER_CALLBACKS_NAME(__FILE__)
29
92bda632
TC
30/* just for use here */
31#define im_extt imager_function_ext_table
32
e310e5f9
TC
33#ifdef IMAGER_DEBUG_MALLOC
34
35#define mymalloc(size) ((im_extt->f_mymalloc_file_line)((size), __FILE__, __LINE__))
36#define myrealloc(ptr, size) ((im_extt->f_myrealloc_file_line)((ptr), (size), __FILE__, __LINE__))
37#define myfree(ptr) ((im_extt->f_myfree_file_line)((ptr), __FILE__, __LINE__))
38
39#else
40
92bda632
TC
41#define mymalloc(size) ((im_extt->f_mymalloc)(size))
42#define myfree(size) ((im_extt->f_myfree)(size))
43#define myrealloc(block, newsize) ((im_extt->f_myrealloc)((block), (newsize)))
44
e310e5f9
TC
45#endif
46
d03fd5a4
TC
47#define i_img_8_new(xsize, ysize, channels) ((im_extt->f_i_img_8_new)((xsize), (ysize), (channels)))
48#define i_img_16_new(xsize, ysize, channels) ((im_extt->f_i_img_16_new)((xsize), (ysize), (channels)))
49#define i_img_double_new(xsize, ysize, channels) ((im_extt->f_i_img_double_new)((xsize), (ysize), (channels)))
50#define i_img_pal_new(xsize, ysize, channels, maxpal) ((im_extt->f_i_img_pal_new)((xsize), (ysize), (channels), (maxpal)))
92bda632
TC
51
52#define i_img_destroy(im) ((im_extt->f_i_img_destroy)(im))
53#define i_sametype(im, xsize, ysize) ((im_extt->f_i_sametype)((im), (xsize), (ysize)))
54#define i_sametype_chans(im, xsize, ysize, channels) ((im_extt->f_i_sametype_chans)((im), (xsize), (ysize), (channels)))
55#define i_img_info(im, info) ((im_extt->f_i_img_info)((im), (info)))
56
57#ifndef IMAGER_DIRECT_IMAGE_CALLS
58#define IMAGER_DIRECT_IMAGE_CALLS 1
59#endif
60
d03fd5a4
TC
61#if IMAGER_DIRECT_IMAGE_CALLS
62#define i_ppix(im, x, y, val) (((im)->i_f_ppix)((im), (x), (y), (val)))
63#define i_gpix(im, x, y, val) (((im)->i_f_gpix)((im), (x), (y), (val)))
64#define i_ppixf(im, x, y, val) (((im)->i_f_ppixf)((im), (x), (y), (val)))
65#define i_gpixf(im, x, y, val) (((im)->i_f_gpixf)((im), (x), (y), (val)))
66#define i_plin(im, l, r, y, val) (((im)->i_f_plin)(im, l, r, y, val))
67#define i_glin(im, l, r, y, val) (((im)->i_f_glin)(im, l, r, y, val))
68#define i_plinf(im, l, r, y, val) (((im)->i_f_plinf)(im, l, r, y, val))
69#define i_glinf(im, l, r, y, val) (((im)->i_f_glinf)(im, l, r, y, val))
92bda632 70
d03fd5a4
TC
71#define i_gsamp(im, l, r, y, samps, chans, count) \
72 (((im)->i_f_gsamp)((im), (l), (r), (y), (samps), (chans), (count)))
73#define i_gsampf(im, l, r, y, samps, chans, count) \
74 (((im)->i_f_gsampf)((im), (l), (r), (y), (samps), (chans), (count)))
75
76#define i_findcolor(im, color, entry) \
77 (((im)->i_f_findcolor) ? ((im)->i_f_findcolor)((im), (color), (entry)) : 0)
78
79#define i_gpal(im, l, r, y, vals) \
80 (((im)->i_f_gpal) ? ((im)->i_f_gpal)((im), (l), (r), (y), (vals)) : 0)
81#define i_ppal(im, l, r, y, vals) \
82 (((im)->i_f_ppal) ? ((im)->i_f_ppal)((im), (l), (r), (y), (vals)) : 0)
83#define i_addcolors(im, colors, count) \
84 (((im)->i_f_addcolors) ? ((im)->i_f_addcolors)((im), (colors), (count)) : -1)
85#define i_getcolors(im, index, color, count) \
86 (((im)->i_f_getcolors) ? \
87 ((im)->i_f_getcolors)((im), (index), (color), (count)) : 0)
88#define i_setcolors(im, index, color, count) \
89 (((im)->i_f_setcolors) ? \
90 ((im)->i_f_setcolors)((im), (index), (color), (count)) : 0)
91#define i_colorcount(im) \
92 (((im)->i_f_colorcount) ? ((im)->i_f_colorcount)(im) : -1)
93#define i_maxcolors(im) \
94 (((im)->i_f_maxcolors) ? ((im)->i_f_maxcolors)(im) : -1)
95#define i_findcolor(im, color, entry) \
96 (((im)->i_f_findcolor) ? ((im)->i_f_findcolor)((im), (color), (entry)) : 0)
97#else
92bda632
TC
98#define i_ppix(im, x, y, val) ((im_extt->f_i_ppix)((im), (x), (y), (val)))
99#define i_gpix(im, x, y, val) ((im_extt->f_i_gpix)((im), (x), (y), (val)))
100#define i_ppixf(im, x, y, val) ((im_extt->f_i_ppixf)((im), (x), (y), (val)))
101#define i_gpixf(im, x, y, val) ((im_extt->f_i_gpixf)((im), (x), (y), (val)))
102#define i_plin(im, l, r, y, val) ((im_extt->f_i_plin)((im), (l), (r), (y), (val)))
103#define i_glin(im, l, r, y, val) ((im_extt->f_i_glin)((im), (l), (r), (y), (val)))
104#define i_plinf(im, l, r, y, val) ((im_extt->f_i_plinf)((im), (l), (r), (y), (val)))
105#define i_glinf(im, l, r, y, val) ((im_extt->f_i_glinf)((im), (l), (r), (y), (val)))
106#define i_gsamp(im, l, r, y, samps, chans, count) \
107 ((im_extt->f_i_gsamp)((im), (l), (r), (y), (samps), (chans), (count)))
108#define i_gsampf(im, l, r, y, samps, chans, count) \
109 ((im_extt->f_i_gsampf)((im), (l), (r), (y), (samps), (chans), (count)))
110
111#endif
112
e5ee047b
TC
113#define i_gsamp_bits(im, l, r, y, samps, chans, count, bits) \
114 (((im)->i_f_gsamp_bits) ? ((im)->i_f_gsamp_bits)((im), (l), (r), (y), (samps), (chans), (count), (bits)) : -1)
115#define i_psamp_bits(im, l, r, y, samps, chans, count, bits) \
116 (((im)->i_f_psamp_bits) ? ((im)->i_f_psamp_bits)((im), (l), (r), (y), (samps), (chans), (count), (bits)) : -1)
117
92bda632
TC
118#define i_new_fill_solid(c, combine) ((im_extt->f_i_new_fill_solid)((c), (combine)))
119#define i_new_fill_solidf(c, combine) ((im_extt->f_i_new_fill_solidf)((c), (combine)))
120#define i_new_fill_hatch(fg, bg, combine, hatch, cust_hatch, dx, dy) \
121 ((im_extt->f_i_new_fill_hatch)((fg), (bg), (combine), (hatch), (cust_hatch), (dx), (dy)))
122#define i_new_fill_hatchf(fg, bg, combine, hatch, cust_hatch, dx, dy) \
123 ((im_extt->f_i_new_fill_hatchf)((fg), (bg), (combine), (hatch), (cust_hatch), (dx), (dy)))
124#define i_new_fill_image(im, matrix, xoff, yoff, combine) \
125 ((im_extt->f_i_new_fill_image)((im), (matrix), (xoff), (yoff), (combine)))
126#define i_new_fill_fount(xa, ya, xb, yb, type, repeat, combine, super_sample, ssample_param, count, segs) \
127 ((im_extt->f_i_new_fill_fount)((xa), (ya), (xb), (yb), (type), (repeat), (combine), (super_sample), (ssample_param), (count), (segs)))
128#define i_fill_destroy(fill) ((im_extt->f_i_fill_destroy)(fill))
129
130#define i_quant_makemap(quant, imgs, count) \
131 ((im_extt->f_i_quant_makemap)((quant), (imgs), (count)))
132#define i_quant_translate(quant, img) \
133 ((im_extt->f_i_quant_translate)((quant), (img)))
134#define i_quant_transparent(quant, indices, img, trans_index) \
135 ((im_extt->f_i_quant_transparent)((quant), (indices), (img), (trans_index)))
136
d03fd5a4
TC
137#define i_clear_error() ((im_extt->f_i_clear_error)())
138#define i_push_error(code, msg) ((im_extt->f_i_push_error)((code), (msg)))
92bda632 139#define i_push_errorf (im_extt->f_i_push_errorf)
d03fd5a4
TC
140#define i_push_errorvf(code, fmt, list) \
141 ((im_extt->f_i_push_errorvf)((code), (fmt), (list)))
92bda632
TC
142
143#define i_tags_new(tags) ((im_extt->f_i_tags_new)(tags))
144#define i_tags_set(tags, name, data, size) \
145 ((im_extt->f_i_tags_set)((tags), (name), (data), (size)))
146#define i_tags_setn(tags, name, idata) \
147 ((im_extt->f_i_tags_setn)((tags), (name), (idata)))
148#define i_tags_destroy(tags) ((im_extt->f_i_tags_destroy)(tags))
149#define i_tags_find(tags, name, start, entry) \
150 ((im_extt->f_i_tags_find)((tags), (name), (start), (entry)))
151#define i_tags_findn(tags, code, start, entry) \
152 ((im_extt->f_i_tags_findn)((tags), (code), (start), (entry)))
153#define i_tags_delete(tags, entry) \
154 ((im_extt->f_i_tags_delete)((tags), (entry)))
155#define i_tags_delbyname(tags, name) \
156 ((im_extt->f_i_tags_delbyname)((tags), (name)))
157#define i_tags_delbycode(tags, code) \
158 ((im_extt->f_i_tags_delbycode)((tags), (code)))
159#define i_tags_get_float(tags, name, code, value) \
160 ((im_extt->f_i_tags_get_float)((tags), (name), (code), (value)))
161#define i_tags_set_float(tags, name, code, value) \
162 ((im_extt->f_i_tags_set_float)((tags), (name), (code), (value)))
163#define i_tags_set_float2(tags, name, code, value, places) \
164 ((im_extt->f_i_tags_set_float2)((tags), (name), (code), (value), (places)))
165#define i_tags_get_int(tags, name, code, value) \
166 ((im_extt->f_i_tags_get_int)((tags), (name), (code), (value)))
167#define i_tags_get_string(tags, name, code, value, value_size) \
168 ((im_extt->f_i_tags_get_string)((tags), (name), (code), (value), (value_size)))
169#define i_tags_get_color(tags, name, code, value) \
170 ((im_extt->f_i_tags_get_color)((tags), (name), (code), (value)))
171#define i_tags_set_color(tags, name, code, value) \
172 ((im_extt->f_i_tags_set_color)((tags), (name), (code), (value)))
173
174#define i_box(im, x1, y1, x2, y2, val) ((im_extt->f_i_box)((im), (x1), (y1), (x2), (y2), (val)))
175#define i_box_filled(im, x1, y1, x2, y2, val) ((im_extt->f_i_box_filled)((im), (x1), (y1), (x2), (y2), (val)))
176#define i_box_cfill(im, x1, y1, x2, y2, fill) ((im_extt->f_i_box_cfill)((im), (x1), (y1), (x2), (y2), (fill)))
177#define i_line(im, x1, y1, x2, y2, val, endp) ((im_extt->f_i_line)((im), (x1), (y1), (x2), (y2), (val), (endp)))
178#define i_line_aa(im, x1, y1, x2, y2, val, endp) ((im_extt->f_i_line_aa)((im), (x1), (y1), (x2), (y2), (val), (endp)))
179#define i_arc(im, x, y, rad, d1, d2, val) ((im_extt->f_i_arc)((im), (x), (y), (rad), (d1), (d2), (val)))
180#define i_arc_aa(im, x, y, rad, d1, d2, val) ((im_extt->f_i_arc_aa)((im), (x), (y), (rad), (d1), (d2), (val)))
181#define i_arc_cfill(im, x, y, rad, d1, d2, fill) ((im_extt->f_i_arc_cfill)((im), (x), (y), (rad), (d1), (d2), (fill)))
182#define i_arc_aa_cfill(im, x, y, rad, d1, d2, fill) ((im_extt->f_i_arc_aa_cfill)((im), (x), (y), (rad), (d1), (d2), (fill)))
183#define i_circle_aa(im, x, y, rad, val) ((im_extt->f_i_circle_aa)((im), (x), (y), (rad), (val)))
184#define i_flood_fill(im, seedx, seedy, dcol) ((im_extt->f_i_flood_fill)((im), (seedx), (seedy), (dcol)))
185#define i_flood_cfill(im, seedx, seedy, fill) ((im_extt->f_i_flood_cfill)((im), (seedx), (seedy), (fill)))
3efb0915
TC
186#define i_flood_fill_border(im, seedx, seedy, dcol, border) ((im_extt->f_i_flood_fill_border)((im), (seedx), (seedy), (dcol), (border)))
187#define i_flood_cfill_border(im, seedx, seedy, fill, border) ((im_extt->f_i_flood_cfill_border)((im), (seedx), (seedy), (fill), (border)))
92bda632
TC
188
189#define i_copyto(im, src, x1, y1, x2, y2, tx, ty) \
190 ((im_extt->f_i_copyto)((im), (src), (x1), (y1), (x2), (y2), (tx), (ty)))
191#define i_copyto_trans(im, src, x1, y1, x2, y2, tx, ty, trans) \
192 ((im_extt->f_i_copyto_trans)((im), (src), (x1), (y1), (x2), (y2), (tx), (ty), (trans)))
193#define i_copy(im) ((im_extt->f_i_copy)(im))
194#define i_rubthru(im, src, tx, ty, src_minx, src_miny, src_maxx, src_maxy) \
195 ((im_extt->f_i_rubthru)((im), (src), (tx), (ty), (src_minx), (src_miny), (src_maxx), (src_maxy)))
196
d03fd5a4
TC
197#define i_set_image_file_limits(max_width, max_height, max_bytes) \
198 ((im_extt->f_i_set_image_file_limits)((max_width), (max_height), (max_bytes)))
199#define i_get_image_file_limits(pmax_width, pmax_height, pmax_bytes) \
200 ((im_extt->f_i_get_image_file_limits)((pmax_width), (pmax_height), (pmax_bytes)))
201#define i_int_check_image_file_limits(width, height, channels, sample_size) \
202 ((im_extt->f_i_int_check_image_file_limits)((width), (height), (channels), (sample_size)))
2b405c9e 203
d5477d3d
TC
204#define i_img_setmask(img, mask) ((im_extt->f_i_img_setmask)((img), (mask)))
205#define i_img_getmask(img) ((im_extt->f_i_img_getmask)(img))
206#define i_img_getchannels(img) ((im_extt->f_i_img_getchannels)(img))
207#define i_img_get_width(img) ((im_extt->f_i_img_get_width)(img))
208#define i_img_get_height(img) ((im_extt->f_i_img_get_height)(img))
209#define i_lhead(file, line) ((im_extt->f_i_lhead)((file), (line)))
210#define i_loog (im_extt->f_i_loog)
211
d03fd5a4
TC
212#define i_img_alloc() ((im_extt->f_i_img_alloc)())
213#define i_img_init(img) ((im_extt->f_i_img_init)(img))
bd8052a6 214
e5ee047b
TC
215#define i_img_is_monochrome(img, zero_is_white) ((im_extt->f_i_img_is_monochrome)((img), (zero_is_white)))
216
797a9f9c
TC
217#define i_gsamp_bg(im, l, r, y, samples, out_channels, bg) \
218 ((im_extt->f_i_gsamp_bg)((im), (l), (r), (y), (samples), (out_channels), (bg)))
219#define i_gsampf_bg(im, l, r, y, samples, out_channels, bg) \
220 ((im_extt->f_i_gsampf_bg)((im), (l), (r), (y), (samples), (out_channels), (bg)))
221#define i_get_file_background(im, bg) \
222 ((im_extt->f_i_get_file_background)((im), (bg)))
223#define i_get_file_backgroundf(im, bg) \
224 ((im_extt->f_i_get_file_backgroundf)((im), (bg)))
225
718b8c97
TC
226#define i_utf8_advance(p, s) ((im_extt->f_i_utf8_advance)((p), (s)))
227
50c75381
TC
228#define i_render_new(im, width) ((im_extt->f_i_render_new)((im), (width)))
229#define i_render_delete(r) ((im_extt->f_i_render_delete)(r))
230#define i_render_color(r, x, y, width, src, color) \
231 ((im_extt->f_i_render_color)((r), (x), (y), (width), (src), (color)))
232#define i_render_fill(r, x, y, width, src, fill) \
233 ((im_extt->f_i_render_fill)((r), (x), (y), (width), (src), (fill)))
234#define i_render_line(r, x, y, width, src, line, combine) \
235 ((im_extt->f_i_render_line)((r), (x), (y), (width), (src), (line), (combine)))
236#define i_render_linef(r, x, y, width, src, line, combine) \
237 ((im_extt->f_i_render_linef)((r), (x), (y), (width), (src), (line), (combine)))
238
6d5c85a2
TC
239#define i_io_getc_imp (im_extt->f_i_io_getc_imp)
240#define i_io_peekc_imp (im_extt->f_i_io_peekc_imp)
241#define i_io_peekn (im_extt->f_i_io_peekn)
242#define i_io_putc_imp (im_extt->f_i_io_putc_imp)
243#define i_io_read (im_extt->f_i_io_read)
244#define i_io_write (im_extt->f_i_io_write)
245#define i_io_seek (im_extt->f_i_io_seek)
246#define i_io_flush (im_extt->f_i_io_flush)
247#define i_io_close (im_extt->f_i_io_close)
248#define i_io_set_buffered (im_extt->f_i_io_set_buffered)
249#define i_io_gets (im_extt->f_i_io_gets)
d03fd5a4
TC
250#define io_new_fd(fd) ((im_extt->f_io_new_fd)(fd))
251#define io_new_bufchain() ((im_extt->f_io_new_bufchain)())
252#define io_new_buffer(data, len, closecb, closedata) \
253 ((im_extt->f_io_new_buffer)((data), (len), (closecb), (closedata)))
254#define io_new_cb(p, readcb, writecb, seekcb, closecb, destroycb) \
255 ((im_extt->f_io_new_cb)((p), (readcb), (writecb), (seekcb), (closecb), (destroycb)))
6d5c85a2
TC
256#define io_slurp(ig, datap) ((im_extt->f_io_slurp)((ig), (datap)))
257#define io_glue_destroy(ig) ((im_extt->f_io_glue_destroy)(ig))
258
8d14daab
TC
259#ifdef IMAGER_LOG
260#define mm_log(x) { i_lhead(__FILE__,__LINE__); i_loog x; }
261#else
262#define mm_log(x)
263#endif
264
d03fd5a4 265
92bda632 266#endif