1
/***************************************************************************/
5
/* High-level `autohint' module-specific interface (specification). */
7
/* Copyright 1996-2001, 2002 by */
8
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
10
/* This file is part of the FreeType project, and may only be used, */
11
/* modified, and distributed under the terms of the FreeType project */
12
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13
/* this file you indicate that you have read the license and */
14
/* understand and accept it fully. */
16
/***************************************************************************/
19
/*************************************************************************/
21
/* The auto-hinter is used to load and automatically hint glyphs if a */
22
/* format-specific hinter isn't available. */
24
/*************************************************************************/
27
#ifndef __AUTOHINT_H__
28
#define __AUTOHINT_H__
31
/*************************************************************************/
33
/* A small technical note regarding automatic hinting in order to */
34
/* clarify this module interface. */
36
/* An automatic hinter might compute two kinds of data for a given face: */
38
/* - global hints: Usually some metrics that describe global properties */
39
/* of the face. It is computed by scanning more or less */
40
/* agressively the glyphs in the face, and thus can be */
41
/* very slow to compute (even if the size of global */
42
/* hints is really small). */
44
/* - glyph hints: These describe some important features of the glyph */
45
/* outline, as well as how to align them. They are */
46
/* generally much faster to compute than global hints. */
48
/* The current FreeType auto-hinter does a pretty good job while */
49
/* performing fast computations for both global and glyph hints. */
50
/* However, we might be interested in introducing more complex and */
51
/* powerful algorithms in the future, like the one described in the John */
52
/* D. Hobby paper, which unfortunately requires a lot more horsepower. */
54
/* Because a sufficiently sophisticated font management system would */
55
/* typically implement an LRU cache of opened face objects to reduce */
56
/* memory usage, it is a good idea to be able to avoid recomputing */
57
/* global hints every time the same face is re-opened. */
59
/* We thus provide the ability to cache global hints outside of the face */
60
/* object, in order to speed up font re-opening time. Of course, this */
61
/* feature is purely optional, so most client programs won't even notice */
64
/* I initially thought that it would be a good idea to cache the glyph */
65
/* hints too. However, my general idea now is that if you really need */
66
/* to cache these too, you are simply in need of a new font format, */
67
/* where all this information could be stored within the font file and */
68
/* decoded on the fly. */
70
/*************************************************************************/
74
#include FT_FREETYPE_H
80
typedef struct FT_AutoHinterRec_ *FT_AutoHinter;
83
/*************************************************************************/
86
/* FT_AutoHinter_GlobalGetFunc */
89
/* Retrieves the global hints computed for a given face object the */
90
/* resulting data is dissociated from the face and will survive a */
91
/* call to FT_Done_Face(). It must be discarded through the API */
92
/* FT_AutoHinter_GlobalDoneFunc(). */
95
/* hinter :: A handle to the source auto-hinter. */
97
/* face :: A handle to the source face object. */
100
/* global_hints :: A typeless pointer to the global hints. */
102
/* global_len :: The size in bytes of the global hints. */
105
(*FT_AutoHinter_GlobalGetFunc)( FT_AutoHinter hinter,
111
/*************************************************************************/
114
/* FT_AutoHinter_GlobalDoneFunc */
117
/* Discards the global hints retrieved through */
118
/* FT_AutoHinter_GlobalGetFunc(). This is the only way these hints */
119
/* are freed from memory. */
122
/* hinter :: A handle to the auto-hinter module. */
124
/* global :: A pointer to retrieved global hints to discard. */
127
(*FT_AutoHinter_GlobalDoneFunc)( FT_AutoHinter hinter,
131
/*************************************************************************/
134
/* FT_AutoHinter_GlobalResetFunc */
137
/* This function is used to recompute the global metrics in a given */
138
/* font. This is useful when global font data changes (e.g. Multiple */
139
/* Masters fonts where blend coordinates change). */
142
/* hinter :: A handle to the source auto-hinter. */
144
/* face :: A handle to the face. */
147
(*FT_AutoHinter_GlobalResetFunc)( FT_AutoHinter hinter,
151
/*************************************************************************/
154
/* FT_AutoHinter_GlyphLoadFunc */
157
/* This function is used to load, scale, and automatically hint a */
158
/* glyph from a given face. */
161
/* face :: A handle to the face. */
163
/* glyph_index :: The glyph index. */
165
/* load_flags :: The load flags. */
168
/* This function is capable of loading composite glyphs by hinting */
169
/* each sub-glyph independently (which improves quality). */
171
/* It will call the font driver with FT_Load_Glyph(), with */
172
/* FT_LOAD_NO_SCALE set. */
175
(*FT_AutoHinter_GlyphLoadFunc)( FT_AutoHinter hinter,
179
FT_Int32 load_flags );
182
/*************************************************************************/
185
/* FT_AutoHinter_ServiceRec */
188
/* The auto-hinter module's interface. */
190
typedef struct FT_AutoHinter_ServiceRec_
192
FT_AutoHinter_GlobalResetFunc reset_face;
193
FT_AutoHinter_GlobalGetFunc get_global_hints;
194
FT_AutoHinter_GlobalDoneFunc done_global_hints;
195
FT_AutoHinter_GlyphLoadFunc load_glyph;
197
} FT_AutoHinter_ServiceRec, *FT_AutoHinter_Service;
202
#endif /* __AUTOHINT_H__ */