]>
Commit | Line | Data |
---|---|---|
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 | |
7 | extern 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 | ||
44d86483 | 33 | #define im_get_context() ((im_extt->f_im_get_context)()) |
c9786b6c TC |
34 | #define im_context_refinc(ctx, where) ((im_extt->f_im_context_refinc)((ctx), (where))) |
35 | #define im_context_refdec(ctx, where) ((im_extt->f_im_context_refdec)((ctx), (where))) | |
44d86483 | 36 | |
e310e5f9 TC |
37 | #ifdef IMAGER_DEBUG_MALLOC |
38 | ||
39 | #define mymalloc(size) ((im_extt->f_mymalloc_file_line)((size), __FILE__, __LINE__)) | |
40 | #define myrealloc(ptr, size) ((im_extt->f_myrealloc_file_line)((ptr), (size), __FILE__, __LINE__)) | |
41 | #define myfree(ptr) ((im_extt->f_myfree_file_line)((ptr), __FILE__, __LINE__)) | |
42 | ||
43 | #else | |
44 | ||
92bda632 TC |
45 | #define mymalloc(size) ((im_extt->f_mymalloc)(size)) |
46 | #define myfree(size) ((im_extt->f_myfree)(size)) | |
47 | #define myrealloc(block, newsize) ((im_extt->f_myrealloc)((block), (newsize))) | |
48 | ||
e310e5f9 TC |
49 | #endif |
50 | ||
44d86483 TC |
51 | #define im_img_8_new(ctx, xsize, ysize, channels) ((im_extt->f_im_img_8_new)((ctx), (xsize), (ysize), (channels))) |
52 | #define im_img_16_new(ctx, xsize, ysize, channels) ((im_extt->f_im_img_16_new)((ctx), (xsize), (ysize), (channels))) | |
53 | #define im_img_double_new(ctx, xsize, ysize, channels) ((im_extt->f_im_img_double_new)((ctx), (xsize), (ysize), (channels))) | |
54 | #define im_img_pal_new(ctx, xsize, ysize, channels, maxpal) ((im_extt->f_im_img_pal_new)((ctx), (xsize), (ysize), (channels), (maxpal))) | |
92bda632 TC |
55 | |
56 | #define i_img_destroy(im) ((im_extt->f_i_img_destroy)(im)) | |
57 | #define i_sametype(im, xsize, ysize) ((im_extt->f_i_sametype)((im), (xsize), (ysize))) | |
58 | #define i_sametype_chans(im, xsize, ysize, channels) ((im_extt->f_i_sametype_chans)((im), (xsize), (ysize), (channels))) | |
59 | #define i_img_info(im, info) ((im_extt->f_i_img_info)((im), (info))) | |
60 | ||
61 | #ifndef IMAGER_DIRECT_IMAGE_CALLS | |
62 | #define IMAGER_DIRECT_IMAGE_CALLS 1 | |
63 | #endif | |
64 | ||
cf8c77ae | 65 | #if !IMAGER_DIRECT_IMAGE_CALLS |
92bda632 | 66 | |
92bda632 TC |
67 | #define i_ppix(im, x, y, val) ((im_extt->f_i_ppix)((im), (x), (y), (val))) |
68 | #define i_gpix(im, x, y, val) ((im_extt->f_i_gpix)((im), (x), (y), (val))) | |
69 | #define i_ppixf(im, x, y, val) ((im_extt->f_i_ppixf)((im), (x), (y), (val))) | |
70 | #define i_gpixf(im, x, y, val) ((im_extt->f_i_gpixf)((im), (x), (y), (val))) | |
71 | #define i_plin(im, l, r, y, val) ((im_extt->f_i_plin)((im), (l), (r), (y), (val))) | |
72 | #define i_glin(im, l, r, y, val) ((im_extt->f_i_glin)((im), (l), (r), (y), (val))) | |
73 | #define i_plinf(im, l, r, y, val) ((im_extt->f_i_plinf)((im), (l), (r), (y), (val))) | |
74 | #define i_glinf(im, l, r, y, val) ((im_extt->f_i_glinf)((im), (l), (r), (y), (val))) | |
75 | #define i_gsamp(im, l, r, y, samps, chans, count) \ | |
76 | ((im_extt->f_i_gsamp)((im), (l), (r), (y), (samps), (chans), (count))) | |
77 | #define i_gsampf(im, l, r, y, samps, chans, count) \ | |
78 | ((im_extt->f_i_gsampf)((im), (l), (r), (y), (samps), (chans), (count))) | |
79 | ||
80 | #endif | |
81 | ||
e5ee047b TC |
82 | #define i_gsamp_bits(im, l, r, y, samps, chans, count, bits) \ |
83 | (((im)->i_f_gsamp_bits) ? ((im)->i_f_gsamp_bits)((im), (l), (r), (y), (samps), (chans), (count), (bits)) : -1) | |
84 | #define i_psamp_bits(im, l, r, y, samps, chans, count, bits) \ | |
85 | (((im)->i_f_psamp_bits) ? ((im)->i_f_psamp_bits)((im), (l), (r), (y), (samps), (chans), (count), (bits)) : -1) | |
86 | ||
92bda632 TC |
87 | #define i_new_fill_solid(c, combine) ((im_extt->f_i_new_fill_solid)((c), (combine))) |
88 | #define i_new_fill_solidf(c, combine) ((im_extt->f_i_new_fill_solidf)((c), (combine))) | |
89 | #define i_new_fill_hatch(fg, bg, combine, hatch, cust_hatch, dx, dy) \ | |
90 | ((im_extt->f_i_new_fill_hatch)((fg), (bg), (combine), (hatch), (cust_hatch), (dx), (dy))) | |
91 | #define i_new_fill_hatchf(fg, bg, combine, hatch, cust_hatch, dx, dy) \ | |
92 | ((im_extt->f_i_new_fill_hatchf)((fg), (bg), (combine), (hatch), (cust_hatch), (dx), (dy))) | |
93 | #define i_new_fill_image(im, matrix, xoff, yoff, combine) \ | |
94 | ((im_extt->f_i_new_fill_image)((im), (matrix), (xoff), (yoff), (combine))) | |
95 | #define i_new_fill_fount(xa, ya, xb, yb, type, repeat, combine, super_sample, ssample_param, count, segs) \ | |
96 | ((im_extt->f_i_new_fill_fount)((xa), (ya), (xb), (yb), (type), (repeat), (combine), (super_sample), (ssample_param), (count), (segs))) | |
97 | #define i_fill_destroy(fill) ((im_extt->f_i_fill_destroy)(fill)) | |
98 | ||
99 | #define i_quant_makemap(quant, imgs, count) \ | |
100 | ((im_extt->f_i_quant_makemap)((quant), (imgs), (count))) | |
101 | #define i_quant_translate(quant, img) \ | |
102 | ((im_extt->f_i_quant_translate)((quant), (img))) | |
103 | #define i_quant_transparent(quant, indices, img, trans_index) \ | |
104 | ((im_extt->f_i_quant_transparent)((quant), (indices), (img), (trans_index))) | |
105 | ||
44d86483 TC |
106 | #define im_clear_error(ctx) ((im_extt->f_im_clear_error)(ctx)) |
107 | #define im_push_error(ctx, code, msg) ((im_extt->f_im_push_error)((ctx), (code), (msg))) | |
92bda632 | 108 | #define i_push_errorf (im_extt->f_i_push_errorf) |
44d86483 TC |
109 | #define im_push_errorvf(ctx, code, fmt, list) \ |
110 | ((im_extt->f_im_push_errorvf)((ctx), (code), (fmt), (list))) | |
92bda632 TC |
111 | |
112 | #define i_tags_new(tags) ((im_extt->f_i_tags_new)(tags)) | |
113 | #define i_tags_set(tags, name, data, size) \ | |
114 | ((im_extt->f_i_tags_set)((tags), (name), (data), (size))) | |
115 | #define i_tags_setn(tags, name, idata) \ | |
116 | ((im_extt->f_i_tags_setn)((tags), (name), (idata))) | |
117 | #define i_tags_destroy(tags) ((im_extt->f_i_tags_destroy)(tags)) | |
118 | #define i_tags_find(tags, name, start, entry) \ | |
119 | ((im_extt->f_i_tags_find)((tags), (name), (start), (entry))) | |
120 | #define i_tags_findn(tags, code, start, entry) \ | |
121 | ((im_extt->f_i_tags_findn)((tags), (code), (start), (entry))) | |
122 | #define i_tags_delete(tags, entry) \ | |
123 | ((im_extt->f_i_tags_delete)((tags), (entry))) | |
124 | #define i_tags_delbyname(tags, name) \ | |
125 | ((im_extt->f_i_tags_delbyname)((tags), (name))) | |
126 | #define i_tags_delbycode(tags, code) \ | |
127 | ((im_extt->f_i_tags_delbycode)((tags), (code))) | |
128 | #define i_tags_get_float(tags, name, code, value) \ | |
129 | ((im_extt->f_i_tags_get_float)((tags), (name), (code), (value))) | |
130 | #define i_tags_set_float(tags, name, code, value) \ | |
131 | ((im_extt->f_i_tags_set_float)((tags), (name), (code), (value))) | |
132 | #define i_tags_set_float2(tags, name, code, value, places) \ | |
133 | ((im_extt->f_i_tags_set_float2)((tags), (name), (code), (value), (places))) | |
134 | #define i_tags_get_int(tags, name, code, value) \ | |
135 | ((im_extt->f_i_tags_get_int)((tags), (name), (code), (value))) | |
136 | #define i_tags_get_string(tags, name, code, value, value_size) \ | |
137 | ((im_extt->f_i_tags_get_string)((tags), (name), (code), (value), (value_size))) | |
138 | #define i_tags_get_color(tags, name, code, value) \ | |
139 | ((im_extt->f_i_tags_get_color)((tags), (name), (code), (value))) | |
140 | #define i_tags_set_color(tags, name, code, value) \ | |
141 | ((im_extt->f_i_tags_set_color)((tags), (name), (code), (value))) | |
142 | ||
143 | #define i_box(im, x1, y1, x2, y2, val) ((im_extt->f_i_box)((im), (x1), (y1), (x2), (y2), (val))) | |
144 | #define i_box_filled(im, x1, y1, x2, y2, val) ((im_extt->f_i_box_filled)((im), (x1), (y1), (x2), (y2), (val))) | |
145 | #define i_box_cfill(im, x1, y1, x2, y2, fill) ((im_extt->f_i_box_cfill)((im), (x1), (y1), (x2), (y2), (fill))) | |
146 | #define i_line(im, x1, y1, x2, y2, val, endp) ((im_extt->f_i_line)((im), (x1), (y1), (x2), (y2), (val), (endp))) | |
147 | #define i_line_aa(im, x1, y1, x2, y2, val, endp) ((im_extt->f_i_line_aa)((im), (x1), (y1), (x2), (y2), (val), (endp))) | |
148 | #define i_arc(im, x, y, rad, d1, d2, val) ((im_extt->f_i_arc)((im), (x), (y), (rad), (d1), (d2), (val))) | |
149 | #define i_arc_aa(im, x, y, rad, d1, d2, val) ((im_extt->f_i_arc_aa)((im), (x), (y), (rad), (d1), (d2), (val))) | |
150 | #define i_arc_cfill(im, x, y, rad, d1, d2, fill) ((im_extt->f_i_arc_cfill)((im), (x), (y), (rad), (d1), (d2), (fill))) | |
151 | #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))) | |
152 | #define i_circle_aa(im, x, y, rad, val) ((im_extt->f_i_circle_aa)((im), (x), (y), (rad), (val))) | |
153 | #define i_flood_fill(im, seedx, seedy, dcol) ((im_extt->f_i_flood_fill)((im), (seedx), (seedy), (dcol))) | |
154 | #define i_flood_cfill(im, seedx, seedy, fill) ((im_extt->f_i_flood_cfill)((im), (seedx), (seedy), (fill))) | |
3efb0915 TC |
155 | #define i_flood_fill_border(im, seedx, seedy, dcol, border) ((im_extt->f_i_flood_fill_border)((im), (seedx), (seedy), (dcol), (border))) |
156 | #define i_flood_cfill_border(im, seedx, seedy, fill, border) ((im_extt->f_i_flood_cfill_border)((im), (seedx), (seedy), (fill), (border))) | |
92bda632 | 157 | |
0d80f37e TC |
158 | #define i_poly_aa_m(im, count, x, y, mode, c) ((im_extt->f_i_poly_aa_m)((im), (count), (x), (y), (mode), (c))) |
159 | #define i_poly_aa_cfill_m(im, count, x, y, mode, fill) ((im_extt->f_i_poly_aa_m)((im), (count), (x), (y), (mode), (fill))) | |
160 | #define i_poly_poly_aa(im, count, polys, mode, c) ((im_extt->f_i_poly_poly_aa)((im), (count), (polys), (mode), (c))) | |
161 | #define i_poly_poly_aa_cfill(im, count, polys, mode, fill) ((im_extt->f_i_poly_poly_aa_cfill)((im), (count), (polys), (mode), (fill))) | |
162 | ||
92bda632 TC |
163 | #define i_copyto(im, src, x1, y1, x2, y2, tx, ty) \ |
164 | ((im_extt->f_i_copyto)((im), (src), (x1), (y1), (x2), (y2), (tx), (ty))) | |
165 | #define i_copyto_trans(im, src, x1, y1, x2, y2, tx, ty, trans) \ | |
166 | ((im_extt->f_i_copyto_trans)((im), (src), (x1), (y1), (x2), (y2), (tx), (ty), (trans))) | |
167 | #define i_copy(im) ((im_extt->f_i_copy)(im)) | |
168 | #define i_rubthru(im, src, tx, ty, src_minx, src_miny, src_maxx, src_maxy) \ | |
169 | ((im_extt->f_i_rubthru)((im), (src), (tx), (ty), (src_minx), (src_miny), (src_maxx), (src_maxy))) | |
170 | ||
44d86483 TC |
171 | #define im_set_image_file_limits(ctx, max_width, max_height, max_bytes) \ |
172 | ((im_extt->f_im_set_image_file_limits)((max_width), (max_height), (max_bytes))) | |
173 | #define im_get_image_file_limits(ctx, pmax_width, pmax_height, pmax_bytes) \ | |
174 | ((im_extt->f_im_get_image_file_limits)((ctx), (pmax_width), (pmax_height), (pmax_bytes))) | |
175 | #define im_int_check_image_file_limits(ctx, width, height, channels, sample_size) \ | |
176 | ((im_extt->f_im_int_check_image_file_limits)((ctx), (width), (height), (channels), (sample_size))) | |
2b405c9e | 177 | |
d5477d3d TC |
178 | #define i_img_setmask(img, mask) ((im_extt->f_i_img_setmask)((img), (mask))) |
179 | #define i_img_getmask(img) ((im_extt->f_i_img_getmask)(img)) | |
180 | #define i_img_getchannels(img) ((im_extt->f_i_img_getchannels)(img)) | |
181 | #define i_img_get_width(img) ((im_extt->f_i_img_get_width)(img)) | |
182 | #define i_img_get_height(img) ((im_extt->f_i_img_get_height)(img)) | |
183 | #define i_lhead(file, line) ((im_extt->f_i_lhead)((file), (line))) | |
184 | #define i_loog (im_extt->f_i_loog) | |
c9786b6c TC |
185 | #define im_lhead(ctx, file, line) ((im_extt->f_im_lhead)((ctx), (file), (line))) |
186 | #define im_loog (im_extt->f_im_loog) | |
d5477d3d | 187 | |
44d86483 TC |
188 | #define im_img_alloc(ctx) ((im_extt->f_im_img_alloc)(ctx)) |
189 | #define im_img_init(ctx, img) ((im_extt->fm_i_img_init)((ctx), (img))) | |
bd8052a6 | 190 | |
e5ee047b TC |
191 | #define i_img_is_monochrome(img, zero_is_white) ((im_extt->f_i_img_is_monochrome)((img), (zero_is_white))) |
192 | ||
797a9f9c TC |
193 | #define i_gsamp_bg(im, l, r, y, samples, out_channels, bg) \ |
194 | ((im_extt->f_i_gsamp_bg)((im), (l), (r), (y), (samples), (out_channels), (bg))) | |
195 | #define i_gsampf_bg(im, l, r, y, samples, out_channels, bg) \ | |
196 | ((im_extt->f_i_gsampf_bg)((im), (l), (r), (y), (samples), (out_channels), (bg))) | |
197 | #define i_get_file_background(im, bg) \ | |
198 | ((im_extt->f_i_get_file_background)((im), (bg))) | |
199 | #define i_get_file_backgroundf(im, bg) \ | |
200 | ((im_extt->f_i_get_file_backgroundf)((im), (bg))) | |
201 | ||
718b8c97 TC |
202 | #define i_utf8_advance(p, s) ((im_extt->f_i_utf8_advance)((p), (s))) |
203 | ||
50c75381 TC |
204 | #define i_render_new(im, width) ((im_extt->f_i_render_new)((im), (width))) |
205 | #define i_render_delete(r) ((im_extt->f_i_render_delete)(r)) | |
206 | #define i_render_color(r, x, y, width, src, color) \ | |
207 | ((im_extt->f_i_render_color)((r), (x), (y), (width), (src), (color))) | |
208 | #define i_render_fill(r, x, y, width, src, fill) \ | |
209 | ((im_extt->f_i_render_fill)((r), (x), (y), (width), (src), (fill))) | |
210 | #define i_render_line(r, x, y, width, src, line, combine) \ | |
211 | ((im_extt->f_i_render_line)((r), (x), (y), (width), (src), (line), (combine))) | |
212 | #define i_render_linef(r, x, y, width, src, line, combine) \ | |
213 | ((im_extt->f_i_render_linef)((r), (x), (y), (width), (src), (line), (combine))) | |
214 | ||
6d5c85a2 TC |
215 | #define i_io_getc_imp (im_extt->f_i_io_getc_imp) |
216 | #define i_io_peekc_imp (im_extt->f_i_io_peekc_imp) | |
217 | #define i_io_peekn (im_extt->f_i_io_peekn) | |
218 | #define i_io_putc_imp (im_extt->f_i_io_putc_imp) | |
219 | #define i_io_read (im_extt->f_i_io_read) | |
220 | #define i_io_write (im_extt->f_i_io_write) | |
221 | #define i_io_seek (im_extt->f_i_io_seek) | |
222 | #define i_io_flush (im_extt->f_i_io_flush) | |
223 | #define i_io_close (im_extt->f_i_io_close) | |
224 | #define i_io_set_buffered (im_extt->f_i_io_set_buffered) | |
225 | #define i_io_gets (im_extt->f_i_io_gets) | |
ed60e785 TC |
226 | #define im_io_new_fd(ctx, fd) ((im_extt->f_im_io_new_fd)(ctx, fd)) |
227 | #define im_io_new_bufchain(ctx) ((im_extt->f_im_io_new_bufchain)(ctx)) | |
228 | #define im_io_new_buffer(ctx, data, len, closecb, closedata) \ | |
229 | ((im_extt->f_im_io_new_buffer)((ctx), (data), (len), (closecb), (closedata))) | |
230 | #define im_io_new_cb(ctx, p, readcb, writecb, seekcb, closecb, destroycb) \ | |
231 | ((im_extt->f_im_io_new_cb)((ctx), (p), (readcb), (writecb), (seekcb), (closecb), (destroycb))) | |
6d5c85a2 TC |
232 | #define io_slurp(ig, datap) ((im_extt->f_io_slurp)((ig), (datap))) |
233 | #define io_glue_destroy(ig) ((im_extt->f_io_glue_destroy)(ig)) | |
234 | ||
24c9233d TC |
235 | #define i_mutex_new() ((im_extt->f_i_mutex_new)()) |
236 | #define i_mutex_destroy(m) ((im_extt->f_i_mutex_destroy)(m)) | |
237 | #define i_mutex_lock(m) ((im_extt->f_i_mutex_lock)(m)) | |
238 | #define i_mutex_unlock(m) ((im_extt->f_i_mutex_unlock)(m)) | |
239 | ||
fc02e376 TC |
240 | #define im_context_slot_new(destructor) ((im_extt->f_im_context_slot_new)(destructor)) |
241 | #define im_context_slot_get(ctx, slot) ((im_extt->f_im_context_slot_get)((ctx), (slot))) | |
242 | #define im_context_slot_set(ctx, slot, value) ((im_extt->f_im_context_slot_set)((ctx), (slot), (value))) | |
243 | ||
c9786b6c TC |
244 | #define im_push_errorf (im_extt->f_im_push_errorf) |
245 | ||
35db02fc TC |
246 | #define i_img_alpha_channel(im, channel) ((im_extt->f_i_img_alpha_channel)((im), (channel))) |
247 | #define i_img_color_model(im) ((im_extt->f_i_img_color_model)((im))) | |
248 | #define i_img_color_channels(im) ((im_extt->f_i_img_color_channels)((im))) | |
249 | ||
75e155e1 TC |
250 | #define im_decode_exif(im, data, len) ((im_extt->f_im_decode_exif)((im), (data), (len))) |
251 | ||
8d14daab | 252 | #ifdef IMAGER_LOG |
c9786b6c | 253 | #ifndef IMAGER_NO_CONTEXT |
8d14daab | 254 | #define mm_log(x) { i_lhead(__FILE__,__LINE__); i_loog x; } |
c9786b6c TC |
255 | #endif |
256 | #define im_log(x) { im_lhead(aIMCTX, __FILE__,__LINE__); im_loog x; } | |
8d14daab TC |
257 | #else |
258 | #define mm_log(x) | |
259 | #endif | |
260 | ||
92bda632 | 261 | #endif |