annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/harfbuzz/hb-font.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 /*
jpayne@69 2 * Copyright © 2009 Red Hat, Inc.
jpayne@69 3 *
jpayne@69 4 * This is part of HarfBuzz, a text shaping library.
jpayne@69 5 *
jpayne@69 6 * Permission is hereby granted, without written agreement and without
jpayne@69 7 * license or royalty fees, to use, copy, modify, and distribute this
jpayne@69 8 * software and its documentation for any purpose, provided that the
jpayne@69 9 * above copyright notice and the following two paragraphs appear in
jpayne@69 10 * all copies of this software.
jpayne@69 11 *
jpayne@69 12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
jpayne@69 13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
jpayne@69 14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
jpayne@69 15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
jpayne@69 16 * DAMAGE.
jpayne@69 17 *
jpayne@69 18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
jpayne@69 19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
jpayne@69 20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
jpayne@69 21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
jpayne@69 22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
jpayne@69 23 *
jpayne@69 24 * Red Hat Author(s): Behdad Esfahbod
jpayne@69 25 */
jpayne@69 26
jpayne@69 27 #ifndef HB_H_IN
jpayne@69 28 #error "Include <hb.h> instead."
jpayne@69 29 #endif
jpayne@69 30
jpayne@69 31 #ifndef HB_FONT_H
jpayne@69 32 #define HB_FONT_H
jpayne@69 33
jpayne@69 34 #include "hb-common.h"
jpayne@69 35 #include "hb-face.h"
jpayne@69 36 #include "hb-draw.h"
jpayne@69 37
jpayne@69 38 HB_BEGIN_DECLS
jpayne@69 39
jpayne@69 40
jpayne@69 41 typedef struct hb_font_t hb_font_t;
jpayne@69 42
jpayne@69 43
jpayne@69 44 /*
jpayne@69 45 * hb_font_funcs_t
jpayne@69 46 */
jpayne@69 47
jpayne@69 48 typedef struct hb_font_funcs_t hb_font_funcs_t;
jpayne@69 49
jpayne@69 50 HB_EXTERN hb_font_funcs_t *
jpayne@69 51 hb_font_funcs_create (void);
jpayne@69 52
jpayne@69 53 HB_EXTERN hb_font_funcs_t *
jpayne@69 54 hb_font_funcs_get_empty (void);
jpayne@69 55
jpayne@69 56 HB_EXTERN hb_font_funcs_t *
jpayne@69 57 hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
jpayne@69 58
jpayne@69 59 HB_EXTERN void
jpayne@69 60 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
jpayne@69 61
jpayne@69 62 HB_EXTERN hb_bool_t
jpayne@69 63 hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
jpayne@69 64 hb_user_data_key_t *key,
jpayne@69 65 void * data,
jpayne@69 66 hb_destroy_func_t destroy,
jpayne@69 67 hb_bool_t replace);
jpayne@69 68
jpayne@69 69
jpayne@69 70 HB_EXTERN void *
jpayne@69 71 hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
jpayne@69 72 hb_user_data_key_t *key);
jpayne@69 73
jpayne@69 74
jpayne@69 75 HB_EXTERN void
jpayne@69 76 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
jpayne@69 77
jpayne@69 78 HB_EXTERN hb_bool_t
jpayne@69 79 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
jpayne@69 80
jpayne@69 81
jpayne@69 82 /* font and glyph extents */
jpayne@69 83
jpayne@69 84 /* Note that typically ascender is positive and descender negative in coordinate systems that grow up. */
jpayne@69 85 typedef struct hb_font_extents_t
jpayne@69 86 {
jpayne@69 87 hb_position_t ascender; /* typographic ascender. */
jpayne@69 88 hb_position_t descender; /* typographic descender. */
jpayne@69 89 hb_position_t line_gap; /* suggested line spacing gap. */
jpayne@69 90 /*< private >*/
jpayne@69 91 hb_position_t reserved9;
jpayne@69 92 hb_position_t reserved8;
jpayne@69 93 hb_position_t reserved7;
jpayne@69 94 hb_position_t reserved6;
jpayne@69 95 hb_position_t reserved5;
jpayne@69 96 hb_position_t reserved4;
jpayne@69 97 hb_position_t reserved3;
jpayne@69 98 hb_position_t reserved2;
jpayne@69 99 hb_position_t reserved1;
jpayne@69 100 } hb_font_extents_t;
jpayne@69 101
jpayne@69 102 /* Note that height is negative in coordinate systems that grow up. */
jpayne@69 103 typedef struct hb_glyph_extents_t
jpayne@69 104 {
jpayne@69 105 hb_position_t x_bearing; /* left side of glyph from origin. */
jpayne@69 106 hb_position_t y_bearing; /* top side of glyph from origin. */
jpayne@69 107 hb_position_t width; /* distance from left to right side. */
jpayne@69 108 hb_position_t height; /* distance from top to bottom side. */
jpayne@69 109 } hb_glyph_extents_t;
jpayne@69 110
jpayne@69 111 /* func types */
jpayne@69 112
jpayne@69 113 typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
jpayne@69 114 hb_font_extents_t *extents,
jpayne@69 115 void *user_data);
jpayne@69 116 typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
jpayne@69 117 typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
jpayne@69 118
jpayne@69 119
jpayne@69 120 typedef hb_bool_t (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font, void *font_data,
jpayne@69 121 hb_codepoint_t unicode,
jpayne@69 122 hb_codepoint_t *glyph,
jpayne@69 123 void *user_data);
jpayne@69 124 typedef hb_bool_t (*hb_font_get_variation_glyph_func_t) (hb_font_t *font, void *font_data,
jpayne@69 125 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
jpayne@69 126 hb_codepoint_t *glyph,
jpayne@69 127 void *user_data);
jpayne@69 128
jpayne@69 129 typedef unsigned int (*hb_font_get_nominal_glyphs_func_t) (hb_font_t *font, void *font_data,
jpayne@69 130 unsigned int count,
jpayne@69 131 const hb_codepoint_t *first_unicode,
jpayne@69 132 unsigned int unicode_stride,
jpayne@69 133 hb_codepoint_t *first_glyph,
jpayne@69 134 unsigned int glyph_stride,
jpayne@69 135 void *user_data);
jpayne@69 136
jpayne@69 137
jpayne@69 138 typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
jpayne@69 139 hb_codepoint_t glyph,
jpayne@69 140 void *user_data);
jpayne@69 141 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
jpayne@69 142 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
jpayne@69 143
jpayne@69 144 typedef void (*hb_font_get_glyph_advances_func_t) (hb_font_t* font, void* font_data,
jpayne@69 145 unsigned int count,
jpayne@69 146 const hb_codepoint_t *first_glyph,
jpayne@69 147 unsigned glyph_stride,
jpayne@69 148 hb_position_t *first_advance,
jpayne@69 149 unsigned advance_stride,
jpayne@69 150 void *user_data);
jpayne@69 151 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
jpayne@69 152 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
jpayne@69 153
jpayne@69 154 typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
jpayne@69 155 hb_codepoint_t glyph,
jpayne@69 156 hb_position_t *x, hb_position_t *y,
jpayne@69 157 void *user_data);
jpayne@69 158 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
jpayne@69 159 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
jpayne@69 160
jpayne@69 161 typedef hb_position_t (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font, void *font_data,
jpayne@69 162 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
jpayne@69 163 void *user_data);
jpayne@69 164 typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
jpayne@69 165
jpayne@69 166
jpayne@69 167 typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
jpayne@69 168 hb_codepoint_t glyph,
jpayne@69 169 hb_glyph_extents_t *extents,
jpayne@69 170 void *user_data);
jpayne@69 171 typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
jpayne@69 172 hb_codepoint_t glyph, unsigned int point_index,
jpayne@69 173 hb_position_t *x, hb_position_t *y,
jpayne@69 174 void *user_data);
jpayne@69 175
jpayne@69 176
jpayne@69 177 typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
jpayne@69 178 hb_codepoint_t glyph,
jpayne@69 179 char *name, unsigned int size,
jpayne@69 180 void *user_data);
jpayne@69 181 typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
jpayne@69 182 const char *name, int len, /* -1 means nul-terminated */
jpayne@69 183 hb_codepoint_t *glyph,
jpayne@69 184 void *user_data);
jpayne@69 185
jpayne@69 186
jpayne@69 187 /* func setters */
jpayne@69 188
jpayne@69 189 /**
jpayne@69 190 * hb_font_funcs_set_font_h_extents_func:
jpayne@69 191 * @ffuncs: font functions.
jpayne@69 192 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 193 * @user_data:
jpayne@69 194 * @destroy:
jpayne@69 195 *
jpayne@69 196 *
jpayne@69 197 *
jpayne@69 198 * Since: 1.1.2
jpayne@69 199 **/
jpayne@69 200 HB_EXTERN void
jpayne@69 201 hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
jpayne@69 202 hb_font_get_font_h_extents_func_t func,
jpayne@69 203 void *user_data, hb_destroy_func_t destroy);
jpayne@69 204
jpayne@69 205 /**
jpayne@69 206 * hb_font_funcs_set_font_v_extents_func:
jpayne@69 207 * @ffuncs: font functions.
jpayne@69 208 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 209 * @user_data:
jpayne@69 210 * @destroy:
jpayne@69 211 *
jpayne@69 212 *
jpayne@69 213 *
jpayne@69 214 * Since: 1.1.2
jpayne@69 215 **/
jpayne@69 216 HB_EXTERN void
jpayne@69 217 hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
jpayne@69 218 hb_font_get_font_v_extents_func_t func,
jpayne@69 219 void *user_data, hb_destroy_func_t destroy);
jpayne@69 220
jpayne@69 221 /**
jpayne@69 222 * hb_font_funcs_set_nominal_glyph_func:
jpayne@69 223 * @ffuncs: font functions.
jpayne@69 224 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 225 * @user_data:
jpayne@69 226 * @destroy:
jpayne@69 227 *
jpayne@69 228 *
jpayne@69 229 *
jpayne@69 230 * Since: 1.2.3
jpayne@69 231 **/
jpayne@69 232 HB_EXTERN void
jpayne@69 233 hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
jpayne@69 234 hb_font_get_nominal_glyph_func_t func,
jpayne@69 235 void *user_data, hb_destroy_func_t destroy);
jpayne@69 236
jpayne@69 237 /**
jpayne@69 238 * hb_font_funcs_set_nominal_glyphs_func:
jpayne@69 239 * @ffuncs: font functions.
jpayne@69 240 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 241 * @user_data:
jpayne@69 242 * @destroy:
jpayne@69 243 *
jpayne@69 244 *
jpayne@69 245 *
jpayne@69 246 * Since: 2.0.0
jpayne@69 247 **/
jpayne@69 248 HB_EXTERN void
jpayne@69 249 hb_font_funcs_set_nominal_glyphs_func (hb_font_funcs_t *ffuncs,
jpayne@69 250 hb_font_get_nominal_glyphs_func_t func,
jpayne@69 251 void *user_data, hb_destroy_func_t destroy);
jpayne@69 252
jpayne@69 253 /**
jpayne@69 254 * hb_font_funcs_set_variation_glyph_func:
jpayne@69 255 * @ffuncs: font functions.
jpayne@69 256 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 257 * @user_data:
jpayne@69 258 * @destroy:
jpayne@69 259 *
jpayne@69 260 *
jpayne@69 261 *
jpayne@69 262 * Since: 1.2.3
jpayne@69 263 **/
jpayne@69 264 HB_EXTERN void
jpayne@69 265 hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
jpayne@69 266 hb_font_get_variation_glyph_func_t func,
jpayne@69 267 void *user_data, hb_destroy_func_t destroy);
jpayne@69 268
jpayne@69 269 /**
jpayne@69 270 * hb_font_funcs_set_glyph_h_advance_func:
jpayne@69 271 * @ffuncs: font functions.
jpayne@69 272 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 273 * @user_data:
jpayne@69 274 * @destroy:
jpayne@69 275 *
jpayne@69 276 *
jpayne@69 277 *
jpayne@69 278 * Since: 0.9.2
jpayne@69 279 **/
jpayne@69 280 HB_EXTERN void
jpayne@69 281 hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
jpayne@69 282 hb_font_get_glyph_h_advance_func_t func,
jpayne@69 283 void *user_data, hb_destroy_func_t destroy);
jpayne@69 284
jpayne@69 285 /**
jpayne@69 286 * hb_font_funcs_set_glyph_v_advance_func:
jpayne@69 287 * @ffuncs: font functions.
jpayne@69 288 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 289 * @user_data:
jpayne@69 290 * @destroy:
jpayne@69 291 *
jpayne@69 292 *
jpayne@69 293 *
jpayne@69 294 * Since: 0.9.2
jpayne@69 295 **/
jpayne@69 296 HB_EXTERN void
jpayne@69 297 hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
jpayne@69 298 hb_font_get_glyph_v_advance_func_t func,
jpayne@69 299 void *user_data, hb_destroy_func_t destroy);
jpayne@69 300
jpayne@69 301 /**
jpayne@69 302 * hb_font_funcs_set_glyph_h_advances_func:
jpayne@69 303 * @ffuncs: font functions.
jpayne@69 304 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 305 * @user_data:
jpayne@69 306 * @destroy:
jpayne@69 307 *
jpayne@69 308 *
jpayne@69 309 *
jpayne@69 310 * Since: 1.8.6
jpayne@69 311 **/
jpayne@69 312 HB_EXTERN void
jpayne@69 313 hb_font_funcs_set_glyph_h_advances_func (hb_font_funcs_t *ffuncs,
jpayne@69 314 hb_font_get_glyph_h_advances_func_t func,
jpayne@69 315 void *user_data, hb_destroy_func_t destroy);
jpayne@69 316
jpayne@69 317 /**
jpayne@69 318 * hb_font_funcs_set_glyph_v_advances_func:
jpayne@69 319 * @ffuncs: font functions.
jpayne@69 320 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 321 * @user_data:
jpayne@69 322 * @destroy:
jpayne@69 323 *
jpayne@69 324 *
jpayne@69 325 *
jpayne@69 326 * Since: 1.8.6
jpayne@69 327 **/
jpayne@69 328 HB_EXTERN void
jpayne@69 329 hb_font_funcs_set_glyph_v_advances_func (hb_font_funcs_t *ffuncs,
jpayne@69 330 hb_font_get_glyph_v_advances_func_t func,
jpayne@69 331 void *user_data, hb_destroy_func_t destroy);
jpayne@69 332
jpayne@69 333 /**
jpayne@69 334 * hb_font_funcs_set_glyph_h_origin_func:
jpayne@69 335 * @ffuncs: font functions.
jpayne@69 336 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 337 * @user_data:
jpayne@69 338 * @destroy:
jpayne@69 339 *
jpayne@69 340 *
jpayne@69 341 *
jpayne@69 342 * Since: 0.9.2
jpayne@69 343 **/
jpayne@69 344 HB_EXTERN void
jpayne@69 345 hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
jpayne@69 346 hb_font_get_glyph_h_origin_func_t func,
jpayne@69 347 void *user_data, hb_destroy_func_t destroy);
jpayne@69 348
jpayne@69 349 /**
jpayne@69 350 * hb_font_funcs_set_glyph_v_origin_func:
jpayne@69 351 * @ffuncs: font functions.
jpayne@69 352 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 353 * @user_data:
jpayne@69 354 * @destroy:
jpayne@69 355 *
jpayne@69 356 *
jpayne@69 357 *
jpayne@69 358 * Since: 0.9.2
jpayne@69 359 **/
jpayne@69 360 HB_EXTERN void
jpayne@69 361 hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
jpayne@69 362 hb_font_get_glyph_v_origin_func_t func,
jpayne@69 363 void *user_data, hb_destroy_func_t destroy);
jpayne@69 364
jpayne@69 365 /**
jpayne@69 366 * hb_font_funcs_set_glyph_h_kerning_func:
jpayne@69 367 * @ffuncs: font functions.
jpayne@69 368 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 369 * @user_data:
jpayne@69 370 * @destroy:
jpayne@69 371 *
jpayne@69 372 *
jpayne@69 373 *
jpayne@69 374 * Since: 0.9.2
jpayne@69 375 **/
jpayne@69 376 HB_EXTERN void
jpayne@69 377 hb_font_funcs_set_glyph_h_kerning_func (hb_font_funcs_t *ffuncs,
jpayne@69 378 hb_font_get_glyph_h_kerning_func_t func,
jpayne@69 379 void *user_data, hb_destroy_func_t destroy);
jpayne@69 380
jpayne@69 381 /**
jpayne@69 382 * hb_font_funcs_set_glyph_extents_func:
jpayne@69 383 * @ffuncs: font functions.
jpayne@69 384 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 385 * @user_data:
jpayne@69 386 * @destroy:
jpayne@69 387 *
jpayne@69 388 *
jpayne@69 389 *
jpayne@69 390 * Since: 0.9.2
jpayne@69 391 **/
jpayne@69 392 HB_EXTERN void
jpayne@69 393 hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
jpayne@69 394 hb_font_get_glyph_extents_func_t func,
jpayne@69 395 void *user_data, hb_destroy_func_t destroy);
jpayne@69 396
jpayne@69 397 /**
jpayne@69 398 * hb_font_funcs_set_glyph_contour_point_func:
jpayne@69 399 * @ffuncs: font functions.
jpayne@69 400 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 401 * @user_data:
jpayne@69 402 * @destroy:
jpayne@69 403 *
jpayne@69 404 *
jpayne@69 405 *
jpayne@69 406 * Since: 0.9.2
jpayne@69 407 **/
jpayne@69 408 HB_EXTERN void
jpayne@69 409 hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
jpayne@69 410 hb_font_get_glyph_contour_point_func_t func,
jpayne@69 411 void *user_data, hb_destroy_func_t destroy);
jpayne@69 412
jpayne@69 413 /**
jpayne@69 414 * hb_font_funcs_set_glyph_name_func:
jpayne@69 415 * @ffuncs: font functions.
jpayne@69 416 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 417 * @user_data:
jpayne@69 418 * @destroy:
jpayne@69 419 *
jpayne@69 420 *
jpayne@69 421 *
jpayne@69 422 * Since: 0.9.2
jpayne@69 423 **/
jpayne@69 424 HB_EXTERN void
jpayne@69 425 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
jpayne@69 426 hb_font_get_glyph_name_func_t func,
jpayne@69 427 void *user_data, hb_destroy_func_t destroy);
jpayne@69 428
jpayne@69 429 /**
jpayne@69 430 * hb_font_funcs_set_glyph_from_name_func:
jpayne@69 431 * @ffuncs: font functions.
jpayne@69 432 * @func: (closure user_data) (destroy destroy) (scope notified):
jpayne@69 433 * @user_data:
jpayne@69 434 * @destroy:
jpayne@69 435 *
jpayne@69 436 *
jpayne@69 437 *
jpayne@69 438 * Since: 0.9.2
jpayne@69 439 **/
jpayne@69 440 HB_EXTERN void
jpayne@69 441 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
jpayne@69 442 hb_font_get_glyph_from_name_func_t func,
jpayne@69 443 void *user_data, hb_destroy_func_t destroy);
jpayne@69 444
jpayne@69 445 /* func dispatch */
jpayne@69 446
jpayne@69 447 HB_EXTERN hb_bool_t
jpayne@69 448 hb_font_get_h_extents (hb_font_t *font,
jpayne@69 449 hb_font_extents_t *extents);
jpayne@69 450 HB_EXTERN hb_bool_t
jpayne@69 451 hb_font_get_v_extents (hb_font_t *font,
jpayne@69 452 hb_font_extents_t *extents);
jpayne@69 453
jpayne@69 454 HB_EXTERN hb_bool_t
jpayne@69 455 hb_font_get_nominal_glyph (hb_font_t *font,
jpayne@69 456 hb_codepoint_t unicode,
jpayne@69 457 hb_codepoint_t *glyph);
jpayne@69 458 HB_EXTERN hb_bool_t
jpayne@69 459 hb_font_get_variation_glyph (hb_font_t *font,
jpayne@69 460 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
jpayne@69 461 hb_codepoint_t *glyph);
jpayne@69 462
jpayne@69 463 HB_EXTERN unsigned int
jpayne@69 464 hb_font_get_nominal_glyphs (hb_font_t *font,
jpayne@69 465 unsigned int count,
jpayne@69 466 const hb_codepoint_t *first_unicode,
jpayne@69 467 unsigned int unicode_stride,
jpayne@69 468 hb_codepoint_t *first_glyph,
jpayne@69 469 unsigned int glyph_stride);
jpayne@69 470
jpayne@69 471 HB_EXTERN hb_position_t
jpayne@69 472 hb_font_get_glyph_h_advance (hb_font_t *font,
jpayne@69 473 hb_codepoint_t glyph);
jpayne@69 474 HB_EXTERN hb_position_t
jpayne@69 475 hb_font_get_glyph_v_advance (hb_font_t *font,
jpayne@69 476 hb_codepoint_t glyph);
jpayne@69 477
jpayne@69 478 HB_EXTERN void
jpayne@69 479 hb_font_get_glyph_h_advances (hb_font_t* font,
jpayne@69 480 unsigned int count,
jpayne@69 481 const hb_codepoint_t *first_glyph,
jpayne@69 482 unsigned glyph_stride,
jpayne@69 483 hb_position_t *first_advance,
jpayne@69 484 unsigned advance_stride);
jpayne@69 485 HB_EXTERN void
jpayne@69 486 hb_font_get_glyph_v_advances (hb_font_t* font,
jpayne@69 487 unsigned int count,
jpayne@69 488 const hb_codepoint_t *first_glyph,
jpayne@69 489 unsigned glyph_stride,
jpayne@69 490 hb_position_t *first_advance,
jpayne@69 491 unsigned advance_stride);
jpayne@69 492
jpayne@69 493 HB_EXTERN hb_bool_t
jpayne@69 494 hb_font_get_glyph_h_origin (hb_font_t *font,
jpayne@69 495 hb_codepoint_t glyph,
jpayne@69 496 hb_position_t *x, hb_position_t *y);
jpayne@69 497 HB_EXTERN hb_bool_t
jpayne@69 498 hb_font_get_glyph_v_origin (hb_font_t *font,
jpayne@69 499 hb_codepoint_t glyph,
jpayne@69 500 hb_position_t *x, hb_position_t *y);
jpayne@69 501
jpayne@69 502 HB_EXTERN hb_position_t
jpayne@69 503 hb_font_get_glyph_h_kerning (hb_font_t *font,
jpayne@69 504 hb_codepoint_t left_glyph, hb_codepoint_t right_glyph);
jpayne@69 505
jpayne@69 506 HB_EXTERN hb_bool_t
jpayne@69 507 hb_font_get_glyph_extents (hb_font_t *font,
jpayne@69 508 hb_codepoint_t glyph,
jpayne@69 509 hb_glyph_extents_t *extents);
jpayne@69 510
jpayne@69 511 HB_EXTERN hb_bool_t
jpayne@69 512 hb_font_get_glyph_contour_point (hb_font_t *font,
jpayne@69 513 hb_codepoint_t glyph, unsigned int point_index,
jpayne@69 514 hb_position_t *x, hb_position_t *y);
jpayne@69 515
jpayne@69 516 HB_EXTERN hb_bool_t
jpayne@69 517 hb_font_get_glyph_name (hb_font_t *font,
jpayne@69 518 hb_codepoint_t glyph,
jpayne@69 519 char *name, unsigned int size);
jpayne@69 520 HB_EXTERN hb_bool_t
jpayne@69 521 hb_font_get_glyph_from_name (hb_font_t *font,
jpayne@69 522 const char *name, int len, /* -1 means nul-terminated */
jpayne@69 523 hb_codepoint_t *glyph);
jpayne@69 524
jpayne@69 525
jpayne@69 526 /* high-level funcs, with fallback */
jpayne@69 527
jpayne@69 528 /* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
jpayne@69 529 * otherwise calls hb_font_get_variation_glyph(). */
jpayne@69 530 HB_EXTERN hb_bool_t
jpayne@69 531 hb_font_get_glyph (hb_font_t *font,
jpayne@69 532 hb_codepoint_t unicode, hb_codepoint_t variation_selector,
jpayne@69 533 hb_codepoint_t *glyph);
jpayne@69 534
jpayne@69 535 HB_EXTERN void
jpayne@69 536 hb_font_get_extents_for_direction (hb_font_t *font,
jpayne@69 537 hb_direction_t direction,
jpayne@69 538 hb_font_extents_t *extents);
jpayne@69 539 HB_EXTERN void
jpayne@69 540 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
jpayne@69 541 hb_codepoint_t glyph,
jpayne@69 542 hb_direction_t direction,
jpayne@69 543 hb_position_t *x, hb_position_t *y);
jpayne@69 544 HB_EXTERN void
jpayne@69 545 hb_font_get_glyph_advances_for_direction (hb_font_t* font,
jpayne@69 546 hb_direction_t direction,
jpayne@69 547 unsigned int count,
jpayne@69 548 const hb_codepoint_t *first_glyph,
jpayne@69 549 unsigned glyph_stride,
jpayne@69 550 hb_position_t *first_advance,
jpayne@69 551 unsigned advance_stride);
jpayne@69 552 HB_EXTERN void
jpayne@69 553 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
jpayne@69 554 hb_codepoint_t glyph,
jpayne@69 555 hb_direction_t direction,
jpayne@69 556 hb_position_t *x, hb_position_t *y);
jpayne@69 557 HB_EXTERN void
jpayne@69 558 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
jpayne@69 559 hb_codepoint_t glyph,
jpayne@69 560 hb_direction_t direction,
jpayne@69 561 hb_position_t *x, hb_position_t *y);
jpayne@69 562 HB_EXTERN void
jpayne@69 563 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
jpayne@69 564 hb_codepoint_t glyph,
jpayne@69 565 hb_direction_t direction,
jpayne@69 566 hb_position_t *x, hb_position_t *y);
jpayne@69 567
jpayne@69 568 HB_EXTERN void
jpayne@69 569 hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
jpayne@69 570 hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
jpayne@69 571 hb_direction_t direction,
jpayne@69 572 hb_position_t *x, hb_position_t *y);
jpayne@69 573
jpayne@69 574 HB_EXTERN hb_bool_t
jpayne@69 575 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
jpayne@69 576 hb_codepoint_t glyph,
jpayne@69 577 hb_direction_t direction,
jpayne@69 578 hb_glyph_extents_t *extents);
jpayne@69 579
jpayne@69 580 HB_EXTERN hb_bool_t
jpayne@69 581 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
jpayne@69 582 hb_codepoint_t glyph, unsigned int point_index,
jpayne@69 583 hb_direction_t direction,
jpayne@69 584 hb_position_t *x, hb_position_t *y);
jpayne@69 585
jpayne@69 586 /* Generates gidDDD if glyph has no name. */
jpayne@69 587 HB_EXTERN void
jpayne@69 588 hb_font_glyph_to_string (hb_font_t *font,
jpayne@69 589 hb_codepoint_t glyph,
jpayne@69 590 char *s, unsigned int size);
jpayne@69 591 /* Parses gidDDD and uniUUUU strings automatically. */
jpayne@69 592 HB_EXTERN hb_bool_t
jpayne@69 593 hb_font_glyph_from_string (hb_font_t *font,
jpayne@69 594 const char *s, int len, /* -1 means nul-terminated */
jpayne@69 595 hb_codepoint_t *glyph);
jpayne@69 596
jpayne@69 597
jpayne@69 598 /*
jpayne@69 599 * hb_font_t
jpayne@69 600 */
jpayne@69 601
jpayne@69 602 /* Fonts are very light-weight objects */
jpayne@69 603
jpayne@69 604 HB_EXTERN hb_font_t *
jpayne@69 605 hb_font_create (hb_face_t *face);
jpayne@69 606
jpayne@69 607 HB_EXTERN hb_font_t *
jpayne@69 608 hb_font_create_sub_font (hb_font_t *parent);
jpayne@69 609
jpayne@69 610 HB_EXTERN hb_font_t *
jpayne@69 611 hb_font_get_empty (void);
jpayne@69 612
jpayne@69 613 HB_EXTERN hb_font_t *
jpayne@69 614 hb_font_reference (hb_font_t *font);
jpayne@69 615
jpayne@69 616 HB_EXTERN void
jpayne@69 617 hb_font_destroy (hb_font_t *font);
jpayne@69 618
jpayne@69 619 HB_EXTERN hb_bool_t
jpayne@69 620 hb_font_set_user_data (hb_font_t *font,
jpayne@69 621 hb_user_data_key_t *key,
jpayne@69 622 void * data,
jpayne@69 623 hb_destroy_func_t destroy,
jpayne@69 624 hb_bool_t replace);
jpayne@69 625
jpayne@69 626
jpayne@69 627 HB_EXTERN void *
jpayne@69 628 hb_font_get_user_data (hb_font_t *font,
jpayne@69 629 hb_user_data_key_t *key);
jpayne@69 630
jpayne@69 631 HB_EXTERN void
jpayne@69 632 hb_font_make_immutable (hb_font_t *font);
jpayne@69 633
jpayne@69 634 HB_EXTERN hb_bool_t
jpayne@69 635 hb_font_is_immutable (hb_font_t *font);
jpayne@69 636
jpayne@69 637 HB_EXTERN void
jpayne@69 638 hb_font_set_parent (hb_font_t *font,
jpayne@69 639 hb_font_t *parent);
jpayne@69 640
jpayne@69 641 HB_EXTERN hb_font_t *
jpayne@69 642 hb_font_get_parent (hb_font_t *font);
jpayne@69 643
jpayne@69 644 HB_EXTERN void
jpayne@69 645 hb_font_set_face (hb_font_t *font,
jpayne@69 646 hb_face_t *face);
jpayne@69 647
jpayne@69 648 HB_EXTERN hb_face_t *
jpayne@69 649 hb_font_get_face (hb_font_t *font);
jpayne@69 650
jpayne@69 651
jpayne@69 652 HB_EXTERN void
jpayne@69 653 hb_font_set_funcs (hb_font_t *font,
jpayne@69 654 hb_font_funcs_t *klass,
jpayne@69 655 void *font_data,
jpayne@69 656 hb_destroy_func_t destroy);
jpayne@69 657
jpayne@69 658 /* Be *very* careful with this function! */
jpayne@69 659 HB_EXTERN void
jpayne@69 660 hb_font_set_funcs_data (hb_font_t *font,
jpayne@69 661 void *font_data,
jpayne@69 662 hb_destroy_func_t destroy);
jpayne@69 663
jpayne@69 664
jpayne@69 665 HB_EXTERN void
jpayne@69 666 hb_font_set_scale (hb_font_t *font,
jpayne@69 667 int x_scale,
jpayne@69 668 int y_scale);
jpayne@69 669
jpayne@69 670 HB_EXTERN void
jpayne@69 671 hb_font_get_scale (hb_font_t *font,
jpayne@69 672 int *x_scale,
jpayne@69 673 int *y_scale);
jpayne@69 674
jpayne@69 675 /*
jpayne@69 676 * A zero value means "no hinting in that direction"
jpayne@69 677 */
jpayne@69 678 HB_EXTERN void
jpayne@69 679 hb_font_set_ppem (hb_font_t *font,
jpayne@69 680 unsigned int x_ppem,
jpayne@69 681 unsigned int y_ppem);
jpayne@69 682
jpayne@69 683 HB_EXTERN void
jpayne@69 684 hb_font_get_ppem (hb_font_t *font,
jpayne@69 685 unsigned int *x_ppem,
jpayne@69 686 unsigned int *y_ppem);
jpayne@69 687
jpayne@69 688 /*
jpayne@69 689 * Point size per EM. Used for optical-sizing in CoreText.
jpayne@69 690 * A value of zero means "not set".
jpayne@69 691 */
jpayne@69 692 HB_EXTERN void
jpayne@69 693 hb_font_set_ptem (hb_font_t *font, float ptem);
jpayne@69 694
jpayne@69 695 HB_EXTERN float
jpayne@69 696 hb_font_get_ptem (hb_font_t *font);
jpayne@69 697
jpayne@69 698 HB_EXTERN void
jpayne@69 699 hb_font_set_variations (hb_font_t *font,
jpayne@69 700 const hb_variation_t *variations,
jpayne@69 701 unsigned int variations_length);
jpayne@69 702
jpayne@69 703 HB_EXTERN void
jpayne@69 704 hb_font_set_var_coords_design (hb_font_t *font,
jpayne@69 705 const float *coords,
jpayne@69 706 unsigned int coords_length);
jpayne@69 707
jpayne@69 708 #ifdef HB_EXPERIMENTAL_API
jpayne@69 709 HB_EXTERN const float *
jpayne@69 710 hb_font_get_var_coords_design (hb_font_t *font,
jpayne@69 711 unsigned int *length);
jpayne@69 712 #endif
jpayne@69 713
jpayne@69 714 HB_EXTERN void
jpayne@69 715 hb_font_set_var_coords_normalized (hb_font_t *font,
jpayne@69 716 const int *coords, /* 2.14 normalized */
jpayne@69 717 unsigned int coords_length);
jpayne@69 718
jpayne@69 719 HB_EXTERN const int *
jpayne@69 720 hb_font_get_var_coords_normalized (hb_font_t *font,
jpayne@69 721 unsigned int *length);
jpayne@69 722
jpayne@69 723 HB_EXTERN void
jpayne@69 724 hb_font_set_var_named_instance (hb_font_t *font,
jpayne@69 725 unsigned instance_index);
jpayne@69 726
jpayne@69 727 #ifdef HB_EXPERIMENTAL_API
jpayne@69 728 HB_EXTERN hb_bool_t
jpayne@69 729 hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
jpayne@69 730 const hb_draw_funcs_t *funcs, void *user_data);
jpayne@69 731 #endif
jpayne@69 732
jpayne@69 733 HB_END_DECLS
jpayne@69 734
jpayne@69 735 #endif /* HB_FONT_H */