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_version(runtime)
43 if (!i_ft2_version(runtime, buf, sizeof(buf))) {
51 i_ft2_setdpi(font, xdpi, ydpi)
52 Imager::Font::FT2x font
58 Imager::Font::FT2x font
62 if (i_ft2_getdpi(font, &xdpi, &ydpi)) {
64 PUSHs(sv_2mortal(newSViv(xdpi)));
65 PUSHs(sv_2mortal(newSViv(ydpi)));
69 i_ft2_sethinting(font, hinting)
70 Imager::Font::FT2x font
74 i_ft2_settransform(font, matrix)
75 Imager::Font::FT2x font
83 if (!SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV)
84 croak("i_ft2_settransform: parameter 2 must be an array ref\n");
89 for (i = 0; i < len; ++i) {
90 sv1=(*(av_fetch(av,i,0)));
91 matrix[i] = SvNV(sv1);
95 RETVAL = i_ft2_settransform(font, matrix);
100 i_ft2_bbox(font, cheight, cwidth, text_sv, utf8)
101 Imager::Font::FT2x font
107 i_img_dim bbox[BOUNDING_BOX_COUNT];
113 text = SvPV(text_sv, text_len);
118 rc = i_ft2_bbox(font, cheight, cwidth, text, text_len, bbox, utf8);
121 for (i = 0; i < rc; ++i)
122 PUSHs(sv_2mortal(newSViv(bbox[i])));
126 i_ft2_bbox_r(font, cheight, cwidth, text_sv, vlayout, utf8)
127 Imager::Font::FT2x font
139 text = SvPV(text_sv, len);
144 if (i_ft2_bbox_r(font, cheight, cwidth, text, len, vlayout,
147 for (i = 0; i < 8; ++i)
148 PUSHs(sv_2mortal(newSViv(bbox[i])));
152 i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text_sv, align, aa, vlayout, utf8)
153 Imager::Font::FT2x font
169 text = SvPV(text_sv, len);
171 if (SvUTF8(text_sv)) {
175 RETVAL = i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text,
176 len, align, aa, vlayout, utf8);
181 i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text_sv, align, aa, vlayout, utf8)
182 Imager::Font::FT2x font
198 text = SvPV(text_sv, len);
203 RETVAL = i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text,
204 len, align, aa, vlayout, utf8);
209 ft2_transform_box(font, x0, x1, x2, x3)
210 Imager::Font::FT2x font
218 box[0] = x0; box[1] = x1; box[2] = x2; box[3] = x3;
219 ft2_transform_box(font, box);
221 PUSHs(sv_2mortal(newSViv(box[0])));
222 PUSHs(sv_2mortal(newSViv(box[1])));
223 PUSHs(sv_2mortal(newSViv(box[2])));
224 PUSHs(sv_2mortal(newSViv(box[3])));
227 i_ft2_has_chars(handle, text_sv, utf8)
228 Imager::Font::FT2x handle
238 text = SvPV(text_sv, len);
243 work = mymalloc(len);
244 count = i_ft2_has_chars(handle, text, len, utf8, work);
245 if (GIMME_V == G_ARRAY) {
247 for (i = 0; i < count; ++i) {
248 PUSHs(boolSV(work[i]));
253 PUSHs(sv_2mortal(newSVpv(work, count)));
258 i_ft2_face_name(handle)
259 Imager::Font::FT2x handle
264 len = i_ft2_face_name(handle, name, sizeof(name));
267 PUSHs(sv_2mortal(newSVpv(name, 0)));
271 i_ft2_can_face_name()
274 i_ft2_glyph_name(handle, text_sv, utf8 = 0, reliable_only = 1)
275 Imager::Font::FT2x handle
287 text = SvPV(text_sv, work_len);
296 ch = i_utf8_advance(&text, &len);
298 i_push_error(0, "invalid UTF8 character");
307 if (i_ft2_glyph_name(handle, ch, name, sizeof(name),
309 ST(count) = sv_2mortal(newSVpv(name, 0));
312 ST(count) = &PL_sv_undef;
319 i_ft2_can_do_glyph_names()
322 i_ft2_face_has_glyph_names(handle)
323 Imager::Font::FT2x handle
326 i_ft2_is_multiple_master(handle)
327 Imager::Font::FT2x handle
330 i_ft2_get_multiple_masters(handle)
331 Imager::Font::FT2x handle
336 if (i_ft2_get_multiple_masters(handle, &mm)) {
337 EXTEND(SP, 2+mm.num_axis);
338 PUSHs(sv_2mortal(newSViv(mm.num_axis)));
339 PUSHs(sv_2mortal(newSViv(mm.num_designs)));
340 for (i = 0; i < mm.num_axis; ++i) {
344 sv = newSVpv(mm.axis[i].name, strlen(mm.axis[i].name));
347 sv = newSViv(mm.axis[i].minimum);
350 sv = newSViv(mm.axis[i].maximum);
353 PUSHs(newRV_noinc((SV *)av));
358 i_ft2_set_mm_coords(handle, ...)
359 Imager::Font::FT2x handle
365 /* T_ARRAY handling by xsubpp seems to be busted in 5.6.1, so
366 transfer the array manually */
368 coords = mymalloc(sizeof(long) * ix_coords);
369 for (i = 0; i < ix_coords; ++i) {
370 coords[i] = (long)SvIV(ST(1+i));
372 RETVAL = i_ft2_set_mm_coords(handle, ix_coords, coords);
379 PERL_INITIALIZE_IMAGER_CALLBACKS;