Viewing file: freetype.h (43.01 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/******************************************************************* * * freetype.h * * High-level interface specification. * * 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. * * Note: * * This is the only file that should be included by client * application sources. All other types and functions defined * in the `tt*.h' files are library internals and should not be * included. * ******************************************************************/
#ifndef FREETYPE_H #define FREETYPE_H
#define TT_FREETYPE_MAJOR 1 #define TT_FREETYPE_MINOR 3
#include "fterrid.h" #include "ftnameid.h"
/* To make freetype.h independent from configuration files we check */ /* whether EXPORT_DEF has been defined already. */
#ifndef EXPORT_DEF #define EXPORT_DEF extern #endif
/* The same for TT_Text. If you define the HAVE_TT_TEXT macro, you */ /* have to provide a typedef declaration for TT_Text before */ /* including this file. */
#ifndef HAVE_TT_TEXT #define HAVE_TT_TEXT typedef char TT_Text; /* The data type to represent */ /* file name string elements. */ #endif
#ifdef __cplusplus extern "C" { #endif
/*******************************************************************/ /* */ /* FreeType types definitions. */ /* */ /* All these begin with a 'TT_' prefix. */ /* */ /*******************************************************************/
typedef int TT_Bool;
typedef signed long TT_Fixed; /* signed fixed 16.16 float */
typedef signed short TT_FWord; /* distance in FUnits */ typedef unsigned short TT_UFWord; /* unsigned distance */
typedef char TT_String; typedef signed char TT_Char; typedef unsigned char TT_Byte; typedef signed short TT_Short; typedef unsigned short TT_UShort; typedef int TT_Int; typedef unsigned int TT_UInt; typedef signed long TT_Long; typedef unsigned long TT_ULong;
typedef signed short TT_F2Dot14; /* Signed fixed float 2.14 used for */ /* unit vectors, with layout */ /* */ /* s : 1 -- sign bit */ /* m : 1 -- integer bit */ /* f : 14 -- unsigned fractional */ /* */ /* `s:m' is the 2-bit signed int */ /* value to which the positive */ /* fractional part should be added. */
typedef signed long TT_F26Dot6; /* 26.6 fixed float, used for */ /* glyph points pixel coordinates. */
typedef signed long TT_Pos; /* Point position, expressed either */ /* in fractional pixels or notional */ /* units, depending on context. */ /* For example, glyph coordinates */ /* returned by TT_Load_Glyph() are */ /* expressed in font units if */ /* scaling wasn't requested, and */ /* in 26.6 fractional pixels if it */ /* was. */
struct TT_UnitVector_ /* guess what... */ { TT_F2Dot14 x; TT_F2Dot14 y; };
typedef struct TT_UnitVector_ TT_UnitVector;
struct TT_Vector_ /* simple vector type */ { TT_F26Dot6 x; TT_F26Dot6 y; };
typedef struct TT_Vector_ TT_Vector;
/* A simple 2x2 matrix used for transformations. */ /* You should use 16.16 fixed floats. */ /* */ /* x' = xx*x + xy*y */ /* y' = yx*x + yy*y */ /* */
struct TT_Matrix_ { TT_Fixed xx, xy; TT_Fixed yx, yy; };
typedef struct TT_Matrix_ TT_Matrix;
/* A structure used to describe the source glyph to the renderer. */
struct TT_Outline_ { TT_Short n_contours; /* number of contours in glyph */ TT_UShort n_points; /* number of points in the glyph */
TT_Vector* points; /* the outline's points */ TT_Byte* flags; /* the points flags */ TT_UShort* contours; /* the contour end points */
/* The following flag indicates that the outline owns the arrays it */ /* refers to. Typically, this is true of outlines created from the */ /* TT_New_Outline() API, while it isn't for those returned by */ /* TT_Get_Glyph_Outline(). */
TT_Bool owner; /* The outline owns the coordinates, */ /* flags and contours array it uses. */
/* The following flags are set automatically by */ /* TT_Get_Glyph_Outline(). Their meaning is the following: */ /* */ /* high_precision If true, the scan-line converter will use a */ /* higher precision to render bitmaps (i.e., a */ /* 1/1024 pixel precision). This is important for */ /* small ppem sizes. */ /* */ /* second_pass If true, the scan-line converter performs a */ /* second sweep phase dedicated to find vertical */ /* drop-outs. If false, only horizontal drop-outs */ /* will be checked during the first vertical */ /* sweep (yes, this is a bit confusing but it is */ /* really the way it should work). This is */ /* important for small ppems too. */ /* */ /* dropout_mode Specifies the TrueType drop-out mode to use for */ /* continuity checking. Valid values are 0 (no */ /* check), 1, 2, 4, and 5. */ /* */ /* Most of the engine's users will safely ignore these fields... */
TT_Bool high_precision; /* high precision rendering */ TT_Bool second_pass; /* two sweeps rendering */ TT_Char dropout_mode; /* dropout mode */ };
typedef struct TT_Outline_ TT_Outline;
/* A structure used to describe a simple bounding box. */
struct TT_BBox_ { TT_Pos xMin; TT_Pos yMin; TT_Pos xMax; TT_Pos yMax; };
typedef struct TT_BBox_ TT_BBox;
/* A structure used to return glyph metrics. */ /* */ /* The `bearingX' isn't called `left-side bearing' anymore because */ /* it has different meanings depending on the glyph's orientation. */ /* */ /* The same is true for `bearingY', which is the top-side bearing */ /* defined by the TT_Spec, i.e., the distance from the baseline to */ /* the top of the glyph's bbox. According to our current convention, */ /* this is always the same as `bbox.yMax' but we make it appear for */ /* consistency in its proper field. */ /* */ /* The `advance' field is the advance width for horizontal layout, */ /* and advance height for vertical layouts. */
struct TT_Glyph_Metrics_ { TT_BBox bbox; /* glyph bounding box */
TT_Pos bearingX; /* left-side bearing */ TT_Pos bearingY; /* top-side bearing, per se the TT spec */
TT_Pos advance; /* advance width (or height) */ };
typedef struct TT_Glyph_Metrics_ TT_Glyph_Metrics;
/* A structure used to return horizontal _and_ vertical glyph */ /* metrics. */ /* */ /* A glyph can be used either in a horizontal or vertical layout. */ /* Its glyph metrics vary with orientation. The TT_Big_Glyph_Metrics */ /* structure is used to return _all_ metrics in one call. */
struct TT_Big_Glyph_Metrics_ { TT_BBox bbox; /* glyph bounding box */
TT_Pos horiBearingX; /* left side bearing in horizontal layouts */ TT_Pos horiBearingY; /* top side bearing in horizontal layouts */
TT_Pos vertBearingX; /* left side bearing in vertical layouts */ TT_Pos vertBearingY; /* top side bearing in vertical layouts */
TT_Pos horiAdvance; /* advance width for horizontal layout */ TT_Pos vertAdvance; /* advance height for vertical layout */
/* The following fields represent unhinted scaled metrics values. */ /* They can be useful for applications needing to do some device */ /* independent placement of glyphs. */ /* */ /* Applying these metrics to hinted glyphs will most surely ruin */ /* the grid fitting performed by the bytecode interpreter. These */ /* values are better used to compute accumulated positioning */ /* distances. */
TT_Pos linearHoriBearingX; /* linearly scaled horizontal lsb */ TT_Pos linearHoriAdvance; /* linearly scaled horizontal advance */
TT_Pos linearVertBearingY; /* linearly scaled vertical tsb */ TT_Pos linearVertAdvance; /* linearly scaled vertical advance */ };
typedef struct TT_Big_Glyph_Metrics_ TT_Big_Glyph_Metrics;
/* A structure used to return instance metrics. */
struct TT_Instance_Metrics_ { TT_F26Dot6 pointSize; /* char. size in points (1pt = 1/72 inch) */
TT_UShort x_ppem; /* horizontal pixels per EM square */ TT_UShort y_ppem; /* vertical pixels per EM square */
TT_Fixed x_scale; /* 16.16 to convert from EM units to 26.6 pix */ TT_Fixed y_scale; /* 16.16 to convert from EM units to 26.6 pix */
TT_UShort x_resolution; /* device horizontal resolution in dpi */ TT_UShort y_resolution; /* device vertical resolution in dpi */ };
typedef struct TT_Instance_Metrics_ TT_Instance_Metrics;
/* Flow constants: */ /* */ /* The flow of a bitmap refers to the way lines are oriented */ /* within the bitmap data, i.e., the orientation of the Y */ /* coordinate axis. */ /* */ /* For example, if the first bytes of the bitmap pertain to */ /* its top-most line, then the flow is `down'. If these bytes */ /* pertain to its lowest line, the the flow is `up'. */
#define TT_Flow_Down -1 /* bitmap is oriented from top to bottom */ #define TT_Flow_Up 1 /* bitmap is oriented from bottom to top */ #define TT_Flow_Error 0 /* an error occurred during rendering */
/* A structure used to describe the target bitmap or pixmap to the */ /* renderer. Note that there is nothing in this structure that */ /* gives the nature of the buffer. */ /* */ /* IMPORTANT NOTE: */ /* */ /* In the case of a pixmap, the `width' and `cols' fields must */ /* have the _same_ values, and _must_ be padded to 32-bits, i.e., */ /* be a multiple of 4. Clipping problems will arise otherwise, */ /* if not even page faults! */ /* */ /* The typical settings are: */ /* */ /* - for a WxH bitmap: */ /* */ /* rows = H */ /* cols = (W+7) / 8 */ /* width = W */ /* flow = your_choice */ /* */ /* - for a WxH pixmap: */ /* */ /* rows = H */ /* cols = (W+3) & ~3 */ /* width = cols */ /* flow = your_choice */
struct TT_Raster_Map_ { int rows; /* number of rows */ int cols; /* number of columns (bytes) per row */ int width; /* number of pixels per line */ int flow; /* bitmap orientation */
void* bitmap; /* bit/pixmap buffer */ long size; /* bit/pixmap size in bytes */ };
typedef struct TT_Raster_Map_ TT_Raster_Map;
/* ------ The font header TrueType table structure ------ */
struct TT_Header_ { TT_Fixed Table_Version; TT_Fixed Font_Revision;
TT_Long CheckSum_Adjust; TT_Long Magic_Number;
TT_UShort Flags; TT_UShort Units_Per_EM;
TT_Long Created [2]; TT_Long Modified[2];
TT_FWord xMin; TT_FWord yMin; TT_FWord xMax; TT_FWord yMax;
TT_UShort Mac_Style; TT_UShort Lowest_Rec_PPEM;
TT_Short Font_Direction; TT_Short Index_To_Loc_Format; TT_Short Glyph_Data_Format; };
typedef struct TT_Header_ TT_Header;
/* ------ The horizontal header TrueType table structure ------ */
/*******************************************************/ /* This structure is the one defined by the TrueType */ /* specification, plus two fields used to link the */ /* font-units metrics to the header. */
struct TT_Horizontal_Header_ { TT_Fixed Version; TT_FWord Ascender; TT_FWord Descender; TT_FWord Line_Gap;
TT_UFWord advance_Width_Max; /* advance width maximum */
TT_FWord min_Left_Side_Bearing; /* minimum left-sb */ TT_FWord min_Right_Side_Bearing; /* minimum right-sb */ TT_FWord xMax_Extent; /* xmax extents */ TT_FWord caret_Slope_Rise; TT_FWord caret_Slope_Run;
TT_Short Reserved0, Reserved1, Reserved2, Reserved3, Reserved4;
TT_Short metric_Data_Format; TT_UShort number_Of_HMetrics;
/* The following fields are not defined by the TrueType specification */ /* but they're used to connect the metrics header to the relevant */ /* `HMTX' or `VMTX' table. */
void* long_metrics; void* short_metrics; };
typedef struct TT_Horizontal_Header_ TT_Horizontal_Header;
/*******************************************************/ /* This structure is the one defined by the TrueType */ /* specification. Note that it has exactly the same */ /* layout as the horizontal header (both are loaded */ /* by the same function). */
struct TT_Vertical_Header_ { TT_Fixed Version; TT_FWord Ascender; TT_FWord Descender; TT_FWord Line_Gap;
TT_UFWord advance_Height_Max; /* advance height maximum */
TT_FWord min_Top_Side_Bearing; /* minimum left-sb or top-sb */ TT_FWord min_Bottom_Side_Bearing; /* minimum right-sb or bottom-sb */ TT_FWord yMax_Extent; /* xmax or ymax extents */ TT_FWord caret_Slope_Rise; TT_FWord caret_Slope_Run; TT_FWord caret_Offset;
TT_Short Reserved1, Reserved2, Reserved3, Reserved4;
TT_Short metric_Data_Format; TT_UShort number_Of_VMetrics;
/* The following fields are not defined by the TrueType specification */ /* but they're used to connect the metrics header to the relevant */ /* `HMTX' or `VMTX' table. */
void* long_metrics; void* short_metrics; };
typedef struct TT_Vertical_Header_ TT_Vertical_Header;
/* ------ The OS/2 table ------ */
/************************************************************************/ /* Note that since FreeType 1.3, we support Mac fonts which do not have */ /* an OS/2 table. In this case the `version' field will be set to */ /* 0xFFFF by the table loader; all other fields should be 0. */
struct TT_OS2_ { TT_UShort version; /* 0x0001 */ TT_FWord xAvgCharWidth; TT_UShort usWeightClass; TT_UShort usWidthClass; TT_Short fsType; TT_FWord ySubscriptXSize; TT_FWord ySubscriptYSize; TT_FWord ySubscriptXOffset; TT_FWord ySubscriptYOffset; TT_FWord ySuperscriptXSize; TT_FWord ySuperscriptYSize; TT_FWord ySuperscriptXOffset; TT_FWord ySuperscriptYOffset; TT_FWord yStrikeoutSize; TT_FWord yStrikeoutPosition; TT_Short sFamilyClass;
TT_Byte panose[10];
TT_ULong ulUnicodeRange1; /* Bits 0-31 */ TT_ULong ulUnicodeRange2; /* Bits 32-63 */ TT_ULong ulUnicodeRange3; /* Bits 64-95 */ TT_ULong ulUnicodeRange4; /* Bits 96-127 */
TT_Char achVendID[4];
TT_UShort fsSelection; TT_UShort usFirstCharIndex; TT_UShort usLastCharIndex; TT_Short sTypoAscender; TT_Short sTypoDescender; TT_Short sTypoLineGap; TT_UShort usWinAscent; TT_UShort usWinDescent;
/* only version 1 tables: */
TT_ULong ulCodePageRange1; /* Bits 0-31 */ TT_ULong ulCodePageRange2; /* Bits 32-63 */ };
typedef struct TT_OS2_ TT_OS2;
/* ------ The PostScript table ------ */
struct TT_Postscript_ { TT_Fixed FormatType; TT_Fixed italicAngle; TT_FWord underlinePosition; TT_FWord underlineThickness; TT_ULong isFixedPitch; TT_ULong minMemType42; TT_ULong maxMemType42; TT_ULong minMemType1; TT_ULong maxMemType1;
/* Glyph names follow in the file, but we don't */ /* load them by default. See the ftxpost.c extension. */ };
typedef struct TT_Postscript_ TT_Postscript;
/* ------ The horizontal device metrics table (`hdmx') ------ */
struct TT_Hdmx_Record_ { TT_Byte ppem; TT_Byte max_width; TT_Byte* widths; };
typedef struct TT_Hdmx_Record_ TT_Hdmx_Record;
struct TT_Hdmx_ { TT_UShort version; TT_Short num_records; TT_Hdmx_Record* records; };
typedef struct TT_Hdmx_ TT_Hdmx;
/* A structure used to describe face properties. */
struct TT_Face_Properties_ { TT_UShort num_Glyphs; /* number of glyphs in face */ TT_UShort max_Points; /* maximum number of points in a glyph */ TT_UShort max_Contours; /* maximum number of contours in a glyph */
TT_UShort num_CharMaps; /* number of charmaps in the face */ TT_UShort num_Names; /* number of name records in the face */
TT_ULong num_Faces; /* 1 for normal TrueType files, and the */ /* number of embedded faces for TrueType */ /* collections */
TT_Header* header; /* TrueType header table */ TT_Horizontal_Header* horizontal; /* TrueType horizontal header */ TT_OS2* os2; /* TrueType OS/2 table */ TT_Postscript* postscript; /* TrueType Postscript table */ TT_Hdmx* hdmx; /* TrueType hor. dev. metr. table */ TT_Vertical_Header* vertical; /* TT Vertical header, if present */ };
typedef struct TT_Face_Properties_ TT_Face_Properties;
/* Here are the definitions of the handle types used for FreeType's */ /* most common objects accessed by the client application. We use */ /* a simple trick: */ /* */ /* Each handle type is a structure that only contains one */ /* pointer. The advantage of structures is that they are */ /* mutually exclusive types. We could have defined the */ /* following types: */ /* */ /* typedef void* TT_Stream; */ /* typedef void* TT_Face; */ /* typedef void* TT_Instance; */ /* typedef void* TT_Glyph; */ /* typedef void* TT_CharMap; */ /* */ /* but these would have allowed lines like: */ /* */ /* stream = instance; */ /* */ /* in the client code this would be a severe bug, unnoticed */ /* by the compiler! */ /* */ /* Thus, we enforce type checking with a simple language */ /* trick... */ /* */ /* NOTE: Some macros are defined in tttypes.h to perform */ /* automatic type conversions for library hackers... */
struct TT_Engine_ { void* z; }; struct TT_Stream_ { void* z; }; struct TT_Face_ { void* z; }; struct TT_Instance_ { void* z; }; struct TT_Glyph_ { void* z; }; struct TT_CharMap_ { void* z; };
typedef struct TT_Engine_ TT_Engine; /* engine instance */ typedef struct TT_Stream_ TT_Stream; /* stream handle type */ typedef struct TT_Face_ TT_Face; /* face handle type */ typedef struct TT_Instance_ TT_Instance; /* instance handle type */ typedef struct TT_Glyph_ TT_Glyph; /* glyph handle type */ typedef struct TT_CharMap_ TT_CharMap; /* character map handle type */
/* Almost all functions return an error code of this type. */
typedef long TT_Error;
/*******************************************************************/ /* */ /* FreeType API */ /* */ /* All these begin with a `TT_' prefix. */ /* */ /* Most of them are implemented in the `ttapi.c' source file. */ /* */ /*******************************************************************/
/* Get version information. */
EXPORT_DEF TT_Error TT_FreeType_Version( int *major, int *minor );
/* Initialize the engine. */
EXPORT_DEF TT_Error TT_Init_FreeType( TT_Engine* engine );
/* Finalize the engine, and release all allocated objects. */
EXPORT_DEF TT_Error TT_Done_FreeType( TT_Engine engine );
/* Set the gray level palette. This is an array of 5 bytes used */ /* to produce the font smoothed pixmaps. By convention: */ /* */ /* palette[0] = background (white) */ /* palette[1] = light */ /* palette[2] = medium */ /* palette[3] = dark */ /* palette[4] = foreground (black) */ /* */
EXPORT_DEF TT_Error TT_Set_Raster_Gray_Palette( TT_Engine engine, TT_Byte* palette );
/* ----------------------- face management ----------------------- */
/* Open a new TrueType font file, and returns a handle for */ /* it in variable '*face'. */ /* */ /* Note: The file can be either a TrueType file (*.ttf) or */ /* a TrueType collection (*.ttc, in this case, only */ /* the first face is opened). The number of faces in */ /* the same collection can be obtained in the face's */ /* properties, using TT_Get_Face_Properties() and the */ /* `max_Faces' field. */
EXPORT_DEF TT_Error TT_Open_Face( TT_Engine engine, const TT_Text* fontPathName, TT_Face* face );
/* Open a TrueType font file located inside a collection. */ /* The font is assigned by its index in `fontIndex'. */
EXPORT_DEF TT_Error TT_Open_Collection( TT_Engine engine, const TT_Text* collectionPathName, TT_ULong fontIndex, TT_Face* face );
/* Return face properties in the `properties' structure. */ /* */ /* Note that since version 1.3, we support font files with no */ /* OS/2 table (mainly old Mac fonts). In this case, the OS/2 */ /* `version' field will be set to 0xFFFF, and all other fields */ /* will be zeroed. */
EXPORT_DEF TT_Error TT_Get_Face_Properties( TT_Face face, TT_Face_Properties* properties );
/* Set a face object's generic pointer */
EXPORT_DEF TT_Error TT_Set_Face_Pointer( TT_Face face, void* data );
/* Get a face object's generic pointer */
EXPORT_DEF void* TT_Get_Face_Pointer( TT_Face face );
/* Close a face's file handle to save system resources. The file */ /* will be re-opened automatically on the next disk access. */
EXPORT_DEF TT_Error TT_Flush_Face( TT_Face face );
/* Get a face's glyph metrics expressed in font units. Returns any */ /* number of arrays. Set the fields to NULL if you are not interested */ /* by a given array. */
EXPORT_DEF TT_Error TT_Get_Face_Metrics( TT_Face face, TT_UShort firstGlyph, TT_UShort lastGlyph, TT_Short* leftBearings, TT_UShort* widths, TT_Short* topBearings, TT_UShort* heights );
/* Close a given font object, destroying all associated */ /* instances. */
EXPORT_DEF TT_Error TT_Close_Face( TT_Face face );
/* Get font or table data. */
EXPORT_DEF TT_Error TT_Get_Font_Data( TT_Face face, TT_ULong tag, TT_Long offset, void* buffer, TT_Long* length );
/* A simple macro to build table tags from ASCII chars */
#define MAKE_TT_TAG( _x1, _x2, _x3, _x4 ) \ (((TT_ULong)_x1 << 24) | \ ((TT_ULong)_x2 << 16) | \ ((TT_ULong)_x3 << 8) | \ (TT_ULong)_x4)
/* ----------------------- instance management -------------------- */
/* Open a new font instance and returns an instance handle */ /* for it in `*instance'. */
EXPORT_DEF TT_Error TT_New_Instance( TT_Face face, TT_Instance* instance );
/* Set device resolution for a given instance. The values are */ /* given in dpi (Dots Per Inch). Default is 96 in both directions. */
EXPORT_DEF TT_Error TT_Set_Instance_Resolutions( TT_Instance instance, TT_UShort xResolution, TT_UShort yResolution );
/* Set the pointsize for a given instance. Default is 10pt. */
EXPORT_DEF TT_Error TT_Set_Instance_CharSize( TT_Instance instance, TT_F26Dot6 charSize );
EXPORT_DEF TT_Error TT_Set_Instance_CharSizes( TT_Instance instance, TT_F26Dot6 charWidth, TT_F26Dot6 charHeight );
#define TT_Set_Instance_PointSize( ins, ptsize ) \ TT_Set_Instance_CharSize( ins, ptsize*64L )
EXPORT_DEF TT_Error TT_Set_Instance_PixelSizes( TT_Instance instance, TT_UShort pixelWidth, TT_UShort pixelHeight, TT_F26Dot6 pointSize );
/* This function has been deprecated! Do not use it, as it */ /* doesn't work reliably. You can perfectly control hinting */ /* yourself when loading glyphs, then apply transforms as usual. */
EXPORT_DEF TT_Error TT_Set_Instance_Transform_Flags( TT_Instance instance, TT_Bool rotated, TT_Bool stretched );
/* Return instance metrics in `metrics'. */
EXPORT_DEF TT_Error TT_Get_Instance_Metrics( TT_Instance instance, TT_Instance_Metrics* metrics );
/* Set an instance's generic pointer. */
EXPORT_DEF TT_Error TT_Set_Instance_Pointer( TT_Instance instance, void* data );
/* Get an instance's generic pointer. */
EXPORT_DEF void* TT_Get_Instance_Pointer( TT_Instance instance );
/* Close a given instance object, destroying all associated data. */
EXPORT_DEF TT_Error TT_Done_Instance( TT_Instance instance );
/* ----------------------- glyph management ----------------------- */
/* Create a new glyph object related to the given `face'. */
EXPORT_DEF TT_Error TT_New_Glyph( TT_Face face, TT_Glyph* glyph );
/* Discard (and destroy) a given glyph object. */
EXPORT_DEF TT_Error TT_Done_Glyph( TT_Glyph glyph );
#define TTLOAD_SCALE_GLYPH 1 #define TTLOAD_HINT_GLYPH 2 #define TTLOAD_PEDANTIC 128 #define TTLOAD_IGNORE_GLOBAL_ADVANCE_WIDTH 256
#define TTLOAD_DEFAULT (TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH)
/* Load and process (scale/transform and hint) a glyph from the */ /* given `instance'. The glyph and instance handles must be */ /* related to the same face object. The glyph index can be */ /* computed with a call to TT_Char_Index(). */ /* */ /* The 'load_flags' argument is a combination of the macros */ /* TTLOAD_SCALE_GLYPH and TTLOAD_HINT_GLYPH. Hinting will be */ /* applied only if the scaling is selected. */ /* */ /* If scaling is off (i.e., load_flags = 0), the returned */ /* outlines are in EM square coordinates (also called FUnits), */ /* extracted directly from the font with no hinting. Other */ /* glyph metrics are also in FUnits. */ /* */ /* If scaling is on, the returned outlines are in fractional */ /* pixel units (i.e. TT_F26Dot6 = 26.6 fixed floats). */ /* */ /* NOTE: The glyph index must be in the range 0..num_glyphs-1, */ /* where `num_glyphs' is the total number of glyphs in */ /* the font file (given in the face properties). */
EXPORT_DEF TT_Error TT_Load_Glyph( TT_Instance instance, TT_Glyph glyph, TT_UShort glyphIndex, TT_UShort loadFlags );
/* Return glyph outline pointers in `outline'. Note that the returned */ /* pointers are owned by the glyph object, and will be destroyed with */ /* it. The client application should _not_ change the pointers. */
EXPORT_DEF TT_Error TT_Get_Glyph_Outline( TT_Glyph glyph, TT_Outline* outline );
/* Copy the glyph metrics into `metrics'. */
EXPORT_DEF TT_Error TT_Get_Glyph_Metrics( TT_Glyph glyph, TT_Glyph_Metrics* metrics );
/* Copy the glyph's big metrics into `metrics'. */ /* Necessary to obtain vertical metrics. */
EXPORT_DEF TT_Error TT_Get_Glyph_Big_Metrics( TT_Glyph glyph, TT_Big_Glyph_Metrics* metrics );
/* Render the glyph into a bitmap, with given position offsets. */ /* */ /* Note: Only use integer pixel offsets to preserve the fine */ /* hinting of the glyph and the `correct' anti-aliasing */ /* (where vertical and horizontal stems aren't grayed). This */ /* means that `xOffset' and `yOffset' must be multiples */ /* of 64! */
EXPORT_DEF TT_Error TT_Get_Glyph_Bitmap( TT_Glyph glyph, TT_Raster_Map* map, TT_F26Dot6 xOffset, TT_F26Dot6 yOffset );
/* Render the glyph into a pixmap, with given position offsets. */ /* */ /* Note: Only use integer pixel offsets to preserve the fine */ /* hinting of the glyph and the `correct' anti-aliasing */ /* (where vertical and horizontal stems aren't grayed). This */ /* means that `xOffset' and `yOffset' must be multiples */ /* of 64! */
EXPORT_DEF TT_Error TT_Get_Glyph_Pixmap( TT_Glyph glyph, TT_Raster_Map* map, TT_F26Dot6 xOffset, TT_F26Dot6 yOffset );
/* ----------------------- outline support ------------------------ */
/* Allocate a new outline. Reserve space for `numPoints' and */ /* `numContours'. */
EXPORT_DEF TT_Error TT_New_Outline( TT_UShort numPoints, TT_Short numContours, TT_Outline* outline );
/* Release an outline. */
EXPORT_DEF TT_Error TT_Done_Outline( TT_Outline* outline );
/* Copy an outline into another one. */
EXPORT_DEF TT_Error TT_Copy_Outline( TT_Outline* source, TT_Outline* target );
/* Render an outline into a bitmap. */
EXPORT_DEF TT_Error TT_Get_Outline_Bitmap( TT_Engine engine, TT_Outline* outline, TT_Raster_Map* map );
/* Render an outline into a pixmap. */
EXPORT_DEF TT_Error TT_Get_Outline_Pixmap( TT_Engine engine, TT_Outline* outline, TT_Raster_Map* map );
/* Return an outline's bounding box -- this function is slow as it */ /* performs a complete scan-line process, without drawing, to get */ /* the most accurate values. */
EXPORT_DEF TT_Error TT_Get_Outline_BBox( TT_Outline* outline, TT_BBox* bbox );
/* Apply a transformation to a glyph outline. */
EXPORT_DEF void TT_Transform_Outline( TT_Outline* outline, TT_Matrix* matrix );
/* Apply a translation to a glyph outline. */
EXPORT_DEF void TT_Translate_Outline( TT_Outline* outline, TT_F26Dot6 xOffset, TT_F26Dot6 yOffset );
/* Apply a transformation to a vector. */
EXPORT_DEF void TT_Transform_Vector( TT_F26Dot6* x, TT_F26Dot6* y, TT_Matrix* matrix );
/* Compute A*B/C with 64 bits intermediate precision. */
EXPORT_DEF TT_Long TT_MulDiv( TT_Long A, TT_Long B, TT_Long C );
/* Compute A*B/0x10000 with 64 bits intermediate precision. */ /* Useful to multiply by a 16.16 fixed float value. */
EXPORT_DEF TT_Long TT_MulFix( TT_Long A, TT_Long B );
/* ----------------- character mapping support --------------- */
/* Return the number of character mappings found in this file. */ /* Returns -1 in case of failure (invalid face handle). */ /* */ /* DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! */ /* */ /* It is retained for backwards compatibility only and will */ /* fail on 16bit systems. */ /* */ /* You can now get the charmap count in the `num_CharMaps' */ /* field of a face's properties. */ /* */
EXPORT_DEF int TT_Get_CharMap_Count( TT_Face face );
/* Return the ID of charmap number `charmapIndex' of a given face */ /* used to enumerate the charmaps present in a TrueType file. */
EXPORT_DEF TT_Error TT_Get_CharMap_ID( TT_Face face, TT_UShort charmapIndex, TT_UShort* platformID, TT_UShort* encodingID );
/* Look up the character maps found in `face' and return a handle */ /* for the one matching `platformID' and `platformEncodingID' */ /* (see the TrueType specs relating to the `cmap' table for */ /* information on these ID numbers). Returns an error code. */ /* In case of failure, the handle is set to NULL and is invalid. */
EXPORT_DEF TT_Error TT_Get_CharMap( TT_Face face, TT_UShort charmapIndex, TT_CharMap* charMap );
/* Translate a character code through a given character map */ /* and return the corresponding glyph index to be used in */ /* a TT_Load_Glyph() call. This function returns 0 in case */ /* of failure. */
EXPORT_DEF TT_UShort TT_Char_Index( TT_CharMap charMap, TT_UShort charCode );
/* --------------------- names table support ------------------- */
/* Return the number of name strings found in the name table. */ /* Returns -1 in case of failure (invalid face handle). */ /* */ /* DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! */ /* */ /* It is retained for backwards compatibility only and will */ /* fail on 16bit systems. */ /* */ /* You can now get the number of name strings in a face with */ /* the `num_Names' field of its properties. */
EXPORT_DEF int TT_Get_Name_Count( TT_Face face );
/* Return the ID of the name number `nameIndex' of a given face */ /* used to enumerate the charmaps present in a TrueType file. */
EXPORT_DEF TT_Error TT_Get_Name_ID( TT_Face face, TT_UShort nameIndex, TT_UShort* platformID, TT_UShort* encodingID, TT_UShort* languageID, TT_UShort* nameID );
/* Return the address and length of the name number `nameIndex' */ /* of a given face in the variables `stringPtr' resp. `length'. */ /* The string is part of the face object and shouldn't be */ /* written to or released. */ /* */ /* Note that for an invalid platform ID a null pointer will be */ /* returned. */
EXPORT_DEF TT_Error TT_Get_Name_String( TT_Face face, TT_UShort nameIndex, TT_String** stringPtr, TT_UShort* length );
#ifdef __cplusplus } #endif
#endif /* FREETYPE_H */
/* END */
|