Imported Upstream version 2.13.2
[platform/upstream/freetype2.git] / include / freetype / ftadvanc.h
1 /****************************************************************************
2  *
3  * ftadvanc.h
4  *
5  *   Quick computation of advance widths (specification only).
6  *
7  * Copyright (C) 2008-2023 by
8  * David Turner, Robert Wilhelm, and Werner Lemberg.
9  *
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.
15  *
16  */
17
18
19 #ifndef FTADVANC_H_
20 #define FTADVANC_H_
21
22
23 #include <freetype/freetype.h>
24
25 #ifdef 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."
29 #endif
30
31
32 FT_BEGIN_HEADER
33
34
35   /**************************************************************************
36    *
37    * @section:
38    *   quick_advance
39    *
40    * @title:
41    *   Quick retrieval of advance values
42    *
43    * @abstract:
44    *   Retrieve horizontal and vertical advance values without processing
45    *   glyph outlines, if possible.
46    *
47    * @description:
48    *   This section contains functions to quickly extract advance values
49    *   without handling glyph outlines, if possible.
50    *
51    * @order:
52    *   FT_Get_Advance
53    *   FT_Get_Advances
54    *
55    */
56
57
58   /**************************************************************************
59    *
60    * @enum:
61    *   FT_ADVANCE_FLAG_FAST_ONLY
62    *
63    * @description:
64    *   A bit-flag to be OR-ed with the `flags` parameter of the
65    *   @FT_Get_Advance and @FT_Get_Advances functions.
66    *
67    *   If set, it indicates that you want these functions to fail if the
68    *   corresponding hinting mode or font driver doesn't allow for very quick
69    *   advance computation.
70    *
71    *   Typically, glyphs that are either unscaled, unhinted, bitmapped, or
72    *   light-hinted can have their advance width computed very quickly.
73    *
74    *   Normal and bytecode hinted modes that require loading, scaling, and
75    *   hinting of the glyph outline, are extremely slow by comparison.
76    */
77 #define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000L
78
79
80   /**************************************************************************
81    *
82    * @function:
83    *   FT_Get_Advance
84    *
85    * @description:
86    *   Retrieve the advance value of a given glyph outline in an @FT_Face.
87    *
88    * @input:
89    *   face ::
90    *     The source @FT_Face handle.
91    *
92    *   gindex ::
93    *     The glyph index.
94    *
95    *   load_flags ::
96    *     A set of bit flags similar to those used when calling
97    *     @FT_Load_Glyph, used to determine what kind of advances you need.
98    *
99    * @output:
100    *   padvance ::
101    *     The advance value.  If scaling is performed (based on the value of
102    *     `load_flags`), the advance value is in 16.16 format.  Otherwise, it
103    *     is in font units.
104    *
105    *     If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance
106    *     corresponding to a vertical layout.  Otherwise, it is the horizontal
107    *     advance in a horizontal layout.
108    *
109    * @return:
110    *   FreeType error code.  0 means success.
111    *
112    * @note:
113    *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
114    *   the corresponding font backend doesn't have a quick way to retrieve
115    *   the advances.
116    *
117    *   A scaled advance is returned in 16.16 format but isn't transformed by
118    *   the affine transformation specified by @FT_Set_Transform.
119    */
120   FT_EXPORT( FT_Error )
121   FT_Get_Advance( FT_Face    face,
122                   FT_UInt    gindex,
123                   FT_Int32   load_flags,
124                   FT_Fixed  *padvance );
125
126
127   /**************************************************************************
128    *
129    * @function:
130    *   FT_Get_Advances
131    *
132    * @description:
133    *   Retrieve the advance values of several glyph outlines in an @FT_Face.
134    *
135    * @input:
136    *   face ::
137    *     The source @FT_Face handle.
138    *
139    *   start ::
140    *     The first glyph index.
141    *
142    *   count ::
143    *     The number of advance values you want to retrieve.
144    *
145    *   load_flags ::
146    *     A set of bit flags similar to those used when calling
147    *     @FT_Load_Glyph.
148    *
149    * @output:
150    *   padvance ::
151    *     The advance values.  This array, to be provided by the caller, must
152    *     contain at least `count` elements.
153    *
154    *     If scaling is performed (based on the value of `load_flags`), the
155    *     advance values are in 16.16 format.  Otherwise, they are in font
156    *     units.
157    *
158    *     If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances
159    *     corresponding to a vertical layout.  Otherwise, they are the
160    *     horizontal advances in a horizontal layout.
161    *
162    * @return:
163    *   FreeType error code.  0 means success.
164    *
165    * @note:
166    *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
167    *   the corresponding font backend doesn't have a quick way to retrieve
168    *   the advances.
169    *
170    *   Scaled advances are returned in 16.16 format but aren't transformed by
171    *   the affine transformation specified by @FT_Set_Transform.
172    */
173   FT_EXPORT( FT_Error )
174   FT_Get_Advances( FT_Face    face,
175                    FT_UInt    start,
176                    FT_UInt    count,
177                    FT_Int32   load_flags,
178                    FT_Fixed  *padvances );
179
180   /* */
181
182
183 FT_END_HEADER
184
185 #endif /* FTADVANC_H_ */
186
187
188 /* END */