blob: cd211533009ada3c3ba913b733d7c1aac1adea16 [file] [log] [blame]
Behdad Esfahbodc62b5032009-08-01 19:54:49 -04001/*
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -04002 * Copyright © 2009 Red Hat, Inc.
Behdad Esfahbodc62b5032009-08-01 19:54:49 -04003 *
Behdad Esfahbodc755cb32010-04-22 00:11:43 -04004 * This is part of HarfBuzz, a text shaping library.
Behdad Esfahbodc62b5032009-08-01 19:54:49 -04005 *
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
Behdad Esfahbodd1c9eb42012-04-12 13:17:44 -040027#ifndef HB_H_IN
28#error "Include <hb.h> instead."
29#endif
30
Behdad Esfahbodc62b5032009-08-01 19:54:49 -040031#ifndef HB_FONT_H
32#define HB_FONT_H
33
34#include "hb-common.h"
Behdad Esfahbod2e3a07a2013-08-26 18:49:07 -040035#include "hb-face.h"
Behdad Esfahbodc62b5032009-08-01 19:54:49 -040036
37HB_BEGIN_DECLS
38
Behdad Esfahbodacdba3f2010-07-23 15:11:18 -040039
Behdad Esfahbod1bc1cb32012-06-16 15:21:55 -040040typedef struct hb_font_t hb_font_t;
Behdad Esfahbodc62b5032009-08-01 19:54:49 -040041
Behdad Esfahbod5c441882009-08-10 20:05:16 -040042
43/*
44 * hb_font_funcs_t
45 */
46
Behdad Esfahbod1bc1cb32012-06-16 15:21:55 -040047typedef struct hb_font_funcs_t hb_font_funcs_t;
Behdad Esfahbod5c441882009-08-10 20:05:16 -040048
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080049HB_EXTERN hb_font_funcs_t *
Behdad Esfahbod5c441882009-08-10 20:05:16 -040050hb_font_funcs_create (void);
51
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080052HB_EXTERN hb_font_funcs_t *
Behdad Esfahbod80a68332011-05-11 18:14:44 -040053hb_font_funcs_get_empty (void);
54
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080055HB_EXTERN hb_font_funcs_t *
Behdad Esfahbod5c441882009-08-10 20:05:16 -040056hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
57
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080058HB_EXTERN void
Behdad Esfahbod5c441882009-08-10 20:05:16 -040059hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
60
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080061HB_EXTERN hb_bool_t
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040062hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
63 hb_user_data_key_t *key,
64 void * data,
Behdad Esfahbod33ccc772011-08-09 00:43:24 +020065 hb_destroy_func_t destroy,
66 hb_bool_t replace);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040067
68
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080069HB_EXTERN void *
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -040070hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
71 hb_user_data_key_t *key);
72
73
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080074HB_EXTERN void
Behdad Esfahbod8d703122009-08-10 23:50:51 -040075hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
76
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080077HB_EXTERN hb_bool_t
Behdad Esfahbod645f6f22010-10-04 17:01:01 -040078hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
Behdad Esfahbod32c65a52009-08-18 18:37:36 -040079
Behdad Esfahbod21756932012-08-08 01:20:45 -040080
Simon Cozens6f2e6de2015-10-26 16:23:22 +090081/* font and glyph extents */
82
83/* Note that typically ascender is positive and descender negative in coordinate systems that grow up. */
84typedef struct hb_font_extents_t
85{
86 hb_position_t ascender; /* typographic ascender. */
87 hb_position_t descender; /* typographic descender. */
88 hb_position_t line_gap; /* suggested line spacing gap. */
Behdad Esfahbod25671462016-01-07 19:11:41 +000089 /*< private >*/
90 hb_position_t reserved9;
91 hb_position_t reserved8;
92 hb_position_t reserved7;
93 hb_position_t reserved6;
94 hb_position_t reserved5;
95 hb_position_t reserved4;
96 hb_position_t reserved3;
97 hb_position_t reserved2;
98 hb_position_t reserved1;
Simon Cozens6f2e6de2015-10-26 16:23:22 +090099} hb_font_extents_t;
Behdad Esfahbod32c65a52009-08-18 18:37:36 -0400100
Behdad Esfahbodb50fcfa2015-08-23 14:42:20 +0100101/* Note that height is negative in coordinate systems that grow up. */
Behdad Esfahbod1bc1cb32012-06-16 15:21:55 -0400102typedef struct hb_glyph_extents_t
Behdad Esfahbodc09ed982009-10-29 03:08:42 -0400103{
Behdad Esfahbodb50fcfa2015-08-23 14:42:20 +0100104 hb_position_t x_bearing; /* left side of glyph from origin. */
105 hb_position_t y_bearing; /* top side of glyph from origin. */
106 hb_position_t width; /* distance from left to right side. */
107 hb_position_t height; /* distance from top to bottom side. */
Behdad Esfahbod502f4cb2010-10-27 01:13:56 -0400108} hb_glyph_extents_t;
Behdad Esfahbod32c65a52009-08-18 18:37:36 -0400109
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400110/* func types */
111
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900112typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
113 hb_font_extents_t *metrics,
114 void *user_data);
115typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
116typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
117
118
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900119typedef hb_bool_t (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font, void *font_data,
120 hb_codepoint_t unicode,
121 hb_codepoint_t *glyph,
122 void *user_data);
123typedef hb_bool_t (*hb_font_get_variation_glyph_func_t) (hb_font_t *font, void *font_data,
124 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
125 hb_codepoint_t *glyph,
126 void *user_data);
Behdad Esfahbod32c65a52009-08-18 18:37:36 -0400127
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400128
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400129typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
130 hb_codepoint_t glyph,
131 void *user_data);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400132typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
133typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400134
Behdad Esfahbod79e21982018-08-06 09:45:17 -0700135typedef void (*hb_font_get_glyph_advances_func_t) (hb_font_t* font, void* font_data,
136 unsigned count,
137 hb_codepoint_t *first_glyph,
138 unsigned glyph_stride,
139 hb_position_t *first_advance,
140 unsigned advance_stride,
141 void *user_data);
142typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
143typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
Koji Ishii95333642018-08-01 13:01:08 +0900144
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400145typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
146 hb_codepoint_t glyph,
147 hb_position_t *x, hb_position_t *y,
148 void *user_data);
149typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
150typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400151
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400152typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
153 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
154 void *user_data);
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400155typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
156typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400157
158
159typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
160 hb_codepoint_t glyph,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400161 hb_glyph_extents_t *extents,
162 void *user_data);
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400163typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
164 hb_codepoint_t glyph, unsigned int point_index,
165 hb_position_t *x, hb_position_t *y,
166 void *user_data);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400167
168
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400169typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
170 hb_codepoint_t glyph,
171 char *name, unsigned int size,
172 void *user_data);
173typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
174 const char *name, int len, /* -1 means nul-terminated */
175 hb_codepoint_t *glyph,
176 void *user_data);
177
178
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400179/* func setters */
Behdad Esfahbod502f4cb2010-10-27 01:13:56 -0400180
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400181/**
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900182 * hb_font_funcs_set_font_h_extents_func:
183 * @ffuncs: font functions.
184 * @func: (closure user_data) (destroy destroy) (scope notified):
185 * @user_data:
186 * @destroy:
187 *
188 *
189 *
190 * Since: 1.1.2
191 **/
192HB_EXTERN void
193hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
194 hb_font_get_font_h_extents_func_t func,
195 void *user_data, hb_destroy_func_t destroy);
196
197/**
198 * hb_font_funcs_set_font_v_extents_func:
199 * @ffuncs: font functions.
200 * @func: (closure user_data) (destroy destroy) (scope notified):
201 * @user_data:
202 * @destroy:
203 *
204 *
205 *
206 * Since: 1.1.2
207 **/
208HB_EXTERN void
209hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
210 hb_font_get_font_v_extents_func_t func,
211 void *user_data, hb_destroy_func_t destroy);
212
213/**
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900214 * hb_font_funcs_set_nominal_glyph_func:
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400215 * @ffuncs: font functions.
216 * @func: (closure user_data) (destroy destroy) (scope notified):
217 * @user_data:
218 * @destroy:
219 *
220 *
221 *
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900222 * Since: 1.2.3
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400223 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800224HB_EXTERN void
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900225hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
226 hb_font_get_nominal_glyph_func_t func,
227 void *user_data, hb_destroy_func_t destroy);
228
229/**
230 * hb_font_funcs_set_variation_glyph_func:
231 * @ffuncs: font functions.
232 * @func: (closure user_data) (destroy destroy) (scope notified):
233 * @user_data:
234 * @destroy:
235 *
236 *
237 *
238 * Since: 1.2.3
239 **/
240HB_EXTERN void
241hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
242 hb_font_get_variation_glyph_func_t func,
243 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400244
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400245/**
246 * hb_font_funcs_set_glyph_h_advance_func:
247 * @ffuncs: font functions.
248 * @func: (closure user_data) (destroy destroy) (scope notified):
249 * @user_data:
250 * @destroy:
251 *
252 *
253 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430254 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400255 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800256HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400257hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400258 hb_font_get_glyph_h_advance_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400259 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400260
261/**
262 * hb_font_funcs_set_glyph_v_advance_func:
263 * @ffuncs: font functions.
264 * @func: (closure user_data) (destroy destroy) (scope notified):
265 * @user_data:
266 * @destroy:
267 *
268 *
269 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430270 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400271 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800272HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400273hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400274 hb_font_get_glyph_v_advance_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400275 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500276
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400277/**
Behdad Esfahbod79e21982018-08-06 09:45:17 -0700278 * hb_font_funcs_set_glyph_h_advances_func:
279 * @ffuncs: font functions.
280 * @func: (closure user_data) (destroy destroy) (scope notified):
281 * @user_data:
282 * @destroy:
283 *
284 *
285 *
286 * Since: REPLACEME
287 **/
288HB_EXTERN void
289hb_font_funcs_set_glyph_h_advances_func (hb_font_funcs_t *ffuncs,
290 hb_font_get_glyph_h_advances_func_t func,
291 void *user_data, hb_destroy_func_t destroy);
292
293/**
294 * hb_font_funcs_set_glyph_v_advances_func:
295 * @ffuncs: font functions.
296 * @func: (closure user_data) (destroy destroy) (scope notified):
297 * @user_data:
298 * @destroy:
299 *
300 *
301 *
302 * Since: REPLACEME
303 **/
304HB_EXTERN void
305hb_font_funcs_set_glyph_v_advances_func (hb_font_funcs_t *ffuncs,
306 hb_font_get_glyph_v_advances_func_t func,
307 void *user_data, hb_destroy_func_t destroy);
308
309/**
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400310 * hb_font_funcs_set_glyph_h_origin_func:
311 * @ffuncs: font functions.
312 * @func: (closure user_data) (destroy destroy) (scope notified):
313 * @user_data:
314 * @destroy:
315 *
316 *
317 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430318 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400319 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800320HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400321hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400322 hb_font_get_glyph_h_origin_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400323 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400324
325/**
326 * hb_font_funcs_set_glyph_v_origin_func:
327 * @ffuncs: font functions.
328 * @func: (closure user_data) (destroy destroy) (scope notified):
329 * @user_data:
330 * @destroy:
331 *
332 *
333 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430334 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400335 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800336HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400337hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400338 hb_font_get_glyph_v_origin_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400339 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500340
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400341/**
342 * hb_font_funcs_set_glyph_h_kerning_func:
343 * @ffuncs: font functions.
344 * @func: (closure user_data) (destroy destroy) (scope notified):
345 * @user_data:
346 * @destroy:
347 *
348 *
349 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430350 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400351 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800352HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400353hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400354 hb_font_get_glyph_h_kerning_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400355 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400356
357/**
358 * hb_font_funcs_set_glyph_v_kerning_func:
359 * @ffuncs: font functions.
360 * @func: (closure user_data) (destroy destroy) (scope notified):
361 * @user_data:
362 * @destroy:
363 *
364 *
365 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430366 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400367 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800368HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400369hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400370 hb_font_get_glyph_v_kerning_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400371 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400372
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400373/**
374 * hb_font_funcs_set_glyph_extents_func:
375 * @ffuncs: font functions.
376 * @func: (closure user_data) (destroy destroy) (scope notified):
377 * @user_data:
378 * @destroy:
379 *
380 *
381 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430382 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400383 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800384HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400385hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400386 hb_font_get_glyph_extents_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400387 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400388
389/**
390 * hb_font_funcs_set_glyph_contour_point_func:
391 * @ffuncs: font functions.
392 * @func: (closure user_data) (destroy destroy) (scope notified):
393 * @user_data:
394 * @destroy:
395 *
396 *
397 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430398 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400399 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800400HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400401hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400402 hb_font_get_glyph_contour_point_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400403 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400404
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400405/**
406 * hb_font_funcs_set_glyph_name_func:
407 * @ffuncs: font functions.
408 * @func: (closure user_data) (destroy destroy) (scope notified):
409 * @user_data:
410 * @destroy:
411 *
412 *
413 *
Sascha Brawer01c3a882015-06-01 13:22:01 +0200414 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400415 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800416HB_EXTERN void
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400417hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400418 hb_font_get_glyph_name_func_t func,
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400419 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400420
421/**
422 * hb_font_funcs_set_glyph_from_name_func:
423 * @ffuncs: font functions.
424 * @func: (closure user_data) (destroy destroy) (scope notified):
425 * @user_data:
426 * @destroy:
427 *
428 *
429 *
Sascha Brawer01c3a882015-06-01 13:22:01 +0200430 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400431 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800432HB_EXTERN void
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400433hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400434 hb_font_get_glyph_from_name_func_t func,
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400435 void *user_data, hb_destroy_func_t destroy);
436
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400437/* func dispatch */
Behdad Esfahbod502f4cb2010-10-27 01:13:56 -0400438
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800439HB_EXTERN hb_bool_t
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900440hb_font_get_h_extents (hb_font_t *font,
441 hb_font_extents_t *extents);
442HB_EXTERN hb_bool_t
443hb_font_get_v_extents (hb_font_t *font,
444 hb_font_extents_t *extents);
445
446HB_EXTERN hb_bool_t
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900447hb_font_get_nominal_glyph (hb_font_t *font,
448 hb_codepoint_t unicode,
449 hb_codepoint_t *glyph);
450HB_EXTERN hb_bool_t
451hb_font_get_variation_glyph (hb_font_t *font,
452 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
453 hb_codepoint_t *glyph);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500454
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800455HB_EXTERN hb_position_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400456hb_font_get_glyph_h_advance (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400457 hb_codepoint_t glyph);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800458HB_EXTERN hb_position_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400459hb_font_get_glyph_v_advance (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400460 hb_codepoint_t glyph);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400461
Behdad Esfahbod28e2f462018-08-07 09:47:00 -0700462HB_EXTERN void
463hb_font_get_glyph_h_advances (hb_font_t* font,
464 unsigned count,
465 hb_codepoint_t *first_glyph,
466 unsigned glyph_stride,
467 hb_position_t *first_advance,
468 unsigned advance_stride);
469HB_EXTERN void
470hb_font_get_glyph_v_advances (hb_font_t* font,
471 unsigned count,
472 hb_codepoint_t *first_glyph,
473 unsigned glyph_stride,
474 hb_position_t *first_advance,
475 unsigned advance_stride);
476
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800477HB_EXTERN hb_bool_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400478hb_font_get_glyph_h_origin (hb_font_t *font,
479 hb_codepoint_t glyph,
480 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800481HB_EXTERN hb_bool_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400482hb_font_get_glyph_v_origin (hb_font_t *font,
483 hb_codepoint_t glyph,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400484 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400485
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800486HB_EXTERN hb_position_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400487hb_font_get_glyph_h_kerning (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400488 hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800489HB_EXTERN hb_position_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400490hb_font_get_glyph_v_kerning (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400491 hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400492
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800493HB_EXTERN hb_bool_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400494hb_font_get_glyph_extents (hb_font_t *font,
495 hb_codepoint_t glyph,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400496 hb_glyph_extents_t *extents);
497
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800498HB_EXTERN hb_bool_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400499hb_font_get_glyph_contour_point (hb_font_t *font,
500 hb_codepoint_t glyph, unsigned int point_index,
501 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400502
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800503HB_EXTERN hb_bool_t
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400504hb_font_get_glyph_name (hb_font_t *font,
505 hb_codepoint_t glyph,
506 char *name, unsigned int size);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800507HB_EXTERN hb_bool_t
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400508hb_font_get_glyph_from_name (hb_font_t *font,
509 const char *name, int len, /* -1 means nul-terminated */
510 hb_codepoint_t *glyph);
511
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400512
513/* high-level funcs, with fallback */
514
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900515/* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
Bruce Mitchener85ec6d32018-01-03 01:23:23 +0700516 * otherwise calls hb_font_get_variation_glyph(). */
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900517HB_EXTERN hb_bool_t
518hb_font_get_glyph (hb_font_t *font,
519 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
520 hb_codepoint_t *glyph);
521
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800522HB_EXTERN void
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900523hb_font_get_extents_for_direction (hb_font_t *font,
524 hb_direction_t direction,
525 hb_font_extents_t *extents);
526HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400527hb_font_get_glyph_advance_for_direction (hb_font_t *font,
528 hb_codepoint_t glyph,
529 hb_direction_t direction,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400530 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800531HB_EXTERN void
Behdad Esfahbodb0ff79a2018-08-07 09:52:06 -0700532hb_font_get_glyph_advances_for_direction (hb_font_t* font,
533 hb_direction_t direction,
534 unsigned count,
535 hb_codepoint_t *first_glyph,
536 unsigned glyph_stride,
537 hb_position_t *first_advance,
538 unsigned advance_stride);
539HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400540hb_font_get_glyph_origin_for_direction (hb_font_t *font,
541 hb_codepoint_t glyph,
542 hb_direction_t direction,
543 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800544HB_EXTERN void
Behdad Esfahbod8b38fae2011-05-19 13:08:00 -0400545hb_font_add_glyph_origin_for_direction (hb_font_t *font,
546 hb_codepoint_t glyph,
547 hb_direction_t direction,
548 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800549HB_EXTERN void
Behdad Esfahbod8b38fae2011-05-19 13:08:00 -0400550hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
551 hb_codepoint_t glyph,
552 hb_direction_t direction,
553 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400554
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800555HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400556hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
557 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
558 hb_direction_t direction,
559 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400560
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800561HB_EXTERN hb_bool_t
Behdad Esfahbod60fbb362011-05-19 18:46:15 -0400562hb_font_get_glyph_extents_for_origin (hb_font_t *font,
563 hb_codepoint_t glyph,
564 hb_direction_t direction,
565 hb_glyph_extents_t *extents);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400566
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800567HB_EXTERN hb_bool_t
Behdad Esfahbod60fbb362011-05-19 18:46:15 -0400568hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
569 hb_codepoint_t glyph, unsigned int point_index,
570 hb_direction_t direction,
571 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500572
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400573/* Generates gidDDD if glyph has no name. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800574HB_EXTERN void
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400575hb_font_glyph_to_string (hb_font_t *font,
576 hb_codepoint_t glyph,
577 char *s, unsigned int size);
578/* Parses gidDDD and uniUUUU strings automatically. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800579HB_EXTERN hb_bool_t
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400580hb_font_glyph_from_string (hb_font_t *font,
581 const char *s, int len, /* -1 means nul-terminated */
582 hb_codepoint_t *glyph);
583
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500584
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400585/*
586 * hb_font_t
587 */
588
589/* Fonts are very light-weight objects */
590
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800591HB_EXTERN hb_font_t *
Behdad Esfahbod72657e42011-05-02 20:46:32 -0400592hb_font_create (hb_face_t *face);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400593
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800594HB_EXTERN hb_font_t *
Behdad Esfahboddefc45b2011-05-10 20:02:49 -0400595hb_font_create_sub_font (hb_font_t *parent);
596
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800597HB_EXTERN hb_font_t *
Behdad Esfahbod80a68332011-05-11 18:14:44 -0400598hb_font_get_empty (void);
599
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800600HB_EXTERN hb_font_t *
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400601hb_font_reference (hb_font_t *font);
602
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800603HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400604hb_font_destroy (hb_font_t *font);
605
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800606HB_EXTERN hb_bool_t
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400607hb_font_set_user_data (hb_font_t *font,
608 hb_user_data_key_t *key,
609 void * data,
Behdad Esfahbod33ccc772011-08-09 00:43:24 +0200610 hb_destroy_func_t destroy,
611 hb_bool_t replace);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400612
613
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800614HB_EXTERN void *
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400615hb_font_get_user_data (hb_font_t *font,
616 hb_user_data_key_t *key);
617
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800618HB_EXTERN void
Behdad Esfahbod74f1d892011-05-10 19:39:32 -0400619hb_font_make_immutable (hb_font_t *font);
620
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800621HB_EXTERN hb_bool_t
Behdad Esfahbod74f1d892011-05-10 19:39:32 -0400622hb_font_is_immutable (hb_font_t *font);
623
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800624HB_EXTERN void
Behdad Esfahbod3e905e32015-10-08 12:51:02 -0400625hb_font_set_parent (hb_font_t *font,
626 hb_font_t *parent);
627
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800628HB_EXTERN hb_font_t *
Behdad Esfahboddefc45b2011-05-10 20:02:49 -0400629hb_font_get_parent (hb_font_t *font);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400630
Behdad Esfahbod95808ba2017-02-03 10:39:40 -0800631HB_EXTERN void
632hb_font_set_face (hb_font_t *font,
633 hb_face_t *face);
634
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800635HB_EXTERN hb_face_t *
Behdad Esfahbod72657e42011-05-02 20:46:32 -0400636hb_font_get_face (hb_font_t *font);
637
638
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800639HB_EXTERN void
Behdad Esfahbod8fb3d1a2009-11-03 18:34:20 -0500640hb_font_set_funcs (hb_font_t *font,
641 hb_font_funcs_t *klass,
Behdad Esfahbodb9d975b2011-05-10 20:41:13 -0400642 void *font_data,
Behdad Esfahbod56681892011-04-20 03:03:32 -0400643 hb_destroy_func_t destroy);
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400644
Behdad Esfahbodb9415e72011-08-17 19:21:44 +0200645/* Be *very* careful with this function! */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800646HB_EXTERN void
Behdad Esfahbodb9415e72011-08-17 19:21:44 +0200647hb_font_set_funcs_data (hb_font_t *font,
648 void *font_data,
649 hb_destroy_func_t destroy);
650
Behdad Esfahbod5ebabec2009-11-03 15:15:07 -0500651
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800652HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400653hb_font_set_scale (hb_font_t *font,
Behdad Esfahbodda975412011-04-21 15:08:01 -0400654 int x_scale,
655 int y_scale);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400656
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800657HB_EXTERN void
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400658hb_font_get_scale (hb_font_t *font,
Behdad Esfahbodda975412011-04-21 15:08:01 -0400659 int *x_scale,
660 int *y_scale);
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400661
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400662/*
663 * A zero value means "no hinting in that direction"
664 */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800665HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400666hb_font_set_ppem (hb_font_t *font,
667 unsigned int x_ppem,
668 unsigned int y_ppem);
669
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800670HB_EXTERN void
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400671hb_font_get_ppem (hb_font_t *font,
672 unsigned int *x_ppem,
673 unsigned int *y_ppem);
674
Behdad Esfahbodb57f18d2017-10-11 11:47:47 +0200675/*
676 * Point size per EM. Used for optical-sizing in CoreText.
Behdad Esfahbod374bb482017-10-11 15:37:50 +0200677 * A value of zero means "not set".
Behdad Esfahbodb57f18d2017-10-11 11:47:47 +0200678 */
679HB_EXTERN void
680hb_font_set_ptem (hb_font_t *font, float ptem);
681
682HB_EXTERN float
683hb_font_get_ptem (hb_font_t *font);
684
Behdad Esfahbod24911342017-01-21 15:21:50 -0800685HB_EXTERN void
Behdad Esfahbodbb1e1922017-01-21 17:41:37 -0800686hb_font_set_variations (hb_font_t *font,
687 const hb_variation_t *variations,
688 unsigned int variations_length);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400689
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700690HB_EXTERN void
Behdad Esfahbod8b2a5802017-01-21 15:05:00 -0800691hb_font_set_var_coords_design (hb_font_t *font,
Behdad Esfahbod24911342017-01-21 15:21:50 -0800692 const float *coords,
Behdad Esfahbod8b2a5802017-01-21 15:05:00 -0800693 unsigned int coords_length);
694
695HB_EXTERN void
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700696hb_font_set_var_coords_normalized (hb_font_t *font,
Behdad Esfahbod24911342017-01-21 15:21:50 -0800697 const int *coords, /* 2.14 normalized */
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700698 unsigned int coords_length);
699
Behdad Esfahbod7647a052017-01-22 17:47:49 -0800700HB_EXTERN const int *
Behdad Esfahbodbf0d3a62017-01-21 14:48:46 -0800701hb_font_get_var_coords_normalized (hb_font_t *font,
702 unsigned int *length);
703
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400704HB_END_DECLS
705
706#endif /* HB_FONT_H */