blob: c95b61d2da8993fa3bb281bcecb303916792ac88 [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 Esfahbod7e2c85d2011-05-17 17:55:03 -0400135typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
136 hb_codepoint_t glyph,
137 hb_position_t *x, hb_position_t *y,
138 void *user_data);
139typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
140typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400141
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400142typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
143 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
144 void *user_data);
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400145typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
146typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400147
148
149typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
150 hb_codepoint_t glyph,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400151 hb_glyph_extents_t *extents,
152 void *user_data);
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400153typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
154 hb_codepoint_t glyph, unsigned int point_index,
155 hb_position_t *x, hb_position_t *y,
156 void *user_data);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400157
158
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400159typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
160 hb_codepoint_t glyph,
161 char *name, unsigned int size,
162 void *user_data);
163typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
164 const char *name, int len, /* -1 means nul-terminated */
165 hb_codepoint_t *glyph,
166 void *user_data);
167
168
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400169/* func setters */
Behdad Esfahbod502f4cb2010-10-27 01:13:56 -0400170
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400171/**
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900172 * hb_font_funcs_set_font_h_extents_func:
173 * @ffuncs: font functions.
174 * @func: (closure user_data) (destroy destroy) (scope notified):
175 * @user_data:
176 * @destroy:
177 *
178 *
179 *
180 * Since: 1.1.2
181 **/
182HB_EXTERN void
183hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
184 hb_font_get_font_h_extents_func_t func,
185 void *user_data, hb_destroy_func_t destroy);
186
187/**
188 * hb_font_funcs_set_font_v_extents_func:
189 * @ffuncs: font functions.
190 * @func: (closure user_data) (destroy destroy) (scope notified):
191 * @user_data:
192 * @destroy:
193 *
194 *
195 *
196 * Since: 1.1.2
197 **/
198HB_EXTERN void
199hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
200 hb_font_get_font_v_extents_func_t func,
201 void *user_data, hb_destroy_func_t destroy);
202
203/**
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900204 * hb_font_funcs_set_nominal_glyph_func:
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400205 * @ffuncs: font functions.
206 * @func: (closure user_data) (destroy destroy) (scope notified):
207 * @user_data:
208 * @destroy:
209 *
210 *
211 *
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900212 * Since: 1.2.3
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400213 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800214HB_EXTERN void
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900215hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
216 hb_font_get_nominal_glyph_func_t func,
217 void *user_data, hb_destroy_func_t destroy);
218
219/**
220 * hb_font_funcs_set_variation_glyph_func:
221 * @ffuncs: font functions.
222 * @func: (closure user_data) (destroy destroy) (scope notified):
223 * @user_data:
224 * @destroy:
225 *
226 *
227 *
228 * Since: 1.2.3
229 **/
230HB_EXTERN void
231hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
232 hb_font_get_variation_glyph_func_t func,
233 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod5c441882009-08-10 20:05:16 -0400234
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400235/**
236 * hb_font_funcs_set_glyph_h_advance_func:
237 * @ffuncs: font functions.
238 * @func: (closure user_data) (destroy destroy) (scope notified):
239 * @user_data:
240 * @destroy:
241 *
242 *
243 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430244 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400245 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800246HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400247hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400248 hb_font_get_glyph_h_advance_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400249 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400250
251/**
252 * hb_font_funcs_set_glyph_v_advance_func:
253 * @ffuncs: font functions.
254 * @func: (closure user_data) (destroy destroy) (scope notified):
255 * @user_data:
256 * @destroy:
257 *
258 *
259 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430260 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400261 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800262HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400263hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400264 hb_font_get_glyph_v_advance_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400265 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500266
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400267/**
268 * hb_font_funcs_set_glyph_h_origin_func:
269 * @ffuncs: font functions.
270 * @func: (closure user_data) (destroy destroy) (scope notified):
271 * @user_data:
272 * @destroy:
273 *
274 *
275 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430276 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400277 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800278HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400279hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400280 hb_font_get_glyph_h_origin_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400281 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400282
283/**
284 * hb_font_funcs_set_glyph_v_origin_func:
285 * @ffuncs: font functions.
286 * @func: (closure user_data) (destroy destroy) (scope notified):
287 * @user_data:
288 * @destroy:
289 *
290 *
291 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430292 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400293 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800294HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400295hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400296 hb_font_get_glyph_v_origin_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400297 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500298
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400299/**
300 * hb_font_funcs_set_glyph_h_kerning_func:
301 * @ffuncs: font functions.
302 * @func: (closure user_data) (destroy destroy) (scope notified):
303 * @user_data:
304 * @destroy:
305 *
306 *
307 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430308 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400309 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800310HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400311hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400312 hb_font_get_glyph_h_kerning_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400313 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400314
315/**
316 * hb_font_funcs_set_glyph_v_kerning_func:
317 * @ffuncs: font functions.
318 * @func: (closure user_data) (destroy destroy) (scope notified):
319 * @user_data:
320 * @destroy:
321 *
322 *
323 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430324 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400325 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800326HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400327hb_font_funcs_set_glyph_v_kerning_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400328 hb_font_get_glyph_v_kerning_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400329 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400330
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400331/**
332 * hb_font_funcs_set_glyph_extents_func:
333 * @ffuncs: font functions.
334 * @func: (closure user_data) (destroy destroy) (scope notified):
335 * @user_data:
336 * @destroy:
337 *
338 *
339 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430340 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400341 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800342HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400343hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400344 hb_font_get_glyph_extents_func_t func,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400345 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400346
347/**
348 * hb_font_funcs_set_glyph_contour_point_func:
349 * @ffuncs: font functions.
350 * @func: (closure user_data) (destroy destroy) (scope notified):
351 * @user_data:
352 * @destroy:
353 *
354 *
355 *
Behdad Esfahbodb8811422015-09-03 15:53:22 +0430356 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400357 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800358HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400359hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400360 hb_font_get_glyph_contour_point_func_t func,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400361 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400362
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400363/**
364 * hb_font_funcs_set_glyph_name_func:
365 * @ffuncs: font functions.
366 * @func: (closure user_data) (destroy destroy) (scope notified):
367 * @user_data:
368 * @destroy:
369 *
370 *
371 *
Sascha Brawer01c3a882015-06-01 13:22:01 +0200372 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400373 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800374HB_EXTERN void
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400375hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400376 hb_font_get_glyph_name_func_t func,
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400377 void *user_data, hb_destroy_func_t destroy);
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400378
379/**
380 * hb_font_funcs_set_glyph_from_name_func:
381 * @ffuncs: font functions.
382 * @func: (closure user_data) (destroy destroy) (scope notified):
383 * @user_data:
384 * @destroy:
385 *
386 *
387 *
Sascha Brawer01c3a882015-06-01 13:22:01 +0200388 * Since: 0.9.2
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400389 **/
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800390HB_EXTERN void
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400391hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
Behdad Esfahboda8949df2013-09-13 20:23:51 -0400392 hb_font_get_glyph_from_name_func_t func,
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400393 void *user_data, hb_destroy_func_t destroy);
394
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400395/* func dispatch */
Behdad Esfahbod502f4cb2010-10-27 01:13:56 -0400396
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800397HB_EXTERN hb_bool_t
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900398hb_font_get_h_extents (hb_font_t *font,
399 hb_font_extents_t *extents);
400HB_EXTERN hb_bool_t
401hb_font_get_v_extents (hb_font_t *font,
402 hb_font_extents_t *extents);
403
404HB_EXTERN hb_bool_t
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900405hb_font_get_nominal_glyph (hb_font_t *font,
406 hb_codepoint_t unicode,
407 hb_codepoint_t *glyph);
408HB_EXTERN hb_bool_t
409hb_font_get_variation_glyph (hb_font_t *font,
410 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
411 hb_codepoint_t *glyph);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500412
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800413HB_EXTERN hb_position_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400414hb_font_get_glyph_h_advance (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400415 hb_codepoint_t glyph);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800416HB_EXTERN hb_position_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400417hb_font_get_glyph_v_advance (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400418 hb_codepoint_t glyph);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400419
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800420HB_EXTERN hb_bool_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400421hb_font_get_glyph_h_origin (hb_font_t *font,
422 hb_codepoint_t glyph,
423 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800424HB_EXTERN hb_bool_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400425hb_font_get_glyph_v_origin (hb_font_t *font,
426 hb_codepoint_t glyph,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400427 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400428
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800429HB_EXTERN hb_position_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400430hb_font_get_glyph_h_kerning (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400431 hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800432HB_EXTERN hb_position_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400433hb_font_get_glyph_v_kerning (hb_font_t *font,
Behdad Esfahbod2d8ebcb2011-05-25 11:27:33 -0400434 hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400435
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800436HB_EXTERN hb_bool_t
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400437hb_font_get_glyph_extents (hb_font_t *font,
438 hb_codepoint_t glyph,
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400439 hb_glyph_extents_t *extents);
440
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800441HB_EXTERN hb_bool_t
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400442hb_font_get_glyph_contour_point (hb_font_t *font,
443 hb_codepoint_t glyph, unsigned int point_index,
444 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400445
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800446HB_EXTERN hb_bool_t
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400447hb_font_get_glyph_name (hb_font_t *font,
448 hb_codepoint_t glyph,
449 char *name, unsigned int size);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800450HB_EXTERN hb_bool_t
Behdad Esfahbodbce09552012-05-27 11:29:21 -0400451hb_font_get_glyph_from_name (hb_font_t *font,
452 const char *name, int len, /* -1 means nul-terminated */
453 hb_codepoint_t *glyph);
454
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400455
456/* high-level funcs, with fallback */
457
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900458/* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
Bruce Mitchener85ec6d32018-01-03 01:23:23 +0700459 * otherwise calls hb_font_get_variation_glyph(). */
Behdad Esfahbod8b5bc142016-02-24 19:05:23 +0900460HB_EXTERN hb_bool_t
461hb_font_get_glyph (hb_font_t *font,
462 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
463 hb_codepoint_t *glyph);
464
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800465HB_EXTERN void
Simon Cozens6f2e6de2015-10-26 16:23:22 +0900466hb_font_get_extents_for_direction (hb_font_t *font,
467 hb_direction_t direction,
468 hb_font_extents_t *extents);
469HB_EXTERN void
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400470hb_font_get_glyph_advance_for_direction (hb_font_t *font,
471 hb_codepoint_t glyph,
472 hb_direction_t direction,
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400473 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800474HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400475hb_font_get_glyph_origin_for_direction (hb_font_t *font,
476 hb_codepoint_t glyph,
477 hb_direction_t direction,
478 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800479HB_EXTERN void
Behdad Esfahbod8b38fae2011-05-19 13:08:00 -0400480hb_font_add_glyph_origin_for_direction (hb_font_t *font,
481 hb_codepoint_t glyph,
482 hb_direction_t direction,
483 hb_position_t *x, hb_position_t *y);
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800484HB_EXTERN void
Behdad Esfahbod8b38fae2011-05-19 13:08:00 -0400485hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
486 hb_codepoint_t glyph,
487 hb_direction_t direction,
488 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400489
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800490HB_EXTERN void
Behdad Esfahbod7e2c85d2011-05-17 17:55:03 -0400491hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
492 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
493 hb_direction_t direction,
494 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400495
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800496HB_EXTERN hb_bool_t
Behdad Esfahbod60fbb362011-05-19 18:46:15 -0400497hb_font_get_glyph_extents_for_origin (hb_font_t *font,
498 hb_codepoint_t glyph,
499 hb_direction_t direction,
500 hb_glyph_extents_t *extents);
Behdad Esfahbod744970a2011-05-16 18:15:37 -0400501
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800502HB_EXTERN hb_bool_t
Behdad Esfahbod60fbb362011-05-19 18:46:15 -0400503hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
504 hb_codepoint_t glyph, unsigned int point_index,
505 hb_direction_t direction,
506 hb_position_t *x, hb_position_t *y);
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500507
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400508/* Generates gidDDD if glyph has no name. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800509HB_EXTERN void
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400510hb_font_glyph_to_string (hb_font_t *font,
511 hb_codepoint_t glyph,
512 char *s, unsigned int size);
513/* Parses gidDDD and uniUUUU strings automatically. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800514HB_EXTERN hb_bool_t
Behdad Esfahbod6f3a3002012-08-07 22:13:25 -0400515hb_font_glyph_from_string (hb_font_t *font,
516 const char *s, int len, /* -1 means nul-terminated */
517 hb_codepoint_t *glyph);
518
Behdad Esfahbod2e336692009-11-05 13:55:41 -0500519
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400520/*
521 * hb_font_t
522 */
523
524/* Fonts are very light-weight objects */
525
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800526HB_EXTERN hb_font_t *
Behdad Esfahbod72657e42011-05-02 20:46:32 -0400527hb_font_create (hb_face_t *face);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400528
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800529HB_EXTERN hb_font_t *
Behdad Esfahboddefc45b2011-05-10 20:02:49 -0400530hb_font_create_sub_font (hb_font_t *parent);
531
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800532HB_EXTERN hb_font_t *
Behdad Esfahbod80a68332011-05-11 18:14:44 -0400533hb_font_get_empty (void);
534
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800535HB_EXTERN hb_font_t *
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400536hb_font_reference (hb_font_t *font);
537
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800538HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400539hb_font_destroy (hb_font_t *font);
540
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800541HB_EXTERN hb_bool_t
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400542hb_font_set_user_data (hb_font_t *font,
543 hb_user_data_key_t *key,
544 void * data,
Behdad Esfahbod33ccc772011-08-09 00:43:24 +0200545 hb_destroy_func_t destroy,
546 hb_bool_t replace);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400547
548
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800549HB_EXTERN void *
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400550hb_font_get_user_data (hb_font_t *font,
551 hb_user_data_key_t *key);
552
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800553HB_EXTERN void
Behdad Esfahbod74f1d892011-05-10 19:39:32 -0400554hb_font_make_immutable (hb_font_t *font);
555
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800556HB_EXTERN hb_bool_t
Behdad Esfahbod74f1d892011-05-10 19:39:32 -0400557hb_font_is_immutable (hb_font_t *font);
558
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800559HB_EXTERN void
Behdad Esfahbod3e905e32015-10-08 12:51:02 -0400560hb_font_set_parent (hb_font_t *font,
561 hb_font_t *parent);
562
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800563HB_EXTERN hb_font_t *
Behdad Esfahboddefc45b2011-05-10 20:02:49 -0400564hb_font_get_parent (hb_font_t *font);
Behdad Esfahbod5fa849b2011-04-27 21:46:01 -0400565
Behdad Esfahbod95808ba2017-02-03 10:39:40 -0800566HB_EXTERN void
567hb_font_set_face (hb_font_t *font,
568 hb_face_t *face);
569
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800570HB_EXTERN hb_face_t *
Behdad Esfahbod72657e42011-05-02 20:46:32 -0400571hb_font_get_face (hb_font_t *font);
572
573
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800574HB_EXTERN void
Behdad Esfahbod8fb3d1a2009-11-03 18:34:20 -0500575hb_font_set_funcs (hb_font_t *font,
576 hb_font_funcs_t *klass,
Behdad Esfahbodb9d975b2011-05-10 20:41:13 -0400577 void *font_data,
Behdad Esfahbod56681892011-04-20 03:03:32 -0400578 hb_destroy_func_t destroy);
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400579
Behdad Esfahbodb9415e72011-08-17 19:21:44 +0200580/* Be *very* careful with this function! */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800581HB_EXTERN void
Behdad Esfahbodb9415e72011-08-17 19:21:44 +0200582hb_font_set_funcs_data (hb_font_t *font,
583 void *font_data,
584 hb_destroy_func_t destroy);
585
Behdad Esfahbod5ebabec2009-11-03 15:15:07 -0500586
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800587HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400588hb_font_set_scale (hb_font_t *font,
Behdad Esfahbodda975412011-04-21 15:08:01 -0400589 int x_scale,
590 int y_scale);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400591
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800592HB_EXTERN void
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400593hb_font_get_scale (hb_font_t *font,
Behdad Esfahbodda975412011-04-21 15:08:01 -0400594 int *x_scale,
595 int *y_scale);
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400596
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400597/*
598 * A zero value means "no hinting in that direction"
599 */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800600HB_EXTERN void
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400601hb_font_set_ppem (hb_font_t *font,
602 unsigned int x_ppem,
603 unsigned int y_ppem);
604
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800605HB_EXTERN void
Behdad Esfahbod19c0eab2010-10-04 16:45:21 -0400606hb_font_get_ppem (hb_font_t *font,
607 unsigned int *x_ppem,
608 unsigned int *y_ppem);
609
Behdad Esfahbodb57f18d2017-10-11 11:47:47 +0200610/*
611 * Point size per EM. Used for optical-sizing in CoreText.
Behdad Esfahbod374bb482017-10-11 15:37:50 +0200612 * A value of zero means "not set".
Behdad Esfahbodb57f18d2017-10-11 11:47:47 +0200613 */
614HB_EXTERN void
615hb_font_set_ptem (hb_font_t *font, float ptem);
616
617HB_EXTERN float
618hb_font_get_ptem (hb_font_t *font);
619
Behdad Esfahbod24911342017-01-21 15:21:50 -0800620HB_EXTERN void
Behdad Esfahbodbb1e1922017-01-21 17:41:37 -0800621hb_font_set_variations (hb_font_t *font,
622 const hb_variation_t *variations,
623 unsigned int variations_length);
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400624
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700625HB_EXTERN void
Behdad Esfahbod8b2a5802017-01-21 15:05:00 -0800626hb_font_set_var_coords_design (hb_font_t *font,
Behdad Esfahbod24911342017-01-21 15:21:50 -0800627 const float *coords,
Behdad Esfahbod8b2a5802017-01-21 15:05:00 -0800628 unsigned int coords_length);
629
630HB_EXTERN void
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700631hb_font_set_var_coords_normalized (hb_font_t *font,
Behdad Esfahbod24911342017-01-21 15:21:50 -0800632 const int *coords, /* 2.14 normalized */
Behdad Esfahbodad69e8f2016-09-09 22:23:34 -0700633 unsigned int coords_length);
634
Behdad Esfahbod7647a052017-01-22 17:47:49 -0800635HB_EXTERN const int *
Behdad Esfahbodbf0d3a62017-01-21 14:48:46 -0800636hb_font_get_var_coords_normalized (hb_font_t *font,
637 unsigned int *length);
638
Behdad Esfahbodc62b5032009-08-01 19:54:49 -0400639HB_END_DECLS
640
641#endif /* HB_FONT_H */