20#include FT_INTERNAL_DEBUG_H
21#include FT_CONFIG_CONFIG_H
22#include FT_INTERNAL_CALC_H
23#include FT_INTERNAL_STREAM_H
24#include FT_INTERNAL_SFNT_H
25#include FT_TRUETYPE_TAGS_H
33#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
48#define FT_COMPONENT trace_ttgload
55#define ARGS_ARE_WORDS 0x0001
56#define ARGS_ARE_XY_VALUES 0x0002
57#define ROUND_XY_TO_GRID 0x0004
58#define WE_HAVE_A_SCALE 0x0008
60#define MORE_COMPONENTS 0x0020
61#define WE_HAVE_AN_XY_SCALE 0x0040
62#define WE_HAVE_A_2X2 0x0080
63#define WE_HAVE_INSTR 0x0100
64#define USE_MY_METRICS 0x0200
65#define OVERLAP_COMPOUND 0x0400
66#define SCALED_COMPONENT_OFFSET 0x0800
67#define UNSCALED_COMPONENT_OFFSET 0x1000
82 FT_TRACE5((
" advance width (font units): %d\n", *aw ));
83 FT_TRACE5((
" left side bearing (font units): %d\n", *lsb ));
99 if (
face->vertical_info )
102 else if (
face->os2.version != 0xFFFFU )
106 face->os2.sTypoDescender );
113 face->horizontal.Descender );
116 FT_TRACE5((
" advance height (font units): %d\n", *ah ));
117 FT_TRACE5((
" top side bearing (font units): %d\n", *tsb ));
126#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
133 FT_Short left_bearing = 0, top_bearing = 0;
134 FT_UShort advance_width = 0, advance_height = 0;
153 loader->
advance = advance_width;
157#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
161 loader->
exec->sph_tweak_flags = 0;
167 sph_set_tweaks( loader, glyph_index );
174 loader->
linear = advance_width;
181#ifdef FT_CONFIG_OPTION_INCREMENTAL
184 tt_get_metrics_incr_overrides(
TT_Loader loader,
189 FT_Short left_bearing = 0, top_bearing = 0;
190 FT_UShort advance_width = 0, advance_height = 0;
195 if (
face->root.internal->incremental_interface &&
196 face->root.internal->incremental_interface->funcs->get_glyph_metrics )
207 error =
face->root.internal->incremental_interface->funcs->get_glyph_metrics(
208 face->root.internal->incremental_interface->object,
209 glyph_index,
FALSE, &incr_metrics );
223 error =
face->root.internal->incremental_interface->funcs->get_glyph_metrics(
224 face->root.internal->incremental_interface->object,
225 glyph_index,
TRUE, &incr_metrics );
235 loader->
advance = advance_width;
242 loader->
linear = advance_width;
274 FT_TRACE4((
"Glyph %ld\n", glyph_index ));
280 loader->cursor =
stream->cursor;
281 loader->limit =
stream->limit;
314 FT_TRACE5((
" # of contours: %d\n", loader->n_contours ));
315 FT_TRACE5((
" xMin: %4d xMax: %4d\n", loader->bbox.xMin,
316 loader->bbox.xMax ));
317 FT_TRACE5((
" yMin: %4d yMax: %4d\n", loader->bbox.yMin,
318 loader->bbox.yMax ));
341 FT_Short *cont, *cont_limit, prev_cont;
352 cont_limit = cont + n_contours;
355 if ( n_contours >= 0xFFF ||
p + ( n_contours + 1 ) * 2 >
limit )
356 goto Invalid_Outline;
360 if ( n_contours > 0 )
364 goto Invalid_Outline;
366 for ( cont++; cont < cont_limit; cont++ )
369 if ( cont[0] <= prev_cont )
372 goto Invalid_Outline;
378 if ( n_contours > 0 )
380 n_points = cont[-1] + 1;
382 goto Invalid_Outline;
391 load->glyph->control_len = 0;
395 goto Invalid_Outline;
399 FT_TRACE5((
" Instructions size: %u\n", n_ins ));
401#ifdef TT_USE_BYTECODE_INTERPRETER
409 if ( (
limit -
p ) < n_ins )
411 FT_TRACE1((
"TT_Load_Simple_Glyph: instruction count mismatch\n" ));
419 tmp =
load->exec->glyphSize;
423 (
void*)&
load->exec->glyphIns,
430 load->glyph->control_len = n_ins;
431 load->glyph->control_data =
load->exec->glyphIns;
445 flag_limit =
flag + n_points;
449 while (
flag < flag_limit )
452 goto Invalid_Outline;
458 goto Invalid_Outline;
462 goto Invalid_Outline;
472 vec_limit =
vec + n_points;
477 goto Invalid_Outline;
488 goto Invalid_Outline;
491 if ( (
f & 16 ) == 0 )
494 else if ( (
f & 16 ) == 0 )
497 goto Invalid_Outline;
511 vec_limit =
vec + n_points;
524 goto Invalid_Outline;
527 if ( (
f & 32 ) == 0 )
530 else if ( (
f & 32 ) == 0 )
533 goto Invalid_Outline;
584 goto Invalid_Composite;
588 subglyph->
arg1 = subglyph->
arg2 = 0;
605 goto Invalid_Composite;
669 num_subglyphs > 1 ?
"s" :
"" ));
671#ifdef FT_DEBUG_LEVEL_TRACE
678 for (
i = 0;
i < num_subglyphs;
i++ )
680 if ( num_subglyphs > 1 )
690 FT_TRACE7((
" matching points: base=%d, component=%d\n",
714#ifdef TT_USE_BYTECODE_INTERPRETER
760 zone->n_contours =
load->outline.n_contours -
762 zone->org =
load->extra_points + start_point;
763 zone->cur =
load->outline.points + start_point;
764 zone->orus =
load->extra_points2 + start_point;
784#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
785 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
792#ifdef TT_USE_BYTECODE_INTERPRETER
799#ifdef TT_USE_BYTECODE_INTERPRETER
802 FT_TRACE1((
"TT_Hint_Glyph: too long instructions" ));
803 FT_TRACE1((
" (0x%lx byte) is truncated\n",
841#ifdef TT_USE_BYTECODE_INTERPRETER
862 current_outline.
tags[0] |=
868#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
873 loader->
exec->backward_compatibility ) )
880#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
884#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
887 if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
890 else if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
929 outline->tags[n_points + 1] = 0;
930 outline->tags[n_points + 2] = 0;
931 outline->tags[n_points + 3] = 0;
935#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
941 error = TT_Vary_Apply_Glyph_Deltas( loader->
face,
950 outline->points[n_points - 4].x;
953 outline->points[n_points - 2].x;
970#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
989#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
995 x_scale_factor = sph_test_tweak_x_scaling(
face,
1002 x_scale_factor != 1000 )
1005 (
FT_Long)x_scale_factor, 1000 );
1010 if ( x_scale_factor != 1000 && ppem > 11 )
1013 1000 - x_scale_factor ),
1042#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1052#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1098 (
short)num_base_points;
1123 l += num_base_points;
1124 if (
k >= num_base_points ||
1126 return FT_THROW( Invalid_Composite );
1147#ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
1168 int m =
a >
b ?
a :
b;
1169 int n =
c >
d ?
c :
d;
1172 if (
a - b <= 33 && a - b >= -33 )
1174 if (
c - d <= 33 && c - d >= -33 )
1281#ifdef TT_USE_BYTECODE_INTERPRETER
1295 FT_TRACE5((
" Instructions size = %d\n", n_ins ));
1299 if ( n_ins > max_ins )
1305 FT_TRACE1((
"TT_Process_Composite_Glyph:"
1306 " too many instructions (%d) for glyph with length %d\n",
1322 else if ( n_ins == 0 )
1335 start_point, start_contour );
1439#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
1444#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1447 subpixel_hinting = loader->
exec ? loader->
exec->subpixel_hinting
1453#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1456 subpixel_hinting = loader->
exec ? loader->
exec->subpixel_hinting_lean
1458 grayscale = loader->
exec ? loader->
exec->grayscale_cleartype
1463 use_aw_2 = (
FT_Bool)( subpixel_hinting && grayscale );
1470 loader->
pp3.
x = use_aw_2 ? loader->
advance / 2 : 0;
1472 loader->
pp4.
x = use_aw_2 ? loader->
advance / 2 : 0;
1522#ifdef FT_CONFIG_OPTION_INCREMENTAL
1525 FT_Bool glyph_data_loaded = 0;
1529#ifdef FT_DEBUG_LEVEL_TRACE
1530 if ( recurse_count )
1531 FT_TRACE5((
" nesting level: %d\n", recurse_count ));
1535 if ( recurse_count >
face->max_profile.maxComponentDepth )
1537 FT_TRACE1((
"load_truetype_glyph: maxComponentDepth set to %d\n",
1539 face->max_profile.maxComponentDepth = (
FT_UShort)recurse_count;
1542#ifndef FT_CONFIG_OPTION_INCREMENTAL
1544 if ( glyph_index >= (
FT_UInt)
face->root.num_glyphs )
1568#ifdef FT_CONFIG_OPTION_INCREMENTAL
1573 if (
face->root.internal->incremental_interface )
1575 error =
face->root.internal->incremental_interface->funcs->get_glyph_data(
1576 face->root.internal->incremental_interface->object,
1577 glyph_index, &glyph_data );
1581 glyph_data_loaded = 1;
1590 loader->
stream = &inc_stream;
1601#ifdef FT_CONFIG_OPTION_INCREMENTAL
1603 if ( !
face->glyf_offset &&
1604 !
face->root.internal->incremental_interface )
1606 if ( !
face->glyf_offset )
1609 FT_TRACE2((
"no `glyf' table but non-zero `loca' entry\n" ));
1614 error =
face->access_glyph_frame( loader, glyph_index,
1623 error =
face->read_glyph_header( loader );
1656#ifdef FT_CONFIG_OPTION_INCREMENTAL
1657 tt_get_metrics_incr_overrides( loader, glyph_index );
1660#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1668 char tags[4] = { 1, 1, 1, 1 };
1669 short contours[4] = { 0, 1, 2, 3 };
1690 error = TT_Vary_Apply_Glyph_Deltas( loader->
face,
1740#ifdef FT_CONFIG_OPTION_INCREMENTAL
1741 tt_get_metrics_incr_overrides( loader, glyph_index );
1752 error =
face->read_simple_glyph( loader );
1757 face->forget_glyph_frame( loader );
1796 for ( node2 =
node; node2; node2 = node2->
next )
1804 " infinite recursion detected\n" ));
1824 error =
face->read_composite_glyph( loader );
1832 face->forget_glyph_frame( loader );
1835#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1846 short* contours =
NULL;
1867 for (
i = 0;
i <
limit;
i++, subglyph++ )
1916 for (
i = 0;
i <
limit;
i++, subglyph++ )
1973 loader->
glyph->
format = FT_GLYPH_FORMAT_COMPOSITE;
1986 FT_UInt num_points = start_point;
1997 for (
n = 0;
n < num_subglyphs;
n++ )
2011 pp[0] = loader->
pp1;
2012 pp[1] = loader->
pp2;
2013 pp[2] = loader->
pp3;
2014 pp[3] = loader->
pp4;
2016 linear_hadvance = loader->
linear;
2017 linear_vadvance = loader->
vadvance;
2034 loader->
pp1 = pp[0];
2035 loader->
pp2 = pp[1];
2036 loader->
pp3 = pp[2];
2037 loader->
pp4 = pp[3];
2039 loader->
linear = linear_hadvance;
2040 loader->
vadvance = linear_vadvance;
2045 if ( num_points == num_base_points )
2062 loader->
stream = old_stream;
2071 num_points > start_point )
2089 face->forget_glyph_frame( loader );
2091#ifdef FT_CONFIG_OPTION_INCREMENTAL
2093 if ( glyph_data_loaded )
2094 face->root.internal->incremental_interface->funcs->free_glyph_data(
2095 face->root.internal->incremental_interface->object,
2109#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
2110 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2124 if ( glyph->
format != FT_GLYPH_FORMAT_COMPOSITE )
2144 ( loader->
exec && loader->
exec->backward_compatibility ) ) &&
2146 !
face->postscript.isFixedPitch &&
2154 size->metrics->x_ppem,
2157#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2168 ( ( ignore_x_mode && loader->
exec->compatible_widths ) ||
2170 SPH_OPTION_BITMAP_WIDTHS ) )
2171 glyph->
metrics.horiAdvance = *widthp * 64;
2179 glyph->
metrics.horiAdvance = *widthp * 64;
2196 if (
face->vertical_info &&
2197 face->vertical.number_Of_VMetrics > 0 )
2202 if ( loader->
pp3.
y <= loader->
pp4.
y )
2224 if (
face->os2.version != 0xFFFFU )
2226 face->os2.sTypoDescender );
2229 face->horizontal.Descender );
2234#ifdef FT_CONFIG_OPTION_INCREMENTAL
2241 incr =
face->root.internal->incremental_interface;
2280 glyph->
metrics.horiAdvance / 2;
2289#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
2295 FT_Int32 load_flags )
2331 glyph->
format = FT_GLYPH_FORMAT_BITMAP;
2355 FT_Int32 load_flags,
2361#ifdef TT_USE_BYTECODE_INTERPRETER
2364#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
2365 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2376#ifdef TT_USE_BYTECODE_INTERPRETER
2379 if (
IS_HINTED( load_flags ) && !glyf_table_only )
2383#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2384 FT_Bool subpixel_hinting_lean;
2388#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2394 FT_Bool symmetrical_smoothing;
2405 if (
size->bytecode_ready < 0 ||
size->cvt_ready < 0 )
2411 else if (
size->bytecode_ready )
2412 return size->bytecode_ready;
2413 else if (
size->cvt_ready )
2414 return size->cvt_ready;
2417 exec =
size->context;
2419 return FT_THROW( Could_Not_Find_Context );
2421#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2424 subpixel_hinting_lean =
2427 grayscale_cleartype =
2428 FT_BOOL( subpixel_hinting_lean &&
2433 exec->vertical_lcd_lean =
2434 FT_BOOL( subpixel_hinting_lean &&
2440 subpixel_hinting_lean =
FALSE;
2441 grayscale_cleartype =
FALSE;
2442 exec->vertical_lcd_lean =
FALSE;
2446#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2452 SPH_OPTION_SET_SUBPIXEL );
2454 if ( subpixel_hinting )
2456 else if ( SPH_OPTION_SET_GRAYSCALE )
2459 subpixel_hinting =
FALSE;
2465 subpixel_hinting =
FALSE;
2467 exec->ignore_x_mode = subpixel_hinting || grayscale;
2468 exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
2469 if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
2473 exec->compatible_widths = SPH_OPTION_SET_COMPATIBLE_WIDTHS;
2474 exec->symmetrical_smoothing =
TRUE;
2476 exec->vertical_lcd =
FALSE;
2477 exec->subpixel_positioned =
TRUE;
2478 exec->gray_cleartype =
FALSE;
2480 exec->compatible_widths =
2482 TT_LOAD_COMPATIBLE_WIDTHS );
2483 exec->symmetrical_smoothing =
2485 TT_LOAD_SYMMETRICAL_SMOOTHING );
2489 exec->vertical_lcd =
2491 TT_LOAD_VERTICAL_LCD );
2492 exec->subpixel_positioned =
2494 TT_LOAD_SUBPIXEL_POSITIONED );
2495 exec->gray_cleartype =
2497 TT_LOAD_GRAY_CLEARTYPE );
2505#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2507 grayscale =
FT_BOOL( !subpixel_hinting_lean &&
2519#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2525 if ( subpixel_hinting != exec->subpixel_hinting )
2527 FT_TRACE4((
"tt_loader_init: subpixel hinting change,"
2528 " re-executing `prep' table\n" ));
2530 exec->subpixel_hinting = subpixel_hinting;
2538 FT_TRACE4((
"tt_loader_init: grayscale hinting change,"
2539 " re-executing `prep' table\n" ));
2551#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2556 if ( subpixel_hinting_lean != exec->subpixel_hinting_lean )
2558 FT_TRACE4((
"tt_loader_init: subpixel hinting change,"
2559 " re-executing `prep' table\n" ));
2561 exec->subpixel_hinting_lean = subpixel_hinting_lean;
2567 if ( grayscale_cleartype != exec->grayscale_cleartype )
2569 FT_TRACE4((
"tt_loader_init: grayscale subpixel hinting change,"
2570 " re-executing `prep' table\n" ));
2572 exec->grayscale_cleartype = grayscale_cleartype;
2582 FT_TRACE4((
"tt_loader_init: grayscale hinting change,"
2583 " re-executing `prep' table\n" ));
2595 for (
i = 0;
i <
size->cvt_size;
i++ )
2610#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2615 exec->ignore_x_mode = 0;
2619 loader->
exec = exec;
2626 if ( !glyf_table_only )
2690 FT_Int32 load_flags )
2695#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
2696#define IS_DEFAULT_INSTANCE ( !( FT_IS_NAMED_INSTANCE( glyph->face ) || \
2697 FT_IS_VARIATION( glyph->face ) ) )
2699#define IS_DEFAULT_INSTANCE 1
2703 FT_TRACE1((
"TT_Load_Glyph: glyph index %d\n", glyph_index ));
2705#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
2708 if (
size->strike_index != 0xFFFFFFFFUL &&
2712 error = load_sbit_image(
size, glyph, glyph_index, load_flags );
2720 FT_Short left_bearing = 0, top_bearing = 0;
2721 FT_UShort advance_width = 0, advance_height = 0;
2729 if ( !
face->horz_metrics_size )
2741 glyph->outline.n_points = 0;
2742 glyph->outline.n_contours = 0;
2744 glyph->metrics.width = 0;
2745 glyph->metrics.height = 0;
2747 glyph->metrics.horiBearingX = left_bearing;
2748 glyph->metrics.horiBearingY = 0;
2749 glyph->metrics.horiAdvance = advance_width;
2751 glyph->metrics.vertBearingX = 0;
2752 glyph->metrics.vertBearingY = top_bearing;
2753 glyph->metrics.vertAdvance = advance_height;
2755 glyph->format = FT_GLYPH_FORMAT_BITMAP;
2758 glyph->bitmap_left = 0;
2759 glyph->bitmap_top = 0;
2778 glyph->linearHoriAdvance = loader.
linear;
2779 glyph->linearVertAdvance = loader.
vadvance;
2783 if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance )
2784 glyph->metrics.horiAdvance =
2786 size->metrics->x_scale );
2787 if ( !glyph->metrics.vertAdvance && glyph->linearVertAdvance )
2788 glyph->metrics.vertAdvance =
2790 size->metrics->y_scale );
2817 glyph->num_subglyphs = 0;
2818 glyph->outline.flags = 0;
2824 if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE )
2832 glyph->outline.
flags &= ~FT_OUTLINE_SINGLE_PASS;
2842#ifdef TT_USE_BYTECODE_INTERPRETER
2886 size->metrics->y_ppem < 24 )
2890#ifdef FT_DEBUG_LEVEL_TRACE
2892 FT_TRACE1((
" failed (error code 0x%x)\n",
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
#define TT_USE_BYTECODE_INTERPRETER
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
#define FT_LOAD_VERTICAL_LAYOUT
#define FT_LOAD_TARGET_LCD_V
#define FT_LOAD_TARGET_MODE(x)
#define FT_LOAD_SBITS_ONLY
#define FT_LOAD_NO_BITMAP
#define FT_LOAD_NO_RECURSE
#define FT_LOAD_NO_HINTING
FT_DivFix(FT_Long a, FT_Long b)
#define FT_IS_SCALABLE(face)
struct FT_GlyphSlotRec_ * FT_GlyphSlot
#define FT_IS_VARIATION(face)
#define FT_LOAD_COMPUTE_METRICS
#define FT_IS_NAMED_INSTANCE(face)
#define FT_LOAD_TARGET_LCD
#define FT_IS_TRICKY(face)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_MulFix(FT_Long a, FT_Long b)
FT_Hypot(FT_Fixed x, FT_Fixed y)
#define FT_CALLBACK_DEF(x)
#define FT_UINT_TO_POINTER(x)
#define FT_ASSERT(condition)
#define FT_TRACE5(varformat)
#define FT_TRACE7(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE1(varformat)
#define FT_TRACE4(varformat)
#define TT_INTERPRETER_VERSION_38
#define TT_INTERPRETER_VERSION_40
#define TT_INTERPRETER_VERSION_35
FT_GlyphLoader_Add(FT_GlyphLoader loader)
FT_GlyphLoader_Rewind(FT_GlyphLoader loader)
#define FT_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours)
FT_GlyphLoader_CheckSubGlyphs(FT_GlyphLoader loader, FT_UInt n_subs)
#define FT_CURVE_TAG_TOUCH_BOTH
#define FT_OUTLINE_SMART_DROPOUTS
#define FT_CURVE_TAG_HAS_SCANMODE
#define FT_OUTLINE_IGNORE_DROPOUTS
#define FT_OUTLINE_INCLUDE_STUBS
#define FT_OUTLINE_HIGH_PRECISION
FT_BEGIN_HEADER typedef signed long FT_Pos
FT_List_Finalize(FT_List list, FT_List_Destructor destroy, FT_Memory memory, void *user)
FT_BEGIN_HEADER FT_List_Find(FT_List list, void *data)
FT_List_Add(FT_List list, FT_ListNode node)
#define FT_NEW_ARRAY(ptr, count)
#define FT_SET_ERROR(expression)
#define FT_ARRAY_COPY(dest, source, count)
#define FT_MEM_COPY(dest, source, count)
#define FT_FACE_DRIVER(x)
FT_Outline_EmboldenXY(FT_Outline *outline, FT_Pos xstrength, FT_Pos ystrength)
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_Outline_Get_CBox(const FT_Outline *outline, FT_BBox *acbox)
smooth FT_Module_Constructor FT_Module_Destructor FT_Module_Requester FT_GLYPH_FORMAT_OUTLINE
#define FT_FRAME_ENTER(size)
#define FT_READ_USHORT(var)
#define FT_STREAM_SEEK(position)
#define FT_NEXT_USHORT(buffer)
#define FT_NEXT_CHAR(buffer)
#define FT_STREAM_READ(buffer, count)
FT_Stream_OpenMemory(FT_Stream stream, const FT_Byte *base, FT_ULong size)
#define FT_NEXT_SHORT(buffer)
#define FT_NEXT_BYTE(buffer)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei const GLfloat * points
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
struct task_struct * current
static char memory[1024 *256]
struct @1673::@1674 driver
SFNT_Interface * SFNT_Service
FT_Slot_Internal internal
FT_Fixed linearHoriAdvance
FT_Fixed linearVertAdvance
FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics
const FT_Incremental_FuncsRec * funcs
TT_Load_SBit_Image_Func load_sbit_image
TT_MaxProfile max_profile
FT_UShort maxSizeOfInstructions
FT_Size_Metrics * metrics
static FT_Error TT_Process_Composite_Glyph(TT_Loader loader, FT_UInt start_point, FT_UInt start_contour)
TT_Access_Glyph_Frame(TT_Loader loader, FT_UInt glyph_index, FT_ULong offset, FT_UInt byte_count)
static void tt_loader_done(TT_Loader loader)
TT_Load_Glyph(TT_Size size, TT_GlyphSlot glyph, FT_UInt glyph_index, FT_Int32 load_flags)
static void tt_prepare_zone(TT_GlyphZone zone, FT_GlyphLoad load, FT_UInt start_point, FT_UInt start_contour)
static FT_Error load_truetype_glyph(TT_Loader loader, FT_UInt glyph_index, FT_UInt recurse_count, FT_Bool header_only)
static FT_Error tt_get_metrics(TT_Loader loader, FT_UInt glyph_index)
TT_Load_Simple_Glyph(TT_Loader load)
TT_Init_Glyph_Loading(TT_Face face)
static void tt_loader_set_pp(TT_Loader loader)
static FT_Error TT_Process_Simple_Glyph(TT_Loader loader)
TT_Load_Glyph_Header(TT_Loader loader)
static FT_Error tt_loader_init(TT_Loader loader, TT_Size size, TT_GlyphSlot glyph, FT_Int32 load_flags, FT_Bool glyf_table_only)
#define UNSCALED_COMPONENT_OFFSET
static FT_Error TT_Process_Composite_Component(TT_Loader loader, FT_SubGlyph subglyph, FT_UInt start_point, FT_UInt num_base_points)
#define IS_DEFAULT_INSTANCE
static FT_ListNode ft_list_get_node_at(FT_List list, FT_UInt idx)
TT_Get_HMetrics(TT_Face face, FT_UInt idx, FT_Short *lsb, FT_UShort *aw)
#define ARGS_ARE_XY_VALUES
static FT_Error compute_glyph_metrics(TT_Loader loader, FT_UInt glyph_index)
#define WE_HAVE_AN_XY_SCALE
TT_Forget_Glyph_Frame(TT_Loader loader)
TT_Get_VMetrics(TT_Face face, FT_UInt idx, FT_Pos yMax, FT_Short *tsb, FT_UShort *ah)
static FT_Error TT_Hint_Glyph(TT_Loader loader, FT_Bool is_composite)
#define SCALED_COMPONENT_OFFSET
TT_Load_Composite_Glyph(TT_Loader loader)
const TT_GraphicsState tt_default_graphics_state
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
tt_face_get_device_metrics(TT_Face face, FT_UInt ppem, FT_UInt gindex)
tt_face_get_location(TT_Face face, FT_UInt gindex, FT_UInt *asize)
#define TT_FACE_FLAG_VAR_HADVANCE
struct TT_FaceRec_ * TT_Face
#define TT_FACE_FLAG_VAR_VADVANCE
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList