summaryrefslogtreecommitdiff
path: root/Build/source/libs/freetype/freetype-1.5/lib/ttapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/lib/ttapi.c')
-rw-r--r--Build/source/libs/freetype/freetype-1.5/lib/ttapi.c2220
1 files changed, 0 insertions, 2220 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/lib/ttapi.c b/Build/source/libs/freetype/freetype-1.5/lib/ttapi.c
deleted file mode 100644
index a2d86c99434..00000000000
--- a/Build/source/libs/freetype/freetype-1.5/lib/ttapi.c
+++ /dev/null
@@ -1,2220 +0,0 @@
-/*******************************************************************
- *
- * ttapi.c
- *
- * High-level interface implementation
- *
- * Copyright 1996-2000 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 :
- *
- * TT_MulDiv and TT_MulFix are in ttcalc.h/ttcalc.c
- *
- ******************************************************************/
-
-#include "ttconfig.h"
-
-#include "freetype.h"
-#include "ttengine.h"
-#include "ttcalc.h"
-#include "ttmemory.h"
-#include "ttcache.h"
-#include "ttfile.h"
-#include "ttobjs.h"
-#include "ttload.h"
-#include "ttgload.h"
-#include "ttraster.h"
-#include "ttextend.h"
-
-
-/* required by the tracing mode */
-#undef TT_COMPONENT
-#define TT_COMPONENT trace_api
-
-
-#ifdef TT_STATIC_RASTER
-#define RAS_OPS /* void */
-#define RAS_OP /* void */
-#else
-#define RAS_OPS ((TRaster_Instance*)_engine->raster_component),
-#define RAS_OP ((TRaster_Instance*)_engine->raster_component)
-#endif /* TT_STATIC_RASTER */
-
-
-#define RENDER_Glyph( glyph, target ) \
- Render_Glyph( RAS_OPS glyph, target )
-
-#define RENDER_Gray_Glyph( glyph, target, palette ) \
- Render_Gray_Glyph( RAS_OPS glyph, target, palette )
-
-
-
-/*******************************************************************
- *
- * Function : TT_FreeType_Version
- *
- * Description : Returns the major and minor version of the library.
- *
- * Input : major, minor addresses
- *
- * Output : Error code.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_FreeType_Version( int *major,
- int *minor )
- {
- if ( !major || !minor )
- return TT_Err_Invalid_Argument;
-
- *major = TT_FREETYPE_MAJOR;
- *minor = TT_FREETYPE_MINOR;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Init_FreeType
- *
- * Description : The library's engine initializer. This function
- * must be called prior to any call.
- *
- * Input : engine pointer to a FreeType engine instance
- *
- * Output : Error code.
- *
- * MT-Note : This function should be called each time you want
- * to create a TT_Engine. It is not necessarily thread
- * safe depending on the implementations of ttmemory,
- * ttfile and ttmutex, so take care. Their default
- * implementations are safe, however.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Init_FreeType( TT_Engine* engine )
- {
- PEngine_Instance _engine;
-
- TT_Error error;
- int n;
-
-
- /* first of all, initialize memory sub-system */
- error = TTMemory_Init();
- if ( error )
- return error;
-
- /* Allocate engine instance */
- if ( ALLOC( _engine, sizeof ( TEngine_Instance ) ) )
- return error;
-
-#undef TT_FAIL
-#define TT_FAIL( x ) ( error = x (_engine) ) != TT_Err_Ok
-
- /* Initalize components */
- if ( TT_FAIL( TTFile_Init ) ||
- TT_FAIL( TTCache_Init ) ||
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- TT_FAIL( TTExtend_Init ) ||
-#endif
- TT_FAIL( TTObjs_Init ) ||
- TT_FAIL( TTRaster_Init ) )
- goto Fail;
-
-#undef TT_FAIL
-
- /* set the gray palette defaults: 0 to 4 */
- for ( n = 0; n < 5; n++ )
- _engine->raster_palette[n] = (Byte)n; /* Conversion ok, some warn */
-
- /* create the engine lock */
- MUTEX_Create( _engine->lock );
-
- HANDLE_Set( *engine, _engine );
- return TT_Err_Ok;
-
- Fail:
- TT_Done_FreeType( *engine );
- HANDLE_Set( *engine, NULL );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_FreeType
- *
- * Description : The library's engine finalizer. This function
- * will discard all active face and glyph objects
- * from the heap.
- *
- * Input : engine FreeType engine instance
- *
- * Output : Error code.
- *
- * MT-Note : Destroys an engine. Not necessarily thread-safe
- * depending on the implementations of ttmemory,
- * ttfile and ttmutex. The default implementations
- * are safe, however.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Done_FreeType( TT_Engine engine )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
-
- if ( !_engine )
- return TT_Err_Ok;
-
- MUTEX_Destroy( _engine->lock );
-
- TTRaster_Done( _engine );
- TTObjs_Done ( _engine );
-#ifdef TT_CONFIG_OPTION_EXTEND_ENGINE
- TTExtend_Done( _engine );
-#endif
- TTCache_Done ( _engine );
- TTFile_Done ( _engine );
- FREE( _engine );
-
- TTMemory_Done();
-
- return TT_Err_Ok;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Set_Raster_Gray_Palette
- *
- * Description : Sets the gray-levels palette used for font
- * smoothing.
- *
- * Input : engine FreeType engine instance
- * palette address of palette (a 5 byte array)
- *
- * Output : Invalid argument if 'palette' is NULL.
- *
- * MT-Note: NO! Unprotected modification of an engine's palette.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Raster_Gray_Palette( TT_Engine engine,
- Byte* palette )
- {
- int i;
-
-
- if ( !palette )
- return TT_Err_Invalid_Argument;
-
- for ( i = 0; i < 5; i++ )
- HANDLE_Engine( engine )->raster_palette[i] = (Byte)palette[i];
-
- return TT_Err_Ok;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Face
- *
- * Description : Creates a new face object from a given font file.
- *
- * Input : engine FreeType engine instance
- * fontPathName the font file's pathname
- * face adress of returned face handle
- *
- * Output : Error code.
- *
- * Note : The face handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Open_Face( TT_Engine engine,
- const TT_Text* fontPathName,
- TT_Face* face )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TFont_Input input;
- TT_Error error;
- TT_Stream stream;
- PFace _face;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- /* open the file */
- error = TT_Open_Stream( fontPathName, &stream );
- if ( error )
- return error;
-
- input.stream = stream;
- input.fontIndex = 0;
- input.engine = _engine;
-
- /* Create and load the new face object - this is thread-safe */
- error = CACHE_New( _engine->objs_face_cache,
- _face,
- &input );
-
- /* Set the handle */
- HANDLE_Set( *face, _face );
-
- if ( error )
- goto Fail;
-
- return TT_Err_Ok;
-
- Fail:
- TT_Close_Stream( &stream );
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Open_Collection
- *
- * Description : Creates a new face object from a given font file.
- *
- * Input : engine FreeType engine instance
- * collectionPathName the font file's pathname
- * fontIndex index of font in TrueType collection
- * face adress of returned face handle
- *
- * Output : Error code.
- *
- * Note : The face handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Open_Collection( TT_Engine engine,
- const TT_Text* collectionPathName,
- TT_ULong fontIndex,
- TT_Face* face )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
-
- TFont_Input input;
- TT_Error error;
- TT_Stream stream;
- PFace _face;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- /* open the file */
- error = TT_Open_Stream( collectionPathName, &stream );
- if ( error )
- return error;
-
- input.stream = stream;
- input.fontIndex = fontIndex;
- input.engine = _engine;
-
- /* Create and load the new face object - this is thread-safe */
- error = CACHE_New( _engine->objs_face_cache,
- _face,
- &input );
-
- /* Set the handle */
- HANDLE_Set( *face, _face );
-
- if ( error )
- goto Fail;
-
- return TT_Err_Ok;
-
- Fail:
- TT_Close_Stream( &stream );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Properties
- *
- * Description : Returns face properties.
- *
- * Input : face the face handle
- * properties address of target properties record
- *
- * Output : Error code.
- *
- * Note : Currently, max_Faces is always set to 0.
- *
- * MT-Note : YES! Reads only permanent data.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Face_Properties( TT_Face face,
- TT_Face_Properties* properties )
- {
- PFace _face = HANDLE_Face( face );
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- properties->num_Glyphs = _face->numGlyphs;
- properties->max_Points = _face->maxPoints;
- properties->max_Contours = _face->maxContours;
- properties->num_CharMaps = _face->numCMaps;
- properties->num_Names = _face->nameTable.numNameRecords;
-
- if ( _face->ttcHeader.DirCount == 0 )
- properties->num_Faces = 1;
- else
- properties->num_Faces = _face->ttcHeader.DirCount;
-
- properties->header = &_face->fontHeader;
- properties->horizontal = &_face->horizontalHeader;
-
- if ( _face->verticalInfo )
- properties->vertical = &_face->verticalHeader;
- else
- properties->vertical = NULL;
-
- properties->os2 = &_face->os2;
- properties->postscript = &_face->postscript;
- properties->hdmx = &_face->hdmx;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Face_Pointer
- *
- * Description : Each face object has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to set the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO! But this function is reserved to "enlightened"
- * developers, so it shouldn't be a problem.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Face_Pointer( TT_Face face,
- void* data )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
- else
- faze->generic = data;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Pointer
- *
- * Description : Each face object has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never access or use this field.
- *
- * This function is used to read the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO! But this function is reserved to "enlightened"
- * developers, so it shouldn't be a problem.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( void* )
- TT_Get_Face_Pointer( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return NULL;
- else
- return faze->generic;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Face_Metrics
- *
- * Description : This function returns the original horizontal AND
- * vertical metrics as found in the "hmtx" and "vmtx"
- * tables. These are the glyphs' left-side-bearings
- * and advance widths (horizontal), as well as top
- * side bearings and advance heights (vertical).
- *
- * All are expressed in FONT UNITS, a.k.a. EM
- * units.
- *
- * Input : face The given face handle.
- * first Index of first glyph in table.
- * last Index of last glyph in table.
- *
- * leftBearings A pointer to an array of TT_Shorts where the
- * left side bearings for the glyphs 'first'
- * to 'last' will be returned. If these metrics
- * don't interest you, simply set it to NULL.
- *
- * widths A pointer to an array of TT_UShorts
- * where the advance widths for the glyphs
- * 'first' to 'last' will be returned. If these
- * metrics don't interest you, simply set it
- * to NULL.
- *
- * topBearings A pointer to an array of TT_Shorts where the
- * top side bearings for the glyphs 'first'
- * to 'last' will be returned. If these metrics
- * don't interest you, simply set it to NULL.
- *
- * heights A pointer to an array of TT_UShorts
- * where the advance heights for the glyphs
- * 'first' to 'last' will be returned. If these
- * metrics don't interest you, simply set it
- * to NULL.
- *
- * Output : Error code.
- *
- * IMPORTANT NOTE :
- *
- * As vertical metrics are optional in a TrueType font, this
- * function will return an error ( TT_Err_No_Vertical_Data )
- * whenever this function is called on such a face with non-NULL
- * 'topBearings' or 'heights' arguments.
- *
- * When a font has no vertical data, the 'vertical' field in its
- * properties structure is set to NULL.
- *
- * MT-Note : YES! Reads only permanent data.
- *
- ******************************************************************/
-
- FT_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 )
- {
- PFace _face = HANDLE_Face( face );
- UInt num;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* Check the glyph range */
- if ( lastGlyph >= _face->numGlyphs || 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 */
- {
- UShort n;
- Short left_bearing;
- UShort advance_width;
-
-
- for ( n = 0; n <= num; n++ )
- {
- TT_Get_Metrics( &_face->horizontalHeader,
- 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->verticalInfo )
- return TT_Err_No_Vertical_Data;
-
- /* store the top side bearings */
- {
- UShort n;
- Short top_bearing;
- UShort advance_height;
-
- for ( n = 0; n <= num; n++ )
- {
- TT_Get_Metrics( (TT_Horizontal_Header*)&_face->verticalHeader,
- firstGlyph + n, &top_bearing, &advance_height );
-
- if ( topBearings ) topBearings[n] = top_bearing;
- if ( heights ) heights[n] = advance_height;
- }
- }
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Flush_Face
- *
- * Description : This function is used to close an active face's
- * file handle or descriptor. This is useful to save
- * system resources, if your application uses tons
- * of fonts.
- *
- * Input : face the given face handle
- *
- * Output : Error code.
- *
- * MT-Note : YES! (If ttfile is.)
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Flush_Face( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
- else
- return TT_Flush_Stream( &faze->stream );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Close_Face
- *
- * Description : Closes an opened face object. This function
- * will destroy all objects associated to the
- * face, except the glyphs.
- *
- * Input : face the given face handle
- *
- * Output : Error code.
- *
- * NOTE : The handle is set to NULL on exit.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Close_Face( TT_Face face )
- {
- PFace _face = HANDLE_Face( face );
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- TT_Close_Stream( &_face->stream );
-
- /* delete the face object -- this is thread-safe */
- return CACHE_Done( _face->engine->objs_face_cache, _face );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_New_Instance
- *
- * Description : Creates a new instance from a given face.
- *
- * Input : face parent face handle
- * instance address of instance handle
- *
- * Output : Error code.
- *
- * Note : The handle is set to NULL in case of failure.
- *
- * MT-Note : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_New_Instance( TT_Face face,
- TT_Instance* instance )
- {
- TT_Error error;
- PFace _face = HANDLE_Face( face );
- PInstance _ins;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* get a new instance from the face's cache -- this is thread-safe */
- error = CACHE_New( &_face->instances, _ins, _face );
-
- HANDLE_Set( *instance, _ins );
-
- if ( !error )
- {
- error = Instance_Init( _ins );
- if ( error )
- {
- HANDLE_Set( *instance, NULL );
- CACHE_Done( &_face->instances, _ins );
- }
- }
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Resolutions
- *
- * Description : Resets an instance to a new device resolution.
- *
- * Input : instance the instance handle
- * xResolution new horizontal device resolution in dpi
- * yResolution new vertical device resolution in dpi
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolutions must have reasonable values.
- *
- * MT-Note : You should set the charsize or pixel size immediately
- * after this call in multi-threaded 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 :-)
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Instance_Resolutions( TT_Instance instance,
- TT_UShort xResolution,
- TT_UShort yResolution )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- ins->metrics.x_resolution = xResolution;
- ins->metrics.y_resolution = yResolution;
- ins->valid = FALSE;
-
- /* In the case of a thread-safe implementation, we immediately */
- /* call Instance_Reset in order to change the instance's variable */
-
- /* In the case of a non-threaded build, we simply set the 'valid' */
- /* flag to FALSE, which will force the instance's resetting at */
- /* the next glyph loading */
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_CharSizes
- *
- * Description : Resets an instance to new point size.
- *
- * Input : instance the instance handle
- * charWidth the new width in 26.6 char points
- * charHeight the new height in 26.6 char points
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Instance_CharSizes( TT_Instance instance,
- TT_F26Dot6 charWidth,
- TT_F26Dot6 charHeight )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( charWidth < 1 * 64 )
- charWidth = 1 * 64;
-
- if ( charHeight < 1 * 64 )
- charHeight = 1 * 64;
-
- ins->metrics.x_scale1 = ( charWidth * ins->metrics.x_resolution ) / 72;
- ins->metrics.x_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- ins->metrics.y_scale1 = ( charHeight * ins->metrics.y_resolution ) / 72;
- ins->metrics.y_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- if ( ins->owner->fontHeader.Flags & 8 )
- {
- ins->metrics.x_scale1 = (ins->metrics.x_scale1+32) & -64;
- ins->metrics.y_scale1 = (ins->metrics.y_scale1+32) & -64;
- }
-
- ins->metrics.x_ppem = ins->metrics.x_scale1 / 64;
- ins->metrics.y_ppem = ins->metrics.y_scale1 / 64;
-
- if ( charWidth > charHeight )
- ins->metrics.pointSize = charWidth;
- else
- ins->metrics.pointSize = charHeight;
-
- ins->valid = FALSE;
-
- return Instance_Reset( ins );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_CharSize
- *
- * Description : Resets an instance to new point size.
- *
- * Input : instance the instance handle
- * charSize the new character size in 26.6 char points
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- FT_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 : Resets an instance to new pixel sizes
- *
- * Input : instance the instance handle
- * pixelWidth the new width in pixels
- * pixelHeight the new height in pixels
- *
- * Output : Error code.
- *
- * Note : There is no check for overflow; with other words,
- * the product of glyph dimensions times the device
- * resolution must have reasonable values.
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Instance_PixelSizes( TT_Instance instance,
- TT_UShort pixelWidth,
- TT_UShort pixelHeight,
- TT_F26Dot6 pointSize )
- {
- PInstance ins = HANDLE_Instance( instance );
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( pixelWidth < 1 ) pixelWidth = 1;
- if ( pixelHeight < 1 ) pixelHeight = 1;
-
- ins->metrics.x_ppem = pixelWidth;
- ins->metrics.y_ppem = pixelHeight;
- ins->metrics.pointSize = pointSize;
-
- ins->metrics.x_scale1 = ins->metrics.x_ppem * 64L;
- ins->metrics.x_scale2 = ins->owner->fontHeader.Units_Per_EM;
- ins->metrics.y_scale1 = ins->metrics.y_ppem * 64L;
- ins->metrics.y_scale2 = ins->owner->fontHeader.Units_Per_EM;
-
- ins->valid = FALSE;
-
- return Instance_Reset( ins );
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Transform_Flags
- *
- * Description : Informs the interpreter about the transformations
- * that will be applied to the rendered glyphs.
- *
- * Input : instance the instance handle
- * rotated set to TRUE if the glyph are rotated
- * stretched set to TRUE if the glyph are stretched
- *
- * Output : Error code.
- *
- * Note : This function is deprecated! It's much better to
- * control hinting manually when calling TT_Load_Glyph
- * than relying on the font programs...
- *
- * Never use it, unless calling for trouble ;-)
- *
- * MT-Note : NO! This should be called only when setting/resetting
- * instances, so there is no need to protect.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Instance_Transform_Flags( TT_Instance instance,
- TT_Bool rotated,
- TT_Bool stretched )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- ins->metrics.rotated = rotated;
- ins->metrics.stretched = stretched;
- ins->valid = FALSE;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Instance_Metrics
- *
- * Description : Returns instance metrics.
- *
- * Input : instance the instance handle
- * metrics address of target instance metrics record
- *
- * Output : Error code.
- *
- * MT-Note : YES! Reads only semi-permanent data.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Instance_Metrics( TT_Instance instance,
- TT_Instance_Metrics* metrics )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- if ( !ins->valid )
- Instance_Reset( ins );
-
- metrics->pointSize = ins->metrics.pointSize;
-
- metrics->x_scale = TT_MulDiv( 0x10000,
- ins->metrics.x_scale1,
- ins->metrics.x_scale2 );
-
- metrics->y_scale = TT_MulDiv( 0x10000,
- ins->metrics.y_scale1,
- ins->metrics.y_scale2 );
-
- metrics->x_resolution = ins->metrics.x_resolution;
- metrics->y_resolution = ins->metrics.y_resolution;
- metrics->x_ppem = ins->metrics.x_ppem;
- metrics->y_ppem = ins->metrics.y_ppem;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Set_Instance_Pointer
- *
- * Description : Each instance has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to set the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Note : NO!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Set_Instance_Pointer( TT_Instance instance,
- void* data )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
- else
- ins->generic = data;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Instance_Pointer
- *
- * Description : Each instance has one pointer, which use is
- * reserved to client applications. The TrueType
- * engine never accesses or uses this field.
- *
- * This function is used to read the pointer.
- *
- * Input : face the given face handle
- * data the generic pointer value
- *
- * Output : Error code.
- *
- * MT-Safe : NO!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( void* )
- TT_Get_Instance_Pointer( TT_Instance instance )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return NULL;
- else
- return ins->generic;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Instance
- *
- * Description : Closes a given instance.
- *
- * Input : instance address of instance handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Done_Instance( TT_Instance instance )
- {
- PInstance ins = HANDLE_Instance( instance );
-
-
- if ( !ins )
- return TT_Err_Invalid_Instance_Handle;
-
- /* delete the instance -- this is thread-safe */
- return CACHE_Done( &ins->owner->instances, ins );
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_New_Glyph( TT_Face face,
- TT_Glyph* glyph )
- {
- TT_Error error;
- PFace _face = HANDLE_Face( face );
- PGlyph _glyph;
-
-
- if ( !_face )
- return TT_Err_Invalid_Face_Handle;
-
- /* get a new glyph from the face's cache -- this is thread-safe */
- error = CACHE_New( &_face->glyphs, _glyph, _face );
-
- HANDLE_Set( *glyph, _glyph );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Glyph
- *
- * Description : Destroys a given glyph object.
- *
- * Input : glyph the glyph handle
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Done_Glyph( TT_Glyph glyph )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- /* delete the engine -- this is thread-safe */
- return CACHE_Done( &_glyph->face->glyphs, _glyph );
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Load_Glyph( TT_Instance instance,
- TT_Glyph glyph,
- TT_UShort glyphIndex,
- TT_UShort loadFlags )
- {
- PInstance _ins;
- PGlyph _glyph;
- TT_Error error;
-
-
- _ins = HANDLE_Instance( instance );
-
- if ( !_ins )
- loadFlags &= ~(TTLOAD_SCALE_GLYPH | TTLOAD_HINT_GLYPH);
-
- if ( (loadFlags & TTLOAD_SCALE_GLYPH) == 0 )
- _ins = 0;
-
- _glyph = HANDLE_Glyph( glyph );
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- if ( _ins )
- {
- if ( _ins->owner != _glyph->face )
- return TT_Err_Invalid_Face_Handle;
-
- if ( !_ins->valid )
- {
- /* This code can only be called in non thread-safe builds */
- error = Instance_Reset( _ins );
- if ( error )
- return error;
- }
- }
-
- return Load_TrueType_Glyph( _ins, _glyph, glyphIndex, loadFlags );
- }
-
-
-/*******************************************************************
- *
- * 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.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Glyph_Outline( TT_Glyph glyph,
- TT_Outline* outline )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- *outline = _glyph->outline;
- outline->owner = FALSE;
-
- 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.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Glyph_Metrics( TT_Glyph glyph,
- TT_Glyph_Metrics* metrics )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- metrics->bbox = _glyph->metrics.bbox;
- metrics->bearingX = _glyph->metrics.horiBearingX;
- metrics->bearingY = _glyph->metrics.horiBearingY;
- metrics->advance = _glyph->metrics.horiAdvance;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Big_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.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Glyph_Big_Metrics( TT_Glyph glyph,
- TT_Big_Glyph_Metrics* metrics )
- {
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- *metrics = _glyph->metrics;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Bitmap
- *
- * Description : Produces a bitmap from a glyph outline.
- *
- * Input : glyph the glyph container's handle
- * bitmap target bitmap 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.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Glyph_Bitmap( TT_Glyph glyph,
- TT_Raster_Map* bitmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- PEngine_Instance _engine;
- TT_Engine engine;
- TT_Error error;
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
- TT_Outline outline;
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- _engine = _glyph->face->engine;
- HANDLE_Set( engine, _engine );
-
- outline = _glyph->outline;
- /* XXX : For now, use only dropout mode 2 */
- /* outline.dropout_mode = _glyph->scan_type; */
- outline.dropout_mode = 2;
-
- TT_Translate_Outline( &outline, xOffset, yOffset );
- error = TT_Get_Outline_Bitmap( engine, &outline, bitmap );
- TT_Translate_Outline( &outline, -xOffset, -yOffset );
-
- return error;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Get_Glyph_Pixmap
- *
- * Description : Produces a grayscaled pixmap from a glyph
- * outline.
- *
- * Input : glyph the glyph container's handle
- * pixmap 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.
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Glyph_Pixmap( TT_Glyph glyph,
- TT_Raster_Map* pixmap,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- PEngine_Instance _engine;
- TT_Engine engine;
- TT_Error error;
- PGlyph _glyph = HANDLE_Glyph( glyph );
-
- TT_Outline outline;
-
-
- if ( !_glyph )
- return TT_Err_Invalid_Glyph_Handle;
-
- _engine = _glyph->face->engine;
- HANDLE_Set(engine,_engine);
-
- outline = _glyph->outline;
- /* XXX : For now, use only dropout mode 2 */
- /* outline.dropout_mode = _glyph->scan_type; */
- outline.dropout_mode = 2;
-
- TT_Translate_Outline( &outline, xOffset, yOffset );
- error = TT_Get_Outline_Pixmap( engine, &outline, pixmap );
- TT_Translate_Outline( &outline, -xOffset, -yOffset );
-
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
- static const TT_Outline null_outline
- = { 0, 0, NULL, NULL, NULL, 0, 0, 0, 0 };
-
-
-/*******************************************************************
- *
- * Function : TT_New_Outline
- *
- * Description : Creates a new TrueType outline, reserving
- * array space for a given number of points and
- * contours.
- *
- * Input : numPoints number of points
- * numContours number of contours
- * outline address of target outline structure
- *
- * Output : Error code
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_New_Outline( TT_UShort numPoints,
- TT_Short numContours,
- TT_Outline* outline )
- {
- TT_Error error;
-
-
- if ( !outline )
- return TT_Err_Invalid_Argument;
-
- *outline = null_outline;
-
- if ( ALLOC( outline->points, numPoints*2*sizeof ( TT_F26Dot6 ) ) ||
- ALLOC( outline->flags, numPoints *sizeof ( Byte ) ) ||
- ALLOC( outline->contours, numContours*sizeof ( UShort ) ) )
- 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 error;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Done_Outline
- *
- * Description : Deletes an outline created through TT_New_Outline().
- * Calling this function for outlines returned
- * by TT_Get_Glyph_Outline() yields an error.
- *
- * Input : outline address of outline
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_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_outline;
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Outline_Bitmap
- *
- * Description : Render a TrueType outline into a bitmap.
- * Note that the bitmap must be created by the caller.
- *
- * Input : outline the outline to render
- * bitmap the target bitmap
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Outline_Bitmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* bitmap )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- if ( !outline || !bitmap )
- return TT_Err_Invalid_Argument;
-
- MUTEX_Lock( _engine->raster_lock );
- error = RENDER_Glyph( outline, bitmap );
- MUTEX_Release( _engine->raster_lock );
-
- return error;
- }
-
-
-#ifdef TT_CONFIG_OPTION_GRAY_SCALING
-
-/*******************************************************************
- *
- * Function : TT_Get_Outline_Pixmap
- *
- * Description : Render a TrueType outline into a pixmap.
- * Note that the pixmap must be created by the caller.
- *
- * Input : outline the outline to render
- * pixmap the target pixmap
- *
- * Output : Error code
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Outline_Pixmap( TT_Engine engine,
- TT_Outline* outline,
- TT_Raster_Map* pixmap )
- {
- PEngine_Instance _engine = HANDLE_Engine( engine );
- TT_Error error;
-
-
- if ( !_engine )
- return TT_Err_Invalid_Engine;
-
- if ( !outline || !pixmap )
- return TT_Err_Invalid_Argument;
-
- MUTEX_Lock( _engine->raster_lock );
- error = RENDER_Gray_Glyph( outline, pixmap, _engine->raster_palette );
- MUTEX_Release( _engine->raster_lock );
- return error;
- }
-
-#endif /* TT_CONFIG_OPTION_GRAY_SCALING */
-
-
-/*******************************************************************
- *
- * Function : TT_Copy_Outline
- *
- * Description : Copy an outline into another. The source and
- * target outlines must have the same points and
- * contours numbers.
- *
- * Input : source address of source outline
- * target address of target outline
- *
- * Output : Error code
- *
- * Note : This function doesn't touch the target outline's 'owner'
- * field.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Copy_Outline( TT_Outline* source,
- TT_Outline* target )
- {
- if ( !source || !target ||
- source->n_points != target->n_points ||
- source->n_contours != target->n_contours )
- return TT_Err_Invalid_Argument;
-
- MEM_Copy( target->points, source->points,
- source->n_points * 2 * sizeof ( TT_F26Dot6 ) );
-
- MEM_Copy( target->flags, source->flags,
- source->n_points * sizeof ( Byte ) );
-
- MEM_Copy( target->contours, source->contours,
- source->n_contours * sizeof ( Short ) );
-
- target->high_precision = source->high_precision;
- target->second_pass = target->second_pass;
- target->dropout_mode = source->dropout_mode;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( void )
- TT_Transform_Outline( TT_Outline* outline,
- TT_Matrix* matrix )
- {
- UShort n;
- TT_F26Dot6 x, y;
- TT_Vector* vec;
-
-
- vec = outline->points;
- for ( n = 0; n < outline->n_points; n++ )
- {
- x = TT_MulFix( vec->x, matrix->xx ) +
- TT_MulFix( vec->y, matrix->xy );
-
- y = TT_MulFix( vec->x, matrix->yx ) +
- TT_MulFix( vec->y, matrix->yy );
-
- vec->x = x;
- vec->y = y;
- vec++;
- }
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( void )
- TT_Transform_Vector( TT_F26Dot6* x,
- TT_F26Dot6* y,
- TT_Matrix* matrix )
- {
- TT_F26Dot6 xz, yz;
-
-
- xz = TT_MulFix( *x, matrix->xx ) +
- TT_MulFix( *y, matrix->xy );
-
- yz = TT_MulFix( *x, matrix->yx ) +
- TT_MulFix( *y, matrix->yy );
-
- *x = xz;
- *y = yz;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Translate_Outline
- *
- * Description : Applies a simple translation.
- *
- * Input : outline no comment :)
- * xOffset
- * yOffset
- *
- * Output : Error code.
- *
- * MT-Safe : YES!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( void )
- TT_Translate_Outline( TT_Outline* outline,
- TT_F26Dot6 xOffset,
- TT_F26Dot6 yOffset )
- {
- UShort n;
- TT_Vector* vec = outline->points;
-
-
- for ( n = 0; n < outline->n_points; n++ )
- {
- vec->x += xOffset;
- vec->y += yOffset;
- vec++;
- }
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Outline_BBox( TT_Outline* outline,
- TT_BBox* bbox )
- {
- TT_F26Dot6 x, y;
- UShort k;
-
-
- if ( outline && bbox )
- {
- if ( outline->n_points == 0 )
- {
- bbox->xMin = 0;
- bbox->yMin = 0;
- bbox->xMax = 0;
- bbox->yMax = 0;
- }
- else
- {
- TT_Vector* vec = outline->points;
-
- bbox->xMin = bbox->xMax = vec->x;
- bbox->yMin = bbox->yMax = vec->y;
- vec++;
-
- for ( k = 1; k < outline->n_points; k++ )
- {
- x = vec->x;
- if ( x < bbox->xMin ) bbox->xMin = x;
- if ( x > bbox->xMax ) bbox->xMax = x;
- y = vec->y;
- if ( y < bbox->yMin ) bbox->yMin = y;
- if ( y > bbox->yMax ) bbox->yMax = y;
- vec++;
- }
- }
- return TT_Err_Ok;
- }
- else
- return TT_Err_Invalid_Argument;
- }
-
-
-
- /* ----------------- 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 !
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( int )
- TT_Get_CharMap_Count( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
- return ( faze ? faze->numCMaps : -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 !
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_CharMap_ID( TT_Face face,
- TT_UShort charmapIndex,
- TT_UShort* platformID,
- TT_UShort* encodingID )
- {
- PCMapTable cmap;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( charmapIndex >= faze->numCMaps )
- return TT_Err_Invalid_Argument;
-
- cmap = faze->cMaps + charmapIndex;
-
- *platformID = cmap->platformID;
- *encodingID = cmap->platformEncodingID;
-
- 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_CharMap( TT_Face face,
- TT_UShort charmapIndex,
- TT_CharMap* charMap )
- {
- TT_Error error;
- TT_Stream stream;
- PCMapTable cmap;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( charmapIndex >= faze->numCMaps )
- return TT_Err_Invalid_Argument;
-
- cmap = faze->cMaps + charmapIndex;
-
- /* Load table if needed */
- error = TT_Err_Ok;
-
- /* MT-NOTE: We're modifying the face object, so protect it. */
- MUTEX_Lock( faze->lock );
-
- if ( !cmap->loaded )
- {
- (void)USE_Stream( faze->stream, stream );
- if ( !error )
- {
- error = CharMap_Load( cmap, stream );
- DONE_Stream( stream );
- }
-
- if ( error )
- cmap = NULL;
- else
- cmap->loaded = TRUE;
- }
- MUTEX_Release( faze->lock );
-
- HANDLE_Set( *charMap, cmap );
-
- return error;
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_UShort )
- TT_Char_Index( TT_CharMap charMap,
- TT_ULong charCode )
- {
- PCMapTable cmap = HANDLE_CharMap( charMap );
-
-
- if ( !cmap )
- return 0; /* we return 0 in case of invalid char map */
-
- return CharMap_Index( cmap, 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( int )
- TT_Get_Name_Count( TT_Face face )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return -1;
-
- return faze->nameTable.numNameRecords;
- }
-
-
-/*******************************************************************
- *
- * 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!
- *
- ******************************************************************/
-
- FT_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 )
- {
- TNameRec* namerec;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( nameIndex >= faze->nameTable.numNameRecords )
- return TT_Err_Invalid_Argument;
-
- namerec = faze->nameTable.names + nameIndex;
-
- *platformID = namerec->platformID;
- *encodingID = namerec->encodingID;
- *languageID = namerec->languageID;
- *nameID = namerec->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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Name_String( TT_Face face,
- TT_UShort nameIndex,
- TT_String** stringPtr,
- TT_UShort* length )
- {
- TNameRec* namerec;
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- if ( nameIndex >= faze->nameTable.numNameRecords )
- return TT_Err_Invalid_Argument;
-
- namerec = faze->nameTable.names + nameIndex;
-
- *stringPtr = (String*)namerec->string;
- *length = namerec->stringLength;
-
- return TT_Err_Ok;
- }
-
-
-/*******************************************************************
- *
- * Function : TT_Get_Font_Data
- *
- * Description : Loads any font table into client memory.
- *
- * 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
- * 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!
- *
- ******************************************************************/
-
- FT_EXPORT_FUNC( TT_Error )
- TT_Get_Font_Data( TT_Face face,
- TT_ULong tag,
- TT_Long offset,
- void* buffer,
- TT_Long* length )
- {
- PFace faze = HANDLE_Face( face );
-
-
- if ( !faze )
- return TT_Err_Invalid_Face_Handle;
-
- return Load_TrueType_Any( faze, tag, offset, buffer, length );
- }
-
-
- /************************ callback definition ******************/
-
- /* Register a new callback to the TrueType engine -- this should */
- /* only be used by higher-level libraries, not typical clients */
- /* */
- /* This is not part of the current FreeType release, thus */
- /* undefined... */
-
-#if 0
- FT_EXPORT_FUNC( TT_Error )
- TT_Register_Callback( TT_Engine engine,
- int callback_id,
- void* callback_ptr )
- {
- PEngine_Instance eng = HANDLE_Engine( engine );
-
-
- if ( !eng )
- return TT_Err_Invalid_Argument;
-
- /* currently, we only support one callback */
- if (callback_id != TT_Callback_Glyph_Outline_Load)
- return TT_Err_Invalid_Argument;
-
- eng->glCallback = (TT_Glyph_Loader_Callback)callback_ptr;
- return TT_Err_Ok;
- }
-#endif /* 0 */
-
-
-/* END */