ref: 607358967fdedae281f8e6eac33f8a6d4c9aa403
parent: ab9cc277c2d695b2d253610d9867256aa2a3ad8f
author: David Turner <[email protected]>
date: Fri Jul 7 15:46:30 EDT 2000
removed obsolete files..
--- a/src/oldapi/Makefile
+++ /dev/null
@@ -1,29 +1,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)
-
--- a/src/oldapi/readme.txt
+++ /dev/null
@@ -1,18 +1,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
-
-
--- a/src/oldapi/truetype.h
+++ /dev/null
@@ -1,1709 +1,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;
-
-
-
- /***********************************************************************/
- /* */
- /* <Type> TT_Engine */
- /* */
- /* <Description> */
- /* 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_
-
- /***********************************************************************/
- /* */
- /* <Type> TT_Face */
- /* */
- /* <Description> */
- /* 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_ */
-
-
- /***********************************************************************/
- /* */
- /* <Type> TT_Instance */
- /* */
- /* <Description> */
- /* 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" */
-
-
- /***********************************************************************/
- /* */
- /* <Type> TT_Glyph */
- /* */
- /* <Description> */
- /* 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_
-
- /***********************************************************************/
- /* */
- /* <Type> TT_CharMap */
- /* */
- /* <Description> */
- /* 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_
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Metrics */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Fields> */
- /* 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;
-
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Small_Metrics */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Fields> */
- /* 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;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Line_Metrics */
- /* */
- /* <Description> */
- /* A structure used to describe the text line metrics of */
- /* a given bitmap strike, for either an horizontal or */
- /* vertical layout. */
- /* */
- /* <Fields> */
- /* 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;
-
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Range */
- /* */
- /* <Description> */
- /* A TrueType/OpenType subIndexTable as defined in the */
- /* "EBLC" or "bloc" tables. */
- /* */
- /* <Fields> */
- /* */
- /* 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;
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Strike */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap strike in the */
- /* "EBLC" or "bloc" tables. */
- /* */
- /* <Fields> */
- /* */
- /* 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;
-
-
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Component */
- /* */
- /* <Description> */
- /* A simple structure to describe a compound sbit element */
- /* */
- /* <Fields> */
- /* 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;
-
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Scale */
- /* */
- /* <Description> */
- /* A structure used describe a given bitmap scaling */
- /* table, asdefined for the "EBSC" table. */
- /* */
- /* <Fields> */
- /* */
- /* 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_ */
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_SBit_Image */
- /* */
- /* <Description> */
- /* A structure used to describe a given embedded bitmap */
- /* image. */
- /* */
- /* <Fields> */
- /* 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;
-
-
-
- /*************************************************************/
- /* */
- /* <Struct> TT_EBLC */
- /* */
- /* <Description> */
- /* A structure used to describe the "EBLC" table from */
- /* a TrueTYpe font. */
- /* */
- /* <Fields> */
- /* */
- /* 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;
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Init_SBit_Extension */
- /* */
- /* <Description> */
- /* Initialise the embedded bitmaps extension for the */
- /* FreeType engine. */
- /* */
- /* <Input> */
- /* engine :: handle to current FreeType library instance */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_DEF
- TT_Error TT_Init_SBit_Extension( TT_Engine engine );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Face_Bitmaps */
- /* */
- /* <Description> */
- /* Loads the "EBLC" table from a font file, if any. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* */
- /* <Output> */
- /* eblc_table :: a descriptor for the EBLC table */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* 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 );
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_New_SBit_Image */
- /* */
- /* <Description> */
- /* Allocates a new embedded bitmap container */
- /* */
- /* <Output> */
- /* image :: sbit image */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_DEF
- TT_Error TT_New_SBit_Image( TT_SBit_Image* *image );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_SBit_Image */
- /* */
- /* <Description> */
- /* Releases an embedded bitmap container */
- /* */
- /* <Input> */
- /* image :: sbit image */
- /* */
- EXPORT_DEF
- void TT_Done_SBit_Image( TT_SBit_Image* image );
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Glyph_Bitmap */
- /* */
- /* <Description> */
- /* Loads a given glyph embedded bitmap */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* instance :: current size/transform instance */
- /* glyph_index :: index of source glyph */
- /* bitmap :: target embedded bitmap descriptor */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* 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 */
--- a/src/oldapi/ttapi.c
+++ /dev/null
@@ -1,2267 +1,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 <freetype/freetype.h>
-
-#include <freetype/internal/ftdebug.h>
-#include <freetype/internal/ftstream.h>
-#include <freetype/internal/ftcalc.h>
-#include <freetype/internal/ftlist.h>
-#include <freetype/internal/ftraster.h>
-
-#include <../truetype/ttdriver.h>
-#include <../truetype/ttobjs.h>
-#include <../truetype/ttcmap.h>
-
-#define _TRUETYPE_
-#include <truetype.h> /* 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;
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Init_FreeType */
- /* */
- /* <Description> */
- /* Creates a new TrueType driver/engine object. */
- /* */
- /* <Output> */
- /* engine :: handle to the new engine object */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Done_FreeType */
- /* */
- /* <Description> */
- /* Destroys a given TrueType engine object created with */
- /* TT_Init_FreeType. All associated objects, (i.e. faces, outlines */
- /* and charmaps) will be destroyed.. */
- /* */
- /* <Input> */
- /* engine :: handle to the engine object */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Raster_Gray_Palette */
- /* */
- /* <Description> */
- /* 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.. */
- /* */
- /* <Input> */
- /* engine :: handle to the engine object */
- /* palette :: an array of 5 bytes used to render 8-bit pixmaps */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Open_Face */
- /* */
- /* <Description> */
- /* 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). */
- /* */
- /* <Input> */
- /* engine :: the parent engine object where to create the face */
- /* object. */
- /* */
- /* pathname :: pathname for the font file. */
- /* */
- /* <Output> */
- /* face :: a handle to the fresh face object. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success.. */
- /* */
- /* <MT-Note> */
- /* Yes. */
- /* */
- /* <Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Open_Collection */
- /* */
- /* <Description> */
- /* Loads a given face within a collection. */
- /* */
- /* <Input> */
- /* engine :: TrueType engine object where to load the face */
- /* pathname :: the collection's pathname */
- /* fontIndex :: index of face within the collection. first is 0 */
- /* */
- /* <Output> */
- /* face :: handle to the new face object. Always set to NULL */
- /* in case of error */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* Yes. */
- /* */
- /* <Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Close_Face */
- /* */
- /* <Description> */
- /* Destroys a given face object opened through either TT_Open_Face */
- /* of TT_Open_Collection. */
- /* */
- /* <Input> */
- /* face :: handle to the target face object */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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.. ***********/
- /*********** ***********/
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
- /***********************************************************************/
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Face_Properties */
- /* */
- /* <Description> */
- /* Return a given face's properties to the caller. */
- /* */
- /* <Input> */
- /* face :: handle to the source face object */
- /* */
- /* <Output> */
- /* properties :: target properties structure */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- /* <MT-Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Face_Pointer. */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* face :: target face object */
- /* data :: generic pointer's value */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Face_Pointer */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* face :: handle to source face object */
- /* */
- /* <Return> */
- /* generic pointer value. NULL if the face handle is invalid.. */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
-
- EXPORT_FUNC
- void* TT_Get_Face_Pointer( TT_Face face )
- {
- return ( face ? face->root.generic.data : NULL );
- }
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Face_Metrics */
- /* */
- /* <Description> */
- /* Get the metrics of a given array of glyphs. Returns any number */
- /* of metrics arrays. */
- /* */
- /* <Input> */
- /* face :: handle to the source face object */
- /* firstGlyph :: index of first glyph in the array */
- /* lastGlyph :: index of last glyph in the array */
- /* */
- /* <Output> */
- /* 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. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- /* <MT-Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_New_Instance */
- /* */
- /* <Description> */
- /* Creates a new instance object from a given face */
- /* */
- /* <Input> */
- /* face :: handle to source/parent face object */
- /* */
- /* <Output> */
- /* instance :: handle to fresh object. Set to NULL in case of */
- /* error. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* Yes. */
- /* */
- /* <Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_Resolutions */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* instance :: handle to target instance object */
- /* xResolution :: horizontal device resolution in dpi. */
- /* yResolution :: vertical device resolution in dpi. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* 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 );
- }
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_CharSizes */
- /* */
- /* <Description> */
- /* Same as TT_Set_Instance_CharSize, but used to specify distinct */
- /* horizontal and vertical coordinates. */
- /* */
- /* <Input> */
- /* instance :: handle to target instance object */
- /* charWidth :: horizontal character size (26.6 points) */
- /* charHeight :: vertical character size (26.6 points) */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_CharSize */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* instance :: handle to target instance object */
- /* charSize :: character size expressed in 26.6 fixed float */
- /* points. 1 point = 1/72 dpi. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
-
- EXPORT_FUNC
- TT_Error TT_Set_Instance_CharSize( TT_Instance instance,
- TT_F26Dot6 charSize )
- {
- return TT_Set_Instance_CharSizes( instance, charSize, charSize );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_PixelSizes */
- /* */
- /* <Description> */
- /* 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). */
- /* */
- /* <Input> */
- /* 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) */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- /* <MT-Note> */
- /* 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 );
- }
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Instance_Metrics */
- /* */
- /* <Description> */
- /* Returns an instance's metrics into caller space. */
- /* */
- /* <Input> */
- /* instance :: handle to source instance object */
- /* */
- /* <Output> */
- /* metrics :: target instance metrics structure */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_Pointer */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* instance :: handle to the target instance object */
- /* data :: value of the generic pointer */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Instance_Pointer */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* instance :: handle to source instance object */
- /* */
- /* <Return> */
- /* value of generic pointer. NULL if invalid instance */
- /* */
- /* <MT-Note> */
- /* No. */
-
- EXPORT_FUNC
- void* TT_Get_Instance_Pointer( TT_Instance instance )
- {
- if ( !instance )
- return NULL;
- else
- return ((FT_Size)instance)->generic.data;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Done_Instance */
- /* */
- /* <Description> */
- /* 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. */
- /* */
- /* <Input> */
- /* instance :: handle to target instance object */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
-
- EXPORT_FUNC
- TT_Error TT_Done_Instance( TT_Instance ins )
- {
- FT_Done_Size( (FT_Size)ins );
- return TT_Err_Ok;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Set_Instance_Transform_Flags */
- /* */
- /* <Description> */
- /* Nothing. This function has been deprecated... */
- /* */
- /* <Input> */
- /* instance :: handle to target instance object */
- /* rotated :: 'rotation' flag.. */
- /* stretched :: 'stretch' flag.. */
- /* */
- /* <Return> */
- /* Always 0. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
-
- /***********************************************************************/
- /* */
- /* <Function> */
- /* */
- /* <Description> */
- /* */
- /* */
- /* <Input> */
- /* */
- /* */
- /* <Output> */
- /* */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* */
- /* <MT-Note> */
- /* */
- /* */
- /* */
- /* <Note> */
- /* */
- /* */
- /* */
-/*******************************************************************
- *
- * 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;
- }
-
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Outline_Bitmap */
- /* */
- /* <Description> */
- /* Renders an outline within a bitmap. The outline's image is */
- /* simply or-ed to the target bitmap. */
- /* */
- /* <Input> */
- /* engine :: handle to the TrueType driver object */
- /* outline :: pointer to the source outline descriptor */
- /* raster :: pointer to the target bitmap descriptor */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- /* <MT-Note> */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Get_Outline_Pixmap */
- /* */
- /* <Description> */
- /* Renders an outline within a pixmap. The outline's image is */
- /* simply or-ed to the target pixmap. */
- /* */
- /* <Input> */
- /* engine :: handle to the TrueType driver object */
- /* outline :: pointer to the source outline descriptor */
- /* raster :: pointer to the target pixmap descriptor */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success. */
- /* */
- /* <MT-Note> */
- /* 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 );
- }
-
-
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_New_Outline */
- /* */
- /* <Description> */
- /* Creates a new outline of a given size. */
- /* */
- /* <Input> */
- /* numPoints :: maximum number of points within the outline */
- /* */
- /* numContours :: maximum number of contours within the outline */
- /* */
- /* <Output> */
- /* outline :: target outline descriptor. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* Yes. */
- /* */
- /* <Note> */
- /* 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 <stdlib.h> /* 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;
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Done_Outline */
- /* */
- /* <Description> */
- /* Destroys an outline created with FT_New_Outline */
- /* */
- /* <Input> */
- /* outline :: */
- /* pointer to the outline destructor to discard. This function */
- /* doesn't destroy the TT_Outline sturcture, only the data it */
- /* contains/own. */
- /* */
- /* <Return> */
- /* TrueType error code. 0 means success */
- /* */
- /* <MT-Note> */
- /* No. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
-
- /***********************************************************************/
- /* */
- /* <Function> TT_Copy_Outline */
- /* */
- /* <Description> */
- /* Copy an outline into another one. Both objects must have */
- /* the same sizes ( num. points & num. contours ) when this */
- /* function is called.. */
- /* */
- /* <Input> */
- /* source :: handle to source outline */
- /* target :: handle to target outline */
- /* */
- /* <Return> */
- /* 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 );
- }
-
- /***********************************************************************/
- /* */
- /* <Function> */
- /* */
- /* <Description> */
- /* */
- /* */
- /* <Input> */
- /* */
- /* */
- /* <Output> */
- /* */
- /* */
- /* <Return> */
- /* */
- /* */
- /* <MT-Note> */
- /* */
- /* */
- /* */
- /* <Note> */
- /* */
- /* */
- /* */
- /* 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 );
- }
-
-
- /***********************************************************************/
- /* */
- /* <Function> */
- /* */
- /* <Description> */
- /* */
- /* */
- /* <Input> */
- /* */
- /* */
- /* <Output> */
- /* */
- /* */
- /* <Return> */
- /* */
- /* */
- /* <MT-Note> */
- /* */
- /* */
- /* */
- /* <Note> */
- /* */
- /* */
- /* */
- /* 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 */
- /* */
- /* */
- /* */
- /*******************************************************************/
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Init_SBit_Extension */
- /* */
- /* <Description> */
- /* Initialise the embedded bitmaps extension for the */
- /* FreeType engine. */
- /* */
- /* <Input> */
- /* engine :: handle to current FreeType library instance */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- EXPORT_FUNC
- TT_Error TT_Init_SBit_Extension( TT_Engine engine )
- {
- (void)engine;
- return TT_Err_Ok;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Get_Face_Bitmaps */
- /* */
- /* <Description> */
- /* Loads the "EBLC" table from a font file, if any. */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* */
- /* <Output> */
- /* eblc_table :: a descriptor for the EBLC table */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* 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;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_New_SBit_Image */
- /* */
- /* <Description> */
- /* Allocates a new embedded bitmap container */
- /* */
- /* <Output> */
- /* image :: sbit image */
- /* */
- /* <Return> */
- /* 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;
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Done_SBit_Image */
- /* */
- /* <Description> */
- /* Releases an embedded bitmap container */
- /* */
- /* <Input> */
- /* image :: sbit image */
- /* */
- EXPORT_DEF
- void TT_Done_SBit_Image( TT_SBit_Image* image )
- {
- free( image->map.bitmap );
- free( image );
- }
-
-
- /*************************************************************/
- /* */
- /* <Function> */
- /* TT_Load_Glyph_Bitmap */
- /* */
- /* <Description> */
- /* Loads a given glyph embedded bitmap */
- /* */
- /* <Input> */
- /* face :: handle to the source TrueType font/face */
- /* instance :: current size/transform instance */
- /* glyph_index :: index of source glyph */
- /* bitmap :: target embedded bitmap descriptor */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* 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 */