2001-10-18 13:38:43 +02:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* pshints.h */
|
|
|
|
/* */
|
|
|
|
/* Interface to Postscript-specific (Type 1 and Type 2) hints */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* recorders (specification only). These are used to support native */
|
|
|
|
/* T1/T2 hints in the "type1", "cid" and "cff" font drivers. */
|
2001-10-18 13:38:43 +02:00
|
|
|
/* */
|
2002-03-30 14:16:35 +01:00
|
|
|
/* Copyright 2001, 2002 by */
|
2001-10-18 13:38:43 +02:00
|
|
|
/* 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. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
#ifndef __PSHINTS_H__
|
|
|
|
#define __PSHINTS_H__
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_FREETYPE_H
|
|
|
|
#include FT_TYPE1_TABLES_H
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** INTERNAL REPRESENTATION OF GLOBALS *****/
|
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
typedef struct PSH_GlobalsRec_* PSH_Globals;
|
|
|
|
|
|
|
|
typedef FT_Error
|
|
|
|
(*PSH_Globals_NewFunc)( FT_Memory memory,
|
|
|
|
T1_Private* private_dict,
|
|
|
|
PSH_Globals* aglobals );
|
|
|
|
|
|
|
|
typedef FT_Error
|
|
|
|
(*PSH_Globals_SetScaleFunc)( PSH_Globals globals,
|
|
|
|
FT_Fixed x_scale,
|
|
|
|
FT_Fixed y_scale,
|
|
|
|
FT_Fixed x_delta,
|
|
|
|
FT_Fixed y_delta );
|
|
|
|
|
|
|
|
typedef void
|
|
|
|
(*PSH_Globals_DestroyFunc)( PSH_Globals globals );
|
|
|
|
|
|
|
|
|
2002-03-30 14:16:35 +01:00
|
|
|
typedef struct PSH_Globals_FuncsRec_
|
2001-10-18 13:38:43 +02:00
|
|
|
{
|
|
|
|
PSH_Globals_NewFunc create;
|
|
|
|
PSH_Globals_SetScaleFunc set_scale;
|
|
|
|
PSH_Globals_DestroyFunc destroy;
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
} PSH_Globals_FuncsRec, *PSH_Globals_Funcs;
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** PUBLIC TYPE 1 HINTS RECORDER *****/
|
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @type: */
|
|
|
|
/* T1_Hints */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* This is a handle to an opaque structure used to record glyph hints */
|
|
|
|
/* from a Type 1 character glyph character string. */
|
|
|
|
/* */
|
|
|
|
/* The methods used to operate on this object are defined by the */
|
|
|
|
/* @T1_Hints_FuncsRec structure. Recording glyph hints is normally */
|
|
|
|
/* achieved through the following scheme: */
|
|
|
|
/* */
|
|
|
|
/* - Open a new hint recording session by calling the "open" method. */
|
|
|
|
/* This will rewind the recorder and prepare it for new input. */
|
|
|
|
/* */
|
|
|
|
/* - For each hint found in the glyph charstring, call the */
|
|
|
|
/* corresponding method ("stem", "stem3", or "reset"). Note that */
|
|
|
|
/* these functions do not return an error code. */
|
|
|
|
/* */
|
|
|
|
/* - Close the recording session by calling the "close" method. It */
|
|
|
|
/* will return an error code if the hints were invalid or something */
|
|
|
|
/* strange happened (e.g. memory shortage). */
|
|
|
|
/* */
|
|
|
|
/* The hints accumulated in the object can later be used by the */
|
2002-03-30 14:16:35 +01:00
|
|
|
/* PostScript hinter. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
|
|
|
typedef struct T1_HintsRec_* T1_Hints;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @type: */
|
|
|
|
/* T1_Hints_Funcs */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A pointer to the @T1_Hints_FuncsRec structure that defines the */
|
|
|
|
/* API of a given @T1_Hints object. */
|
|
|
|
/* */
|
2001-10-18 13:38:43 +02:00
|
|
|
typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs;
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_OpenFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to prepare it for a new */
|
|
|
|
/* Type 1 hints recording session. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* You should always call the @T1_Hints_CloseFunc method in order to */
|
|
|
|
/* close an opened recording session. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T1_Hints_OpenFunc)( T1_Hints hints );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_SetStemFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to record a new horizontal or */
|
|
|
|
/* vertical stem. This corresponds to the Type 1 "hstem" and "vstem" */
|
|
|
|
/* operators. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */
|
|
|
|
/* (vstem). */
|
|
|
|
/* */
|
|
|
|
/* coords :: Array of 2 integers, used as (position,length) stem */
|
|
|
|
/* descriptor. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* Use vertical coordinates (y) for horizontal stems (dim=0). Use */
|
|
|
|
/* horizontal coordinates (x) for vertical stems (dim=1). */
|
|
|
|
/* */
|
|
|
|
/* "coords[0]" is the absolute stem position (lowest coordinate); */
|
|
|
|
/* "coords[1]" is the length. */
|
|
|
|
/* */
|
|
|
|
/* The length can be negative, in which case it must be either -20 or */
|
|
|
|
/* -21. It will be interpreted as a "ghost" stem, according to */
|
|
|
|
/* Type 1 specification. */
|
|
|
|
/* */
|
|
|
|
/* If the length is -21 (corresponding to a bottom ghost stem), then */
|
|
|
|
/* the real stem position is "coords[0]+coords[1]". */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T1_Hints_SetStemFunc)( T1_Hints hints,
|
|
|
|
FT_UInt dimension,
|
|
|
|
FT_Long* coords );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_SetStem3Func */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to record three */
|
|
|
|
/* counter-controlled horizontal or vertical stems at once. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* dimension :: 0 for horizontal stems, 1 for vertical ones. */
|
|
|
|
/* */
|
|
|
|
/* coords :: An array of 6 integers, holding 3 (position,length) */
|
|
|
|
/* pairs for the counter-controlled stems. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* Use vertical coordinates (y) for horizontal stems (dim=0). Use */
|
|
|
|
/* horizontal coordinates (x) for vertical stems (dim=1). */
|
|
|
|
/* */
|
|
|
|
/* The lengths cannot be negative (ghost stems are never */
|
|
|
|
/* counter-controlled). */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T1_Hints_SetStem3Func)( T1_Hints hints,
|
|
|
|
FT_UInt dimension,
|
|
|
|
FT_Long* coords );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_ResetFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to reset the stems hints in a */
|
|
|
|
/* recording session. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
2002-03-30 14:16:35 +01:00
|
|
|
/* */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* end_point :: The index of the last point in the input glyph in */
|
|
|
|
/* which the previously defined hints apply. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T1_Hints_ResetFunc)( T1_Hints hints,
|
|
|
|
FT_UInt end_point );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_CloseFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to close a hint recording */
|
|
|
|
/* session. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* end_point :: The index of the last point in the input glyph. */
|
|
|
|
/* */
|
|
|
|
/* @return: */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* The error code will be set to indicate that an error occured */
|
|
|
|
/* during the recording session. */
|
|
|
|
/* */
|
|
|
|
typedef FT_Error
|
|
|
|
(*T1_Hints_CloseFunc)( T1_Hints hints,
|
|
|
|
FT_UInt end_point );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T1_Hints_ApplyFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T1_Hints class used to apply hints to the */
|
|
|
|
/* corresponding glyph outline. Must be called once all hints have */
|
|
|
|
/* been recorded. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* hints :: A handle to the Type 1 hints recorder. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* outline :: A pointer to the target outline descriptor. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* globals :: The hinter globals for this font. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* hint_flags :: Hinter bit flags. */
|
* include/freetype/freetype.h, src/base/ftobjs.h,
freetype/internal/ftobjs.h, freetype/internal/psaux.h,
freetype/internal/pshints.h, src/psaux/t1decode.c, src/cff/cffgload.h,
src/cff/cffgload.c, src/pshinter/pshalgo1.h, src/pshinter/pshalgo1.c,
src/pshinter/pshalgo2.h, src/pshinter/pshalgo2.c, src/pshinter/pshalgo3.h,
src/pshinter/pshalgo3.c: Adding support for hinter-specific bit flags,
and the new FT_Set_Hint_Flags high-level API
2002-07-09 00:26:11 +02:00
|
|
|
/* */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* @return: */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* On input, all points within the outline are in font coordinates. */
|
|
|
|
/* On output, they are in 1/64th of pixels. */
|
|
|
|
/* */
|
|
|
|
/* The scaling transformation is taken from the "globals" object */
|
|
|
|
/* which must correspond to the same font as the glyph. */
|
|
|
|
/* */
|
|
|
|
typedef FT_Error
|
2002-08-28 00:34:20 +02:00
|
|
|
(*T1_Hints_ApplyFunc)( T1_Hints hints,
|
|
|
|
FT_Outline* outline,
|
|
|
|
PSH_Globals globals,
|
|
|
|
FT_Render_Mode hint_mode );
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @struct: */
|
|
|
|
/* T1_Hints_FuncsRec */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* The structure used to provide the API to @T1_Hints objects. */
|
|
|
|
/* */
|
|
|
|
/* @fields: */
|
|
|
|
/* hints :: A handle to the T1 Hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* open :: The function to open a recording session. */
|
|
|
|
/* */
|
|
|
|
/* close :: The function to close a recording session. */
|
|
|
|
/* */
|
|
|
|
/* stem :: The function to set a simple stem. */
|
|
|
|
/* */
|
|
|
|
/* stem3 :: The function to set counter-controlled stems. */
|
|
|
|
/* */
|
|
|
|
/* reset :: The function to reset stem hints. */
|
|
|
|
/* */
|
|
|
|
/* apply :: The function to apply the hints to the corresponding */
|
|
|
|
/* glyph outline. */
|
|
|
|
/* */
|
|
|
|
typedef struct T1_Hints_FuncsRec_
|
2001-10-18 13:38:43 +02:00
|
|
|
{
|
2001-12-05 02:22:05 +01:00
|
|
|
T1_Hints hints;
|
|
|
|
T1_Hints_OpenFunc open;
|
|
|
|
T1_Hints_CloseFunc close;
|
|
|
|
T1_Hints_SetStemFunc stem;
|
|
|
|
T1_Hints_SetStem3Func stem3;
|
|
|
|
T1_Hints_ResetFunc reset;
|
|
|
|
T1_Hints_ApplyFunc apply;
|
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
} T1_Hints_FuncsRec;
|
|
|
|
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** PUBLIC TYPE 2 HINTS RECORDER *****/
|
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @type: */
|
|
|
|
/* T2_Hints */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* This is a handle to an opaque structure used to record glyph hints */
|
|
|
|
/* from a Type 2 character glyph character string. */
|
|
|
|
/* */
|
|
|
|
/* The methods used to operate on this object are defined by the */
|
|
|
|
/* @T2_Hints_FuncsRec structure. Recording glyph hints is normally */
|
|
|
|
/* achieved through the following scheme: */
|
|
|
|
/* */
|
|
|
|
/* - Open a new hint recording session by calling the "open" method. */
|
|
|
|
/* This will rewind the recorder and prepare it for new input. */
|
|
|
|
/* */
|
|
|
|
/* - For each hint found in the glyph charstring, call the */
|
|
|
|
/* corresponding method ("stems", "hintmask", "counters"). Note */
|
|
|
|
/* that these functions do not return an error code. */
|
|
|
|
/* */
|
|
|
|
/* - Close the recording session by calling the "close" method. It */
|
|
|
|
/* will return an error code if the hints were invalid or something */
|
|
|
|
/* strange happened (e.g. memory shortage). */
|
|
|
|
/* */
|
|
|
|
/* The hints accumulated in the object can later be used by the */
|
|
|
|
/* Postscript hinter. */
|
|
|
|
/* */
|
|
|
|
typedef struct T2_HintsRec_* T2_Hints;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @type: */
|
|
|
|
/* T2_Hints_Funcs */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A pointer to the @T2_Hints_FuncsRec structure that defines the API */
|
|
|
|
/* of a given @T2_Hints object. */
|
|
|
|
/* */
|
2001-10-18 13:38:43 +02:00
|
|
|
typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs;
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_OpenFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to prepare it for a new */
|
|
|
|
/* Type 2 hints recording session. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* You should always call the @T2_Hints_CloseFunc method in order to */
|
|
|
|
/* close an opened recording session. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T2_Hints_OpenFunc)( T2_Hints hints );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_StemsFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to set the table of stems in */
|
|
|
|
/* either the vertical or horizontal dimension. Equivalent to the */
|
|
|
|
/* "hstem", "vstem", "hstemhm", and "vstemhm" Type 2 operators. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */
|
|
|
|
/* (vstem). */
|
|
|
|
/* */
|
|
|
|
/* count :: The number of stems. */
|
|
|
|
/* */
|
|
|
|
/* coords :: An array of "count" (position,length) pairs. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* Use vertical coordinates (y) for horizontal stems (dim=0). Use */
|
|
|
|
/* horizontal coordinates (x) for vertical stems (dim=1). */
|
|
|
|
/* */
|
|
|
|
/* There are "2*count" elements in the "coords" aray. Each even */
|
|
|
|
/* element is an absolute position in font units, each odd element is */
|
|
|
|
/* a length in font units. */
|
|
|
|
/* */
|
|
|
|
/* A length can be negative, in which case it must be either -20 or */
|
|
|
|
/* -21. It will be interpreted as a "ghost" stem, according to the */
|
|
|
|
/* Type 1 specification. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T2_Hints_StemsFunc)( T2_Hints hints,
|
|
|
|
FT_UInt dimension,
|
|
|
|
FT_UInt count,
|
|
|
|
FT_Fixed* coordinates );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_MaskFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to set a given hintmask */
|
|
|
|
/* (this corresponds to the "hintmask" Type 2 operator). */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* end_point :: The glyph index of the last point to which the */
|
|
|
|
/* previously defined/activated hints apply. */
|
|
|
|
/* */
|
|
|
|
/* bit_count :: The number of bits in the hint mask. */
|
|
|
|
/* */
|
|
|
|
/* bytes :: An array of bytes modelling the hint mask. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* If the hintmask starts the charstring (before any glyph point */
|
|
|
|
/* definition), the value of "end_point" should be 0. */
|
|
|
|
/* */
|
|
|
|
/* "bit_count" is the number of meaningful bits in the "bytes" array; */
|
|
|
|
/* it must be equal to the total number of hints defined so far */
|
|
|
|
/* (i.e. horizontal+verticals). */
|
|
|
|
/* */
|
|
|
|
/* The "bytes" array can come directly from the Type 2 charstring and */
|
|
|
|
/* respects the same format. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T2_Hints_MaskFunc)( T2_Hints hints,
|
|
|
|
FT_UInt end_point,
|
|
|
|
FT_UInt bit_count,
|
|
|
|
const FT_Byte* bytes );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_CounterFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to set a given counter mask */
|
|
|
|
/* (this corresponds to the "hintmask" Type 2 operator). */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* end_point :: A glyph index of the last point to which the */
|
|
|
|
/* previously defined/active hints apply. */
|
|
|
|
/* */
|
|
|
|
/* bit_count :: The number of bits in the hint mask. */
|
|
|
|
/* */
|
|
|
|
/* bytes :: An array of bytes modelling the hint mask. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* If the hintmask starts the charstring (before any glyph point */
|
|
|
|
/* definition), the value of "end_point" should be 0. */
|
|
|
|
/* */
|
|
|
|
/* "bit_count" is the number of meaningful bits in the "bytes" array; */
|
|
|
|
/* it must be equal to the total number of hints defined so far */
|
|
|
|
/* (i.e. horizontal+verticals). */
|
|
|
|
/* */
|
|
|
|
/* The "bytes" array can come directly from the Type 2 charstring and */
|
|
|
|
/* respects the same format. */
|
|
|
|
/* */
|
|
|
|
typedef void
|
|
|
|
(*T2_Hints_CounterFunc)( T2_Hints hints,
|
|
|
|
FT_UInt bit_count,
|
|
|
|
const FT_Byte* bytes );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_CloseFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to close a hint recording */
|
|
|
|
/* session. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
|
|
|
/* */
|
|
|
|
/* end_point :: The index of the last point in the input glyph. */
|
|
|
|
/* */
|
|
|
|
/* @return: */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* The error code will be set to indicate that an error occured */
|
|
|
|
/* during the recording session. */
|
|
|
|
/* */
|
|
|
|
typedef FT_Error
|
|
|
|
(*T2_Hints_CloseFunc)( T2_Hints hints,
|
|
|
|
FT_UInt end_point );
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @functype: */
|
|
|
|
/* T2_Hints_ApplyFunc */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* A method of the @T2_Hints class used to apply hints to the */
|
|
|
|
/* corresponding glyph outline. Must be called after the "close" */
|
|
|
|
/* method. */
|
|
|
|
/* */
|
|
|
|
/* @input: */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* hints :: A handle to the Type 2 hints recorder. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* outline :: A pointer to the target outline descriptor. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* globals :: The hinter globals for this font. */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* */
|
2002-07-26 11:09:10 +02:00
|
|
|
/* hint_flags :: Hinter bit flags. */
|
* include/freetype/freetype.h, src/base/ftobjs.h,
freetype/internal/ftobjs.h, freetype/internal/psaux.h,
freetype/internal/pshints.h, src/psaux/t1decode.c, src/cff/cffgload.h,
src/cff/cffgload.c, src/pshinter/pshalgo1.h, src/pshinter/pshalgo1.c,
src/pshinter/pshalgo2.h, src/pshinter/pshalgo2.c, src/pshinter/pshalgo3.h,
src/pshinter/pshalgo3.c: Adding support for hinter-specific bit flags,
and the new FT_Set_Hint_Flags high-level API
2002-07-09 00:26:11 +02:00
|
|
|
/* */
|
2001-12-05 02:22:05 +01:00
|
|
|
/* @return: */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* @note: */
|
|
|
|
/* On input, all points within the outline are in font coordinates. */
|
|
|
|
/* On output, they are in 1/64th of pixels. */
|
|
|
|
/* */
|
|
|
|
/* The scaling transformation is taken from the "globals" object */
|
|
|
|
/* which must correspond to the same font than the glyph. */
|
|
|
|
/* */
|
|
|
|
typedef FT_Error
|
2002-08-28 00:34:20 +02:00
|
|
|
(*T2_Hints_ApplyFunc)( T2_Hints hints,
|
|
|
|
FT_Outline* outline,
|
|
|
|
PSH_Globals globals,
|
|
|
|
FT_Render_Mode hint_mode );
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* @struct: */
|
|
|
|
/* T2_Hints_FuncsRec */
|
|
|
|
/* */
|
|
|
|
/* @description: */
|
|
|
|
/* The structure used to provide the API to @T2_Hints objects. */
|
|
|
|
/* */
|
|
|
|
/* @fields: */
|
|
|
|
/* hints :: A handle to the T2 hints recorder object. */
|
|
|
|
/* */
|
|
|
|
/* open :: The function to open a recording session. */
|
|
|
|
/* */
|
|
|
|
/* close :: The function to close a recording session. */
|
|
|
|
/* */
|
|
|
|
/* stems :: The function to set the dimension's stems table. */
|
|
|
|
/* */
|
|
|
|
/* hintmask :: The function to set hint masks. */
|
|
|
|
/* */
|
|
|
|
/* counter :: The function to set counter masks. */
|
|
|
|
/* */
|
|
|
|
/* apply :: The function to apply the hints on the corresponding */
|
|
|
|
/* glyph outline. */
|
|
|
|
/* */
|
|
|
|
typedef struct T2_Hints_FuncsRec_
|
2001-10-18 13:38:43 +02:00
|
|
|
{
|
|
|
|
T2_Hints hints;
|
|
|
|
T2_Hints_OpenFunc open;
|
|
|
|
T2_Hints_CloseFunc close;
|
|
|
|
T2_Hints_StemsFunc stems;
|
|
|
|
T2_Hints_MaskFunc hintmask;
|
|
|
|
T2_Hints_CounterFunc counter;
|
|
|
|
T2_Hints_ApplyFunc apply;
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
} T2_Hints_FuncsRec;
|
|
|
|
|
|
|
|
|
|
|
|
/* */
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
typedef struct PSHinter_Interface_
|
2001-10-18 13:38:43 +02:00
|
|
|
{
|
|
|
|
PSH_Globals_Funcs (*get_globals_funcs)( FT_Module module );
|
|
|
|
T1_Hints_Funcs (*get_t1_funcs) ( FT_Module module );
|
|
|
|
T2_Hints_Funcs (*get_t2_funcs) ( FT_Module module );
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2002-02-28 17:10:29 +01:00
|
|
|
} PSHinter_Interface;
|
2001-10-18 13:38:43 +02:00
|
|
|
|
2002-02-28 17:10:29 +01:00
|
|
|
typedef PSHinter_Interface* PSHinter_Service;
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2002-03-30 14:16:35 +01:00
|
|
|
|
2001-10-18 13:38:43 +02:00
|
|
|
FT_END_HEADER
|
|
|
|
|
|
|
|
#endif /* __PSHINTS_H__ */
|
2001-12-05 02:22:05 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* END */
|