C++ programs easier: Renamed FT_WordXX to FT_UIntXX. Changed a lot of void* to FT_Byte* if related to i/o streams -- FreeType always accesses streams byte-wise, so this makes sense IMHO. Added a lot of #ifdef __cplusplus to header files (and removed a few). Other minor syntax fixes (mostly casts). Replaced the variable `private' with `private_dict' -- `private' is reserved in C++.
263 lines
13 KiB
C
263 lines
13 KiB
C
/***************************************************************************/
|
|
/* */
|
|
/* t1hinter.h */
|
|
/* */
|
|
/* Type 1 hinter (body). */
|
|
/* */
|
|
/* 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. */
|
|
/* */
|
|
/***************************************************************************/
|
|
|
|
|
|
#ifndef T1HINTER_H
|
|
#define T1HINTER_H
|
|
|
|
#include <t1objs.h>
|
|
#include <t1gload.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Snap_Zone */
|
|
/* */
|
|
/* <Description> */
|
|
/* A `snap zone' is used to model either a blue zone or a stem width */
|
|
/* at a given character size. It is made of a minimum and maximum */
|
|
/* edge, defined in 26.6 pixels, as well as an `original' and */
|
|
/* `scaled' position. */
|
|
/* */
|
|
/* The position corresponds to the stem width (for stem snap zones) */
|
|
/* or to the blue position (for blue zones). */
|
|
/* */
|
|
/* <Fields> */
|
|
/* orus :: The original position in font units. */
|
|
/* */
|
|
/* pix :: The current position in sub-pixel units. */
|
|
/* */
|
|
/* min :: The minimum boundary in sub-pixel units. */
|
|
/* */
|
|
/* max :: The maximum boundary in sub-pixel units. */
|
|
/* */
|
|
typedef struct T1_Snap_Zone_
|
|
{
|
|
FT_Pos orus;
|
|
FT_Pos pix;
|
|
FT_Pos min;
|
|
FT_Pos max;
|
|
|
|
} T1_Snap_Zone;
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Edge */
|
|
/* */
|
|
/* <Description> */
|
|
/* A very simple structure used to model a stem edge. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* orus :: The original edge position in font units. */
|
|
/* */
|
|
/* pix :: The scaled edge position in sub-pixel units. */
|
|
/* */
|
|
typedef struct T1_Edge_
|
|
{
|
|
FT_Pos orus;
|
|
FT_Pos pix;
|
|
|
|
} T1_Edge;
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Stem_Hint */
|
|
/* */
|
|
/* <Description> */
|
|
/* A simple structure used to model a stem hint. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* min_edge :: The hint's minimum edge. */
|
|
/* */
|
|
/* max_edge :: The hint's maximum edge. */
|
|
/* */
|
|
/* hint_flags :: Some flags describing the stem properties. */
|
|
/* */
|
|
/* <Note> */
|
|
/* The min and max edges of a ghost stem have the same position, even */
|
|
/* if they are coded in a weird way in the charstrings. */
|
|
/* */
|
|
typedef struct T1_Stem_Hint_
|
|
{
|
|
T1_Edge min_edge;
|
|
T1_Edge max_edge;
|
|
FT_Int hint_flags;
|
|
|
|
} T1_Stem_Hint;
|
|
|
|
|
|
#define T1_HINT_FLAG_ACTIVE 1 /* indicates an active stem */
|
|
#define T1_HINT_FLAG_MIN_BORDER 2 /* unused for now */
|
|
#define T1_HINT_FLAG_MAX_BORDER 4 /* unused for now */
|
|
|
|
/* hinter's configuration constants */
|
|
#define T1_HINTER_MAX_BLUES 24 /* maximum number of blue zones */
|
|
#define T1_HINTER_MAX_SNAPS 16 /* maximum number of stem snap zones */
|
|
#define T1_HINTER_MAX_EDGES 64 /* maximum number of stem hints */
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Size_Hints */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used to model the hinting information related to a size */
|
|
/* object. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* supress_overshoots :: A boolean flag to tell whether overshoot */
|
|
/* supression should occur. */
|
|
/* */
|
|
/* num_blue_zones :: The total number of blue zones (top+bottom). */
|
|
/* */
|
|
/* num_bottom_zones :: The number of bottom zones. */
|
|
/* */
|
|
/* blue_zones :: The blue zones table. Bottom zones are */
|
|
/* stored first in the table, followed by all */
|
|
/* top zones. */
|
|
/* */
|
|
/* num_snap_widths :: The number of horizontal stem snap zones. */
|
|
/* */
|
|
/* snap_widths :: An array of horizontal stem snap zones. */
|
|
/* */
|
|
/* num_snap_heights :: The number of vertical stem snap zones. */
|
|
/* */
|
|
/* snap_heights :: An array of vertical stem snap zones. */
|
|
/* */
|
|
struct T1_Size_Hints_
|
|
{
|
|
FT_Bool supress_overshoots;
|
|
|
|
FT_Int num_blue_zones;
|
|
FT_Int num_bottom_zones;
|
|
T1_Snap_Zone blue_zones[T1_HINTER_MAX_BLUES];
|
|
|
|
FT_Int num_snap_widths;
|
|
T1_Snap_Zone snap_widths[T1_HINTER_MAX_SNAPS];
|
|
|
|
FT_Int num_snap_heights;
|
|
T1_Snap_Zone snap_heights[T1_HINTER_MAX_SNAPS];
|
|
};
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Stem_Table */
|
|
/* */
|
|
/* <Description> */
|
|
/* A simple structure used to model a set of stem hints in a single */
|
|
/* direction during the loading of a given glyph outline. Not all */
|
|
/* stem hints are active at a time. Moreover, stems must be sorted */
|
|
/* regularly. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* num_stems :: The total number of stems in the table. */
|
|
/* */
|
|
/* num_active :: The number of active stems in the table. */
|
|
/* */
|
|
/* stems :: A table of all stems. */
|
|
/* */
|
|
/* sort :: A table of indices into the stems table, used to */
|
|
/* keep a sorted list of the active stems. */
|
|
/* */
|
|
typedef struct T1_Stem_Table_
|
|
{
|
|
FT_Int num_stems;
|
|
FT_Int num_active;
|
|
|
|
T1_Stem_Hint stems[T1_HINTER_MAX_EDGES];
|
|
FT_Int sort [T1_HINTER_MAX_EDGES];
|
|
|
|
} T1_Stem_Table;
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Struct> */
|
|
/* T1_Glyph_Hints */
|
|
/* */
|
|
/* <Description> */
|
|
/* A structure used to model the stem hints of a given glyph outline */
|
|
/* during glyph loading. */
|
|
/* */
|
|
/* <Fields> */
|
|
/* hori_stems :: The horizontal stem hints table. */
|
|
/* vert_stems :: The vertical stem hints table. */
|
|
/* */
|
|
struct T1_Glyph_Hints_
|
|
{
|
|
T1_Stem_Table hori_stems;
|
|
T1_Stem_Table vert_stems;
|
|
};
|
|
|
|
|
|
/*************************************************************************/
|
|
/* */
|
|
/* <Data> */
|
|
/* t1_hinter_funcs */
|
|
/* */
|
|
/* <Description> */
|
|
/* A table containing the address of various functions used during */
|
|
/* the loading of an hinted scaled outline. */
|
|
/* */
|
|
extern const T1_Hinter_Funcs t1_hinter_funcs;
|
|
|
|
|
|
LOCAL_DEF
|
|
FT_Error T1_New_Size_Hinter( T1_Size size );
|
|
|
|
LOCAL_DEF
|
|
void T1_Done_Size_Hinter( T1_Size size );
|
|
|
|
LOCAL_DEF
|
|
FT_Error T1_Reset_Size_Hinter( T1_Size size );
|
|
|
|
LOCAL_DEF
|
|
FT_Error T1_New_Glyph_Hinter( T1_GlyphSlot glyph );
|
|
|
|
LOCAL_DEF
|
|
void T1_Done_Glyph_Hinter( T1_GlyphSlot glyph );
|
|
|
|
|
|
LOCAL_DEF
|
|
void T1_Hint_Points( T1_Builder* builder );
|
|
|
|
LOCAL_DEF
|
|
void T1_Hint_Stems( T1_Builder* builder );
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* T1HINTER_H */
|
|
|
|
|
|
/* END */
|