1
/***************************************************************************/
5
/* FreeType incremental loading (specification). */
7
/* Copyright 2002, 2003 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
#ifndef __FTINCREM_H__
20
#define __FTINCREM_H__
23
#include FT_FREETYPE_H
26
#error "freetype.h of FreeType 1 has been loaded!"
27
#error "Please fix the directory search order for header files"
28
#error "so that freetype.h of FreeType 2 is found first."
35
/***************************************************************************
41
* An opaque type describing a user-provided object used to implement
42
* "incremental" glyph loading within FreeType. This is used to support
43
* embedded fonts in certain environments (e.g. Postscript interpreters),
44
* where the glyph data isn't in the font file, or must be overridden by
48
* It is up to client applications to create and implement @FT_Incremental
49
* objects, as long as they provide implementations for the methods
50
* @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
51
* and @FT_Incremental_GetGlyphMetricsFunc.
53
* See the description of @FT_Incremental_InterfaceRec to understand how
54
* to use incremental objects with FreeType.
56
typedef struct FT_IncrementalRec_* FT_Incremental;
59
/***************************************************************************
62
* FT_Incremental_Metrics
65
* A small structure used to contain the basic glyph metrics returned
66
* by the @FT_Incremental_GetGlyphMetricsFunc method.
70
* Left bearing, in font units.
73
* Top bearing, in font units.
76
* Glyph advance, in font units.
79
* These correspond to horizontal or vertical metrics depending on the
80
* value of the 'vertical' argument to the function
81
* @FT_Incremental_GetGlyphMetricsFunc.
83
typedef struct FT_Incremental_MetricsRec_
89
} FT_Incremental_MetricsRec, *FT_Incremental_Metrics;
92
/***************************************************************************
95
* FT_Incremental_GetGlyphDataFunc
98
* A function called by FreeType to access a given glyph's data bytes
99
* during @FT_Load_Glyph or @FT_Load_Char if incremental loading is
102
* Note that the format of the glyph's data bytes depends on the font
103
* file format. For TrueType, it must correspond to the raw bytes within
104
* the 'glyf' table. For Postscript formats, it must correspond to the
105
* *unencrypted* charstring bytes, without any 'lenIV' header. It is
106
* undefined for any other format.
110
* Handle to an opaque @FT_Incremental handle provided by the client
114
* Index of relevant glyph.
118
* A structure describing the returned glyph data bytes (which will be
119
* accessed as a read-only byte block).
122
* FreeType error code. 0 means success.
125
* If this function returns succesfully the method
126
* @FT_Incremental_FreeGlyphDataFunc will be called later to release
129
* Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
133
(*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental,
138
/***************************************************************************
141
* FT_Incremental_FreeGlyphDataFunc
144
* A function used to release the glyph data bytes returned by a
145
* successful call to @FT_Incremental_GetGlyphDataFunc.
149
* A handle to an opaque @FT_Incremental handle provided by the client
153
* A structure describing the glyph data bytes (which will be accessed
154
* as a read-only byte block).
157
(*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental,
161
/***************************************************************************
164
* FT_Incremental_GetGlyphMetricsFunc
167
* A function used to retrieve the basic metrics of a given glyph index
168
* before accessing its data. This is necessary because, in certain
169
* formats like TrueType, the metrics are stored in a different place from
170
* the glyph images proper.
174
* A handle to an opaque @FT_Incremental handle provided by the client
178
* Index of relevant glyph.
181
* If true, return vertical metrics.
184
* This parameter is used for both input and output.
185
* The original glyph metrics, if any, in font units. If metrics are
186
* not available all the values must be set to zero.
190
* The replacement glyph metrics in font units.
194
(*FT_Incremental_GetGlyphMetricsFunc)
195
( FT_Incremental incremental,
198
FT_Incremental_MetricsRec *ametrics );
201
/**************************************************************************
204
* FT_Incremental_FuncsRec
207
* A table of functions for accessing fonts that load data
208
* incrementally. Used in @FT_Incremental_InterfaceRec.
212
* The function to get glyph data. Must not be null.
215
* The function to release glyph data. Must not be null.
217
* get_glyph_metrics ::
218
* The function to get glyph metrics. May be null if the font does
219
* not provide overriding glyph metrics.
221
typedef struct FT_Incremental_FuncsRec_
223
FT_Incremental_GetGlyphDataFunc get_glyph_data;
224
FT_Incremental_FreeGlyphDataFunc free_glyph_data;
225
FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics;
227
} FT_Incremental_FuncsRec;
230
/***************************************************************************
233
* FT_Incremental_InterfaceRec
236
* A structure to be used with @FT_Open_Face to indicate that the user
237
* wants to support incremental glyph loading. You should use it with
238
* @FT_PARAM_TAG_INCREMENTAL as in the following example:
241
* FT_Incremental_InterfaceRec inc_int;
242
* FT_Parameter parameter;
243
* FT_Open_Args open_args;
246
* // set up incremental descriptor
247
* inc_int.funcs = my_funcs;
248
* inc_int.object = my_object;
250
* // set up optional parameter
251
* parameter.tag = FT_PARAM_TAG_INCREMENTAL;
252
* parameter.data = &inc_int;
254
* // set up FT_Open_Args structure
255
* open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS;
256
* open_args.pathname = my_font_pathname;
257
* open_args.num_params = 1;
258
* open_args.params = ¶meter; // we use one optional argument
261
* error = FT_Open_Face( library, &open_args, index, &face );
265
typedef struct FT_Incremental_InterfaceRec_
267
const FT_Incremental_FuncsRec* funcs;
268
FT_Incremental object;
270
} FT_Incremental_InterfaceRec;
273
/***************************************************************************
276
* FT_PARAM_TAG_INCREMENTAL
279
* A constant used as the tag of @FT_Parameter structures to indicate
280
* an incremental loading object to be used by FreeType.
283
#define FT_PARAM_TAG_INCREMENTAL FT_MAKE_TAG( 'i', 'n', 'c', 'r' )
289
#endif /* __FTINCREM_H__ */