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, vlayout, utf8)
127 Imager::Font::FT2x font
141 if (i_ft2_bbox_r(font, cheight, cwidth, text, strlen(text), vlayout,
144 for (i = 0; i < 8; ++i)
145 PUSHs(sv_2mortal(newSViv(bbox[i])));
149 i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text, align, aa, vlayout, utf8)
150 Imager::Font::FT2x font
170 text = SvPV(ST(7), len);
171 RETVAL = i_ft2_text(font, im, tx, ty, cl, cheight, cwidth, text,
172 len, align, aa, vlayout, utf8);
177 i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text_sv, align, aa, vlayout, utf8)
178 Imager::Font::FT2x font
198 text = SvPV(text_sv, len);
199 RETVAL = i_ft2_cp(font, im, tx, ty, channel, cheight, cwidth, text,
200 len, align, aa, vlayout, 1);
205 ft2_transform_box(font, x0, x1, x2, x3)
206 Imager::Font::FT2x font
214 box[0] = x0; box[1] = x1; box[2] = x2; box[3] = x3;
215 ft2_transform_box(font, box);
217 PUSHs(sv_2mortal(newSViv(box[0])));
218 PUSHs(sv_2mortal(newSViv(box[1])));
219 PUSHs(sv_2mortal(newSViv(box[2])));
220 PUSHs(sv_2mortal(newSViv(box[3])));
223 i_ft2_has_chars(handle, text_sv, utf8)
224 Imager::Font::FT2x handle
238 text = SvPV(text_sv, len);
239 work = mymalloc(len);
240 count = i_ft2_has_chars(handle, text, len, utf8, work);
241 if (GIMME_V == G_ARRAY) {
243 for (i = 0; i < count; ++i) {
244 PUSHs(boolSV(work[i]));
249 PUSHs(sv_2mortal(newSVpv(work, count)));
254 i_ft2_face_name(handle)
255 Imager::Font::FT2x handle
260 len = i_ft2_face_name(handle, name, sizeof(name));
263 PUSHs(sv_2mortal(newSVpv(name, 0)));
267 i_ft2_can_face_name()
270 i_ft2_glyph_name(handle, text_sv, utf8 = 0, reliable_only = 1)
271 Imager::Font::FT2x handle
285 text = SvPV(text_sv, work_len);
290 ch = i_utf8_advance(&text, &len);
292 i_push_error(0, "invalid UTF8 character");
301 if (i_ft2_glyph_name(handle, ch, name, sizeof(name),
303 PUSHs(sv_2mortal(newSVpv(name, 0)));
311 i_ft2_can_do_glyph_names()
314 i_ft2_face_has_glyph_names(handle)
315 Imager::Font::FT2x handle
318 i_ft2_is_multiple_master(handle)
319 Imager::Font::FT2x handle
322 i_ft2_get_multiple_masters(handle)
323 Imager::Font::FT2x handle
328 if (i_ft2_get_multiple_masters(handle, &mm)) {
329 EXTEND(SP, 2+mm.num_axis);
330 PUSHs(sv_2mortal(newSViv(mm.num_axis)));
331 PUSHs(sv_2mortal(newSViv(mm.num_designs)));
332 for (i = 0; i < mm.num_axis; ++i) {
336 sv = newSVpv(mm.axis[i].name, strlen(mm.axis[i].name));
339 sv = newSViv(mm.axis[i].minimum);
342 sv = newSViv(mm.axis[i].maximum);
345 PUSHs(newRV_noinc((SV *)av));
350 i_ft2_set_mm_coords(handle, ...)
351 Imager::Font::FT2x handle
357 /* T_ARRAY handling by xsubpp seems to be busted in 5.6.1, so
358 transfer the array manually */
360 coords = mymalloc(sizeof(long) * ix_coords);
361 for (i = 0; i < ix_coords; ++i) {
362 coords[i] = (long)SvIV(ST(1+i));
364 RETVAL = i_ft2_set_mm_coords(handle, ix_coords, coords);
371 PERL_INITIALIZE_IMAGER_CALLBACKS;