0,0 → 1,873 |
/******************************************************************* |
* |
* ttobjs.h 1.0 |
* |
* Objects definition unit. |
* |
* Copyright 1996-1999 by |
* David Turner, Robert Wilhelm, and Werner Lemberg. |
* |
* This file is part of the FreeType project, and may only be used |
* modified and distributed under the terms of the FreeType project |
* license, LICENSE.TXT. By continuing to use, modify, or distribute |
* this file you indicate that you have read the license and |
* understand and accept it fully. |
* |
******************************************************************/ |
|
#ifndef TTOBJS_H |
#define TTOBJS_H |
|
#include "ttconfig.h" |
#include "ttengine.h" |
#include "ttmutex.h" |
#include "ttcache.h" |
#include "tttables.h" |
#include "ttcmap.h" |
|
#ifdef __cplusplus |
extern "C" { |
#endif |
|
/* */ |
/* This file contains the definitions and methods of the four */ |
/* kinds of objects managed by the FreeType engine. These are: */ |
/* */ |
/* */ |
/* Face objects: */ |
/* */ |
/* There is always one face object per opened TrueType font */ |
/* file, and only one. The face object contains data that is */ |
/* independent of current transform/scaling/rotation and */ |
/* pointsize, or glyph index. This data is made of several */ |
/* critical tables that are loaded on face object creation. */ |
/* */ |
/* A face object tracks all active and recycled objects of */ |
/* the instance and execution context classes. Destroying a face */ |
/* object will automatically destroy all associated instances. */ |
/* */ |
/* */ |
/* Instance objects: */ |
/* */ |
/* An instance object always relates to a given face object, */ |
/* known as its 'parent' or 'owner', and contains only the */ |
/* data that is specific to one given pointsize/transform of */ |
/* the face. You can only create an instance from a face object. */ |
/* */ |
/* An instance's current transform/pointsize can be changed */ |
/* at any time using a single high-level API call, */ |
/* TT_Reset_Instance(). */ |
/* */ |
/* Execution Context objects: */ |
/* */ |
/* An execution context (or context in short) relates to a face. */ |
/* It contains the data and tables that are necessary to load */ |
/* and hint (i.e. execute the glyph instructions of) one glyph. */ |
/* A context is a transient object that is queried/created on */ |
/* the fly: client applications never deal with them directly. */ |
/* */ |
/* */ |
/* Glyph objects: */ |
/* */ |
/* A glyph object contains only the minimal glyph information */ |
/* needed to render one glyph correctly. This means that a glyph */ |
/* object really contains tables that are sized to hold the */ |
/* contents of _any_ glyph of a given face. A client application */ |
/* can usually create one glyph object for a given face, then use */ |
/* it for all subsequent loads. */ |
/* */ |
/* Here is an example of a client application : */ |
/* (NOTE: No error checking performed here!) */ |
/* */ |
/* */ |
/* TT_Face face; -- face handle */ |
/* TT_Instance ins1, ins2; -- two instance handles */ |
/* TT_Glyph glyph; -- glyph handle */ |
/* */ |
/* TT_Init_FreeType(); */ |
/* */ |
/* -- Initialize the engine. This must be done prior to _any_ */ |
/* operation. */ |
/* */ |
/* TT_Open_Face( "/some/face/name.ttf", &face ); */ |
/* */ |
/* -- create the face object. This call opens the font file */ |
/* */ |
/* TT_New_Instance( face, &ins1 ); */ |
/* TT_New_Instance( face, &ins2 ); */ |
/* */ |
/* TT_Set_Instance_PointSize( ins1, 8 ); */ |
/* TT_Set_Instance_PointSize( ins2, 12 ); */ |
/* */ |
/* -- create two distinct instances of the same face */ |
/* -- ins1 is pointsize 8 at resolution 96 dpi */ |
/* -- ins2 is pointsize 12 at resolution 96 dpi */ |
/* */ |
/* TT_New_Glyph( face, &glyph ); */ |
/* */ |
/* -- create a new glyph object which will receive the contents */ |
/* of any glyph of 'face' */ |
/* */ |
/* TT_Load_Glyph( ins1, glyph, 64, DEFAULT_GLYPH_LOAD ); */ |
/* */ |
/* -- load glyph indexed 64 at pointsize 8 in the 'glyph' object */ |
/* -- NOTE: This call will fail if the instance and the glyph */ |
/* do not relate to the same face object. */ |
/* */ |
/* TT_Get_Outline( glyph, &outline ); */ |
/* */ |
/* -- extract the glyph outline from the object and copies it */ |
/* to the 'outline' record */ |
/* */ |
/* TT_Get_Metrics( glyph, &metrics ); */ |
/* */ |
/* -- extract the glyph metrics and put them into the 'metrics' */ |
/* record */ |
/* */ |
/* TT_Load_Glyph( ins2, glyph, 64, DEFAULT_GLYPH_LOAD ); */ |
/* */ |
/* -- load the same glyph at pointsize 12 in the 'glyph' object */ |
/* */ |
/* */ |
/* TT_Close_Face( &face ); */ |
/* */ |
/* -- destroy the face object. This will destroy 'ins1' and */ |
/* 'ins2'. However, the glyph object will still be available */ |
/* */ |
/* TT_Done_FreeType(); */ |
/* */ |
/* -- Finalize the engine. This will also destroy all pending */ |
/* glyph objects (here 'glyph'). */ |
|
struct TFace_; |
struct TInstance_; |
struct TExecution_Context_; |
struct TGlyph_; |
|
typedef struct TFace_ TFace; |
typedef TFace* PFace; |
|
typedef struct TInstance_ TInstance; |
typedef TInstance* PInstance; |
|
typedef struct TExecution_Context_ TExecution_Context; |
typedef TExecution_Context* PExecution_Context; |
|
typedef struct TGlyph_ TGlyph; |
typedef TGlyph* PGlyph; |
|
|
/*************************************************************/ |
/* */ |
/* ADDITIONAL SUBTABLES */ |
/* */ |
/* These tables are not precisely defined by the specs */ |
/* but their structures is implied by the TrueType font */ |
/* file layout. */ |
/* */ |
/*************************************************************/ |
|
/* Graphics State */ |
/* */ |
/* The Graphics State (GS) is managed by the */ |
/* instruction field, but does not come from */ |
/* the font file. Thus, we can use 'int's */ |
/* where needed. */ |
|
struct TGraphicsState_ |
{ |
UShort rp0; |
UShort rp1; |
UShort rp2; |
|
TT_UnitVector dualVector; |
TT_UnitVector projVector; |
TT_UnitVector freeVector; |
|
Long loop; |
TT_F26Dot6 minimum_distance; |
Int round_state; |
|
Bool auto_flip; |
TT_F26Dot6 control_value_cutin; |
TT_F26Dot6 single_width_cutin; |
TT_F26Dot6 single_width_value; |
Short delta_base; |
Short delta_shift; |
|
Byte instruct_control; |
Bool scan_control; |
Int scan_type; |
|
UShort gep0; |
UShort gep1; |
UShort gep2; |
}; |
|
typedef struct TGraphicsState_ TGraphicsState; |
|
|
LOCAL_DEF |
const TGraphicsState Default_GraphicsState; |
|
|
/*************************************************************/ |
/* */ |
/* EXECUTION SUBTABLES */ |
/* */ |
/* These sub-tables relate to instruction execution. */ |
/* */ |
/*************************************************************/ |
|
#define MAX_CODE_RANGES 3 |
|
/* There can only be 3 active code ranges at once: */ |
/* - the Font Program */ |
/* - the CVT Program */ |
/* - a glyph's instructions set */ |
|
#define TT_CodeRange_Font 1 |
#define TT_CodeRange_Cvt 2 |
#define TT_CodeRange_Glyph 3 |
|
|
struct TCodeRange_ |
{ |
PByte Base; |
ULong Size; |
}; |
|
typedef struct TCodeRange_ TCodeRange; |
typedef TCodeRange* PCodeRange; |
|
|
/* Defintion of a code range */ |
/* */ |
/* Code ranges can be resident to a glyph (i.e. the Font Program) */ |
/* while some others are volatile (Glyph instructions). */ |
/* Tracking the state and presence of code ranges allows function */ |
/* and instruction definitions within a code range to be forgotten */ |
/* when the range is discarded. */ |
|
typedef TCodeRange TCodeRangeTable[MAX_CODE_RANGES]; |
|
/* defines a function/instruction definition record */ |
|
struct TDefRecord_ |
{ |
Int Range; /* in which code range is it located ? */ |
ULong Start; /* where does it start ? */ |
Int Opc; /* function #, or instruction code */ |
Bool Active; /* is it active ? */ |
}; |
|
typedef struct TDefRecord_ TDefRecord; |
typedef TDefRecord* PDefRecord; |
typedef TDefRecord* PDefArray; |
|
/* defines a call record, used to manage function calls. */ |
|
struct TCallRecord_ |
{ |
Int Caller_Range; |
ULong Caller_IP; |
Long Cur_Count; |
ULong Cur_Restart; |
}; |
|
typedef struct TCallRecord_ TCallRecord; |
typedef TCallRecord* PCallRecord; |
typedef TCallRecord* PCallStack; /* defines a simple call stack */ |
|
|
/* This type defining a set of glyph points will be used to represent */ |
/* each zone (regular and twilight) during instructions decoding. */ |
struct TGlyph_Zone_ |
{ |
UShort n_points; /* number of points in zone */ |
Short n_contours; /* number of contours */ |
|
TT_Vector* org; /* original points coordinates */ |
TT_Vector* cur; /* current points coordinates */ |
|
Byte* touch; /* current touch flags */ |
UShort* contours; /* contour end points */ |
}; |
|
typedef struct TGlyph_Zone_ TGlyph_Zone; |
typedef TGlyph_Zone* PGlyph_Zone; |
|
|
|
#ifndef TT_STATIC_INTEPRETER /* indirect implementation */ |
|
#define EXEC_OPS PExecution_Context exc, |
#define EXEC_OP PExecution_Context exc |
#define EXEC_ARGS exc, |
#define EXEC_ARG exc |
|
#else /* static implementation */ |
|
#define EXEC_OPS /* void */ |
#define EXEC_OP /* void */ |
#define EXEC_ARGS /* void */ |
#define EXEC_ARG /* void */ |
|
#endif |
|
/* Rounding function, as used by the interpreter */ |
typedef TT_F26Dot6 (*TRound_Function)( EXEC_OPS TT_F26Dot6 distance, |
TT_F26Dot6 compensation ); |
|
/* Point displacement along the freedom vector routine, as */ |
/* used by the interpreter */ |
typedef void (*TMove_Function)( EXEC_OPS PGlyph_Zone zone, |
UShort point, |
TT_F26Dot6 distance ); |
|
/* Distance projection along one of the proj. vectors, as used */ |
/* by the interpreter */ |
typedef TT_F26Dot6 (*TProject_Function)( EXEC_OPS TT_Vector* v1, |
TT_Vector* v2 ); |
|
/* reading a cvt value. Take care of non-square pixels when needed */ |
typedef TT_F26Dot6 (*TGet_CVT_Function)( EXEC_OPS ULong index ); |
|
/* setting or moving a cvt value. Take care of non-square pixels */ |
/* when needed */ |
typedef void (*TSet_CVT_Function)( EXEC_OPS ULong index, |
TT_F26Dot6 value ); |
|
/* subglyph transformation record */ |
struct TTransform_ |
{ |
TT_Fixed xx, xy; /* transformation */ |
TT_Fixed yx, yy; /* matrix */ |
TT_F26Dot6 ox, oy; /* offsets */ |
}; |
|
typedef struct TTransform_ TTransform; |
typedef TTransform* PTransform; |
|
/* subglyph loading record. Used to load composite components */ |
struct TSubglyph_Record_ |
{ |
Long index; /* subglyph index; initialized with -1 */ |
Bool is_scaled; /* is the subglyph scaled? */ |
Bool is_hinted; /* should it be hinted? */ |
Bool preserve_pps; /* preserve phantom points? */ |
|
Long file_offset; |
|
TT_Big_Glyph_Metrics metrics; |
|
TGlyph_Zone zone; |
|
Long arg1; /* first argument */ |
Long arg2; /* second argument */ |
|
UShort element_flag; /* current load element flag */ |
|
TTransform transform; /* transform */ |
|
TT_Vector pp1, pp2; /* phantom points */ |
|
}; |
|
typedef struct TSubglyph_Record_ TSubglyph_Record; |
typedef TSubglyph_Record* PSubglyph_Record; |
typedef TSubglyph_Record* PSubglyph_Stack; |
|
/* A note regarding non-squared pixels: */ |
/* */ |
/* (This text will probably go into some docs at some time, for */ |
/* now, it is kept there to explain some definitions in the */ |
/* TIns_Metrics record). */ |
/* */ |
/* The CVT is a one-dimensional array containing values that */ |
/* control certain important characteristics in a font, like */ |
/* the height of all capitals, all lowercase letter, default */ |
/* spacing or stem width/height. */ |
/* */ |
/* These values are found in FUnits in the font file, and must be */ |
/* scaled to pixel coordinates before being used by the CVT and */ |
/* glyph programs. Unfortunately, when using distinct x and y */ |
/* resolutions (or distinct x and y pointsizes), there are two */ |
/* possible scalings. */ |
/* */ |
/* A first try was to implement a 'lazy' scheme where all values */ |
/* were scaled when first used. However, while some values are always */ |
/* used in the same direction, and some other are used in many */ |
/* different circumstances and orientations. */ |
/* */ |
/* I have found a simpler way to do the same, and it even seems to */ |
/* work in most of the cases: */ |
/* */ |
/* - all CVT values are scaled to the maximum ppem size */ |
/* */ |
/* - when performing a read or write in the CVT, a ratio factor */ |
/* is used to perform adequate scaling. Example: */ |
/* */ |
/* x_ppem = 14 */ |
/* y_ppem = 10 */ |
/* */ |
/* we choose ppem = x_ppem = 14 as the CVT scaling size. All cvt */ |
/* entries are scaled to it. */ |
/* */ |
/* x_ratio = 1.0 */ |
/* y_ratio = y_ppem/ppem (< 1.0) */ |
/* */ |
/* we compute the current ratio like: */ |
/* */ |
/* - if projVector is horizontal, */ |
/* ratio = x_ratio = 1.0 */ |
/* - if projVector is vertical, */ |
/* ratop = y_ratio */ |
/* - else, */ |
/* ratio = sqrt((proj.x*x_ratio)^2 + (proj.y*y_ratio)^2) */ |
/* */ |
/* reading a cvt value returns ratio * cvt[index] */ |
/* writing a cvt value in pixels cvt[index] / ratio */ |
/* */ |
/* the current ppem is simply ratio * ppem */ |
/* */ |
|
/* metrics used by the instance and execution context objects */ |
struct TIns_Metrics_ |
{ |
TT_F26Dot6 pointSize; /* point size. 1 point = 1/72 inch. */ |
|
UShort x_resolution; /* device horizontal resolution in dpi. */ |
UShort y_resolution; /* device vertical resolution in dpi. */ |
|
UShort x_ppem; /* horizontal pixels per EM */ |
UShort y_ppem; /* vertical pixels per EM */ |
|
Long x_scale1; |
Long x_scale2; /* used to scale FUnits to fractional pixels */ |
|
Long y_scale1; |
Long y_scale2; /* used to scale FUnits to fractional pixels */ |
|
/* for non-square pixels */ |
Long x_ratio; |
Long y_ratio; |
|
UShort ppem; /* maximum ppem size */ |
Long ratio; /* current ratio */ |
Long scale1; |
Long scale2; /* scale for ppem */ |
|
TT_F26Dot6 compensations[4]; /* device-specific compensations */ |
|
Bool rotated; /* `is the glyph rotated?'-flag */ |
Bool stretched; /* `is the glyph stretched?'-flag */ |
}; |
|
typedef struct TIns_Metrics_ TIns_Metrics; |
typedef TIns_Metrics* PIns_Metrics; |
|
|
|
/***********************************************************************/ |
/* */ |
/* FreeType Face Type */ |
/* */ |
/***********************************************************************/ |
|
struct TFace_ |
{ |
/* parent engine instance for the face object */ |
PEngine_Instance engine; |
|
/* i/o stream */ |
TT_Stream stream; |
|
/* used only by the threaded builds of the library */ |
TMutex lock; |
|
/* TrueType collection header, if any was found */ |
TTTCHeader ttcHeader; |
|
/* maximum profile table, as found in the TrueType file */ |
TMaxProfile maxProfile; |
|
/* Note: */ |
/* it seems that some maximum values cannot be */ |
/* taken directly from this table, but rather by */ |
/* combining some of its fields; e.g. the max. */ |
/* number of points seems to be given by */ |
/* MAX( maxPoints, maxCompositePoints ) */ |
/* */ |
/* For this reason, we define later our own */ |
/* max values that are used to load and allocate */ |
/* further tables. */ |
|
TT_Header fontHeader; /* the font header, as */ |
/* found in the TTF file */ |
TT_Horizontal_Header horizontalHeader; /* the horizontal header */ |
|
Bool verticalInfo; /* True when vertical table */ |
TT_Vertical_Header verticalHeader; /* is present in the font */ |
|
TT_OS2 os2; /* 'OS/2' table */ |
|
TT_Postscript postscript; /* 'Post' table */ |
|
TT_Hdmx hdmx; /* 'Hdmx' table */ |
|
TName_Table nameTable; /* name table */ |
|
TGasp gasp; /* the 'gasp' table */ |
|
/* The directory of TrueType tables for this typeface */ |
UShort numTables; |
PTableDirEntry dirTables; |
|
/* The directory of character mappings table for */ |
/* this typeface */ |
UShort numCMaps; |
PCMapTable cMaps; |
|
/* The glyph locations table */ |
ULong numLocations; /* UShort is not enough */ |
#ifndef TT_HUGE_PTR |
PStorage glyphLocations; |
#else |
Storage TT_HUGE_PTR * glyphLocations; |
#endif |
|
/* NOTE : The "hmtx" is now part of the horizontal header */ |
|
/* the font program, if any */ |
ULong fontPgmSize; |
PByte fontProgram; |
|
/* the cvt program, if any */ |
ULong cvtPgmSize; |
PByte cvtProgram; |
|
/* the original, unscaled, control value table */ |
ULong cvtSize; |
PShort cvt; |
|
/* The following values _must_ be set by the */ |
/* maximum profile loader */ |
|
UShort numGlyphs; /* the face's total number of glyphs */ |
UShort maxPoints; /* max glyph points number, simple and composite */ |
UShort maxContours; /* max glyph contours numb, simple and composite */ |
UShort maxComponents; /* max components in a composite glyph */ |
|
/* the following are object caches to track active */ |
/* and recycled instances and execution contexts */ |
/* objects. See 'ttcache.h' */ |
|
TCache instances; /* current instances for this face */ |
TCache glyphs; /* current glyph containers for this face */ |
|
|
/* A typeless pointer to the face object extensions defined */ |
/* in the 'ttextend.*' files. */ |
void* extension; |
Int n_extensions; /* number of extensions */ |
|
/* Use extensions to provide additional capabilities to the */ |
/* engine. Read the developer's guide in the documentation */ |
/* directory to know how to do that. */ |
|
/* a generic pointer for client use - see TT_Set/Get_Face_Pointer */ |
void* generic; |
}; |
|
|
|
/***********************************************************************/ |
/* */ |
/* FreeType Instance Type */ |
/* */ |
/***********************************************************************/ |
|
struct TInstance_ |
{ |
PFace owner; /* face object */ |
|
Bool valid; |
|
TIns_Metrics metrics; |
|
UShort numFDefs; /* number of function definitions */ |
UShort maxFDefs; |
PDefArray FDefs; /* table of FDefs entries */ |
|
UShort numIDefs; /* number of instruction definitions */ |
UShort maxIDefs; |
PDefArray IDefs; /* table of IDefs entries */ |
|
Int maxFunc; /* maximum function definition id */ |
Int maxIns; /* maximum instruction definition id */ |
|
TCodeRangeTable codeRangeTable; |
|
TGraphicsState GS; |
TGraphicsState default_GS; |
|
ULong cvtSize; /* the scaled control value table */ |
PLong cvt; |
|
ULong storeSize; /* The storage area is now part of the */ |
PLong storage; /* instance */ |
|
TGlyph_Zone twilight; /* The instance's twilight zone */ |
|
/* debugging variables */ |
|
/* When using the debugger, we must keep the */ |
/* execution context tied to the instance */ |
/* object rather than asking it on demand */ |
|
Bool debug; |
PExecution_Context context; |
|
/* a generic pointer for client use - see TT_Set/Get_Instance_Pointer */ |
void* generic; |
}; |
|
|
/***********************************************************************/ |
/* */ |
/* FreeType Execution Context Type */ |
/* */ |
/***********************************************************************/ |
|
struct TExecution_Context_ |
{ |
PFace face; |
PInstance instance; |
|
/* instructions state */ |
|
TT_Error error; /* last execution error */ |
|
Long top; /* top of exec. stack */ |
|
ULong stackSize; /* size of exec. stack */ |
PStorage stack; /* current exec. stack */ |
|
Long args; |
ULong new_top; /* new top after exec. */ |
|
TGlyph_Zone zp0, /* zone records */ |
zp1, |
zp2, |
pts, |
twilight; |
|
TIns_Metrics metrics; /* instance metrics */ |
|
TGraphicsState GS; /* current graphics state */ |
|
Int curRange; /* current code range number */ |
PByte code; /* current code range */ |
ULong IP; /* current instruction pointer */ |
ULong codeSize; /* size of current range */ |
|
Byte opcode; /* current opcode */ |
Int length; /* length of current opcode */ |
|
Bool step_ins; /* true if the interpreter must */ |
/* increment IP after ins. exec */ |
ULong cvtSize; |
PLong cvt; |
|
ULong glyphSize; /* glyph instructions buffer size */ |
PByte glyphIns; /* glyph instructions buffer */ |
|
UShort numFDefs; /* number of function defs */ |
UShort maxFDefs; /* maximum number of function defs */ |
PDefRecord FDefs; /* table of FDefs entries */ |
|
UShort numIDefs; /* number of instruction defs */ |
UShort maxIDefs; /* maximum number of instruction defs */ |
PDefRecord IDefs; /* table of IDefs entries */ |
|
Int maxFunc; |
Int maxIns; |
|
Int callTop, /* top of call stack during execution */ |
callSize; /* size of call stack */ |
PCallStack callStack; /* call stack */ |
|
UShort maxPoints; /* capacity of this context's "pts" */ |
UShort maxContours; /* record, expressed in points and */ |
/* contours.. */ |
|
TCodeRangeTable codeRangeTable; /* table of valid coderanges */ |
/* useful for the debugger */ |
|
ULong storeSize; /* size of current storage */ |
PLong storage; /* storage area */ |
|
TT_F26Dot6 period; /* values used for the */ |
TT_F26Dot6 phase; /* 'SuperRounding' */ |
TT_F26Dot6 threshold; |
|
/* this seems to be unused */ |
#if 0 |
Int cur_ppem; /* ppem along the current proj vector */ |
#endif |
Long scale1; /* scaling values along the current */ |
Long scale2; /* projection vector too.. */ |
Bool cached_metrics; /* the ppem is computed lazily. used */ |
/* to trigger computation when needed */ |
|
Bool instruction_trap; /* If True, the interpreter will */ |
/* exit after each instruction */ |
|
TGraphicsState default_GS; /* graphics state resulting from */ |
/* the prep program */ |
Bool is_composite; /* ture if the glyph is composite */ |
|
Bool pedantic_hinting; /* if true, read and write array */ |
/* bounds faults halt the hinting */ |
|
/* latest interpreter additions */ |
|
Long F_dot_P; /* dot product of freedom and projection */ |
/* vectors */ |
TRound_Function func_round; /* current rounding function */ |
|
TProject_Function func_project, /* current projection function */ |
func_dualproj, /* current dual proj. function */ |
func_freeProj; /* current freedom proj. func */ |
|
TMove_Function func_move; /* current point move function */ |
|
TGet_CVT_Function func_read_cvt; /* read a cvt entry */ |
TSet_CVT_Function func_write_cvt; /* write a cvt entry (in pixels) */ |
TSet_CVT_Function func_move_cvt; /* incr a cvt entry (in pixels) */ |
|
ULong loadSize; |
PSubglyph_Stack loadStack; /* loading subglyph stack */ |
|
}; |
|
|
/***********************************************************************/ |
/* */ |
/* FreeType Glyph Object Type */ |
/* */ |
/***********************************************************************/ |
|
struct TGlyph_ |
{ |
PFace face; |
TT_Big_Glyph_Metrics metrics; |
TT_Outline outline; |
}; |
|
|
/* The following type is used to load a font from a collection. */ |
/* See Face_Create in ttobjs.c */ |
|
struct TFont_Input_ |
{ |
TT_Stream stream; /* input stream */ |
ULong fontIndex; /* index of font in collection */ |
PEngine_Instance engine; /* parent engine instance */ |
|
}; |
|
typedef struct TFont_Input_ TFont_Input; |
|
|
/********************************************************************/ |
/* */ |
/* Code Range Functions */ |
/* */ |
/********************************************************************/ |
|
/* Goto a specified coderange */ |
LOCAL_DEF |
TT_Error Goto_CodeRange( PExecution_Context exec, |
Int range, |
ULong IP ); |
|
#if 0 |
/* Return a pointer to a given coderange record. */ |
/* Used only by the debugger. */ |
LOCAL_DEF |
PCodeRange Get_CodeRange( PExecution_Context exec, |
Int range ); |
#endif |
|
/* Set a given code range properties */ |
LOCAL_DEF |
TT_Error Set_CodeRange( PExecution_Context exec, |
Int range, |
void* base, |
ULong length ); |
|
/* Clear a given coderange */ |
LOCAL_DEF |
TT_Error Clear_CodeRange( PExecution_Context exec, Int range ); |
|
|
LOCAL_DEF |
PExecution_Context New_Context( PFace face ); |
|
LOCAL_DEF |
TT_Error Done_Context( PExecution_Context exec ); |
|
|
LOCAL_DEF |
TT_Error Context_Load( PExecution_Context exec, |
PFace face, |
PInstance ins ); |
|
LOCAL_DEF |
TT_Error Context_Save( PExecution_Context exec, |
PInstance ins ); |
|
LOCAL_DEF |
TT_Error Context_Run( PExecution_Context exec, |
Bool debug ); |
|
LOCAL_DEF |
TT_Error Instance_Init( PInstance ins ); |
|
LOCAL_DEF |
TT_Error Instance_Reset( PInstance ins ); |
|
|
/********************************************************************/ |
/* */ |
/* Handy scaling functions */ |
/* */ |
/********************************************************************/ |
|
LOCAL_DEF TT_Pos Scale_X( PIns_Metrics metrics, TT_Pos x ); |
LOCAL_DEF TT_Pos Scale_Y( PIns_Metrics metrics, TT_Pos y ); |
|
/********************************************************************/ |
/* */ |
/* Component Initializer/Finalizer */ |
/* */ |
/* Called from 'freetype.c' */ |
/* The component must create and register the face, instance and */ |
/* execution context cache classes before any object can be */ |
/* managed. */ |
/* */ |
/********************************************************************/ |
|
LOCAL_DEF TT_Error TTObjs_Init( PEngine_Instance engine ); |
LOCAL_DEF TT_Error TTObjs_Done( PEngine_Instance engine ); |
|
#ifdef __cplusplus |
} |
#endif |
|
#endif /* TTOBJS_H */ |
|
|
/* END */ |