Coverage Report

Created: 2024-01-21 06:55

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