From 607358967fdedae281f8e6eac33f8a6d4c9aa403 Mon Sep 17 00:00:00 2001 From: David Turner Date: Fri, 7 Jul 2000 19:46:30 +0000 Subject: [PATCH] removed obsolete files.. --- src/oldapi/Makefile | 29 - src/oldapi/readme.txt | 18 - src/oldapi/truetype.h | 1709 ------------------------------- src/oldapi/ttapi.c | 2267 ----------------------------------------- 4 files changed, 4023 deletions(-) delete mode 100644 src/oldapi/Makefile delete mode 100644 src/oldapi/readme.txt delete mode 100644 src/oldapi/truetype.h delete mode 100644 src/oldapi/ttapi.c diff --git a/src/oldapi/Makefile b/src/oldapi/Makefile deleted file mode 100644 index 3b5858cd3..000000000 --- a/src/oldapi/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# -# The OldApi component had not been migrated to the new design yet -# please wait a few days for some updates. This file should be -# completely ignored during a BUILD !! -# -# -include drivers/shared/sfnt/Makefile - -OLDAPI_DIR := $(TOP_DIR)/oldapi - -OLDAPI_INCLUDES := $(FT_IFLAG)$(SFNT_DIR) \ - $(FT_IFLAG)$(OLDAPI_DIR) \ - $(FT_IFLAG)$(TT_DIR) - -OLDAPI_CFLAGS := $(FT_CFLAGS) $(OLDAPI_INCLUDES) - -OLDAPI_OBJ := $(OBJ_DIR)/ttapi.$(FT_OBJ) - -# FreeType-1.1 compatible interface -# -$(OLDAPI_OBJ): $(OLDAPI_DIR)/ttapi.c $(OLDAPI_DIR)/truetype.h \ - $(BASE_H) $(SFNT_H) $(TT_DRV_H) - $(FT_CC) $(OLDAPI_CFLAGS) $< -o $@ - -# update main driver object lists -# -DRV_OBJS_S += $(OLDAPI_OBJ) -DRV_OBJS_M += $(OLDAPI_OBJ) - diff --git a/src/oldapi/readme.txt b/src/oldapi/readme.txt deleted file mode 100644 index da50fd70b..000000000 --- a/src/oldapi/readme.txt +++ /dev/null @@ -1,18 +0,0 @@ -This directory is provided in order to compile a stand-alone -TrueType driver which should be backwards and binary compatible -with FreeType 1.1 - -Reason is some important design changes were introduced in FreeType -lately, in order to support several font formats transparently. - -The files are : - -"truetype.h" - a replacement for the old "freetype.h" file - that was included by client applications and - font servers of 1.1 - -"ttapi.c" - a front-end for the new TrueType driver, that - presents exactly the same interface as the one - in 1.1 - - diff --git a/src/oldapi/truetype.h b/src/oldapi/truetype.h deleted file mode 100644 index e97656e71..000000000 --- a/src/oldapi/truetype.h +++ /dev/null @@ -1,1709 +0,0 @@ -/******************************************************************* - * - * truetype.h - * - * Backwards-compatible high-level interface for the TrueType - * driver. This file is a replacement for the old "freetype.h" - * from 1.0 and 1.1. It can be used to compile applications - * and tools using the old API.. - * - * Note that this (old) interface is now deprecated and won't - * be modified in the future. Developers will have to switch to - * the newer interface to get new features ( kerning, embedded - * bitmaps, etc.. ). - * - * - * - * Copyright 1996-1998 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 TRUETYPE_H -#define TRUETYPE_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 - - -/* The following types are also defined in "drivers/ttlib/ttobjs.h" */ -/* We use the _TRUETYPE_ macro to prevent their redefinition when */ -/* _compiling_ the backwards-compatible layer called "ttapi.c" */ -/* */ -#ifndef _TRUETYPE_ - - /*******************************************************************/ - /* */ - /* FreeType types definitions. */ - /* */ - /* All these begin with a 'TT_' prefix. */ - /* */ - /*******************************************************************/ - - typedef unsigned short 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 signed long TT_Long; - typedef unsigned long TT_ULong; - typedef int TT_Int; - - 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 when */ - /* 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 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; - - - -#endif /* _TRUETYPE_ */ - - - - - /* 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 When 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 When 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's 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 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" width is the advance width for horizontal layout, */ - /* and advance height for vertical layouts. */ - /* */ - /* Finally, the library (ver. 1.1) doesn't support vertical text yet */ - /* but these changes were introduced to accomodate it, as it will */ - /* most certainly be introduced in later releases. */ - - 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) */ - }; - - - /* 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 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_Glyph_Metrics_ TT_Glyph_Metrics; - 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 an WxH bitmap: */ - /* */ - /* rows = H */ - /* cols = (W+7)/8 */ - /* width = W */ - /* flow = your_choice */ - /* */ - /* - for an 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 following tables are also defined in "drivers/ttlib/ttobjs.h" */ -/* We use the _TRUETYPE_ macro to prevent their redefinition when */ -/* _compiling_ the backwards-compatible layer called "oldapi.c" */ -/* */ -#ifndef _TRUETYPE_ - - /* ------- 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 caret_Offset; /* only used in vertical header */ - TT_Short Reserved[4]; - - 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; - }; - - - /*******************************************************/ - /* 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 Reserved[4]; - - 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_Horizontal_Header_ TT_Horizontal_Header; - typedef struct TT_Vertical_Header_ TT_Vertical_Header; - - - /* ----------- OS/2 Table ----------------------------- */ - - 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; - - - /* ----------- 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; - - - /* ------------ horizontal device metrics "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; - - -#else - - typedef TT_HoriHeader TT_Horizontal_Header; - typedef TT_VertHeader TT_Vertical_Header; - -#endif /* _TRUETYPE_ */ - - - /* A structure used to describe face properties. */ - /* be aware that this is not the same structure as the one define */ - /* in "freetype/ttlib/ttdriver.h". A suitable conversion is performed */ - /* in "oldapi/ttapi.c" to build a binary driver that is backwards */ - /* compatible with FreeType 1.1, in the function TT_Get_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; - TT_Vertical_Header* vertical; /* TT Vertical header, if present */ - }; - - typedef struct TT_Face_Properties_ TT_Face_Properties; - - - - /***********************************************************************/ - /* */ - /* TT_Engine */ - /* */ - /* */ - /* A handle to a TrueType driver/engine instance. Engine objects */ - /* can be created with the TT_New_Engine and TT_Build_Engine APIs */ - /* */ - /* TT_Done_Engine will destroy an engine, as well as all the */ - /* objects that were created within it. */ - /* */ - - typedef struct TT_EngineRec_ *TT_Engine; - - /* Note : The type TT_Engine is not defined in "drivers/ttlib/ttobjs.h" */ - - - - -/* The TT_Face type is already defined in "drivers/ttlib/ttobjs.h" */ -/* We use the _TRUETYPE_ macro to prevent their redefinition when */ -/* _compiling_ the backwards-compatible layer called "oldapi.c" */ -/* */ -#ifndef _TRUETYPE_ - - /***********************************************************************/ - /* */ - /* TT_Face */ - /* */ - /* */ - /* A handle to a TrueType face/font object. A TT_Face encapsulates */ - /* the resolution and scaling independent parts of a TrueType font */ - /* file. Instances (a.k.a. fontsizes) and glyph objects must be */ - /* created from them before a glyph can be loaded in memory. */ - /* */ - /* They are created through TT_New_Face and destroyed with */ - /* TT_Done_Face. This will destroy all instance and glyph objects */ - /* */ - - typedef struct TT_FaceRec_* TT_Face; - -#endif /* _TRUETYPE_ */ - - - /***********************************************************************/ - /* */ - /* TT_Instance */ - /* */ - /* */ - /* A handle to a TrueType instance/fontsize object. A TT_Instance */ - /* encapsulates all the resolution and scaling dependent part of */ - /* a given font size, but doesn't contain any glyph. They must be */ - /* used with glyph objects in order to load glyph objects from */ - /* a TT file. */ - /* */ - /* They are created from face objects with TT_New_Instance, and */ - /* destroyed with TT_Done_Instance */ - /* */ - /* A fresh new instance has a default resolution of 96x96 dpi, */ - /* and a default point size of 10 pt. Each of these can be changed */ - /* dynamically with various APIs defined below.. */ - /* */ - - typedef struct TT_InstanceRec_* TT_Instance; - - /* Note: The TT_Instance type is not defined in "drivers/ttlib/ttobjs.h" */ - - - /***********************************************************************/ - /* */ - /* TT_Glyph */ - /* */ - /* */ - /* A handle to a TrueType glyph object. A glyph object acts as a */ - /* container for any of the glyphs of a given face object. It */ - /* encapsulates glyph metrics as well as outline space sized large */ - /* enough to allow the loading of any glyph without further */ - /* allocation. A glyph object doesn't contain any bitmap or */ - /* pixmap data/buffer. */ - /* */ - /* They are created from face objects with TT_New_Glyph, and */ - /* destroyed with TT_Done_Glyph */ - /* */ - /* One can create several glyph objects per face, and use */ - /* a single instance to load multiple glyphs, even concurrently */ - /* in thread-safe and reentrant modes.. */ - /* */ - - typedef struct TT_GlyphRec_* TT_Glyph; - - /* Note: the TT_Glyph type is not defined in "drivers/ttlib/ttobjs.h" */ - - -/* The TT_CharMap type is already defined in "drivers/ttlib/ttobjs.h" */ -/* We use the _TRUETYPE_ macro to prevent their redefinition when */ -/* _compiling_ the backwards-compatible layer called "oldapi.c" */ -/* */ -#ifndef _TRUETYPE_ - - /***********************************************************************/ - /* */ - /* TT_CharMap */ - /* */ - /* */ - /* A handle to a TrueType character mapping object. These objects */ - /* are used to convert character codes in a specific locale or */ - /* encoding into font/face glyph indexes. */ - /* */ - /* The list of character maps found within a face can be */ - /* enumerated with API functions defined below. An CharMap object */ - /* is created with TT_New_CharMap. They are destroyed automatically */ - /* when their parent face objects are discarded. */ - /* */ - - typedef struct TT_CharMapRec_* TT_CharMap; - - typedef long TT_Error; - -#endif /* _TRUETYPE_ */ - - - - EXPORT_DEF - const TT_Instance TT_Null_Instance; - - - /*******************************************************************/ - /* */ - /* Postscript Names extension */ - /* */ - /*******************************************************************/ - -#define TT_Err_Invalid_Post_Table_Format 0x0B00 -#define TT_Err_Invalid_Post_Table 0x0B01 - - /* Initialise the Postscript Names extension */ - EXPORT_DEF - TT_Error TT_Init_Post_Extension( TT_Engine engine ); - - /* Load the Postscript Names table - notice that the 'post' parameter */ - /* will be ignored in 2.0. */ - EXPORT_DEF - TT_Error TT_Load_PS_Names( TT_Face face, - void* post ); - - /* Gets the postscript name of a single glyph */ - EXPORT_DEF - TT_Error TT_Get_PS_Name( TT_Face face, - TT_UShort index, - TT_String** PSname ); - - - /*******************************************************************/ - /* */ - /* Embedded Bitmaps (sbits) extension */ - /* */ - /*******************************************************************/ - -#ifndef _TRUETYPE_ - /*************************************************************/ - /* */ - /* TT_SBit_Metrics */ - /* */ - /* */ - /* A structure used to hold the big metrics of a given */ - /* glyph bitmap in a TrueType or OpenType font. These */ - /* are usually found in the "EBDT" table. */ - /* */ - /* */ - /* height :: glyph height in pixels */ - /* width :: glyph width in pixels */ - /* */ - /* horiBearingX :: horizontal left bearing */ - /* horiBearingY :: horizontal top bearing */ - /* horiAdvance :: horizontal advance */ - /* */ - /* vertBearingX :: vertical left bearing */ - /* vertBearingY :: vertical top bearing */ - /* vertAdvance :: vertical advance */ - /* */ - typedef struct TT_SBit_Metrics_ - { - TT_Byte height; - TT_Byte width; - - TT_Char horiBearingX; - TT_Char horiBearingY; - TT_Byte horiAdvance; - - TT_Char vertBearingX; - TT_Char vertBearingY; - TT_Byte vertAdvance; - - } TT_SBit_Metrics; - - - - /*************************************************************/ - /* */ - /* TT_SBit_Small_Metrics */ - /* */ - /* */ - /* A structure used to hold the small metrics of a given */ - /* glyph bitmap in a TrueType or OpenType font. These */ - /* are usually found in the "EBDT" table. */ - /* */ - /* */ - /* height :: glyph height in pixels */ - /* width :: glyph width in pixels */ - /* */ - /* bearingX :: left-side bearing */ - /* bearingY :: top-side bearing */ - /* advance :: advance width or height */ - /* */ - typedef struct TT_SBit_Small_Metrics_ - { - TT_Byte height; - TT_Byte width; - - TT_Char bearingX; - TT_Char bearingY; - TT_Byte advance; - - } TT_SBit_Small_Metrics; - - - /*************************************************************/ - /* */ - /* TT_SBit_Line_Metrics */ - /* */ - /* */ - /* A structure used to describe the text line metrics of */ - /* a given bitmap strike, for either an horizontal or */ - /* vertical layout. */ - /* */ - /* */ - /* ascender :: ascender in pixels */ - /* descender :: descender in pixels */ - /* max_width :: maximum glyph width in pixels */ - /* */ - /* caret_slope_enumerator :: ? */ - /* caret_slope_denominator :: ? */ - /* caret_offset :: ? */ - /* */ - /* min_origin_SB :: ? */ - /* min_advance_SB :: ? */ - /* max_before_BL :: ? */ - /* min_after_BL :: ? */ - /* */ - typedef struct TT_SBit_Line_Metrics_ - { - TT_Char ascender; - TT_Char descender; - TT_Byte max_width; - TT_Char caret_slope_numerator; - TT_Char caret_slope_denominator; - TT_Char caret_offset; - TT_Char min_origin_SB; - TT_Char min_advance_SB; - TT_Char max_before_BL; - TT_Char min_after_BL; - TT_Char pads[2]; - - } TT_SBit_Line_Metrics; - - - - /*************************************************************/ - /* */ - /* TT_SBit_Range */ - /* */ - /* */ - /* A TrueType/OpenType subIndexTable as defined in the */ - /* "EBLC" or "bloc" tables. */ - /* */ - /* */ - /* */ - /* first_glyph :: first glyph index in range */ - /* last_glyph :: last glyph index in range */ - /* */ - /* index_format :: format of index table. valid */ - /* values are 1 to 5. */ - /* */ - /* image_format :: format of 'EBDT' image data */ - /* image_offset :: offset to image data in 'EBDT' */ - /* */ - /* image_size :: for index formats 2 and 5. This is */ - /* the size in bytes of each glyph bitmap */ - /* glyph bitmap */ - /* */ - /* big_metrics :: for index formats 2 and 5. This is */ - /* the big metrics for each glyph bitmap */ - /* */ - /* num_glyphs :: for index formats 4 and 5. This is */ - /* the number of glyphs in the code */ - /* array. */ - /* */ - /* glyph_offsets :: for index formats 1 and 3. */ - /* glyph_codes :: for index formats 4 and 5. */ - /* */ - /* table_offset :: offset of index table in 'EBLC' table */ - /* only used during strike loading.. */ - /* */ - typedef struct TT_SBit_Range - { - TT_UShort first_glyph; - TT_UShort last_glyph; - - TT_UShort index_format; - TT_UShort image_format; - TT_ULong image_offset; - - TT_ULong image_size; - TT_SBit_Metrics metrics; - TT_ULong num_glyphs; - - TT_ULong* glyph_offsets; - TT_UShort* glyph_codes; - - TT_ULong table_offset; - - } TT_SBit_Range; - - - /*************************************************************/ - /* */ - /* TT_SBit_Strike */ - /* */ - /* */ - /* A structure used describe a given bitmap strike in the */ - /* "EBLC" or "bloc" tables. */ - /* */ - /* */ - /* */ - /* num_index_ranges :: number of index ranges */ - /* index_ranges :: array of glyph index ranges */ - /* */ - /* color_ref :: unused. color reference ?? */ - /* hori :: line metrics for horizontal layouts. */ - /* vert :: line metrics for vertical layouts. */ - /* */ - /* start_glyph :: lowest glyph index for this strike. */ - /* end_glyph :: higher glyph index for this strike. */ - /* */ - /* x_ppem :: horizontal pixels per EM */ - /* y_ppem :: vertical pixels per EM */ - /* bit_depth :: bit depth. valid values are 1, 2, 4 & 8 */ - /* flags :: vertical or horizontal ? */ - /* */ - typedef struct TT_SBit_Strike_ - { - TT_Int num_ranges; - TT_SBit_Range* sbit_ranges; - TT_ULong ranges_offset; - - TT_ULong color_ref; - - TT_SBit_Line_Metrics hori; - TT_SBit_Line_Metrics vert; - - TT_UShort start_glyph; - TT_UShort end_glyph; - - TT_Byte x_ppem; - TT_Byte y_ppem; - TT_Byte bit_depth; - TT_Char flags; - - } TT_SBit_Strike; - - - - - /*************************************************************/ - /* */ - /* TT_SBit_Component */ - /* */ - /* */ - /* A simple structure to describe a compound sbit element */ - /* */ - /* */ - /* glyph_code :: element's glyph index */ - /* x_offset :: element's left bearing */ - /* y_offset :: element's top bearing */ - /* */ - typedef struct TT_SBit_Component_ - { - TT_UShort glyph_code; - TT_Char x_offset; - TT_Char y_offset; - - } TT_SBit_Component; - - - - /*************************************************************/ - /* */ - /* TT_SBit_Scale */ - /* */ - /* */ - /* A structure used describe a given bitmap scaling */ - /* table, asdefined for the "EBSC" table. */ - /* */ - /* */ - /* */ - /* hori :: horizontal line metrics */ - /* vert :: vertical line metrics */ - /* */ - /* x_ppem :: horizontal pixels per EM */ - /* y_ppem :: vertical pixels per EM */ - /* */ - /* x_ppem_substitute :: substitution x_ppem */ - /* y_ppem_substitute :: substitution y_ppem */ - /* */ - typedef struct TT_SBit_Scale_ - { - TT_SBit_Line_Metrics hori; - TT_SBit_Line_Metrics vert; - TT_Byte x_ppem; - TT_Byte y_ppem; - TT_Byte x_ppem_substitute; - TT_Byte y_ppem_substitute; - - } TT_SBit_Scale; -#endif /* _TRUETYPE_ */ - - - /*************************************************************/ - /* */ - /* TT_SBit_Image */ - /* */ - /* */ - /* A structure used to describe a given embedded bitmap */ - /* image. */ - /* */ - /* */ - /* map :: bitmap descriptor */ - /* bit_depth :: pixel bit depth */ - /* metrics :: glyph metrics for the bitmap */ - /* */ - typedef struct TT_SBit_Image_ - { - TT_Raster_Map map; - int bit_depth; - TT_Big_Glyph_Metrics metrics; - - } TT_SBit_Image; - - - - /*************************************************************/ - /* */ - /* TT_EBLC */ - /* */ - /* */ - /* A structure used to describe the "EBLC" table from */ - /* a TrueTYpe font. */ - /* */ - /* */ - /* */ - /* version :: version number of the EBLC table */ - /* */ - /* num_strikes :: the number of strikes, i.e. bitmap */ - /* sizes, present in this font */ - /* */ - /* strikes :: array of strikes */ - /* */ - typedef struct TT_EBLC_ - { - TT_ULong version; - TT_ULong num_strikes; - TT_SBit_Strike* strikes; - - } TT_EBLC; - - - /*************************************************************/ - /* */ - /* */ - /* TT_Init_SBit_Extension */ - /* */ - /* */ - /* Initialise the embedded bitmaps extension for the */ - /* FreeType engine. */ - /* */ - /* */ - /* engine :: handle to current FreeType library instance */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - EXPORT_DEF - TT_Error TT_Init_SBit_Extension( TT_Engine engine ); - - - /*************************************************************/ - /* */ - /* */ - /* TT_Get_Face_Bitmaps */ - /* */ - /* */ - /* Loads the "EBLC" table from a font file, if any. */ - /* */ - /* */ - /* face :: handle to the source TrueType font/face */ - /* */ - /* */ - /* eblc_table :: a descriptor for the EBLC table */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - /* */ - /* This function returns TT_Err_Table_Missing when the */ - /* font contains no embedded bitmaps. All fields in */ - /* "eblc_table" will then be set to 0. */ - /* */ - EXPORT_DEF - TT_Error TT_Get_Face_Bitmaps( TT_Face face, - TT_EBLC *eblc_table ); - - /*************************************************************/ - /* */ - /* */ - /* TT_New_SBit_Image */ - /* */ - /* */ - /* Allocates a new embedded bitmap container */ - /* */ - /* */ - /* image :: sbit image */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - EXPORT_DEF - TT_Error TT_New_SBit_Image( TT_SBit_Image* *image ); - - - /*************************************************************/ - /* */ - /* */ - /* TT_Done_SBit_Image */ - /* */ - /* */ - /* Releases an embedded bitmap container */ - /* */ - /* */ - /* image :: sbit image */ - /* */ - EXPORT_DEF - void TT_Done_SBit_Image( TT_SBit_Image* image ); - - - /*************************************************************/ - /* */ - /* */ - /* TT_Load_Glyph_Bitmap */ - /* */ - /* */ - /* Loads a given glyph embedded bitmap */ - /* */ - /* */ - /* face :: handle to the source TrueType font/face */ - /* instance :: current size/transform instance */ - /* glyph_index :: index of source glyph */ - /* bitmap :: target embedded bitmap descriptor */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - /* */ - /* This function returns an error if there is no */ - /* embedded bitmap for the glyph at the given */ - /* instance. */ - /* */ - EXPORT_DEF - TT_Error TT_Load_Glyph_Bitmap( TT_Face face, - TT_Instance instance, - TT_UShort glyph_index, - TT_SBit_Image* bitmap ); - - - /*******************************************************************/ - /* */ - /* FreeType API */ - /* */ - /* All these begin with a 'TT_' prefix. */ - /* */ - /* Most of them are implemented in the 'ttapi.c' source file. */ - /* */ - /*******************************************************************/ - - /* 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, - const 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. */ - - 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're 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*64 ) - - 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_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. */ - - /* When 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. */ - - /* When 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 -- note that this function uses */ - /* a different pixel scale, where 1.0 pixels = 128 XXXX */ - - 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. XXXX */ - - 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 ); - - - /* Multiply a matrix with another -- computes "b := a*b". */ - - EXPORT_DEF - void TT_Matrix_Multiply( TT_Matrix* a, - TT_Matrix* b ); - - - /* Invert a transformation matrix. */ - - EXPORT_DEF - TT_Error TT_Matrix_Invert( 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 mappings 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. The string is part of the face object and */ - /* shouldn't be written to or released. */ - - /* Note that if for an invalid platformID a null pointer will */ - /* be returned. */ - - EXPORT_DEF - TT_Error TT_Get_Name_String( TT_Face face, - TT_UShort nameIndex, - TT_String** stringPtr, /* pointer address */ - TT_UShort* length ); /* string length - address */ - - - -#ifdef __cplusplus - } -#endif - -#endif /* TRUETYPE_H */ - - -/* END */ diff --git a/src/oldapi/ttapi.c b/src/oldapi/ttapi.c deleted file mode 100644 index 1d072190e..000000000 --- a/src/oldapi/ttapi.c +++ /dev/null @@ -1,2267 +0,0 @@ -/******************************************************************* - * - * ttapi.c - * - * High-level interface implementation - * - * Copyright 1996-1998 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. - * - * Notes: - * - * This file is used to implement most of the functions that are - * defined in the file "freetype.h". However, two functions are - * implemented elsewhere : - * - ******************************************************************/ - -#include - -#include -#include -#include -#include -#include - -#include <../truetype/ttdriver.h> -#include <../truetype/ttobjs.h> -#include <../truetype/ttcmap.h> - -#define _TRUETYPE_ -#include /* backwards compatible interface */ - - - -/* required by the tracing mode */ -#undef FT_COMPONENT -#define FT_COMPONENT trace_ttapi - - -#define RENDER_POOL_SIZE 64000 - - static - const FT_DriverInterface* tt_interface = &tt_driver_interface; - - static - const TT_DriverInterface* tt_extension = &tt_format_interface; - - - /***********************************************************************/ - /* */ - /* TT_Init_FreeType */ - /* */ - /* */ - /* Creates a new TrueType driver/engine object. */ - /* */ - /* */ - /* engine :: handle to the new engine object */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* This function is provided for stand-alone compiles of the */ - /* TrueType driver. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Init_FreeType( TT_Engine* engine ) - { - FT_Library library; - FT_System system; - TT_Error error; - - *engine = 0; - - error = FT_New_System( &system ); - if (error) return error; - - error = FT_New_Library( system, &library ); - if (!error) - /* Now create a new TrueType driver object */ - error = FT_Add_Driver( library, - (FT_DriverInterface*)&tt_driver_interface ); - if (error) - FT_Done_Library(library); - else - *engine = (TT_Engine)library; - - return error; - } - - - /***********************************************************************/ - /* */ - /* TT_Done_FreeType */ - /* */ - /* */ - /* Destroys a given TrueType engine object created with */ - /* TT_Init_FreeType. All associated objects, (i.e. faces, outlines */ - /* and charmaps) will be destroyed.. */ - /* */ - /* */ - /* engine :: handle to the engine object */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* This function is provided for stand-alone compiles of the */ - /* TrueType driver. The FreeType library uses the TT_Done_Engine */ - /* API. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Done_FreeType( TT_Engine engine ) - { - FT_Library library = (FT_Library)engine; - - FT_Done_FreeType( library ); - return FT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Raster_Gray_Palette */ - /* */ - /* */ - /* Sets the raster's gray 5-levels palette. Entry 0 correspond to */ - /* the background, Entry 4 to the foreground. Intermediate entries */ - /* correspond to gray levels.. */ - /* */ - /* */ - /* engine :: handle to the engine object */ - /* palette :: an array of 5 bytes used to render 8-bit pixmaps */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* This function is provided for stand-alone compiles of the */ - /* TrueType driver. The FreeType library accesses directly the */ - /* raster object to set the palette. */ - /* */ - /* This function ONLY supports 5 levels of grays. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Raster_Gray_Palette( TT_Engine engine, - const TT_Byte* palette ) - { - FT_Library library; - - if (!engine) - return TT_Err_Invalid_Engine; - - library = (FT_Library)engine; - return FT_Set_Raster_Palette( library, 5, (unsigned char*)palette ); - } - - - /***********************************************************************/ - /* */ - /* TT_Open_Face */ - /* */ - /* */ - /* Creates a new face object from a given resource. The file can */ - /* be either a TrueType file (ttf) or a TrueType collection (ttc). */ - /* In the latter case, only the first face is opened. The number */ - /* of faces in a collection can be obtained in the face's */ - /* properties field "num_Faces". Other faces can be opened with */ - /* TT_Open_Collection (see below). */ - /* */ - /* */ - /* engine :: the parent engine object where to create the face */ - /* object. */ - /* */ - /* pathname :: pathname for the font file. */ - /* */ - /* */ - /* face :: a handle to the fresh face object. */ - /* */ - /* */ - /* TrueType error code. 0 means success.. */ - /* */ - /* */ - /* Yes. */ - /* */ - /* */ - /* This API is provided fro backwards compatibility. Please use */ - /* the functions TT_New_Face/TT_Done_Face now to create and */ - /* discard face objects.. */ - /* */ - - - static - TT_Error open_face( FT_Library library, - const TT_Text* pathname, - TT_Int face_index, - TT_Face *aface ) - { - TT_Error error; - FT_Resource resource; - - *aface = 0; - - error = FT_New_Resource( library, pathname, &resource ); - if (error) return error; - -#if 0 - error = FT_Add_Resource( library, resource ); - if (error) goto Fail_Install; -#endif - error = FT_New_Face( resource, face_index, (FT_Face*)aface ); - - /* Destroy glyph slot to comply with the 1.x API */ - if (!error) - FT_Done_GlyphSlot( (*aface)->root.slot ); - - if (error) - FT_Done_Resource(resource); - - return error; - } - - - EXPORT_DEF - TT_Error TT_Open_Face( TT_Engine engine, - const TT_Text* pathname, - TT_Face* aface ) - { - if (!engine) - return TT_Err_Invalid_Driver_Handle; - - return open_face( (FT_Library)engine, pathname, 0, aface ); - } - - - /***********************************************************************/ - /* */ - /* TT_Open_Collection */ - /* */ - /* */ - /* Loads a given face within a collection. */ - /* */ - /* */ - /* engine :: TrueType engine object where to load the face */ - /* pathname :: the collection's pathname */ - /* fontIndex :: index of face within the collection. first is 0 */ - /* */ - /* */ - /* face :: handle to the new face object. Always set to NULL */ - /* in case of error */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* Yes. */ - /* */ - /* */ - /* This API is provided for backwards compatibility. Please use */ - /* the functions TT_New_Collection/TT_Done_Face now to create and */ - /* discard face/collection objects. */ - /* */ - - EXPORT_DEF - TT_Error TT_Open_Collection( TT_Engine engine, - const TT_Text* pathname, - TT_ULong fontIndex, - TT_Face* aface ) - { - if (!engine) - return TT_Err_Invalid_Driver_Handle; - - return open_face( (FT_Library)engine, pathname, fontIndex, aface ); - } - - - /***********************************************************************/ - /* */ - /* TT_Close_Face */ - /* */ - /* */ - /* Destroys a given face object opened through either TT_Open_Face */ - /* of TT_Open_Collection. */ - /* */ - /* */ - /* face :: handle to the target face object */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* This API is provided for backwards compatibility. Please use */ - /* the functions TT_New_Face/TT_Done_Face now to create and */ - /* discard face/collection objects. */ - /* */ - - EXPORT_DEF - TT_Error TT_Close_Face( TT_Face face ) - { - FT_Resource resource; - - if (!face) - return TT_Err_Invalid_Face_Handle; - - resource = face->root.resource; - FT_Done_Face( (FT_Face)face ); - - /* uninstall corresponding resource */ - FT_Done_Resource( resource ); - - return TT_Err_Ok; - } - - - /***********************************************************************/ - /***********************************************************************/ - /***********************************************************************/ - /***********************************************************************/ - /*********** ***********/ - /*********** End of backwards compatible APIs.. ***********/ - /*********** ***********/ - /***********************************************************************/ - /***********************************************************************/ - /***********************************************************************/ - /***********************************************************************/ - - - /***********************************************************************/ - /* */ - /* TT_Get_Face_Properties */ - /* */ - /* */ - /* Return a given face's properties to the caller. */ - /* */ - /* */ - /* face :: handle to the source face object */ - /* */ - /* */ - /* properties :: target properties structure */ - /* */ - /* */ - /* TrueType error code. 0 means success. */ - /* */ - /* */ - /* Yes. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Get_Face_Properties( TT_Face face, - TT_Face_Properties* props ) - { - props->num_Glyphs = (TT_UShort)face->root.num_glyphs; - props->max_Points = (TT_UShort)face->root.max_points; - props->max_Contours = (TT_UShort)face->root.max_contours; - props->num_CharMaps = (TT_UShort)face->root.num_charmaps; - props->num_Faces = face->root.num_faces; - props->num_Names = face->num_names; - props->header = &face->header; - props->horizontal = &face->horizontal; - - /* The driver supports old Mac fonts where there are no OS/2 */ - /* tables present in the file. However, this is not true of */ - /* FreeType 1.1. For the sake of backwards compatibility, we */ - /* always return the address of the face's os2 table, even if */ - /* it is empty (in which case, the 'props.os2' field is set */ - /* to NULL.. */ - /* */ - /* Note however, that the 'os2->version' field is set to */ - /* 0xFFFF to indicate a missing table though... */ - /* */ - - props->os2 = &face->os2; - - props->postscript = &face->postscript; - props->hdmx = &face->hdmx; - props->vertical = ( face->vertical_info ? &face->vertical : 0 ); - - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Face_Pointer. */ - /* */ - /* */ - /* Each face object contains a typeless pointer, which use is left */ - /* to client applications (or the high-level library). This API is */ - /* used to set this generic pointer. It is ignored by the driver. */ - /* */ - /* */ - /* face :: target face object */ - /* data :: generic pointer's value */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* The generic pointer is used by the HLib when using the driver */ - /* within the FreeType library. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Face_Pointer( TT_Face face, - void* data ) - { - if ( !face ) - return TT_Err_Invalid_Face_Handle; - else - face->root.generic.data = data; - - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Get_Face_Pointer */ - /* */ - /* */ - /* Each face object contains a typeless pointer, which use is left */ - /* to client applications (or the high-level library). This API is */ - /* used to retrieve this generic pointer, which is ignored by the */ - /* driver. */ - /* */ - /* */ - /* face :: handle to source face object */ - /* */ - /* */ - /* generic pointer value. NULL if the face handle is invalid.. */ - /* */ - /* */ - /* No. */ - /* */ - - EXPORT_FUNC - void* TT_Get_Face_Pointer( TT_Face face ) - { - return ( face ? face->root.generic.data : NULL ); - } - - /***********************************************************************/ - /* */ - /* TT_Get_Face_Metrics */ - /* */ - /* */ - /* Get the metrics of a given array of glyphs. Returns any number */ - /* of metrics arrays. */ - /* */ - /* */ - /* face :: handle to the source face object */ - /* firstGlyph :: index of first glyph in the array */ - /* lastGlyph :: index of last glyph in the array */ - /* */ - /* */ - /* leftBearings :: target array of shorts for the glyph left side */ - /* bearings. Set this field to NULL if you're not */ - /* interested in these metrics. */ - /* */ - /* widths :: target array of unsigned shorts for the glyph advance */ - /* widths. Set this field to NULL if you're not */ - /* interested in these metrics. */ - /* */ - /* topBearings :: target array of shorts for the glyph top side */ - /* bearings. Set this field to NULL if you're not */ - /* interested in these metrics. */ - /* */ - /* heights :: target array of unsigned shorts for the glyph advance */ - /* heights. Set this field to NULL if you're not */ - /* interested in these metrics. */ - /* */ - /* */ - /* TrueType error code. 0 means success. */ - /* */ - /* */ - /* No. */ - /* */ - - /********************************************************/ - /* Return horizontal or vertical metrics in font units */ - /* for a given glyph. The metrics are the left side */ - /* bearing (resp. top side bearing) and advance width */ - /* (resp. advance height). */ - /* */ - /* This function will much probably move to another */ - /* component in the short future, but I haven't decided */ - /* which yet... */ - - static - void get_metrics( TT_HoriHeader* header, - TT_Int index, - TT_Short* bearing, - TT_UShort* advance ) - { - TT_LongMetrics* longs_m; - - TT_UShort k = header->number_Of_HMetrics; - - - if ( index < k ) - { - longs_m = (TT_LongMetrics*)header->long_metrics + index; - *bearing = longs_m->bearing; - *advance = longs_m->advance; - } - else - { - *bearing = ((TT_ShortMetrics*)header->short_metrics)[index - k]; - *advance = ((TT_LongMetrics*)header->long_metrics)[k - 1].advance; - } - } - - - - EXPORT_FUNC - 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 ) - { - TT_UShort num; - - if ( !face ) - return TT_Err_Invalid_Face_Handle; - - /* Check the glyph range */ - if ( lastGlyph >= face->root.num_glyphs || firstGlyph > lastGlyph ) - return TT_Err_Invalid_Argument; - - num = lastGlyph - firstGlyph; /* number of elements-1 in each array */ - - /* store the left side bearings and advance widths first */ - { - TT_UShort n; - TT_Short left_bearing; - TT_UShort advance_width; - - - for ( n = 0; n <= num; n++ ) - { - get_metrics( &face->horizontal, - firstGlyph + n, &left_bearing, &advance_width ); - - if ( leftBearings ) leftBearings[n] = left_bearing; - if ( widths ) widths[n] = advance_width; - } - } - - /* check for vertical data if topBearings or heights is non-NULL */ - if ( !topBearings && !heights ) - return TT_Err_Ok; - - if ( !face->vertical_info ) - return TT_Err_No_Vertical_Data; - - /* store the top side bearings */ - { - TT_UShort n; - TT_Short top_bearing; - TT_UShort advance_height; - - for ( n = 0; n <= num; n++ ) - { - get_metrics( (TT_HoriHeader*)&face->vertical, - firstGlyph + n, &top_bearing, &advance_height ); - - if ( topBearings ) topBearings[n] = top_bearing; - if ( heights ) heights[n] = advance_height; - } - } - - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_New_Instance */ - /* */ - /* */ - /* Creates a new instance object from a given face */ - /* */ - /* */ - /* face :: handle to source/parent face object */ - /* */ - /* */ - /* instance :: handle to fresh object. Set to NULL in case of */ - /* error. */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* Yes. */ - /* */ - /* */ - /* Any new instance uses a default resolution of 96x96 dpi, and */ - /* a default point size of 10 pts. You can change these anytime */ - /* with TT_Set_Instance_Resolutions/CharSize/CharSizes/PixelSizes */ - /* (see below). */ - /* */ - - EXPORT_FUNC - TT_Error TT_New_Instance( TT_Face face, - TT_Instance* instance ) - { - return FT_New_Size( (FT_Face)face, (FT_Size*)instance ); - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_Resolutions */ - /* */ - /* */ - /* Sets an instance resolutions in dot-per-inches. Default values */ - /* for "new" instances are 96x96 dpi, but these can be changed any */ - /* time by calling this API. */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* xResolution :: horizontal device resolution in dpi. */ - /* yResolution :: vertical device resolution in dpi. */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* You should set the charsize or pixel size immediately after */ - /* call in multi-htreaded programs. This will force the instance */ - /* data to be resetted. Otherwise, you may encounter corruption */ - /* when loading two glyphs from the same instance concurrently! */ - /* */ - /* Happily, 99.99% will do just that :-) */ - /* */ - /* */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_Resolutions( TT_Instance ins, - TT_UShort xResolution, - TT_UShort yResolution ) - { - return FT_Set_Resolutions( (FT_Size)ins, xResolution, yResolution ); - } - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_CharSizes */ - /* */ - /* */ - /* Same as TT_Set_Instance_CharSize, but used to specify distinct */ - /* horizontal and vertical coordinates. */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* charWidth :: horizontal character size (26.6 points) */ - /* charHeight :: vertical character size (26.6 points) */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* There is no check for overflow; with other words, the product */ - /* of glyph dimensions times the device resolution must have */ - /* reasonable values. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_CharSizes( TT_Instance ins, - TT_F26Dot6 charWidth, - TT_F26Dot6 charHeight ) - { - return FT_Set_Char_Sizes( (FT_Size)ins, charWidth, charHeight ); - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_CharSize */ - /* */ - /* */ - /* Sets an instance's character size. The size is in fractional */ - /* (26.6) point units. This function sets the horizontal and */ - /* vertical sizes to be equal. Use TT_Set_Instance_CharSizes */ - /* for distinct X and Y char sizes. */ - /* */ - /* The default charsize of a new instance object is 10 pts. */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* charSize :: character size expressed in 26.6 fixed float */ - /* points. 1 point = 1/72 dpi. */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_CharSize( TT_Instance instance, - TT_F26Dot6 charSize ) - { - return TT_Set_Instance_CharSizes( instance, charSize, charSize ); - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_PixelSizes */ - /* */ - /* */ - /* This function is used to set an instance's pixel sizes directly */ - /* It ignores the instance's resolutions fields, and you'll have to */ - /* specify the corresponding pointsize in 26.6 fixed float point */ - /* units. The latter is a requirement of the TrueType bytecode */ - /* interpreter but can be ignored (or more safely, set to the */ - /* maximum pixel size multiplied by 64). */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* pixelWidth :: horizontal pixel width (integer value) */ - /* pixelHeight :: vertical pixel height (integer value) */ - /* pointSize :: corresponding point size (26.6 points) */ - /* */ - /* */ - /* TrueType error code. 0 means success. */ - /* */ - /* */ - /* No. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_PixelSizes( TT_Instance ins, - TT_UShort pixelWidth, - TT_UShort pixelHeight, - TT_F26Dot6 pointSize ) - { - /* The point size is now ignored by the driver */ - (void)pointSize; - - return FT_Set_Pixel_Sizes( (FT_Size)ins, pixelWidth, pixelHeight ); - } - - /***********************************************************************/ - /* */ - /* TT_Get_Instance_Metrics */ - /* */ - /* */ - /* Returns an instance's metrics into caller space. */ - /* */ - /* */ - /* instance :: handle to source instance object */ - /* */ - /* */ - /* metrics :: target instance metrics structure */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* The TT_Instance_Metrics structure differs slightly from the */ - /* FT_Instance_Metrics one, which is why we re-implement this */ - /* function, rather than call a driver method for this.. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Get_Instance_Metrics( TT_Instance ins, - TT_Instance_Metrics* metrics ) - { - TT_Size size = (TT_Size)ins; - - if (!ins) - return TT_Err_Invalid_Instance_Handle; - - metrics->x_scale = size->root.metrics.x_scale; - metrics->y_scale = size->root.metrics.y_scale; - metrics->x_resolution = size->root.metrics.x_resolution; - metrics->y_resolution = size->root.metrics.y_resolution; - metrics->x_ppem = size->root.metrics.x_ppem; - metrics->y_ppem = size->root.metrics.y_ppem; - - metrics->pointSize = size->root.metrics.pointSize; - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_Pointer */ - /* */ - /* */ - /* Each instance object contains a typeless pointer, which use is */ - /* left to client applications (or the high-level library). This */ - /* API is used to set this generic pointer. It is ignored by the */ - /* driver. */ - /* */ - /* */ - /* instance :: handle to the target instance object */ - /* data :: value of the generic pointer */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_Pointer( TT_Instance ins, - void* data ) - { - if ( !ins ) - return TT_Err_Invalid_Instance_Handle; - else - ((FT_Size)ins)->generic.data = data; - - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Get_Instance_Pointer */ - /* */ - /* */ - /* Each instance object contains a typeless pointer, which use is */ - /* left to client applications (or the high-level library). This */ - /* API is used to retrieve this generic pointer. It is ignored by */ - /* the driver. */ - /* */ - /* */ - /* instance :: handle to source instance object */ - /* */ - /* */ - /* value of generic pointer. NULL if invalid instance */ - /* */ - /* */ - /* No. */ - - EXPORT_FUNC - void* TT_Get_Instance_Pointer( TT_Instance instance ) - { - if ( !instance ) - return NULL; - else - return ((FT_Size)instance)->generic.data; - } - - - /***********************************************************************/ - /* */ - /* TT_Done_Instance */ - /* */ - /* */ - /* Destroys a given instance object. All instances are destroyed */ - /* automatically when their parent face object is discarded. */ - /* However, this API can be used to save memory. */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - - EXPORT_FUNC - TT_Error TT_Done_Instance( TT_Instance ins ) - { - FT_Done_Size( (FT_Size)ins ); - return TT_Err_Ok; - } - - - /***********************************************************************/ - /* */ - /* TT_Set_Instance_Transform_Flags */ - /* */ - /* */ - /* Nothing. This function has been deprecated... */ - /* */ - /* */ - /* instance :: handle to target instance object */ - /* rotated :: 'rotation' flag.. */ - /* stretched :: 'stretch' flag.. */ - /* */ - /* */ - /* Always 0. */ - /* */ - /* */ - /* This function has been deprecated !! Do not use it, it doesn't */ - /* do anything now.. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Set_Instance_Transform_Flags( TT_Instance instance, - TT_Bool rotated, - TT_Bool stretched ) - { - (void)instance; /* the parameters are unused, the (void) prevents */ - (void)rotated; /* warnings from pedantic compilers.. */ - (void)stretched; - - return TT_Err_Ok; - } - - - - /***********************************************************************/ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ -/******************************************************************* - * - * Function : TT_New_Glyph - * - * Description : Creates a new glyph object related to a given - * face. - * - * Input : face the face handle - * glyph address of target glyph handle - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_New_Glyph( TT_Face face, - TT_Glyph* aglyph ) - { - return FT_New_GlyphSlot( (FT_Face)face, (FT_GlyphSlot*)aglyph ); - } - - -/******************************************************************* - * - * Function : TT_Done_Glyph - * - * Description : Destroys a given glyph object. - * - * Input : glyph the glyph handle - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Done_Glyph( TT_Glyph glyph ) - { - FT_Done_GlyphSlot( (FT_GlyphSlot)glyph ); - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Load_Glyph - * - * Description : Loads a glyph. - * - * Input : instance the instance handle - * glyph the glyph handle - * glyphIndex the glyph index - * loadFlags flags controlling how to load the glyph - * (none, scaled, hinted, both) - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Load_Glyph( TT_Instance instance, - TT_Glyph glyph, - TT_UShort glyphIndex, - TT_UShort loadFlags ) - { - TT_Int result, flags; - - flags = 0; - - /* Convert load flags */ - if ( (loadFlags & TTLOAD_SCALE_GLYPH) == 0 ) - flags = FT_LOAD_NO_SCALE; - - else if ( (loadFlags & TTLOAD_HINT_GLYPH) == 0 ) - flags = FT_LOAD_NO_HINTING; - - else - flags = FT_LOAD_DEFAULT; - - flags |= FT_LOAD_NO_BITMAP | /* prevent bitmap loading for */ - FT_LOAD_LINEAR; /* compatibility purposes.. */ - - return FT_Load_Glyph( (FT_GlyphSlot)glyph, - (FT_Size)instance, - glyphIndex, - flags, - &result ); - } - - -/******************************************************************* - * - * Function : TT_Get_Glyph_Outline - * - * Description : Returns the glyph's outline data. - * - * Input : glyph the glyph handle - * outline address where the glyph outline will be returned - * - * Output : Error code. - * - * MT-Safe : YES! Reads only semi-permanent data. - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Glyph_Outline( TT_Glyph glyph, - TT_Outline* outline ) - { - FT_GlyphSlot slot = (FT_GlyphSlot)glyph; - - if (!glyph) - return TT_Err_Invalid_Glyph_Handle; - - /* the structures TT_Outline and FT_Outline are equivalent */ - *((FT_Outline*)outline) = slot->outline; - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_Glyph_Metrics - * - * Description : Extracts the glyph's horizontal metrics information. - * - * Input : glyph glyph object handle - * metrics address where metrics will be returned - * - * Output : Error code. - * - * MT-Safe : NO! Glyph containers can't be shared. - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Glyph_Metrics( TT_Glyph glyph, - TT_Glyph_Metrics* metrics ) - { - FT_GlyphSlot slot = (FT_GlyphSlot)glyph; - - if (!glyph) - return TT_Err_Invalid_Glyph_Handle; - - /* TT_Glyph_Metrics and FT_Glyph_Metrics are slightly different */ - metrics->bbox.xMin = slot->metrics.horiBearingX; - - metrics->bbox.xMax = slot->metrics.horiBearingX + - slot->metrics.width; - - metrics->bbox.yMax = slot->metrics.horiBearingY; - - metrics->bbox.yMin = slot->metrics.horiBearingY - - slot->metrics.height; - - metrics->bearingX = slot->metrics.horiBearingX; - metrics->bearingY = slot->metrics.horiBearingY; - metrics->advance = slot->metrics.horiAdvance; - - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_Big_Glyph_Metrics - * - * Description : Extracts the glyph's big metrics information. - * - * Input : glyph glyph object handle - * metrics address where big metrics will be returned - * - * Output : Error code. - * - * MT-Safe : NO! Glyph containers can't be shared. - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Glyph_Big_Metrics( TT_Glyph glyph, - TT_Big_Glyph_Metrics* metrics ) - { - FT_GlyphSlot slot = (FT_GlyphSlot)glyph; - FT_Glyph_Metrics* met; - FT_Glyph_Metrics* met2; - - if (!glyph) - return TT_Err_Invalid_Glyph_Handle; - - met = &slot->metrics; - met2 = &slot->metrics2; - - metrics->bbox.xMin = met->horiBearingX; - metrics->bbox.xMax = met->horiBearingX + met->width; - metrics->bbox.yMin = met->horiBearingY - met->height; - metrics->bbox.yMax = met->horiBearingY; - - metrics->horiBearingX = met->horiBearingX; - metrics->horiBearingY = met->horiBearingY; - metrics->horiAdvance = met->horiAdvance; - - metrics->vertBearingX = met->vertBearingX; - metrics->vertBearingY = met->vertBearingY; - metrics->vertAdvance = met->vertAdvance; - - metrics->linearHoriAdvance = met2->horiAdvance; - metrics->linearHoriBearingX = met2->horiBearingX; - - metrics->linearVertAdvance = met2->vertAdvance; - metrics->linearVertBearingY = met2->vertBearingY; - - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_Glyph_Bitmap - * - * Description : Produces a bitmap from a glyph outline. - * - * Input : glyph the glyph container's handle - * map target pixmap description block - * xOffset x offset in fractional pixels (26.6 format) - * yOffset y offset in fractional pixels (26.6 format) - * - * Output : Error code. - * - * Note : Only use integer pixel offsets if you want to preserve - * the fine hints applied to the outline. This means that - * xOffset and yOffset must be multiples of 64! - * - * MT-Safe : NO! Glyph containers can't be shared. - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Glyph_Bitmap( TT_Glyph glyph, - TT_Raster_Map* map, - TT_F26Dot6 xOffset, - TT_F26Dot6 yOffset ) - { - FT_Library library; - TT_Error error; - FT_GlyphSlot slot = (FT_GlyphSlot)glyph; - FT_Outline outline; - FT_Raster_Map bitmap; - - if ( !glyph ) - return TT_Err_Invalid_Glyph_Handle; - - library = slot->face->resource->library; - outline = slot->outline; - - /* XXX : For now, use only dropout mode 2 */ - /* outline.dropout_mode = _glyph->scan_type; */ - outline.dropout_mode = 2; - - bitmap.width = map->width; - bitmap.rows = map->rows; - bitmap.cols = map->cols; - bitmap.flow = map->flow; - bitmap.pix_bits = 1; - bitmap.buffer = map->bitmap; - - FT_Translate_Outline( &outline, xOffset, yOffset ); - - error = FT_Get_Outline_Bitmap( library, &outline, &bitmap ); - - FT_Translate_Outline( &outline, -xOffset, -yOffset ); - - return error; - } - - -/******************************************************************* - * - * Function : TT_Get_Glyph_Pixmap - * - * Description : Produces a grayscaled pixmap from a glyph - * outline. - * - * Input : glyph the glyph container's handle - * map target pixmap description block - * xOffset x offset in fractional pixels (26.6 format) - * yOffset y offset in fractional pixels (26.6 format) - * - * Output : Error code. - * - * 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! - * - * You can experiment with offsets of +32 to get 'blurred' - * versions of the glyphs (a nice effect at large sizes that - * some graphic designers may appreciate :) - * - * MT-Safe : NO! Glyph containers can't be shared. - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Glyph_Pixmap( TT_Glyph glyph, - TT_Raster_Map* map, - TT_F26Dot6 xOffset, - TT_F26Dot6 yOffset ) - { - FT_Library library; - TT_Error error; - FT_GlyphSlot slot = (FT_GlyphSlot)glyph; - FT_Outline outline; - FT_Raster_Map bitmap; - - if ( !glyph ) - return TT_Err_Invalid_Glyph_Handle; - - library = slot->face->resource->library; - outline = slot->outline; - - /* XXX : For now, use only dropout mode 2 */ - /* outline.dropout_mode = _glyph->scan_type; */ - outline.dropout_mode = 2; - - bitmap.width = map->width; - bitmap.rows = map->rows; - bitmap.cols = map->cols; - bitmap.flow = map->flow; - bitmap.pix_bits = 8; - bitmap.buffer = map->bitmap; - - FT_Translate_Outline( &outline, xOffset, yOffset ); - - error = FT_Get_Outline_Bitmap( library, &outline, &bitmap ); - - FT_Translate_Outline( &outline, -xOffset, -yOffset ); - - return error; - } - - - - /***********************************************************************/ - /* */ - /* TT_Get_Outline_Bitmap */ - /* */ - /* */ - /* Renders an outline within a bitmap. The outline's image is */ - /* simply or-ed to the target bitmap. */ - /* */ - /* */ - /* engine :: handle to the TrueType driver object */ - /* outline :: pointer to the source outline descriptor */ - /* raster :: pointer to the target bitmap descriptor */ - /* */ - /* */ - /* TrueType error code. 0 means success. */ - /* */ - /* */ - /* Yes. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Get_Outline_Bitmap( TT_Engine engine, - TT_Outline* outline, - TT_Raster_Map* map ) - { - FT_Library library = (FT_Library)engine; - FT_Raster_Map bitmap; - - if ( !engine ) - return TT_Err_Invalid_Engine; - - if ( !outline || !map ) - return TT_Err_Invalid_Argument; - - bitmap.width = map->width; - bitmap.rows = map->rows; - bitmap.cols = map->cols; - bitmap.flow = map->flow; - bitmap.pix_bits = 1; - bitmap.buffer = map->bitmap; - - return FT_Get_Outline_Bitmap( library, (FT_Outline*)outline, &bitmap ); - } - - - /***********************************************************************/ - /* */ - /* TT_Get_Outline_Pixmap */ - /* */ - /* */ - /* Renders an outline within a pixmap. The outline's image is */ - /* simply or-ed to the target pixmap. */ - /* */ - /* */ - /* engine :: handle to the TrueType driver object */ - /* outline :: pointer to the source outline descriptor */ - /* raster :: pointer to the target pixmap descriptor */ - /* */ - /* */ - /* TrueType error code. 0 means success. */ - /* */ - /* */ - /* Yes. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Get_Outline_Pixmap( TT_Engine engine, - TT_Outline* outline, - TT_Raster_Map* map ) - { - FT_Library library = (FT_Library)engine; - FT_Raster_Map bitmap; - - if ( !engine ) - return TT_Err_Invalid_Engine; - - if ( !outline || !map ) - return TT_Err_Invalid_Argument; - - bitmap.width = map->width; - bitmap.rows = map->rows; - bitmap.cols = map->cols; - bitmap.flow = map->flow; - bitmap.pix_bits = 8; - bitmap.buffer = map->bitmap; - - return FT_Get_Outline_Bitmap( library, (FT_Outline*)outline, &bitmap ); - } - - - - - /***********************************************************************/ - /* */ - /* TT_New_Outline */ - /* */ - /* */ - /* Creates a new outline of a given size. */ - /* */ - /* */ - /* numPoints :: maximum number of points within the outline */ - /* */ - /* numContours :: maximum number of contours within the outline */ - /* */ - /* */ - /* outline :: target outline descriptor. */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* Yes. */ - /* */ - /* */ - /* This function uses 'malloc' to allocate the outline's array, */ - /* _unlike_ all other functions in the TrueType API. This means */ - /* that the outline won't be destroyed when the TrueType engine */ - /* is finalized.. */ - /* */ - /* It is provided for backwards compatibility ONLY. Use the new */ - /* FT_New_Outline function defined in "ftoutln.h" instead if you're */ - /* working with the FreeType 2.0 API. */ - /* */ - -#include /* for malloc and free */ - - static TT_Outline null_api_outline = { 0, 0, NULL, NULL, NULL, - 0, 0, 0, 0 }; - - EXPORT_FUNC - TT_Error TT_New_Outline( TT_UShort numPoints, - TT_Short numContours, - TT_Outline* outline ) - { - if ( !outline ) - return TT_Err_Invalid_Argument; - - *outline = null_api_outline; - - if ( numPoints > 0 && numContours > 0 ) - { - outline->points = (TT_Vector*)malloc( numPoints * sizeof(TT_Vector) ); - outline->flags = (TT_Byte*) malloc( numPoints * sizeof(TT_Char) ); - outline->contours = (TT_UShort*)malloc( numPoints * sizeof(TT_UShort) ); - - if ( !outline->points || !outline->flags || !outline->contours ) - goto Fail; - - outline->n_points = numPoints; - outline->n_contours = numContours; - outline->owner = TRUE; - } - return TT_Err_Ok; - - Fail: - outline->owner = TRUE; - TT_Done_Outline( outline ); - return TT_Err_Out_Of_Memory; - } - - - /***********************************************************************/ - /* */ - /* TT_Done_Outline */ - /* */ - /* */ - /* Destroys an outline created with FT_New_Outline */ - /* */ - /* */ - /* outline :: */ - /* pointer to the outline destructor to discard. This function */ - /* doesn't destroy the TT_Outline sturcture, only the data it */ - /* contains/own. */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - /* */ - /* No. */ - /* */ - /* */ - /* This function uses 'free' to discard the outline's arrays. */ - /* You should only discard outline allocated with TT_New_Outline. */ - /* */ - /* It is provided for backwards compatibility ONLY. Use the new */ - /* FT_Done_Outline function defined in "ftoutln.h" instead if you're*/ - /* working with the FreeType 2.0 API. */ - /* */ - - EXPORT_FUNC - TT_Error TT_Done_Outline( TT_Outline* outline ) - { - if ( outline ) - { - if ( outline->owner ) - { - free( outline->points ); - free( outline->flags ); - free( outline->contours ); - } - *outline = null_api_outline; - return TT_Err_Ok; - } - else - return TT_Err_Invalid_Argument; - } - - - - /***********************************************************************/ - /* */ - /* TT_Copy_Outline */ - /* */ - /* */ - /* Copy an outline into another one. Both objects must have */ - /* the same sizes ( num. points & num. contours ) when this */ - /* function is called.. */ - /* */ - /* */ - /* source :: handle to source outline */ - /* target :: handle to target outline */ - /* */ - /* */ - /* TrueType error code. 0 means success */ - /* */ - - EXPORT_FUNC - TT_Error TT_Copy_Outline( TT_Outline* source, - TT_Outline* target ) - { - return FT_Copy_Outline( (FT_Outline*)source, - (FT_Outline*)target ); - } - - -/******************************************************************* - * - * Function : TT_Transform_Outline - * - * Description : Applies a simple transformation to an outline. - * - * Input : outline the glyph's outline. Can be extracted - * from a glyph container through - * TT_Get_Glyph_Outline(). - * - * matrix simple matrix with 16.16 fixed floats - * - * Output : Error code (always TT_Err_Ok). - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - void TT_Transform_Outline( TT_Outline* outline, - TT_Matrix* matrix ) - { - FT_Transform_Outline( (FT_Outline*)outline, (FT_Matrix*)matrix ); - } - -/******************************************************************* - * - * Function : TT_Transform_Vector - * - * Description : Apply a simple transform to a vector - * - * Input : x, y the vector. - * - * matrix simple matrix with 16.16 fixed floats - * - * Output : None. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - void TT_Transform_Vector( TT_F26Dot6* x, - TT_F26Dot6* y, - TT_Matrix* matrix ) - { - FT_Transform_Vector( x, y, (FT_Matrix*) matrix ); - } - - -/******************************************************************* - * - * Function : TT_Translate_Outline - * - * Description : Applies a simple translation. - * - * Input : outline no comment :) - * xOffset - * yOffset - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - void TT_Translate_Outline( TT_Outline* outline, - TT_F26Dot6 xOffset, - TT_F26Dot6 yOffset ) - { - FT_Translate_Outline( (FT_Outline*)outline, xOffset, yOffset ); - } - - -/******************************************************************* - * - * Function : TT_Get_Outline_BBox - * - * Description : Returns an outline's bounding box. - * - * Input : outline no comment :) - * bbox address where the bounding box is returned - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Outline_BBox( TT_Outline* outline, - TT_BBox* bbox ) - { - return FT_Get_Outline_CBox( (FT_Outline*)outline, (FT_BBox*)bbox ); - } - - /***********************************************************************/ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* Compute A*B/C with 64 bits intermediate precision. */ - - EXPORT_FUNC - TT_Long TT_MulDiv( TT_Long A, TT_Long B, TT_Long C ) - { - return FT_MulDiv( A, B, C ); - } - - - /***********************************************************************/ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* */ - /* Compute A*B/0x10000 with 64 bits intermediate precision. */ - /* Useful to multiply by a 16.16 fixed float value. */ - - EXPORT_FUNC - TT_Long TT_MulFix( TT_Long A, TT_Long B ) - { - return FT_MulFix( A, B ); - } - - /* ----------------- character mappings support ------------- */ - -/******************************************************************* - * - * Function : TT_Get_CharMap_Count - * - * Description : Returns the number of charmaps in a given face. - * - * Input : face face object handle - * - * Output : Number of tables. -1 in case of error (bad handle). - * - * Note : DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! - * - * It is retained for backwards compatibility only and will - * fail on 16bit systems. - * - * MT-Safe : YES ! - * - ******************************************************************/ - - EXPORT_FUNC - int TT_Get_CharMap_Count( TT_Face face ) - { - FT_Face _face = (FT_Face)face; - - return ( _face ? _face->num_charmaps : -1 ); - } - - -/******************************************************************* - * - * Function : TT_Get_CharMap_ID - * - * Description : Returns the ID of a given charmap. - * - * Input : face face object handle - * charmapIndex index of charmap in directory - * platformID address of returned platform ID - * encodingID address of returned encoding ID - * - * Output : error code - * - * MT-Safe : YES ! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_CharMap_ID( TT_Face face, - TT_UShort charmapIndex, - TT_UShort* platformID, - TT_UShort* encodingID ) - { - TT_CharMap cmap; - - if ( !face ) - return TT_Err_Invalid_Face_Handle; - - if ( charmapIndex >= face->num_charmaps ) - return TT_Err_Bad_Argument; - - cmap = (TT_CharMap)face->charmaps + charmapIndex; - - *platformID = cmap->root.platform_id; - *encodingID = cmap->root.encoding_id; - - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_CharMap - * - * Description : Looks up a charmap. - * - * Input : face face object handle - * charmapIndex index of charmap in directory - * charMap address of returned charmap handle - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_CharMap( TT_Face face, - TT_UShort charmapIndex, - TT_CharMap* charMap ) - { - if ( !face ) - return TT_Err_Invalid_Face_Handle; - - if ( charmapIndex >= face->num_charmaps ) - return TT_Err_Bad_Argument; - - *charMap = (TT_CharMap)face->charmaps + charmapIndex; - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Char_Index - * - * Description : Returns the glyph index corresponding to - * a given character code defined for the 'charmap'. - * - * Input : charMap charmap handle - * charcode character code - * - * Output : glyph index. - * - * Notes : Character code 0 is the unknown glyph, which should never - * be displayed. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_UShort TT_Char_Index( TT_CharMap charMap, - TT_UShort charCode ) - { - return tt_interface->get_char_index( (FT_CharMap)charMap, charCode ); - } - - -/******************************************************************* - * - * Function : TT_Get_Name_Count - * - * Description : Returns the number of strings found in the - * name table. - * - * Input : face face handle - * - * Output : number of strings. - * - * Notes : Returns -1 on error (invalid handle). - * - * DON'T USE THIS FUNCTION! IT HAS BEEN DEPRECATED! - * - * It is retained for backwards compatibility only and will - * fail on 16bit systems. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - int TT_Get_Name_Count( TT_Face face ) - { - if ( !face ) - return -1; - - return face->num_names; - } - - -/******************************************************************* - * - * Function : TT_Get_Name_ID - * - * Description : Returns the IDs of the string number 'nameIndex' - * in the name table of a given face. - * - * Input : face face handle - * nameIndex index of string. First is 0 - * platformID addresses of returned IDs - * encodingID - * languageID - * nameID - * - * Output : Error code. - * - * Notes : Some files have a corrupt or unusual name table, with some - * entries having a platformID > 3. These can usually - * be ignored by a client application. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Name_ID( TT_Face face, - TT_UShort nameIndex, - TT_UShort* platformID, - TT_UShort* encodingID, - TT_UShort* languageID, - TT_UShort* nameID ) - { - TT_NameRec* name; - - if (!face) - return TT_Err_Invalid_Face_Handle; - - if ( nameIndex >= face->num_names ) - return TT_Err_Bad_Argument; - - name = face->name_table.names + nameIndex; - - *platformID = name->platformID; - *encodingID = name->encodingID; - *languageID = name->languageID; - *nameID = name->nameID; - - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_Name_String - * - * Description : Returns the address and length of a given - * string found in the name table. - * - * Input : face face handle - * nameIndex string index - * stringPtr address of returned pointer to string - * length address of returned string length - * - * Output : Error code. - * - * Notes : If the string's platformID is invalid, - * stringPtr is NULL, and length is 0. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Name_String( TT_Face face, - TT_UShort nameIndex, - TT_String** stringPtr, - TT_UShort* length ) - { - TT_NameRec* name; - - if (!face) - return TT_Err_Invalid_Face_Handle; - - if ( nameIndex >= face->num_names ) - return TT_Err_Bad_Argument; - - name = face->name_table.names + nameIndex; - - *stringPtr = (TT_String*)name->string; - *length = name->stringLength; - - return TT_Err_Ok; - } - - -/******************************************************************* - * - * Function : TT_Get_Font_Data - * - * Description : Loads any font table in client memory. Used by - * the TT_Get_Font_Data(). - * - * Input : face Face object to look for. - * - * tag Tag of table to load. Use the value 0 if you - * want to access the whole font file, else set - * this parameter to a valid TrueType table tag - * that you can forge with the MAKE_TT_TAG - * macro. - * - * offset Starting offset in the table (or the file - * if tag == 0). - * - * buffer Address of target buffer - * - * length Address of decision variable: - * - * if length == NULL: - * Load the whole table. Returns an - * an error if 'offset' != 0. - * - * if *length == 0 : - * Exit immediately, returning the - * length of the given table, or of - * the font file, depending on the - * value of 'tag'. - * - * if *length != 0 : - * Load the next 'length' bytes of - * table or font, starting at offset - * 'offset' (in table or font too). - * - * Output : Error code. - * - * MT-Safe : YES! - * - ******************************************************************/ - - EXPORT_FUNC - TT_Error TT_Get_Font_Data( TT_Face face, - TT_ULong tag, - TT_Long offset, - void* buffer, - TT_Long* length ) - { - return tt_extension->get_font_data( face, tag, offset, buffer, length ); - } - - - - - - - - /*******************************************************************/ - /* */ - /* */ - /* */ - /* Postscript Names extension */ - /* */ - /* */ - /* */ - /*******************************************************************/ - - /* Initialise the Postscript Names extension */ - EXPORT_FUNC - TT_Error TT_Init_Post_Extension( TT_Engine engine ) - { - (void)engine; - return TT_Err_Ok; - } - - /* Load the Postscript Names table - notice that the 'post' parameter */ - /* will be ignored in 2.0. */ - EXPORT_DEF - TT_Error TT_Load_PS_Names( TT_Face face, - void* post ) - { - (void)post; - (void)face; - - /* the names are now loaded on demand in 2.0 */ - return TT_Err_Ok; - } - - - /* The following is directly implemented in the TrueType driver */ -#if 0 - /* Gets the postscript name of a single glyph */ - EXPORT_DEF - TT_Error TT_Get_PS_Name( TT_Face face, - TT_UShort index, - TT_String** PSname ); -#endif - - - - - /*******************************************************************/ - /* */ - /* */ - /* */ - /* Embedded Bitmap (sbits) extension */ - /* */ - /* */ - /* */ - /*******************************************************************/ - - - /*************************************************************/ - /* */ - /* */ - /* TT_Init_SBit_Extension */ - /* */ - /* */ - /* Initialise the embedded bitmaps extension for the */ - /* FreeType engine. */ - /* */ - /* */ - /* engine :: handle to current FreeType library instance */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - EXPORT_FUNC - TT_Error TT_Init_SBit_Extension( TT_Engine engine ) - { - (void)engine; - return TT_Err_Ok; - } - - - /*************************************************************/ - /* */ - /* */ - /* TT_Get_Face_Bitmaps */ - /* */ - /* */ - /* Loads the "EBLC" table from a font file, if any. */ - /* */ - /* */ - /* face :: handle to the source TrueType font/face */ - /* */ - /* */ - /* eblc_table :: a descriptor for the EBLC table */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - /* */ - /* This function returns TT_Err_Table_Missing when the */ - /* font contains no embedded bitmaps. All fields in */ - /* "eblc_table" will then be set to 0. */ - /* */ - EXPORT_FUNC - TT_Error TT_Get_Face_Bitmaps( TT_Face face, - TT_EBLC *eblc_table ) - { - if (!face) - return FT_Err_Invalid_Face_Handle; - - eblc_table->num_strikes = face->num_sbit_strikes; - eblc_table->strikes = face->sbit_strikes; - - if ( face->num_sbit_strikes > 0 ) - { - eblc_table->version = 0x00002000; - return TT_Err_Ok; - } - - eblc_table->version = 0; - return TT_Err_Table_Missing; - } - - - /*************************************************************/ - /* */ - /* */ - /* TT_New_SBit_Image */ - /* */ - /* */ - /* Allocates a new embedded bitmap container */ - /* */ - /* */ - /* image :: sbit image */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - EXPORT_DEF - TT_Error TT_New_SBit_Image( TT_SBit_Image* *image ) - { - *image = (TT_SBit_Image*)malloc( sizeof(**image) ); - if ( !*image ) - return TT_Err_Out_Of_Memory; - - MEM_Set( *image, sizeof(**image), 0 ); - return TT_Err_Ok; - } - - - /*************************************************************/ - /* */ - /* */ - /* TT_Done_SBit_Image */ - /* */ - /* */ - /* Releases an embedded bitmap container */ - /* */ - /* */ - /* image :: sbit image */ - /* */ - EXPORT_DEF - void TT_Done_SBit_Image( TT_SBit_Image* image ) - { - free( image->map.bitmap ); - free( image ); - } - - - /*************************************************************/ - /* */ - /* */ - /* TT_Load_Glyph_Bitmap */ - /* */ - /* */ - /* Loads a given glyph embedded bitmap */ - /* */ - /* */ - /* face :: handle to the source TrueType font/face */ - /* instance :: current size/transform instance */ - /* glyph_index :: index of source glyph */ - /* bitmap :: target embedded bitmap descriptor */ - /* */ - /* */ - /* Error code. 0 means success. */ - /* */ - /* */ - /* This function returns an error if there is no */ - /* embedded bitmap for the glyph at the given */ - /* instance. */ - /* */ - EXPORT_FUNC - TT_Error TT_Load_Glyph_Bitmap( TT_Face face, - TT_Instance instance, - TT_UShort glyph_index, - TT_SBit_Image* bitmap ) - { - FT_GlyphSlot slot; - TT_Error error; - - error = FT_New_GlyphSlot( (FT_Face)face, &slot ); - if (error) goto Exit; - - error = FT_Load_Glyph( slot, (FT_Size)instance, glyph_index, - FT_LOAD_NO_OUTLINE, 0 ); - if (!error) - { - /* copy bitmap */ - bitmap->map.width = slot->bitmap.width; - bitmap->map.rows = slot->bitmap.rows; - bitmap->map.cols = slot->bitmap.cols; - bitmap->map.flow = slot->bitmap.flow; - bitmap->bit_depth = slot->bitmap.pix_bits; - bitmap->map.bitmap = slot->bitmap.buffer; - - /* copy metrics */ - bitmap->metrics.bbox.xMin = slot->metrics.horiBearingX >> 6; - bitmap->metrics.bbox.xMax = bitmap->metrics.bbox.xMin + - (slot->metrics.width >> 6); - bitmap->metrics.bbox.yMax = slot->metrics.horiBearingY >> 6; - bitmap->metrics.bbox.yMin = bitmap->metrics.bbox.yMax - - (slot->metrics.height >> 6); - - bitmap->metrics.horiBearingX = bitmap->metrics.bbox.xMin; - bitmap->metrics.horiBearingY = bitmap->metrics.bbox.yMax; - bitmap->metrics.horiAdvance = slot->metrics.horiAdvance >> 6; - - bitmap->metrics.vertBearingX = slot->metrics.vertBearingX >> 6; - bitmap->metrics.vertBearingY = slot->metrics.vertBearingY >> 6; - bitmap->metrics.vertAdvance = slot->metrics.vertAdvance >> 6; - - slot->bitmap.buffer = 0; - } - - FT_Done_GlyphSlot( slot ); - Exit: - return error; - } - -/* END */