ReactOS 0.4.16-dev-2359-g4b75ec5
ftcolor.h
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * ftcolor.h
4 *
5 * FreeType's glyph color management (specification).
6 *
7 * Copyright (C) 2018-2020 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 FTCOLOR_H_
20#define FTCOLOR_H_
21
22#include <freetype/freetype.h>
23
24#ifdef FREETYPE_H
25#error "freetype.h of FreeType 1 has been loaded!"
26#error "Please fix the directory search order for header files"
27#error "so that freetype.h of FreeType 2 is found first."
28#endif
29
30
32
33
34 /**************************************************************************
35 *
36 * @section:
37 * color_management
38 *
39 * @title:
40 * Glyph Color Management
41 *
42 * @abstract:
43 * Retrieving and manipulating OpenType's 'CPAL' table data.
44 *
45 * @description:
46 * The functions described here allow access and manipulation of color
47 * palette entries in OpenType's 'CPAL' tables.
48 */
49
50
51 /**************************************************************************
52 *
53 * @struct:
54 * FT_Color
55 *
56 * @description:
57 * This structure models a BGRA color value of a 'CPAL' palette entry.
58 *
59 * The used color space is sRGB; the colors are not pre-multiplied, and
60 * alpha values must be explicitly set.
61 *
62 * @fields:
63 * blue ::
64 * Blue value.
65 *
66 * green ::
67 * Green value.
68 *
69 * red ::
70 * Red value.
71 *
72 * alpha ::
73 * Alpha value, giving the red, green, and blue color's opacity.
74 *
75 * @since:
76 * 2.10
77 */
78 typedef struct FT_Color_
79 {
84
86
87
88 /**************************************************************************
89 *
90 * @enum:
91 * FT_PALETTE_XXX
92 *
93 * @description:
94 * A list of bit field constants used in the `palette_flags` array of the
95 * @FT_Palette_Data structure to indicate for which background a palette
96 * with a given index is usable.
97 *
98 * @values:
99 * FT_PALETTE_FOR_LIGHT_BACKGROUND ::
100 * The palette is appropriate to use when displaying the font on a
101 * light background such as white.
102 *
103 * FT_PALETTE_FOR_DARK_BACKGROUND ::
104 * The palette is appropriate to use when displaying the font on a dark
105 * background such as black.
106 *
107 * @since:
108 * 2.10
109 */
110#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01
111#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02
112
113
114 /**************************************************************************
115 *
116 * @struct:
117 * FT_Palette_Data
118 *
119 * @description:
120 * This structure holds the data of the 'CPAL' table.
121 *
122 * @fields:
123 * num_palettes ::
124 * The number of palettes.
125 *
126 * palette_name_ids ::
127 * An optional read-only array of palette name IDs with `num_palettes`
128 * elements, corresponding to entries like 'dark' or 'light' in the
129 * font's 'name' table.
130 *
131 * An empty name ID in the 'CPAL' table gets represented as value
132 * 0xFFFF.
133 *
134 * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
135 *
136 * palette_flags ::
137 * An optional read-only array of palette flags with `num_palettes`
138 * elements. Possible values are an ORed combination of
139 * @FT_PALETTE_FOR_LIGHT_BACKGROUND and
140 * @FT_PALETTE_FOR_DARK_BACKGROUND.
141 *
142 * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
143 *
144 * num_palette_entries ::
145 * The number of entries in a single palette. All palettes have the
146 * same size.
147 *
148 * palette_entry_name_ids ::
149 * An optional read-only array of palette entry name IDs with
150 * `num_palette_entries`. In each palette, entries with the same index
151 * have the same function. For example, index~0 might correspond to
152 * string 'outline' in the font's 'name' table to indicate that this
153 * palette entry is used for outlines, index~1 might correspond to
154 * 'fill' to indicate the filling color palette entry, etc.
155 *
156 * An empty entry name ID in the 'CPAL' table gets represented as value
157 * 0xFFFF.
158 *
159 * `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
160 *
161 * @note:
162 * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
163 * name strings.
164 *
165 * Use function @FT_Palette_Select to get the colors associated with a
166 * palette entry.
167 *
168 * @since:
169 * 2.10
170 */
171 typedef struct FT_Palette_Data_ {
175
178
180
181
182 /**************************************************************************
183 *
184 * @function:
185 * FT_Palette_Data_Get
186 *
187 * @description:
188 * Retrieve the face's color palette data.
189 *
190 * @input:
191 * face ::
192 * The source face handle.
193 *
194 * @output:
195 * apalette ::
196 * A pointer to an @FT_Palette_Data structure.
197 *
198 * @return:
199 * FreeType error code. 0~means success.
200 *
201 * @note:
202 * All arrays in the returned @FT_Palette_Data structure are read-only.
203 *
204 * This function always returns an error if the config macro
205 * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
206 *
207 * @since:
208 * 2.10
209 */
212 FT_Palette_Data *apalette );
213
214
215 /**************************************************************************
216 *
217 * @function:
218 * FT_Palette_Select
219 *
220 * @description:
221 * This function has two purposes.
222 *
223 * (1) It activates a palette for rendering color glyphs, and
224 *
225 * (2) it retrieves all (unmodified) color entries of this palette. This
226 * function returns a read-write array, which means that a calling
227 * application can modify the palette entries on demand.
228 *
229 * A corollary of (2) is that calling the function, then modifying some
230 * values, then calling the function again with the same arguments resets
231 * all color entries to the original 'CPAL' values; all user modifications
232 * are lost.
233 *
234 * @input:
235 * face ::
236 * The source face handle.
237 *
238 * palette_index ::
239 * The palette index.
240 *
241 * @output:
242 * apalette ::
243 * An array of color entries for a palette with index `palette_index`,
244 * having `num_palette_entries` elements (as found in the
245 * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no
246 * array gets returned (and no color entries can be modified).
247 *
248 * In case the font doesn't support color palettes, `NULL` is returned.
249 *
250 * @return:
251 * FreeType error code. 0~means success.
252 *
253 * @note:
254 * The array pointed to by `apalette_entries` is owned and managed by
255 * FreeType.
256 *
257 * This function always returns an error if the config macro
258 * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
259 *
260 * @since:
261 * 2.10
262 */
265 FT_UShort palette_index,
266 FT_Color* *apalette );
267
268
269 /**************************************************************************
270 *
271 * @function:
272 * FT_Palette_Set_Foreground_Color
273 *
274 * @description:
275 * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground
276 * color'. This function sets this value.
277 *
278 * @input:
279 * face ::
280 * The source face handle.
281 *
282 * foreground_color ::
283 * An `FT_Color` structure to define the text foreground color.
284 *
285 * @return:
286 * FreeType error code. 0~means success.
287 *
288 * @note:
289 * If this function isn't called, the text foreground color is set to
290 * white opaque (BGRA value 0xFFFFFFFF) if
291 * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette,
292 * and black opaque (BGRA value 0x000000FF) otherwise, including the case
293 * that no palette types are available in the 'CPAL' table.
294 *
295 * This function always returns an error if the config macro
296 * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
297 *
298 * @since:
299 * 2.10
300 */
303 FT_Color foreground_color );
304
305 /* */
306
307
309
310#endif /* FTCOLOR_H_ */
311
312
313/* END */
FT_BEGIN_HEADER struct FT_Color_ FT_Color
FT_Palette_Data_Get(FT_Face face, FT_Palette_Data *apalette)
Definition: ftcolor.c:117
FT_Palette_Set_Foreground_Color(FT_Face face, FT_Color foreground_color)
Definition: ftcolor.c:143
struct FT_Palette_Data_ FT_Palette_Data
FT_Palette_Select(FT_Face face, FT_UShort palette_index, FT_Color **apalette)
Definition: ftcolor.c:129
#define FT_END_HEADER
Definition: ftheader.h:57
#define FT_BEGIN_HEADER
Definition: ftheader.h:37
unsigned char FT_Byte
Definition: fttypes.h:154
int FT_Error
Definition: fttypes.h:299
unsigned short FT_UShort
Definition: fttypes.h:209
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
#define FT_EXPORT(x)
FT_Byte alpha
Definition: ftcolor.h:83
FT_Byte red
Definition: ftcolor.h:82
FT_Byte green
Definition: ftcolor.h:81
FT_Byte blue
Definition: ftcolor.h:80
const FT_UShort * palette_flags
Definition: ftcolor.h:174
FT_UShort num_palettes
Definition: ftcolor.h:172
FT_UShort num_palette_entries
Definition: ftcolor.h:176
const FT_UShort * palette_entry_name_ids
Definition: ftcolor.h:177
const FT_UShort * palette_name_ids
Definition: ftcolor.h:173