comparison mupdf-source/thirdparty/harfbuzz/src/hb-font.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 /*
2 * Copyright © 2009 Red Hat, Inc.
3 *
4 * This is part of HarfBuzz, a text shaping library.
5 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Red Hat Author(s): Behdad Esfahbod
25 */
26
27 #if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)
28 #error "Include <hb.h> instead."
29 #endif
30
31 #ifndef HB_FONT_H
32 #define HB_FONT_H
33
34 #include "hb-common.h"
35 #include "hb-face.h"
36 #include "hb-draw.h"
37
38 HB_BEGIN_DECLS
39
40 /**
41 * hb_font_t:
42 *
43 * Data type for holding fonts.
44 *
45 */
46 typedef struct hb_font_t hb_font_t;
47
48
49 /*
50 * hb_font_funcs_t
51 */
52
53 /**
54 * hb_font_funcs_t:
55 *
56 * Data type containing a set of virtual methods used for
57 * working on #hb_font_t font objects.
58 *
59 * HarfBuzz provides a lightweight default function for each of
60 * the methods in #hb_font_funcs_t. Client programs can implement
61 * their own replacements for the individual font functions, as
62 * needed, and replace the default by calling the setter for a
63 * method.
64 *
65 **/
66 typedef struct hb_font_funcs_t hb_font_funcs_t;
67
68 HB_EXTERN hb_font_funcs_t *
69 hb_font_funcs_create (void);
70
71 HB_EXTERN hb_font_funcs_t *
72 hb_font_funcs_get_empty (void);
73
74 HB_EXTERN hb_font_funcs_t *
75 hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
76
77 HB_EXTERN void
78 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
79
80 HB_EXTERN hb_bool_t
81 hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
82 hb_user_data_key_t *key,
83 void * data,
84 hb_destroy_func_t destroy,
85 hb_bool_t replace);
86
87
88 HB_EXTERN void *
89 hb_font_funcs_get_user_data (const hb_font_funcs_t *ffuncs,
90 hb_user_data_key_t *key);
91
92
93 HB_EXTERN void
94 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
95
96 HB_EXTERN hb_bool_t
97 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
98
99
100 /* font and glyph extents */
101
102 /**
103 * hb_font_extents_t:
104 * @ascender: The height of typographic ascenders.
105 * @descender: The depth of typographic descenders.
106 * @line_gap: The suggested line-spacing gap.
107 *
108 * Font-wide extent values, measured in font units.
109 *
110 * Note that typically @ascender is positive and @descender
111 * negative, in coordinate systems that grow up.
112 **/
113 typedef struct hb_font_extents_t {
114 hb_position_t ascender;
115 hb_position_t descender;
116 hb_position_t line_gap;
117 /*< private >*/
118 hb_position_t reserved9;
119 hb_position_t reserved8;
120 hb_position_t reserved7;
121 hb_position_t reserved6;
122 hb_position_t reserved5;
123 hb_position_t reserved4;
124 hb_position_t reserved3;
125 hb_position_t reserved2;
126 hb_position_t reserved1;
127 } hb_font_extents_t;
128
129 /**
130 * hb_glyph_extents_t:
131 * @x_bearing: Distance from the x-origin to the left extremum of the glyph.
132 * @y_bearing: Distance from the top extremum of the glyph to the y-origin.
133 * @width: Distance from the left extremum of the glyph to the right extremum.
134 * @height: Distance from the top extremum of the glyph to the bottom extremum.
135 *
136 * Glyph extent values, measured in font units.
137 *
138 * Note that @height is negative, in coordinate systems that grow up.
139 **/
140 typedef struct hb_glyph_extents_t {
141 hb_position_t x_bearing;
142 hb_position_t y_bearing;
143 hb_position_t width;
144 hb_position_t height;
145 } hb_glyph_extents_t;
146
147 /* func types */
148
149 /**
150 * hb_font_get_font_extents_func_t:
151 * @font: #hb_font_t to work upon
152 * @font_data: @font user data pointer
153 * @extents: (out): The font extents retrieved
154 * @user_data: User data pointer passed by the caller
155 *
156 * This method should retrieve the extents for a font.
157 *
158 **/
159 typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
160 hb_font_extents_t *extents,
161 void *user_data);
162
163 /**
164 * hb_font_get_font_h_extents_func_t:
165 *
166 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
167 *
168 * This method should retrieve the extents for a font, for horizontal-direction
169 * text segments. Extents must be returned in an #hb_glyph_extents output
170 * parameter.
171 *
172 **/
173 typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
174
175 /**
176 * hb_font_get_font_v_extents_func_t:
177 *
178 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
179 *
180 * This method should retrieve the extents for a font, for vertical-direction
181 * text segments. Extents must be returned in an #hb_glyph_extents output
182 * parameter.
183 *
184 **/
185 typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
186
187
188 /**
189 * hb_font_get_nominal_glyph_func_t:
190 * @font: #hb_font_t to work upon
191 * @font_data: @font user data pointer
192 * @unicode: The Unicode code point to query
193 * @glyph: (out): The glyph ID retrieved
194 * @user_data: User data pointer passed by the caller
195 *
196 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
197 *
198 * This method should retrieve the nominal glyph ID for a specified Unicode code
199 * point. Glyph IDs must be returned in a #hb_codepoint_t output parameter.
200 *
201 * Return value: `true` if data found, `false` otherwise
202 *
203 **/
204 typedef hb_bool_t (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font, void *font_data,
205 hb_codepoint_t unicode,
206 hb_codepoint_t *glyph,
207 void *user_data);
208
209 /**
210 * hb_font_get_variation_glyph_func_t:
211 * @font: #hb_font_t to work upon
212 * @font_data: @font user data pointer
213 * @unicode: The Unicode code point to query
214 * @variation_selector: The variation-selector code point to query
215 * @glyph: (out): The glyph ID retrieved
216 * @user_data: User data pointer passed by the caller
217 *
218 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
219 *
220 * This method should retrieve the glyph ID for a specified Unicode code point
221 * followed by a specified Variation Selector code point. Glyph IDs must be
222 * returned in a #hb_codepoint_t output parameter.
223 *
224 * Return value: `true` if data found, `false` otherwise
225 *
226 **/
227 typedef hb_bool_t (*hb_font_get_variation_glyph_func_t) (hb_font_t *font, void *font_data,
228 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
229 hb_codepoint_t *glyph,
230 void *user_data);
231
232
233 /**
234 * hb_font_get_nominal_glyphs_func_t:
235 * @font: #hb_font_t to work upon
236 * @font_data: @font user data pointer
237 * @count: number of code points to query
238 * @first_unicode: The first Unicode code point to query
239 * @unicode_stride: The stride between successive code points
240 * @first_glyph: (out): The first glyph ID retrieved
241 * @glyph_stride: The stride between successive glyph IDs
242 * @user_data: User data pointer passed by the caller
243 *
244 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
245 *
246 * This method should retrieve the nominal glyph IDs for a sequence of
247 * Unicode code points. Glyph IDs must be returned in a #hb_codepoint_t
248 * output parameter.
249 *
250 * Return value: the number of code points processed
251 *
252 **/
253 typedef unsigned int (*hb_font_get_nominal_glyphs_func_t) (hb_font_t *font, void *font_data,
254 unsigned int count,
255 const hb_codepoint_t *first_unicode,
256 unsigned int unicode_stride,
257 hb_codepoint_t *first_glyph,
258 unsigned int glyph_stride,
259 void *user_data);
260
261 /**
262 * hb_font_get_glyph_advance_func_t:
263 * @font: #hb_font_t to work upon
264 * @font_data: @font user data pointer
265 * @glyph: The glyph ID to query
266 * @user_data: User data pointer passed by the caller
267 *
268 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
269 *
270 * This method should retrieve the advance for a specified glyph. The
271 * method must return an #hb_position_t.
272 *
273 * Return value: The advance of @glyph within @font
274 *
275 **/
276 typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
277 hb_codepoint_t glyph,
278 void *user_data);
279
280 /**
281 * hb_font_get_glyph_h_advance_func_t:
282 *
283 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
284 *
285 * This method should retrieve the advance for a specified glyph, in
286 * horizontal-direction text segments. Advances must be returned in
287 * an #hb_position_t output parameter.
288 *
289 **/
290 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
291
292 /**
293 * hb_font_get_glyph_v_advance_func_t:
294 *
295 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
296 *
297 * This method should retrieve the advance for a specified glyph, in
298 * vertical-direction text segments. Advances must be returned in
299 * an #hb_position_t output parameter.
300 *
301 **/
302 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
303
304 /**
305 * hb_font_get_glyph_advances_func_t:
306 * @font: #hb_font_t to work upon
307 * @font_data: @font user data pointer
308 * @count: The number of glyph IDs in the sequence queried
309 * @first_glyph: The first glyph ID to query
310 * @glyph_stride: The stride between successive glyph IDs
311 * @first_advance: (out): The first advance retrieved
312 * @advance_stride: The stride between successive advances
313 * @user_data: User data pointer passed by the caller
314 *
315 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
316 *
317 * This method should retrieve the advances for a sequence of glyphs.
318 *
319 **/
320 typedef void (*hb_font_get_glyph_advances_func_t) (hb_font_t* font, void* font_data,
321 unsigned int count,
322 const hb_codepoint_t *first_glyph,
323 unsigned glyph_stride,
324 hb_position_t *first_advance,
325 unsigned advance_stride,
326 void *user_data);
327
328 /**
329 * hb_font_get_glyph_h_advances_func_t:
330 *
331 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
332 *
333 * This method should retrieve the advances for a sequence of glyphs, in
334 * horizontal-direction text segments.
335 *
336 **/
337 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
338
339 /**
340 * hb_font_get_glyph_v_advances_func_t:
341 *
342 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
343 *
344 * This method should retrieve the advances for a sequence of glyphs, in
345 * vertical-direction text segments.
346 *
347 **/
348 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
349
350 /**
351 * hb_font_get_glyph_origin_func_t:
352 * @font: #hb_font_t to work upon
353 * @font_data: @font user data pointer
354 * @glyph: The glyph ID to query
355 * @x: (out): The X coordinate of the origin
356 * @y: (out): The Y coordinate of the origin
357 * @user_data: User data pointer passed by the caller
358 *
359 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
360 *
361 * This method should retrieve the (X,Y) coordinates (in font units) of the
362 * origin for a glyph. Each coordinate must be returned in an #hb_position_t
363 * output parameter.
364 *
365 * Return value: `true` if data found, `false` otherwise
366 *
367 **/
368 typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
369 hb_codepoint_t glyph,
370 hb_position_t *x, hb_position_t *y,
371 void *user_data);
372
373 /**
374 * hb_font_get_glyph_h_origin_func_t:
375 *
376 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
377 *
378 * This method should retrieve the (X,Y) coordinates (in font units) of the
379 * origin for a glyph, for horizontal-direction text segments. Each
380 * coordinate must be returned in an #hb_position_t output parameter.
381 *
382 **/
383 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
384
385 /**
386 * hb_font_get_glyph_v_origin_func_t:
387 *
388 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
389 *
390 * This method should retrieve the (X,Y) coordinates (in font units) of the
391 * origin for a glyph, for vertical-direction text segments. Each coordinate
392 * must be returned in an #hb_position_t output parameter.
393 *
394 **/
395 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
396
397 /**
398 * hb_font_get_glyph_kerning_func_t:
399 * @font: #hb_font_t to work upon
400 * @font_data: @font user data pointer
401 * @first_glyph: The glyph ID of the first glyph in the glyph pair
402 * @second_glyph: The glyph ID of the second glyph in the glyph pair
403 * @user_data: User data pointer passed by the caller
404 *
405 * This method should retrieve the kerning-adjustment value for a glyph-pair in
406 * the specified font, for horizontal text segments.
407 *
408 **/
409 typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
410 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
411 void *user_data);
412 /**
413 * hb_font_get_glyph_h_kerning_func_t:
414 *
415 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
416 *
417 * This method should retrieve the kerning-adjustment value for a glyph-pair in
418 * the specified font, for horizontal text segments.
419 *
420 **/
421 typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
422
423
424 /**
425 * hb_font_get_glyph_extents_func_t:
426 * @font: #hb_font_t to work upon
427 * @font_data: @font user data pointer
428 * @glyph: The glyph ID to query
429 * @extents: (out): The #hb_glyph_extents_t retrieved
430 * @user_data: User data pointer passed by the caller
431 *
432 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
433 *
434 * This method should retrieve the extents for a specified glyph. Extents must be
435 * returned in an #hb_glyph_extents output parameter.
436 *
437 * Return value: `true` if data found, `false` otherwise
438 *
439 **/
440 typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
441 hb_codepoint_t glyph,
442 hb_glyph_extents_t *extents,
443 void *user_data);
444
445 /**
446 * hb_font_get_glyph_contour_point_func_t:
447 * @font: #hb_font_t to work upon
448 * @font_data: @font user data pointer
449 * @glyph: The glyph ID to query
450 * @point_index: The contour-point index to query
451 * @x: (out): The X value retrieved for the contour point
452 * @y: (out): The Y value retrieved for the contour point
453 * @user_data: User data pointer passed by the caller
454 *
455 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
456 *
457 * This method should retrieve the (X,Y) coordinates (in font units) for a
458 * specified contour point in a glyph. Each coordinate must be returned as
459 * an #hb_position_t output parameter.
460 *
461 * Return value: `true` if data found, `false` otherwise
462 *
463 **/
464 typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
465 hb_codepoint_t glyph, unsigned int point_index,
466 hb_position_t *x, hb_position_t *y,
467 void *user_data);
468
469
470 /**
471 * hb_font_get_glyph_name_func_t:
472 * @font: #hb_font_t to work upon
473 * @font_data: @font user data pointer
474 * @glyph: The glyph ID to query
475 * @name: (out) (array length=size): Name string retrieved for the glyph ID
476 * @size: Length of the glyph-name string retrieved
477 * @user_data: User data pointer passed by the caller
478 *
479 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
480 *
481 * This method should retrieve the glyph name that corresponds to a
482 * glyph ID. The name should be returned in a string output parameter.
483 *
484 * Return value: `true` if data found, `false` otherwise
485 *
486 **/
487 typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
488 hb_codepoint_t glyph,
489 char *name, unsigned int size,
490 void *user_data);
491
492 /**
493 * hb_font_get_glyph_from_name_func_t:
494 * @font: #hb_font_t to work upon
495 * @font_data: @font user data pointer
496 * @name: (array length=len): The name string to query
497 * @len: The length of the name queried
498 * @glyph: (out): The glyph ID retrieved
499 * @user_data: User data pointer passed by the caller
500 *
501 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
502 *
503 * This method should retrieve the glyph ID that corresponds to a glyph-name
504 * string.
505 *
506 * Return value: `true` if data found, `false` otherwise
507 *
508 **/
509 typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
510 const char *name, int len, /* -1 means nul-terminated */
511 hb_codepoint_t *glyph,
512 void *user_data);
513
514 /**
515 * hb_font_get_glyph_shape_func_t:
516 * @font: #hb_font_t to work upon
517 * @font_data: @font user data pointer
518 * @glyph: The glyph ID to query
519 * @draw_funcs: The draw functions to send the shape data to
520 * @draw_data: The data accompanying the draw functions
521 * @user_data: User data pointer passed by the caller
522 *
523 * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
524 *
525 * Since: 4.0.0
526 *
527 **/
528 typedef void (*hb_font_get_glyph_shape_func_t) (hb_font_t *font, void *font_data,
529 hb_codepoint_t glyph,
530 hb_draw_funcs_t *draw_funcs, void *draw_data,
531 void *user_data);
532
533
534 /* func setters */
535
536 /**
537 * hb_font_funcs_set_font_h_extents_func:
538 * @ffuncs: A font-function structure
539 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
540 * @user_data: Data to pass to @func
541 * @destroy: (nullable): The function to call when @user_data is not needed anymore
542 *
543 * Sets the implementation function for #hb_font_get_font_h_extents_func_t.
544 *
545 * Since: 1.1.2
546 **/
547 HB_EXTERN void
548 hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
549 hb_font_get_font_h_extents_func_t func,
550 void *user_data, hb_destroy_func_t destroy);
551
552 /**
553 * hb_font_funcs_set_font_v_extents_func:
554 * @ffuncs: A font-function structure
555 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
556 * @user_data: Data to pass to @func
557 * @destroy: (nullable): The function to call when @user_data is not needed anymore
558 *
559 * Sets the implementation function for #hb_font_get_font_v_extents_func_t.
560 *
561 * Since: 1.1.2
562 **/
563 HB_EXTERN void
564 hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
565 hb_font_get_font_v_extents_func_t func,
566 void *user_data, hb_destroy_func_t destroy);
567
568 /**
569 * hb_font_funcs_set_nominal_glyph_func:
570 * @ffuncs: A font-function structure
571 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
572 * @user_data: Data to pass to @func
573 * @destroy: (nullable): The function to call when @user_data is not needed anymore
574 *
575 * Sets the implementation function for #hb_font_get_nominal_glyph_func_t.
576 *
577 * Since: 1.2.3
578 **/
579 HB_EXTERN void
580 hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
581 hb_font_get_nominal_glyph_func_t func,
582 void *user_data, hb_destroy_func_t destroy);
583
584 /**
585 * hb_font_funcs_set_nominal_glyphs_func:
586 * @ffuncs: A font-function structure
587 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
588 * @user_data: Data to pass to @func
589 * @destroy: (nullable): The function to call when @user_data is not needed anymore
590 *
591 * Sets the implementation function for #hb_font_get_nominal_glyphs_func_t.
592 *
593 * Since: 2.0.0
594 **/
595 HB_EXTERN void
596 hb_font_funcs_set_nominal_glyphs_func (hb_font_funcs_t *ffuncs,
597 hb_font_get_nominal_glyphs_func_t func,
598 void *user_data, hb_destroy_func_t destroy);
599
600 /**
601 * hb_font_funcs_set_variation_glyph_func:
602 * @ffuncs: A font-function structure
603 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
604 * @user_data: Data to pass to @func
605 * @destroy: (nullable): The function to call when @user_data is not needed anymore
606 *
607 * Sets the implementation function for #hb_font_get_variation_glyph_func_t.
608 *
609 * Since: 1.2.3
610 **/
611 HB_EXTERN void
612 hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
613 hb_font_get_variation_glyph_func_t func,
614 void *user_data, hb_destroy_func_t destroy);
615
616 /**
617 * hb_font_funcs_set_glyph_h_advance_func:
618 * @ffuncs: A font-function structure
619 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
620 * @user_data: Data to pass to @func
621 * @destroy: (nullable): The function to call when @user_data is not needed anymore
622 *
623 * Sets the implementation function for #hb_font_get_glyph_h_advance_func_t.
624 *
625 * Since: 0.9.2
626 **/
627 HB_EXTERN void
628 hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
629 hb_font_get_glyph_h_advance_func_t func,
630 void *user_data, hb_destroy_func_t destroy);
631
632 /**
633 * hb_font_funcs_set_glyph_v_advance_func:
634 * @ffuncs: A font-function structure
635 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
636 * @user_data: Data to pass to @func
637 * @destroy: (nullable): The function to call when @user_data is not needed anymore
638 *
639 * Sets the implementation function for #hb_font_get_glyph_v_advance_func_t.
640 *
641 * Since: 0.9.2
642 **/
643 HB_EXTERN void
644 hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
645 hb_font_get_glyph_v_advance_func_t func,
646 void *user_data, hb_destroy_func_t destroy);
647
648 /**
649 * hb_font_funcs_set_glyph_h_advances_func:
650 * @ffuncs: A font-function structure
651 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
652 * @user_data: Data to pass to @func
653 * @destroy: (nullable): The function to call when @user_data is not needed anymore
654 *
655 * Sets the implementation function for #hb_font_get_glyph_h_advances_func_t.
656 *
657 * Since: 1.8.6
658 **/
659 HB_EXTERN void
660 hb_font_funcs_set_glyph_h_advances_func (hb_font_funcs_t *ffuncs,
661 hb_font_get_glyph_h_advances_func_t func,
662 void *user_data, hb_destroy_func_t destroy);
663
664 /**
665 * hb_font_funcs_set_glyph_v_advances_func:
666 * @ffuncs: A font-function structure
667 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
668 * @user_data: Data to pass to @func
669 * @destroy: (nullable): The function to call when @user_data is not needed anymore
670 *
671 * Sets the implementation function for #hb_font_get_glyph_v_advances_func_t.
672 *
673 * Since: 1.8.6
674 **/
675 HB_EXTERN void
676 hb_font_funcs_set_glyph_v_advances_func (hb_font_funcs_t *ffuncs,
677 hb_font_get_glyph_v_advances_func_t func,
678 void *user_data, hb_destroy_func_t destroy);
679
680 /**
681 * hb_font_funcs_set_glyph_h_origin_func:
682 * @ffuncs: A font-function structure
683 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
684 * @user_data: Data to pass to @func
685 * @destroy: (nullable): The function to call when @user_data is not needed anymore
686 *
687 * Sets the implementation function for #hb_font_get_glyph_h_origin_func_t.
688 *
689 * Since: 0.9.2
690 **/
691 HB_EXTERN void
692 hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
693 hb_font_get_glyph_h_origin_func_t func,
694 void *user_data, hb_destroy_func_t destroy);
695
696 /**
697 * hb_font_funcs_set_glyph_v_origin_func:
698 * @ffuncs: A font-function structure
699 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
700 * @user_data: Data to pass to @func
701 * @destroy: (nullable): The function to call when @user_data is not needed anymore
702 *
703 * Sets the implementation function for #hb_font_get_glyph_v_origin_func_t.
704 *
705 * Since: 0.9.2
706 **/
707 HB_EXTERN void
708 hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
709 hb_font_get_glyph_v_origin_func_t func,
710 void *user_data, hb_destroy_func_t destroy);
711
712 /**
713 * hb_font_funcs_set_glyph_h_kerning_func:
714 * @ffuncs: A font-function structure
715 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
716 * @user_data: Data to pass to @func
717 * @destroy: (nullable): The function to call when @user_data is not needed anymore
718 *
719 * Sets the implementation function for #hb_font_get_glyph_h_kerning_func_t.
720 *
721 * Since: 0.9.2
722 **/
723 HB_EXTERN void
724 hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
725 hb_font_get_glyph_h_kerning_func_t func,
726 void *user_data, hb_destroy_func_t destroy);
727
728 /**
729 * hb_font_funcs_set_glyph_extents_func:
730 * @ffuncs: A font-function structure
731 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
732 * @user_data: Data to pass to @func
733 * @destroy: (nullable): The function to call when @user_data is not needed anymore
734 *
735 * Sets the implementation function for #hb_font_get_glyph_extents_func_t.
736 *
737 * Since: 0.9.2
738 **/
739 HB_EXTERN void
740 hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
741 hb_font_get_glyph_extents_func_t func,
742 void *user_data, hb_destroy_func_t destroy);
743
744 /**
745 * hb_font_funcs_set_glyph_contour_point_func:
746 * @ffuncs: A font-function structure
747 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
748 * @user_data: Data to pass to @func
749 * @destroy: (nullable): The function to call when @user_data is not needed anymore
750 *
751 * Sets the implementation function for #hb_font_get_glyph_contour_point_func_t.
752 *
753 * Since: 0.9.2
754 **/
755 HB_EXTERN void
756 hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
757 hb_font_get_glyph_contour_point_func_t func,
758 void *user_data, hb_destroy_func_t destroy);
759
760 /**
761 * hb_font_funcs_set_glyph_name_func:
762 * @ffuncs: A font-function structure
763 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
764 * @user_data: Data to pass to @func
765 * @destroy: (nullable): The function to call when @user_data is not needed anymore
766 *
767 * Sets the implementation function for #hb_font_get_glyph_name_func_t.
768 *
769 * Since: 0.9.2
770 **/
771 HB_EXTERN void
772 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
773 hb_font_get_glyph_name_func_t func,
774 void *user_data, hb_destroy_func_t destroy);
775
776 /**
777 * hb_font_funcs_set_glyph_from_name_func:
778 * @ffuncs: A font-function structure
779 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
780 * @user_data: Data to pass to @func
781 * @destroy: (nullable): The function to call when @user_data is not needed anymore
782 *
783 * Sets the implementation function for #hb_font_get_glyph_from_name_func_t.
784 *
785 * Since: 0.9.2
786 **/
787 HB_EXTERN void
788 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
789 hb_font_get_glyph_from_name_func_t func,
790 void *user_data, hb_destroy_func_t destroy);
791
792 /**
793 * hb_font_funcs_set_glyph_shape_func:
794 * @ffuncs: A font-function structure
795 * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
796 * @user_data: Data to pass to @func
797 * @destroy: (nullable): The function to call when @user_data is not needed anymore
798 *
799 * Sets the implementation function for #hb_font_get_glyph_shape_func_t.
800 *
801 * Since: 4.0.0
802 **/
803 HB_EXTERN void
804 hb_font_funcs_set_glyph_shape_func (hb_font_funcs_t *ffuncs,
805 hb_font_get_glyph_shape_func_t func,
806 void *user_data, hb_destroy_func_t destroy);
807
808 /* func dispatch */
809
810 HB_EXTERN hb_bool_t
811 hb_font_get_h_extents (hb_font_t *font,
812 hb_font_extents_t *extents);
813 HB_EXTERN hb_bool_t
814 hb_font_get_v_extents (hb_font_t *font,
815 hb_font_extents_t *extents);
816
817 HB_EXTERN hb_bool_t
818 hb_font_get_nominal_glyph (hb_font_t *font,
819 hb_codepoint_t unicode,
820 hb_codepoint_t *glyph);
821 HB_EXTERN hb_bool_t
822 hb_font_get_variation_glyph (hb_font_t *font,
823 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
824 hb_codepoint_t *glyph);
825
826 HB_EXTERN unsigned int
827 hb_font_get_nominal_glyphs (hb_font_t *font,
828 unsigned int count,
829 const hb_codepoint_t *first_unicode,
830 unsigned int unicode_stride,
831 hb_codepoint_t *first_glyph,
832 unsigned int glyph_stride);
833
834 HB_EXTERN hb_position_t
835 hb_font_get_glyph_h_advance (hb_font_t *font,
836 hb_codepoint_t glyph);
837 HB_EXTERN hb_position_t
838 hb_font_get_glyph_v_advance (hb_font_t *font,
839 hb_codepoint_t glyph);
840
841 HB_EXTERN void
842 hb_font_get_glyph_h_advances (hb_font_t* font,
843 unsigned int count,
844 const hb_codepoint_t *first_glyph,
845 unsigned glyph_stride,
846 hb_position_t *first_advance,
847 unsigned advance_stride);
848 HB_EXTERN void
849 hb_font_get_glyph_v_advances (hb_font_t* font,
850 unsigned int count,
851 const hb_codepoint_t *first_glyph,
852 unsigned glyph_stride,
853 hb_position_t *first_advance,
854 unsigned advance_stride);
855
856 HB_EXTERN hb_bool_t
857 hb_font_get_glyph_h_origin (hb_font_t *font,
858 hb_codepoint_t glyph,
859 hb_position_t *x, hb_position_t *y);
860 HB_EXTERN hb_bool_t
861 hb_font_get_glyph_v_origin (hb_font_t *font,
862 hb_codepoint_t glyph,
863 hb_position_t *x, hb_position_t *y);
864
865 HB_EXTERN hb_position_t
866 hb_font_get_glyph_h_kerning (hb_font_t *font,
867 hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
868
869 HB_EXTERN hb_bool_t
870 hb_font_get_glyph_extents (hb_font_t *font,
871 hb_codepoint_t glyph,
872 hb_glyph_extents_t *extents);
873
874 HB_EXTERN hb_bool_t
875 hb_font_get_glyph_contour_point (hb_font_t *font,
876 hb_codepoint_t glyph, unsigned int point_index,
877 hb_position_t *x, hb_position_t *y);
878
879 HB_EXTERN hb_bool_t
880 hb_font_get_glyph_name (hb_font_t *font,
881 hb_codepoint_t glyph,
882 char *name, unsigned int size);
883 HB_EXTERN hb_bool_t
884 hb_font_get_glyph_from_name (hb_font_t *font,
885 const char *name, int len, /* -1 means nul-terminated */
886 hb_codepoint_t *glyph);
887
888 HB_EXTERN void
889 hb_font_get_glyph_shape (hb_font_t *font,
890 hb_codepoint_t glyph,
891 hb_draw_funcs_t *dfuncs, void *draw_data);
892
893
894 /* high-level funcs, with fallback */
895
896 /* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
897 * otherwise calls hb_font_get_variation_glyph(). */
898 HB_EXTERN hb_bool_t
899 hb_font_get_glyph (hb_font_t *font,
900 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
901 hb_codepoint_t *glyph);
902
903 HB_EXTERN void
904 hb_font_get_extents_for_direction (hb_font_t *font,
905 hb_direction_t direction,
906 hb_font_extents_t *extents);
907 HB_EXTERN void
908 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
909 hb_codepoint_t glyph,
910 hb_direction_t direction,
911 hb_position_t *x, hb_position_t *y);
912 HB_EXTERN void
913 hb_font_get_glyph_advances_for_direction (hb_font_t* font,
914 hb_direction_t direction,
915 unsigned int count,
916 const hb_codepoint_t *first_glyph,
917 unsigned glyph_stride,
918 hb_position_t *first_advance,
919 unsigned advance_stride);
920 HB_EXTERN void
921 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
922 hb_codepoint_t glyph,
923 hb_direction_t direction,
924 hb_position_t *x, hb_position_t *y);
925 HB_EXTERN void
926 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
927 hb_codepoint_t glyph,
928 hb_direction_t direction,
929 hb_position_t *x, hb_position_t *y);
930 HB_EXTERN void
931 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
932 hb_codepoint_t glyph,
933 hb_direction_t direction,
934 hb_position_t *x, hb_position_t *y);
935
936 HB_EXTERN void
937 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
938 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
939 hb_direction_t direction,
940 hb_position_t *x, hb_position_t *y);
941
942 HB_EXTERN hb_bool_t
943 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
944 hb_codepoint_t glyph,
945 hb_direction_t direction,
946 hb_glyph_extents_t *extents);
947
948 HB_EXTERN hb_bool_t
949 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
950 hb_codepoint_t glyph, unsigned int point_index,
951 hb_direction_t direction,
952 hb_position_t *x, hb_position_t *y);
953
954 /* Generates gidDDD if glyph has no name. */
955 HB_EXTERN void
956 hb_font_glyph_to_string (hb_font_t *font,
957 hb_codepoint_t glyph,
958 char *s, unsigned int size);
959 /* Parses gidDDD and uniUUUU strings automatically. */
960 HB_EXTERN hb_bool_t
961 hb_font_glyph_from_string (hb_font_t *font,
962 const char *s, int len, /* -1 means nul-terminated */
963 hb_codepoint_t *glyph);
964
965
966 /*
967 * hb_font_t
968 */
969
970 /* Fonts are very light-weight objects */
971
972 HB_EXTERN hb_font_t *
973 hb_font_create (hb_face_t *face);
974
975 HB_EXTERN hb_font_t *
976 hb_font_create_sub_font (hb_font_t *parent);
977
978 HB_EXTERN hb_font_t *
979 hb_font_get_empty (void);
980
981 HB_EXTERN hb_font_t *
982 hb_font_reference (hb_font_t *font);
983
984 HB_EXTERN void
985 hb_font_destroy (hb_font_t *font);
986
987 HB_EXTERN hb_bool_t
988 hb_font_set_user_data (hb_font_t *font,
989 hb_user_data_key_t *key,
990 void * data,
991 hb_destroy_func_t destroy,
992 hb_bool_t replace);
993
994
995 HB_EXTERN void *
996 hb_font_get_user_data (const hb_font_t *font,
997 hb_user_data_key_t *key);
998
999 HB_EXTERN void
1000 hb_font_make_immutable (hb_font_t *font);
1001
1002 HB_EXTERN hb_bool_t
1003 hb_font_is_immutable (hb_font_t *font);
1004
1005 HB_EXTERN unsigned int
1006 hb_font_get_serial (hb_font_t *font);
1007
1008 HB_EXTERN void
1009 hb_font_changed (hb_font_t *font);
1010
1011 HB_EXTERN void
1012 hb_font_set_parent (hb_font_t *font,
1013 hb_font_t *parent);
1014
1015 HB_EXTERN hb_font_t *
1016 hb_font_get_parent (hb_font_t *font);
1017
1018 HB_EXTERN void
1019 hb_font_set_face (hb_font_t *font,
1020 hb_face_t *face);
1021
1022 HB_EXTERN hb_face_t *
1023 hb_font_get_face (hb_font_t *font);
1024
1025
1026 HB_EXTERN void
1027 hb_font_set_funcs (hb_font_t *font,
1028 hb_font_funcs_t *klass,
1029 void *font_data,
1030 hb_destroy_func_t destroy);
1031
1032 /* Be *very* careful with this function! */
1033 HB_EXTERN void
1034 hb_font_set_funcs_data (hb_font_t *font,
1035 void *font_data,
1036 hb_destroy_func_t destroy);
1037
1038
1039 HB_EXTERN void
1040 hb_font_set_scale (hb_font_t *font,
1041 int x_scale,
1042 int y_scale);
1043
1044 HB_EXTERN void
1045 hb_font_get_scale (hb_font_t *font,
1046 int *x_scale,
1047 int *y_scale);
1048
1049 /*
1050 * A zero value means "no hinting in that direction"
1051 */
1052 HB_EXTERN void
1053 hb_font_set_ppem (hb_font_t *font,
1054 unsigned int x_ppem,
1055 unsigned int y_ppem);
1056
1057 HB_EXTERN void
1058 hb_font_get_ppem (hb_font_t *font,
1059 unsigned int *x_ppem,
1060 unsigned int *y_ppem);
1061
1062 /*
1063 * Point size per EM. Used for optical-sizing in CoreText.
1064 * A value of zero means "not set".
1065 */
1066 HB_EXTERN void
1067 hb_font_set_ptem (hb_font_t *font, float ptem);
1068
1069 HB_EXTERN float
1070 hb_font_get_ptem (hb_font_t *font);
1071
1072 HB_EXTERN void
1073 hb_font_set_synthetic_slant (hb_font_t *font, float slant);
1074
1075 HB_EXTERN float
1076 hb_font_get_synthetic_slant (hb_font_t *font);
1077
1078 HB_EXTERN void
1079 hb_font_set_variations (hb_font_t *font,
1080 const hb_variation_t *variations,
1081 unsigned int variations_length);
1082
1083 HB_EXTERN void
1084 hb_font_set_var_coords_design (hb_font_t *font,
1085 const float *coords,
1086 unsigned int coords_length);
1087
1088 HB_EXTERN const float *
1089 hb_font_get_var_coords_design (hb_font_t *font,
1090 unsigned int *length);
1091
1092 HB_EXTERN void
1093 hb_font_set_var_coords_normalized (hb_font_t *font,
1094 const int *coords, /* 2.14 normalized */
1095 unsigned int coords_length);
1096
1097 HB_EXTERN const int *
1098 hb_font_get_var_coords_normalized (hb_font_t *font,
1099 unsigned int *length);
1100
1101 HB_EXTERN void
1102 hb_font_set_var_named_instance (hb_font_t *font,
1103 unsigned instance_index);
1104
1105
1106 HB_END_DECLS
1107
1108 #endif /* HB_FONT_H */