1 #define PERL_NO_GET_CONTEXT
12 DEFINE_IMAGER_CALLBACKS;
14 MODULE = Imager::Font::FT2 PACKAGE = Imager::Font::FT2x PREFIX=FT2_
16 #define FT2_DESTROY(font) i_ft2_destroy(font)
20 Imager::Font::FT2x font
30 MODULE = Imager::Font::FT2 PACKAGE = Imager::Font::FT2
33 i_ft2_new(name, index)
38 i_ft2_setdpi(font, xdpi, ydpi)
39 Imager::Font::FT2x font
45 Imager::Font::FT2x font
49 if (i_ft2_getdpi(font, &xdpi, &ydpi)) {
51 PUSHs(sv_2mortal(newSViv(xdpi)));
52 PUSHs(sv_2mortal(newSViv(ydpi)));
56 i_ft2_sethinting(font, hinting)
57 Imager::Font::FT2x font
61 i_ft2_settransform(font, matrix)
62 Imager::Font::FT2x font
70 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV)
71 croak("i_ft2_settransform: parameter 2 must be an array ref\n");
76 for (i = 0; i < len; ++i) {
77 sv1=(*(av_fetch(av,i,0)));
78 matrix[i] = SvNV(sv1);
82 RETVAL = i_ft2_settransform(font, matrix);
87 i_ft2_bbox(font, cheight, cwidth, text_sv, utf8)
88 Imager::Font::FT2x font
94 i_img_dim bbox[BOUNDING_BOX_COUNT];
100 text = SvPV(text_sv, text_len);
105 rc = i_ft2_bbox(font, cheight, cwidth, text, text_len, bbox, utf8);
108 for (i = 0; i < rc; ++i)
109 PUSHs(sv_2mortal(newSViv(bbox[i])));
113 i_ft2_bbox_r(font, cheight, cwidth, text, vlayout, utf8)
114 Imager::Font::FT2x font
128 if (i_ft2_bbox_r(font, cheight, cwidth, text, strlen(text), vlayout,
131 for (i = 0; i < 8; ++i)
132 PUSHs(sv_2mortal(newSViv(bbox[i])));
136 i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text, align, aa, vlayout, utf8)
137 Imager::Font::FT2x font
157 text = SvPV(ST(7), len);
158 RETVAL = i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text,
159 len, align, aa, vlayout, utf8);
164 i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text_sv, align, aa, vlayout, utf8)
165 Imager::Font::FT2x font
185 text = SvPV(text_sv, len);
186 RETVAL = i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text,
187 len, align, aa, vlayout, 1);
192 ft2_transform_box(font, x0, x1, x2, x3)
193 Imager::Font::FT2x font
201 box[0] = x0; box[1] = x1; box[2] = x2; box[3] = x3;
202 ft2_transform_box(font, box);
204 PUSHs(sv_2mortal(newSViv(box[0])));
205 PUSHs(sv_2mortal(newSViv(box[1])));
206 PUSHs(sv_2mortal(newSViv(box[2])));
207 PUSHs(sv_2mortal(newSViv(box[3])));
210 i_ft2_has_chars(handle, text_sv, utf8)
211 Imager::Font::FT2x handle
225 text = SvPV(text_sv, len);
226 work = mymalloc(len);
227 count = i_ft2_has_chars(handle, text, len, utf8, work);
228 if (GIMME_V == G_ARRAY) {
230 for (i = 0; i < count; ++i) {
231 PUSHs(sv_2mortal(newSViv(work[i])));
236 PUSHs(sv_2mortal(newSVpv(work, count)));
241 i_ft2_face_name(handle)
242 Imager::Font::FT2x handle
247 len = i_ft2_face_name(handle, name, sizeof(name));
250 PUSHs(sv_2mortal(newSVpv(name, 0)));
254 i_ft2_can_face_name()
257 i_ft2_glyph_name(handle, text_sv, utf8 = 0, reliable_only = 1)
258 Imager::Font::FT2x handle
272 text = SvPV(text_sv, work_len);
277 ch = i_utf8_advance(&text, &len);
279 i_push_error(0, "invalid UTF8 character");
288 if (i_ft2_glyph_name(handle, ch, name, sizeof(name),
290 PUSHs(sv_2mortal(newSVpv(name, 0)));
298 i_ft2_can_do_glyph_names()
301 i_ft2_face_has_glyph_names(handle)
302 Imager::Font::FT2x handle
305 i_ft2_is_multiple_master(handle)
306 Imager::Font::FT2x handle
309 i_ft2_get_multiple_masters(handle)
310 Imager::Font::FT2x handle
315 if (i_ft2_get_multiple_masters(handle, &mm)) {
316 EXTEND(SP, 2+mm.num_axis);
317 PUSHs(sv_2mortal(newSViv(mm.num_axis)));
318 PUSHs(sv_2mortal(newSViv(mm.num_designs)));
319 for (i = 0; i < mm.num_axis; ++i) {
323 sv = newSVpv(mm.axis[i].name, strlen(mm.axis[i].name));
326 sv = newSViv(mm.axis[i].minimum);
329 sv = newSViv(mm.axis[i].maximum);
332 PUSHs(newRV_noinc((SV *)av));
337 i_ft2_set_mm_coords(handle, ...)
338 Imager::Font::FT2x handle
344 /* T_ARRAY handling by xsubpp seems to be busted in 5.6.1, so
345 transfer the array manually */
347 coords = mymalloc(sizeof(long) * ix_coords);
348 for (i = 0; i < ix_coords; ++i) {
349 coords[i] = (long)SvIV(ST(1+i));
351 RETVAL = i_ft2_set_mm_coords(handle, ix_coords, coords);
358 PERL_INITIALIZE_IMAGER_CALLBACKS;