20 #include FT_INTERNAL_DEBUG_H 21 #include FT_INTERNAL_CALC_H 22 #include FT_INTERNAL_STREAM_H 23 #include FT_INTERNAL_SFNT_H 24 #include FT_TRUETYPE_TAGS_H 30 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 45 #define FT_COMPONENT trace_ttgload 52 #define ARGS_ARE_WORDS 0x0001 53 #define ARGS_ARE_XY_VALUES 0x0002 54 #define ROUND_XY_TO_GRID 0x0004 55 #define WE_HAVE_A_SCALE 0x0008 57 #define MORE_COMPONENTS 0x0020 58 #define WE_HAVE_AN_XY_SCALE 0x0040 59 #define WE_HAVE_A_2X2 0x0080 60 #define WE_HAVE_INSTR 0x0100 61 #define USE_MY_METRICS 0x0200 62 #define OVERLAP_COMPOUND 0x0400 63 #define SCALED_COMPONENT_OFFSET 0x0800 64 #define UNSCALED_COMPONENT_OFFSET 0x1000 77 ( (
SFNT_Service)face->sfnt )->get_metrics( face, 0, idx, lsb, aw );
79 FT_TRACE5((
" advance width (font units): %d\n", *aw ));
80 FT_TRACE5((
" left side bearing (font units): %d\n", *lsb ));
100 if (
face->vertical_info )
108 *ah =
face->root.units_per_EM;
113 else if (
face->os2.version != 0xFFFFU )
115 *tsb =
face->os2.sTypoAscender;
116 *ah =
face->os2.sTypoAscender -
face->os2.sTypoDescender;
120 *tsb =
face->horizontal.Ascender;
121 *ah =
face->horizontal.Ascender -
face->horizontal.Descender;
126 FT_TRACE5((
" advance height (font units): %d\n", *ah ));
127 FT_TRACE5((
" top side bearing (font units): %d\n", *tsb ));
137 FT_Short left_bearing = 0, top_bearing = 0;
138 FT_UShort advance_width = 0, advance_height = 0;
149 loader->
advance = advance_width;
153 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 155 loader->
exec->sph_tweak_flags = 0;
158 if ( loader->
exec && loader->
exec->ignore_x_mode )
159 sph_set_tweaks( loader, glyph_index );
165 loader->
linear = advance_width;
170 #ifdef FT_CONFIG_OPTION_INCREMENTAL 173 tt_get_metrics_incr_overrides(
TT_Loader loader,
178 FT_Short left_bearing = 0, top_bearing = 0;
179 FT_UShort advance_width = 0, advance_height = 0;
185 face->
root.
internal->incremental_interface->funcs->get_glyph_metrics )
196 error = face->
root.
internal->incremental_interface->funcs->get_glyph_metrics(
198 glyph_index,
FALSE, &metrics );
212 error = face->
root.
internal->incremental_interface->funcs->get_glyph_metrics(
214 glyph_index,
TRUE, &metrics );
224 loader->
advance = advance_width;
231 loader->
linear = advance_width;
256 for ( k = 0; k <
n; k++ )
257 coords[k].
x += delta_x;
260 for ( k = 0; k <
n; k++ )
261 coords[k].
y += delta_y;
286 FT_TRACE4((
"Glyph %ld\n", glyph_index ));
354 FT_Short *cont, *cont_limit, prev_cont;
364 cont = gloader->current.outline.contours;
365 cont_limit = cont + n_contours;
368 if ( n_contours >= 0xFFF ||
p + ( n_contours + 1 ) * 2 >
limit )
369 goto Invalid_Outline;
373 if ( n_contours > 0 )
377 goto Invalid_Outline;
379 for ( cont++; cont < cont_limit; cont++ )
382 if ( cont[0] <= prev_cont )
385 goto Invalid_Outline;
391 if ( n_contours > 0 )
393 n_points = cont[-1] + 1;
395 goto Invalid_Outline;
404 load->glyph->control_len = 0;
405 load->glyph->control_data = 0;
408 goto Invalid_Outline;
412 FT_TRACE5((
" Instructions size: %u\n", n_ins ));
416 FT_TRACE0((
"TT_Load_Simple_Glyph: too many instructions (%d)\n",
422 if ( (
limit -
p ) < n_ins )
424 FT_TRACE0((
"TT_Load_Simple_Glyph: instruction count mismatch\n" ));
429 #ifdef TT_USE_BYTECODE_INTERPRETER 433 load->glyph->control_len = n_ins;
434 load->glyph->control_data =
load->exec->glyphIns;
443 outline = &gloader->current.outline;
447 flag_limit =
flag + n_points;
451 while (
flag < flag_limit )
454 goto Invalid_Outline;
460 goto Invalid_Outline;
464 goto Invalid_Outline;
474 vec_limit =
vec + n_points;
479 goto Invalid_Outline;
490 goto Invalid_Outline;
493 if ( ( f & 16 ) == 0 )
496 else if ( ( f & 16 ) == 0 )
499 goto Invalid_Outline;
512 vec = gloader->current.outline.points;
513 vec_limit =
vec + n_points;
526 goto Invalid_Outline;
529 if ( ( f & 32 ) == 0 )
532 else if ( ( f & 32 ) == 0 )
535 goto Invalid_Outline;
586 goto Invalid_Composite;
588 subglyph = gloader->current.subglyphs + num_subglyphs;
590 subglyph->
arg1 = subglyph->
arg2 = 0;
607 goto Invalid_Composite;
652 gloader->current.num_subglyphs = num_subglyphs;
654 #ifdef TT_USE_BYTECODE_INTERPRETER 726 #ifdef TT_USE_BYTECODE_INTERPRETER 733 #ifdef TT_USE_BYTECODE_INTERPRETER 736 FT_TRACE1((
"TT_Hint_Glyph: too long instructions " ));
737 FT_TRACE1((
"(0x%lx byte) is truncated\n",
746 translate_array( zone->
n_points, zone->
cur, origin, 0 );
748 #ifdef TT_USE_BYTECODE_INTERPRETER 780 #ifdef TT_USE_BYTECODE_INTERPRETER 788 FT_Outline current_outline = gloader->current.outline;
802 error = TT_Run_Context( loader->
exec, debug );
807 current_outline.
tags[0] |=
822 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 823 if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
826 else if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
844 TT_Process_Simple_Glyph(
TT_Loader loader )
851 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 856 FT_Int x_scale_factor = 1000;
860 outline = &gloader->current.outline;
865 outline->
points[n_points ] = loader->
pp1;
866 outline->
points[n_points + 1] = loader->
pp2;
867 outline->
points[n_points + 2] = loader->
pp3;
868 outline->
points[n_points + 3] = loader->
pp4;
870 outline->
tags[n_points ] = 0;
871 outline->
tags[n_points + 1] = 0;
872 outline->
tags[n_points + 2] = 0;
873 outline->
tags[n_points + 3] = 0;
894 for ( i = 0; i < n_points; ++
i )
907 tt_prepare_zone( &loader->
zone, &gloader->current, 0, 0 );
913 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 916 x_scale_factor = sph_test_tweak_x_scaling( face,
923 x_scale_factor != 1000 )
929 x_scale_factor, 1000 );
935 if ( x_scale_factor != 1000 && ppem > 11 )
938 1000 - x_scale_factor ),
951 for ( ; vec <
limit; vec++ )
957 loader->
pp1 = outline->
points[n_points - 4];
958 loader->
pp2 = outline->
points[n_points - 3];
959 loader->
pp3 = outline->
points[n_points - 2];
960 loader->
pp4 = outline->
points[n_points - 1];
967 error = TT_Hint_Glyph( loader, 0 );
984 TT_Process_Composite_Component(
TT_Loader loader,
990 FT_Vector* base_vec = gloader->base.outline.points;
991 FT_UInt num_points = gloader->base.outline.n_points;
1006 for ( i = num_base_points; i < num_points; i++ )
1024 l += num_base_points;
1025 if ( k >= num_base_points ||
1027 return FT_THROW( Invalid_Composite );
1029 p1 = gloader->base.outline.points + k;
1030 p2 = gloader->base.outline.points + l;
1048 #ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
1069 int m = a > b ?
a :
b;
1070 int n = c > d ?
c : d;
1075 if ( c - d <= 33 && c - d >= -33 )
1117 translate_array( num_points - num_base_points,
1118 base_vec + num_base_points,
1136 TT_Process_Composite_Glyph(
TT_Loader loader,
1145 outline = &loader->
gloader->base.outline;
1164 #ifdef TT_USE_BYTECODE_INTERPRETER 1178 FT_TRACE5((
" Instructions size = %d\n", n_ins ));
1181 max_ins = ((
TT_Face)loader->
face)->max_profile.maxSizeOfInstructions;
1182 if ( n_ins > max_ins )
1187 FT_TRACE1((
"TT_Process_Composite_Glyph: " 1188 "too many instructions (%d) for glyph with length %d\n",
1203 else if ( n_ins == 0 )
1215 tt_prepare_zone( &loader->
zone, &loader->
gloader->base,
1216 start_point, start_contour );
1220 for ( i = start_point; i < loader->
zone.
n_points; i++ )
1225 return TT_Hint_Glyph( loader, 1 );
1232 #define TT_LOADER_SET_PP( loader ) \ 1234 (loader)->pp1.x = (loader)->bbox.xMin - (loader)->left_bearing; \ 1235 (loader)->pp1.y = 0; \ 1236 (loader)->pp2.x = (loader)->pp1.x + (loader)->advance; \ 1237 (loader)->pp2.y = 0; \ 1238 (loader)->pp3.x = 0; \ 1239 (loader)->pp3.y = (loader)->top_bearing + (loader)->bbox.yMax; \ 1240 (loader)->pp4.x = 0; \ 1241 (loader)->pp4.y = (loader)->pp3.y - (loader)->vadvance; \ 1274 FT_Bool glyph_data_loaded = 0;
1280 if ( recurse_count > 1 &&
1283 error =
FT_THROW( Invalid_Composite );
1290 error =
FT_THROW( Invalid_Glyph_Index );
1298 x_scale = ((
TT_Size)loader->
size)->metrics.x_scale;
1299 y_scale = ((
TT_Size)loader->
size)->metrics.y_scale;
1307 tt_get_metrics( loader, glyph_index );
1313 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1320 error = face->
root.
internal->incremental_interface->funcs->get_glyph_data(
1322 glyph_index, &glyph_data );
1326 glyph_data_loaded = 1;
1328 loader->
byte_len = glyph_data.length;
1330 FT_MEM_ZERO( &inc_stream,
sizeof ( inc_stream ) );
1332 glyph_data.pointer, glyph_data.length );
1334 loader->
stream = &inc_stream;
1345 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1353 FT_TRACE2((
"no `glyf' table but non-zero `loca' entry\n" ));
1368 if ( error || header_only )
1386 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1387 tt_get_metrics_incr_overrides( loader, glyph_index );
1390 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 1399 glyph_index, &deltas, 4 );
1403 loader->
pp1.
x += deltas[0].x; loader->
pp1.
y += deltas[0].y;
1404 loader->
pp2.
x += deltas[1].x; loader->
pp2.
y += deltas[1].y;
1405 loader->
pp3.
x += deltas[2].x; loader->
pp3.
y += deltas[2].y;
1406 loader->
pp4.
x += deltas[3].x; loader->
pp4.
y += deltas[3].y;
1429 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1430 tt_get_metrics_incr_overrides( loader, glyph_index );
1449 error = TT_Process_Simple_Glyph( loader );
1468 start_point = gloader->base.outline.n_points;
1469 start_contour = gloader->base.outline.n_contours;
1483 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT 1485 if ( face->doblend )
1499 gloader->current.num_subglyphs + 4 )) != 0 )
1502 subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
1503 limit = gloader->current.num_subglyphs;
1505 for ( i = 0; i <
limit; ++
i, ++subglyph )
1517 loader->
pp1.
x += deltas[i + 0].x; loader->
pp1.
y += deltas[i + 0].y;
1518 loader->
pp2.
x += deltas[i + 1].x; loader->
pp2.
y += deltas[i + 1].y;
1519 loader->
pp3.
x += deltas[i + 2].x; loader->
pp3.
y += deltas[i + 2].y;
1520 loader->
pp4.
x += deltas[i + 3].x; loader->
pp4.
y += deltas[i + 3].y;
1541 loader->
glyph->
format = FT_GLYPH_FORMAT_COMPOSITE;
1554 FT_UInt num_points = start_point;
1555 FT_UInt num_subglyphs = gloader->current.num_subglyphs;
1556 FT_UInt num_base_subgs = gloader->base.num_subglyphs;
1565 for ( n = 0; n < num_subglyphs; n++ )
1574 subglyph = gloader->base.subglyphs + num_base_subgs +
n;
1576 pp[0] = loader->
pp1;
1577 pp[1] = loader->
pp2;
1578 pp[2] = loader->
pp3;
1579 pp[3] = loader->
pp4;
1581 num_base_points = gloader->base.outline.n_points;
1583 error = load_truetype_glyph( loader, subglyph->
index,
1584 recurse_count + 1,
FALSE );
1589 subglyph = gloader->base.subglyphs + num_base_subgs +
n;
1593 loader->
pp1 = pp[0];
1594 loader->
pp2 = pp[1];
1595 loader->
pp3 = pp[2];
1596 loader->
pp4 = pp[3];
1599 num_points = gloader->base.outline.n_points;
1601 if ( num_points == num_base_points )
1610 TT_Process_Composite_Component( loader, subglyph, start_point,
1614 loader->
stream = old_stream;
1627 num_points > start_point )
1628 TT_Process_Composite_Glyph( loader, start_point, start_contour );
1635 error =
FT_THROW( Invalid_Outline );
1648 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1650 if ( glyph_data_loaded )
1651 face->
root.
internal->incremental_interface->funcs->free_glyph_data(
1662 compute_glyph_metrics(
TT_Loader loader,
1676 if ( glyph->format != FT_GLYPH_FORMAT_COMPOSITE )
1679 bbox = loader->
bbox;
1683 glyph->linearHoriAdvance = loader->
linear;
1685 glyph->metrics.horiBearingX = bbox.
xMin;
1686 glyph->metrics.horiBearingY = bbox.
yMax;
1687 glyph->metrics.horiAdvance = loader->
pp2.
x - loader->
pp1.
x;
1695 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1707 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1709 ( ( ignore_x_mode && loader->
exec->compatible_widths ) ||
1711 SPH_OPTION_BITMAP_WIDTHS ) )
1715 glyph->metrics.horiAdvance = *widthp << 6;
1719 glyph->metrics.width = bbox.
xMax - bbox.
xMin;
1720 glyph->metrics.height = bbox.
yMax - bbox.
yMin;
1737 if ( loader->
pp3.
y <= loader->
pp4.
y )
1765 top = ( advance -
height ) / 2;
1768 #ifdef FT_CONFIG_OPTION_INCREMENTAL 1801 glyph->linearVertAdvance = advance;
1807 advance =
FT_MulFix( advance, y_scale );
1813 glyph->metrics.vertBearingX = glyph->metrics.horiBearingX -
1814 glyph->metrics.horiAdvance / 2;
1815 glyph->metrics.vertBearingY =
top;
1816 glyph->metrics.vertAdvance = advance;
1823 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 1865 glyph->
format = FT_GLYPH_FORMAT_BITMAP;
1894 #ifdef TT_USE_BYTECODE_INTERPRETER 1904 #ifdef TT_USE_BYTECODE_INTERPRETER 1907 if (
IS_HINTED( load_flags ) && !glyf_table_only )
1911 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1916 FT_Bool symmetrical_smoothing;
1923 if ( !size->cvt_ready )
1925 FT_Error error = tt_size_ready_bytecode( size, pedantic );
1933 exec = size->debug ? size->context
1936 return FT_THROW( Could_Not_Find_Context );
1938 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1942 SPH_OPTION_SET_SUBPIXEL );
1944 if ( subpixel_hinting )
1945 grayscale = grayscale_hinting =
FALSE;
1946 else if ( SPH_OPTION_SET_GRAYSCALE )
1948 grayscale = grayscale_hinting =
TRUE;
1949 subpixel_hinting =
FALSE;
1952 grayscale = grayscale_hinting =
FALSE;
1955 subpixel_hinting = grayscale_hinting =
FALSE;
1957 exec->ignore_x_mode = subpixel_hinting || grayscale_hinting;
1958 exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
1959 if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
1960 exec->rasterizer_version = 35;
1963 exec->compatible_widths = SPH_OPTION_SET_COMPATIBLE_WIDTHS;
1964 exec->symmetrical_smoothing =
FALSE;
1966 exec->subpixel_positioned =
TRUE;
1968 exec->compatible_widths =
1970 TT_LOAD_COMPATIBLE_WIDTHS );
1971 exec->symmetrical_smoothing =
1973 TT_LOAD_SYMMETRICAL_SMOOTHING );
1977 exec->subpixel_positioned =
1979 TT_LOAD_SUBPIXEL_POSITIONED );
1989 TT_Load_Context( exec, face, size );
1991 #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 1995 if ( subpixel_hinting != exec->subpixel_hinting )
2000 FT_TRACE4((
"tt_loader_init: subpixel hinting change," 2001 " re-executing `prep' table\n" ));
2003 exec->subpixel_hinting = subpixel_hinting;
2005 for ( i = 0; i < size->cvt_size; i++ )
2007 tt_size_run_prep( size, pedantic );
2012 if ( grayscale != exec->grayscale_hinting )
2017 FT_TRACE4((
"tt_loader_init: grayscale hinting change," 2018 " re-executing `prep' table\n" ));
2020 exec->grayscale_hinting = grayscale_hinting;
2022 for ( i = 0; i < size->cvt_size; i++ )
2024 tt_size_run_prep( size, pedantic );
2036 FT_TRACE4((
"tt_loader_init: grayscale change," 2037 " re-executing `prep' table\n" ));
2041 for ( i = 0; i < size->cvt_size; i++ )
2043 tt_size_run_prep( size, pedantic );
2057 loader->
exec = exec;
2067 #ifdef FT_CONFIG_OPTION_INCREMENTAL 2079 if (
FT_ERR_EQ( error, Table_Missing ) )
2083 FT_ERROR((
"tt_loader_init: could not access glyph table\n" ));
2091 if ( !glyf_table_only )
2150 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 2156 if ( size->strike_index != 0xFFFFFFFFUL &&
2159 error = load_sbit_image( size, glyph, glyph_index, load_flags );
2165 (
void)tt_loader_init( &loader, size, glyph, load_flags,
TRUE );
2166 (
void)load_truetype_glyph( &loader, glyph_index, 0,
TRUE );
2167 glyph->linearHoriAdvance = loader.
linear;
2180 return FT_THROW( Invalid_Size_Handle );
2183 return FT_THROW( Invalid_Argument );
2185 error = tt_loader_init( &loader, size, glyph, load_flags,
FALSE );
2190 glyph->num_subglyphs = 0;
2191 glyph->outline.flags = 0;
2194 error = load_truetype_glyph( &loader, glyph_index, 0,
FALSE );
2197 if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE )
2199 glyph->num_subglyphs = loader.
gloader->base.num_subglyphs;
2200 glyph->subglyphs = loader.
gloader->base.subglyphs;
2204 glyph->outline = loader.
gloader->base.outline;
2215 #ifdef TT_USE_BYTECODE_INTERPRETER 2249 compute_glyph_metrics( &loader, glyph_index );
2256 if ( !( load_flags & FT_LOAD_NO_SCALE ) &&
2257 size->root.metrics.y_ppem < 24 )
TT_Loader_EndGlyphFunc forget_glyph_frame
#define UNSCALED_COMPONENT_OFFSET
const TT_GraphicsState tt_default_graphics_state
TT_Load_Glyph_Header(TT_Loader loader)
GLint GLint GLsizei GLsizei height
#define FT_OUTLINE_SINGLE_PASS
#define FT_LOAD_VERTICAL_LAYOUT
FT_DivFix(FT_Long a, FT_Long b)
for(n=1;n< outline->n_points;n++)
SFNT_Interface * SFNT_Service
#define FT_LOAD_SBITS_ONLY
FT_BEGIN_HEADER typedef signed long FT_Pos
GLboolean GLboolean GLboolean GLboolean a
#define FT_MEM_ZERO(dest, count)
GLint GLint GLint GLint GLint GLint y
#define FT_OUTLINE_IGNORE_DROPOUTS
#define FT_ARRAY_COPY(dest, source, count)
FT_UShort maxComponentDepth
#define SCALED_COMPONENT_OFFSET
#define FT_CURVE_TAG_TOUCH_BOTH
#define FT_LOAD_NO_HINTING
TT_Loader_StartGlyphFunc access_glyph_frame
return FT_THROW(Missing_Property)
#define FT_NEXT_BYTE(buffer)
#define FT_LOAD_NO_RECURSE
TT_Init_Glyph_Loading(TT_Face face)
GLint GLint GLint GLint GLint x
FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics
#define TT_CONFIG_OPTION_GX_VAR_SUPPORT
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
#define FT_READ_USHORT(var)
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
tt_face_get_device_metrics(TT_Face face, FT_UInt ppem, FT_UInt gindex)
#define ARGS_ARE_XY_VALUES
GLboolean GLboolean GLboolean b
TT_Loader_GotoTableFunc goto_table
#define FT_FACE_DRIVER(x)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
FT_Face_Internal internal
#define FT_TRACE1(varformat)
GLenum GLuint GLint GLenum face
#define FT_CURVE_TAG_HAS_SCANMODE
typedefFT_BEGIN_HEADER struct FT_GlyphLoaderRec_ * FT_GlyphLoader
#define FT_ERROR(varformat)
#define FT_ASSERT(condition)
#define FT_CONFIG_OPTION_INCREMENTAL
#define FT_TRACE4(varformat)
TT_Forget_Glyph_Frame(TT_Loader loader)
TT_Load_SBit_Image_Func load_sbit_image
FT_Outline_Get_CBox(const FT_Outline *outline, FT_BBox *acbox)
FT_GlyphLoader_Add(FT_GlyphLoader loader)
TT_Vary_Get_Glyph_Deltas(TT_Face face, FT_UInt glyph_index, FT_Vector **deltas, FT_UInt n_points)
TT_Load_Composite_Glyph(TT_Loader loader)
TT_Get_VMetrics(TT_Face face, FT_UInt idx, FT_Short *tsb, FT_UShort *ah)
struct TT_FaceRec_ * TT_Face
#define WE_HAVE_AN_XY_SCALE
TT_MaxProfile max_profile
FT_GlyphLoader_CheckSubGlyphs(FT_GlyphLoader loader, FT_UInt n_subs)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
TT_Get_HMetrics(TT_Face face, FT_UInt idx, FT_Short *lsb, FT_UShort *aw)
#define FT_OUTLINE_HIGH_PRECISION
TT_Load_Simple_Glyph(TT_Loader load)
#define FT_IS_TRICKY(face)
TT_Loader_ReadGlyphFunc read_composite_glyph
#define FT_TRACE2(varformat)
FT_UShort maxSizeOfInstructions
struct FT_FaceRec_ * FT_Face
#define FT_CALLBACK_DEF(x)
TT_Size_Metrics ttmetrics
FT_Outline_EmboldenXY(FT_Outline *outline, FT_Pos xstrength, FT_Pos ystrength)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
const FT_Incremental_FuncsRec * funcs
#define FT_OUTLINE_INCLUDE_STUBS
#define FT_STREAM_SEEK(position)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_NEXT_USHORT(buffer)
if(!abbox) return FT_THROW(Invalid_Argument)
GLdouble GLdouble GLdouble GLdouble top
FT_Vector_Transform(FT_Vector *vec, const FT_Matrix *matrix)
local void * load(const char *name, size_t *len)
struct FT_SizeRec_ * FT_Size
struct FT_GlyphSlotRec_ * FT_GlyphSlot
TT_Loader_ReadGlyphFunc read_simple_glyph
FT_GlyphLoader_Rewind(FT_GlyphLoader loader)
#define TT_LOADER_SET_PP(loader)
FT_Slot_Internal internal
#define FT_TRACE5(varformat)
#define FT_OUTLINE_SMART_DROPOUTS
#define TT_USE_BYTECODE_INTERPRETER
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Stream_OpenMemory(FT_Stream stream, const FT_Byte *base, FT_ULong size)
GLuint GLuint GLsizei count
#define FT_FRAME_ENTER(size)
FT_TRACE0(("cff_property_set: missing property `%s'\, property_name))
#define FT_MEM_COPY(dest, source, count)
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
#define FT_NEXT_SHORT(buffer)
#define FT_LOAD_NO_BITMAP
TT_Access_Glyph_Frame(TT_Loader loader, FT_UInt glyph_index, FT_ULong offset, FT_UInt byte_count)
png_infop png_uint_32 flag
TT_Load_Glyph(TT_Size size, TT_GlyphSlot glyph, FT_UInt glyph_index, FT_Int32 load_flags)
#define FT_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours)
FT_Vector * extra_points2
TT_Loader_ReadGlyphFunc read_glyph_header
#define FT_IS_SCALABLE(face)
FT_Hypot(FT_Fixed x, FT_Fixed y)
#define FT_STREAM_READ(buffer, count)
#define FT_NEXT_CHAR(buffer)
struct TT_SizeRec_ * TT_Size
FT_Module_Constructor FT_GLYPH_FORMAT_OUTLINE
tt_face_get_location(TT_Face face, FT_UInt gindex, FT_UInt *asize)
#define FT_LOAD_TARGET_MODE(x)