本文整理汇总了C++中TT_Face::interpreter方法的典型用法代码示例。如果您正苦于以下问题:C++ TT_Face::interpreter方法的具体用法?C++ TT_Face::interpreter怎么用?C++ TT_Face::interpreter使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TT_Face
的用法示例。
在下文中一共展示了TT_Face::interpreter方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
tt_size_run_prep( TT_Size size )
{
TT_Face face = (TT_Face)size->root.face;
TT_ExecContext exec;
FT_Error error;
/* debugging instances have their own context */
if ( size->debug )
exec = size->context;
else
exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context;
if ( !exec )
return TT_Err_Could_Not_Find_Context;
TT_Load_Context( exec, face, size );
exec->callTop = 0;
exec->top = 0;
exec->instruction_trap = FALSE;
TT_Set_CodeRange( exec,
tt_coderange_cvt,
face->cvt_program,
face->cvt_program_size );
TT_Clear_CodeRange( exec, tt_coderange_glyph );
if ( face->cvt_program_size > 0 )
{
error = TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
if ( !error && !size->debug )
error = face->interpreter( exec );
}
else
error = TT_Err_Ok;
/* save as default graphics state */
size->GS = exec->GS;
TT_Save_Context( exec, size );
return error;
}
示例2: TT_Reset_Size
//.........这里部分代码省略.........
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
{
TT_ExecContext exec;
FT_UInt i, j;
/* Scale the cvt values to the new ppem. */
/* We use by default the y ppem to scale the CVT. */
for(i = 0; i < size->cvt_size; i++)
size->cvt[i] = FT_MulFix(face->cvt[i], size->ttmetrics.scale);
/* All twilight points are originally zero */
for(j = 0; j < size->twilight.n_points; j++)
{
size->twilight.org[j].x = 0;
size->twilight.org[j].y = 0;
size->twilight.cur[j].x = 0;
size->twilight.cur[j].y = 0;
}
/* clear storage area */
for(i = 0; i < size->storage_size; i++)
size->storage[i] = 0;
size->GS = tt_default_graphics_state;
/* get execution context and run prep program */
if(size->debug)
{
exec = size->context;
}
else
{
exec = TT_New_Context(face);
}
/* debugging instances have their own context */
if(!exec)
{
return TT_Err_Could_Not_Find_Context;
}
TT_Load_Context(exec, face, size);
TT_Set_CodeRange(exec,
tt_coderange_cvt,
face->cvt_program,
face->cvt_program_size);
TT_Clear_CodeRange(exec, tt_coderange_glyph);
exec->instruction_trap = FALSE;
exec->top = 0;
exec->callTop = 0;
if(face->cvt_program_size > 0)
{
error = TT_Goto_CodeRange(exec, tt_coderange_cvt, 0);
if(error)
{
goto End;
}
if(!size->debug)
{
error = face->interpreter(exec);
}
}
else
{
error = TT_Err_Ok;
}
size->GS = exec->GS;
/* save default graphics state */
End:
TT_Save_Context(exec, size);
if(!size->debug)
{
TT_Done_Context(exec);
}
/* debugging instances keep their context */
}
#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
if(!error)
{
size->ttmetrics.valid = TRUE;
}
return error;
}
示例3: TT_Init_Size
LOCAL_DEF
FT_Error TT_Init_Size(TT_Size size)
{
FT_Error error = TT_Err_Ok;
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
TT_Face face = (TT_Face)size->root.face;
FT_Memory memory = face->root.memory;
FT_Int i;
TT_ExecContext exec;
FT_UShort n_twilight;
TT_MaxProfile *maxp = &face->max_profile;
size->ttmetrics.valid = FALSE;
size->max_function_defs = maxp->maxFunctionDefs;
size->max_instruction_defs = maxp->maxInstructionDefs;
size->num_function_defs = 0;
size->num_instruction_defs = 0;
size->max_func = 0;
size->max_ins = 0;
size->cvt_size = face->cvt_size;
size->storage_size = maxp->maxStorage;
/* Set default metrics */
{
FT_Size_Metrics *metrics = &size->root.metrics;
TT_Size_Metrics *metrics2 = &size->ttmetrics;
metrics->x_ppem = 0;
metrics->y_ppem = 0;
metrics2->rotated = FALSE;
metrics2->stretched = FALSE;
/* set default compensation (all 0) */
for(i = 0; i < 4; i++)
metrics2->compensations[i] = 0;
}
/* allocate function defs, instruction defs, cvt, and storage area */
if(ALLOC_ARRAY(size->function_defs,
size->max_function_defs,
TT_DefRecord) ||
ALLOC_ARRAY(size->instruction_defs,
size->max_instruction_defs,
TT_DefRecord) ||
ALLOC_ARRAY(size->cvt,
size->cvt_size, FT_Long) ||
ALLOC_ARRAY(size->storage,
size->storage_size, FT_Long))
{
goto Fail_Memory;
}
/* reserve twilight zone */
n_twilight = maxp->maxTwilightPoints;
error = TT_New_GlyphZone(memory, n_twilight, 0, &size->twilight);
if(error)
{
goto Fail_Memory;
}
size->twilight.n_points = n_twilight;
/* set `face->interpreter' according to the debug hook present */
{
FT_Library library = face->root.driver->root.library;
face->interpreter = (TT_Interpreter)
library->debug_hooks[FT_DEBUG_HOOK_TRUETYPE];
if(!face->interpreter)
{
face->interpreter = (TT_Interpreter)TT_RunIns;
}
}
/* Fine, now execute the font program! */
exec = size->context;
/* size objects used during debugging have their own context */
if(!size->debug)
{
exec = TT_New_Context(face);
}
//.........这里部分代码省略.........
示例4:
tt_size_run_prep( TT_Size size,
FT_Bool pedantic )
{
TT_Face face = (TT_Face)size->root.face;
TT_ExecContext exec;
FT_Error error;
exec = size->context;
error = TT_Load_Context( exec, face, size );
if ( error )
return error;
exec->callTop = 0;
exec->top = 0;
exec->instruction_trap = FALSE;
exec->pedantic_hinting = pedantic;
TT_Set_CodeRange( exec,
tt_coderange_cvt,
face->cvt_program,
(FT_Long)face->cvt_program_size );
TT_Clear_CodeRange( exec, tt_coderange_glyph );
if ( face->cvt_program_size > 0 )
{
TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );
FT_TRACE4(( "Executing `prep' table.\n" ));
error = face->interpreter( exec );
}
else
error = FT_Err_Ok;
size->cvt_ready = error;
/* UNDOCUMENTED! The MS rasterizer doesn't allow the following */
/* graphics state variables to be modified by the CVT program. */
exec->GS.dualVector.x = 0x4000;
exec->GS.dualVector.y = 0;
exec->GS.projVector.x = 0x4000;
exec->GS.projVector.y = 0x0;
exec->GS.freeVector.x = 0x4000;
exec->GS.freeVector.y = 0x0;
exec->GS.rp0 = 0;
exec->GS.rp1 = 0;
exec->GS.rp2 = 0;
exec->GS.gep0 = 1;
exec->GS.gep1 = 1;
exec->GS.gep2 = 1;
exec->GS.loop = 1;
/* save as default graphics state */
size->GS = exec->GS;
TT_Save_Context( exec, size );
return error;
}