331 lines
15 KiB
C
331 lines
15 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* ftobjs.h */
|
|
/* */
|
|
/* The FreeType private base classes (specification). */
|
|
/* */
|
|
/* 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. */
|
|
/* */
|
|
/***************************************************************************/
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* This file contains the definition of all internal FreeType classes. */
|
|
/* */
|
|
/*************************************************************************/
|
|
|
|
#ifndef FTOBJS_H
|
|
#define FTOBJS_H
|
|
|
|
#include <freetype/internal/ftmemory.h>
|
|
#include <freetype/internal/ftdriver.h>
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* Some generic definitions. */
|
|
/* */
|
|
#ifndef TRUE
|
|
#define TRUE 1
|
|
#endif
|
|
|
|
#ifndef FALSE
|
|
#define FALSE 0
|
|
#endif
|
|
|
|
#ifndef NULL
|
|
#define NULL (void*)0
|
|
#endif
|
|
|
|
#ifndef UNUSED
|
|
#define UNUSED( arg ) ( (void)(arg)=(arg) )
|
|
#endif
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* The min and max functions missing in C. As usual, be careful not to */
|
|
/* write things like MIN( a++, b++ ) to avoid side effects. */
|
|
/* */
|
|
#ifndef MIN
|
|
#define MIN( a, b ) ( (a) < (b) ? (a) : (b) )
|
|
#endif
|
|
|
|
#ifndef MAX
|
|
#define MAX( a, b ) ( (a) > (b) ? (a) : (b) )
|
|
#endif
|
|
|
|
#ifndef ABS
|
|
#define ABS( a ) ( (a) < 0 ? -(a) : (a) )
|
|
#endif
|
|
|
|
|
|
|
|
EXPORT_DEF(FT_Error) FT_New_Size( FT_Face face,
|
|
FT_Size* size );
|
|
|
|
EXPORT_DEF(FT_Error) FT_Done_Size( FT_Size size );
|
|
|
|
EXPORT_DEF(FT_Error) FT_New_GlyphSlot( FT_Face face,
|
|
FT_GlyphSlot* aslot );
|
|
|
|
EXPORT_DEF(void) FT_Done_GlyphSlot( FT_GlyphSlot slot );
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/**** ****/
|
|
/**** ****/
|
|
/**** D R I V E R S ****/
|
|
/**** ****/
|
|
/**** ****/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* FT_DriverRec */
|
|
/* */
|
|
/* <Description> */
|
|
/* The root font driver class. A font driver is responsible for */
|
|
/* managing and loading font files of a given format. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* library :: A handle to the driver's parent library. */
|
|
/* */
|
|
/* memory :: A handle to the driver's memory object. This is a */
|
|
/* duplicate of `library->memory'. */
|
|
/* */
|
|
/* interface :: A set of driver methods that implement its */
|
|
/* behaviour. These methods are called by the */
|
|
/* various FreeType functions like FT_New_Face(), */
|
|
/* FT_Load_Glyph(), etc. */
|
|
/* */
|
|
/* format :: A typeless pointer, used to store the address of */
|
|
/* the driver's format specific interface. This is a */
|
|
/* table of other driver methods that are specific to */
|
|
/* its format. Format specific interfaces are */
|
|
/* defined in the driver's header files (e.g., */
|
|
/* `freetype/drivers/ttlib/ttdriver.h'). */
|
|
/* */
|
|
/* version :: The driver's version. It can be used for */
|
|
/* versioning and dynamic driver update if needed. */
|
|
/* */
|
|
/* description :: An ASCII string describing the driver's supported */
|
|
/* format, like `truetype', `type1', etc. */
|
|
/* */
|
|
/* faces_list :: The list of faces currently opened by this driver. */
|
|
/* */
|
|
/* extensions :: a typeless pointer to the driver's extensions */
|
|
/* registry, when they are supported through the */
|
|
/* config macro FT_CONFIG_OPTION_EXTENSIONS */
|
|
/* */
|
|
typedef struct FT_DriverRec_
|
|
{
|
|
FT_Library library;
|
|
FT_Memory memory;
|
|
|
|
FT_Generic generic;
|
|
|
|
FT_DriverInterface interface;
|
|
FT_FormatInterface format;
|
|
|
|
FT_Int version; /* driver version */
|
|
FT_String* description; /* format description */
|
|
|
|
FT_ListRec faces_list; /* driver's faces list */
|
|
|
|
void* extensions;
|
|
|
|
} FT_DriverRec;
|
|
|
|
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/**** ****/
|
|
/**** ****/
|
|
/**** G L Y P H Z O N E S ****/
|
|
/**** ****/
|
|
/**** ****/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
|
|
/************************************************************************
|
|
*
|
|
* <Struct>
|
|
* FT_GlyphZone
|
|
*
|
|
* <Description>
|
|
* A glyph zone is used to load, scale and hint glyph outline
|
|
* coordinates.
|
|
*
|
|
* <Fields>
|
|
* memory :: handle to memory manager
|
|
* max_points :: max size in points of zone
|
|
* max_contours :: max size in contours of zone
|
|
* n_points :: current number of points in zone
|
|
* n_contours :: current number of contours in zone
|
|
* org :: original glyph coordinates (font units/scaled)
|
|
* cur :: current glyph coordinates (scaled/hinted)
|
|
* tags :: point control tags
|
|
* contours :: contour end points
|
|
*
|
|
***********************************************************************/
|
|
|
|
typedef struct FT_GlyphZone_
|
|
{
|
|
FT_Memory memory;
|
|
FT_UShort max_points;
|
|
FT_UShort max_contours;
|
|
FT_UShort n_points; /* number of points in zone */
|
|
FT_Short n_contours; /* number of contours */
|
|
|
|
FT_Vector* org; /* original point coordinates */
|
|
FT_Vector* cur; /* current point coordinates */
|
|
|
|
FT_Byte* tags; /* current touch flags */
|
|
FT_UShort* contours; /* contour end points */
|
|
|
|
} FT_GlyphZone;
|
|
|
|
|
|
BASE_DEF(FT_Error) FT_New_GlyphZone( FT_Memory memory,
|
|
FT_UShort maxPoints,
|
|
FT_Short maxContours,
|
|
FT_GlyphZone* zone );
|
|
|
|
BASE_DEF(void) FT_Done_GlyphZone( FT_GlyphZone* zone );
|
|
|
|
BASE_DEF(FT_Error) FT_Update_GlyphZone( FT_GlyphZone* zone,
|
|
FT_UShort num_points,
|
|
FT_Short num_contours );
|
|
|
|
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/**** ****/
|
|
/**** ****/
|
|
/**** L I B R A R I E S ****/
|
|
/**** ****/
|
|
/**** ****/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
|
|
#define FT_DEBUG_HOOK_TRUETYPE 0
|
|
#define FT_DEBUG_HOOK_TYPE1 1
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* FT_LibraryRec */
|
|
/* */
|
|
/* <Description> */
|
|
/* The FreeType library class. This is the root of all FreeType */
|
|
/* data. Use FT_New_Library() to create a library object, and */
|
|
/* FT_Done_Library() to discard it and all child objects. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* memory :: The library's memory object. Manages memory */
|
|
/* allocation */
|
|
/* */
|
|
/* generic :: Client data variable. Used to extend the */
|
|
/* Library class by higher levels and clients. */
|
|
/* */
|
|
/* num_drivers :: The number of drivers currently registered */
|
|
/* within this library. This is set to 0 for new */
|
|
/* libraries. New drivers are added through the */
|
|
/* FT_Add_Driver() API function. */
|
|
/* */
|
|
/* drivers :: A table used to store handles to the currently */
|
|
/* registered font drivers. Note that each driver */
|
|
/* contains a list of its opened faces. */
|
|
/* */
|
|
/* raster_pool :: The raster object's render pool. This can */
|
|
/* ideally be changed dynamically at run-time. */
|
|
/* */
|
|
typedef void (*FT_DebugHook_Func)( void* arg );
|
|
|
|
typedef struct FT_LibraryRec_
|
|
{
|
|
FT_Memory memory; /* library's memory object */
|
|
|
|
FT_Generic generic;
|
|
|
|
FT_Int num_drivers;
|
|
FT_Driver drivers[ FT_MAX_DRIVERS ]; /* driver objects */
|
|
|
|
FT_Raster_Funcs raster_funcs[ FT_MAX_GLYPH_FORMATS ];
|
|
FT_Raster rasters [ FT_MAX_GLYPH_FORMATS ];
|
|
|
|
void* raster_pool; /* scan-line conversion render pool */
|
|
long raster_pool_size; /* size of render pool in bytes */
|
|
|
|
FT_DebugHook_Func debug_hooks[4];
|
|
|
|
} FT_LibraryRec;
|
|
|
|
|
|
EXPORT_DEF(FT_Error) FT_New_Library( FT_Memory memory,
|
|
FT_Library* library );
|
|
|
|
|
|
EXPORT_DEF(FT_Error) FT_Done_Library( FT_Library library );
|
|
|
|
|
|
|
|
EXPORT_DEF(void) FT_Set_Debug_Hook( FT_Library library,
|
|
FT_UInt hook_index,
|
|
FT_DebugHook_Func debug_hook );
|
|
|
|
|
|
EXPORT_DEF(FT_Error) FT_Add_Driver( FT_Library library,
|
|
const FT_DriverInterface* driver_interface );
|
|
|
|
|
|
EXPORT_DEF(FT_Error) FT_Remove_Driver( FT_Driver driver );
|
|
|
|
|
|
EXPORT_DEF(FT_Driver) FT_Get_Driver( FT_Library library,
|
|
char* driver_name );
|
|
|
|
#ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
|
|
|
|
EXPORT_DEF(FT_Error) FT_New_Stream( const char* filepathname,
|
|
FT_Stream astream );
|
|
|
|
EXPORT_DEF(void) FT_Done_Stream( FT_Stream stream );
|
|
|
|
EXPORT_DEF(FT_Memory) FT_New_Memory( void );
|
|
|
|
#endif
|
|
|
|
/* Define default raster's interface. The default raster is located in `src/base/ftraster.c' */
|
|
/* */
|
|
/* Client applications can register new rasters through the FT_Set_Raster API.. */
|
|
/* */
|
|
#ifndef FT_NO_DEFAULT_RASTER
|
|
EXPORT_VAR(FT_Raster_Funcs) ft_default_raster;
|
|
#endif
|
|
|
|
|
|
#endif /* FTOBJS_H */
|
|
|
|
|
|
/* END */
|