34 #ifdef FT_DEBUG_AUTOFIT
35 _af_debug_hints = &loader->hints;
55 if ( loader->globals ==
NULL )
62 face->autohint.finalizer =
79 loader->globals =
NULL;
81 #ifdef FT_DEBUG_AUTOFIT
82 _af_debug_hints =
NULL;
85 loader->gloader =
NULL;
113 loader->transformed =
internal->glyph_transformed;
114 if ( loader->transformed )
119 loader->trans_matrix =
internal->glyph_matrix;
120 loader->trans_delta =
internal->glyph_delta;
122 inverse = loader->trans_matrix;
135 if ( loader->transformed )
137 loader->trans_delta.x,
138 loader->trans_delta.y );
165 loader->pp1.x = hints->
x_delta;
166 loader->pp1.y = hints->
y_delta;
169 loader->pp2.y = hints->
y_delta;
177 if ( metrics->
clazz->script_hints_apply )
178 metrics->
clazz->script_hints_apply( hints,
179 &gloader->current.outline,
186 FT_Pos old_rsb, old_lsb, new_lsb;
196 old_rsb = loader->pp2.x - edge2->
opos;
197 old_lsb = edge1->
opos;
198 new_lsb = edge1->
pos;
203 pp1x_uh = new_lsb - old_lsb;
204 pp2x_uh = edge2->
pos + old_rsb;
218 if ( loader->pp1.x >= new_lsb && old_lsb > 0 )
221 if ( loader->pp2.x <= edge2->
pos && old_rsb > 0 )
224 slot->
lsb_delta = loader->pp1.x - pp1x_uh;
225 slot->
rsb_delta = loader->pp2.x - pp2x_uh;
229 FT_Pos pp1x = loader->pp1.x;
230 FT_Pos pp2x = loader->pp2.x;
242 FT_Pos pp1x = loader->pp1.x;
243 FT_Pos pp2x = loader->pp2.x;
257 case FT_GLYPH_FORMAT_COMPOSITE:
260 FT_UInt num_base_subgs, start_point;
264 start_point = gloader->base.outline.n_points;
275 gloader->current.num_subglyphs = num_subglyphs;
276 num_base_subgs = gloader->base.num_subglyphs;
279 for ( nn = 0; nn < num_subglyphs; nn++ )
283 FT_UInt num_points, num_new_points, num_base_points;
289 subglyph = gloader->base.subglyphs + num_base_subgs + nn;
294 num_base_points = gloader->base.outline.n_points;
297 load_flags, depth + 1 );
302 subglyph = gloader->base.subglyphs + num_base_subgs + nn;
315 num_points = gloader->base.outline.n_points;
316 num_new_points = num_points - num_base_points;
324 FT_Vector* cur = gloader->base.outline.points +
329 for ( ; cur <
limit; cur++ )
343 if ( start_point + k >= num_base_points ||
346 error = AF_Err_Invalid_Composite;
350 l += num_base_points;
354 p1 = gloader->base.outline.points + start_point +
k;
355 p2 = gloader->base.outline.points + start_point +
l;
373 dummy.
points += num_base_points;
374 dummy.
n_points = (short)num_new_points;
384 error = AF_Err_Unimplemented_Feature;
400 if ( loader->transformed )
431 slot->
metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
452 if ( slot->
metrics.horiAdvance )
453 slot->
metrics.horiAdvance = loader->pp2.x - loader->pp1.x;
472 slot->
outline.
points =
internal->loader->base.outline.points;
473 slot->
outline.
tags =
internal->loader->base.outline.tags;
490 FT_Int32 load_flags )
498 return AF_Err_Invalid_Argument;
518 #ifdef FT_OPTION_AUTOFIT2
520 if ( load_flags & ( 1UL << 20 ) )
530 if ( metrics->
clazz->script_metrics_scale )
531 metrics->
clazz->script_metrics_scale( metrics, &scaler );
538 if ( metrics->
clazz->script_hints_init )
540 error = metrics->
clazz->script_hints_init( &loader->hints,
af_glyph_hints_done(AF_GlyphHints hints)
FT_BEGIN_HEADER typedef signed long FT_Pos
af_loader_load_glyph(AF_Loader loader, FT_Face face, FT_UInt gindex, FT_Int32 load_flags)
#define FT_SUBGLYPH_FLAG_SCALE
FT_Bool digits_have_same_width
#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES
#define FT_SUBGLYPH_FLAG_USE_MY_METRICS
#define FT_ARRAY_COPY(dest, source, count)
af_glyph_hints_init(AF_GlyphHints hints, FT_Memory memory)
FT_BEGIN_HEADER struct AF_LoaderRec_ * AF_Loader
GLuint GLsizei GLsizei GLfloat * metrics
FT_Fixed linearHoriAdvance
FT_GlyphLoader_New(FT_Memory memory, FT_GlyphLoader *aloader)
FT_GlyphLoader_CopyPoints(FT_GlyphLoader target, FT_GlyphLoader source)
static FT_Error af_loader_load_g(AF_Loader loader, AF_Scaler scaler, FT_UInt glyph_index, FT_Int32 load_flags, FT_UInt depth)
#define FT_SUBGLYPH_FLAG_2X2
typedefFT_BEGIN_HEADER struct FT_GlyphLoaderRec_ * FT_GlyphLoader
af_face_globals_new(FT_Face face, AF_FaceGlobals *aglobals)
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
FT_Outline_Get_CBox(const FT_Outline *outline, FT_BBox *acbox)
FT_GlyphLoader_Add(FT_GlyphLoader loader)
typedefFT_BEGIN_HEADER struct AF_FaceGlobalsRec_ * AF_FaceGlobals
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_GlyphLoader_Done(FT_GlyphLoader loader)
#define FT_IS_FIXED_WIDTH(face)
FT_GlyphLoader_CheckSubGlyphs(FT_GlyphLoader loader, FT_UInt n_subs)
#define FT_SUBGLYPH_FLAG_XY_SCALE
af_loader_init(AF_Loader loader, FT_Memory memory)
GLint GLenum GLsizei GLsizei GLsizei depth
af_face_globals_free(AF_FaceGlobals globals)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
EGLSurface EGLint EGLint y
FT_MulFix(FT_Long a, FT_Long b)
af_loader_reset(AF_Loader loader, FT_Face face)
FT_Vector_Transform(FT_Vector *vec, const FT_Matrix *matrix)
af_face_globals_is_digit(AF_FaceGlobals globals, FT_UInt gindex)
FT_GlyphLoader_Rewind(FT_GlyphLoader loader)
FT_Slot_Internal internal
FT_Fixed linearVertAdvance
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
void(* FT_Generic_Finalizer)(void *object)
AF_AxisHintsRec axis[AF_DIMENSION_MAX]
FT_Matrix_Invert(FT_Matrix *matrix)
#define AF_HINTS_DO_ADVANCE(h)
FT_Render_Mode render_mode
af_loader_done(AF_Loader loader)
#define FT_LOAD_IGNORE_TRANSFORM
#define FT_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours)
FT_Module_Constructor FT_GLYPH_FORMAT_OUTLINE
af_face_globals_get_metrics(AF_FaceGlobals globals, FT_UInt gindex, FT_UInt options, AF_ScriptMetrics *ametrics)
#define FT_LOAD_TARGET_MODE(x)