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