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 #ifndef HB_H_IN
  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 
  37 HB_BEGIN_DECLS
  38 
  39 
  40 typedef struct hb_font_t hb_font_t;
  41 
  42 
  43 /*
  44  * hb_font_funcs_t
  45  */
  46 
  47 typedef struct hb_font_funcs_t hb_font_funcs_t;
  48 
  49 HB_EXTERN hb_font_funcs_t *
  50 hb_font_funcs_create (void);
  51 
  52 HB_EXTERN hb_font_funcs_t *
  53 hb_font_funcs_get_empty (void);
  54 
  55 HB_EXTERN hb_font_funcs_t *
  56 hb_font_funcs_reference (hb_font_funcs_t *ffuncs);
  57 
  58 HB_EXTERN void
  59 hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);
  60 
  61 HB_EXTERN hb_bool_t
  62 hb_font_funcs_set_user_data (hb_font_funcs_t    *ffuncs,
  63                              hb_user_data_key_t *key,
  64                              void *              data,
  65                              hb_destroy_func_t   destroy,
  66                              hb_bool_t           replace);
  67 
  68 
  69 HB_EXTERN void *
  70 hb_font_funcs_get_user_data (hb_font_funcs_t    *ffuncs,
  71                              hb_user_data_key_t *key);
  72 
  73 
  74 HB_EXTERN void
  75 hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);
  76 
  77 HB_EXTERN hb_bool_t
  78 hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);
  79 
  80 
  81 /* font and glyph extents */
  82 
  83 /* Note that typically ascender is positive and descender negative in coordinate systems that grow up. */
  84 typedef 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. */
  89   /*< 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;
  99 } hb_font_extents_t;
 100 
 101 /* Note that height is negative in coordinate systems that grow up. */
 102 typedef struct hb_glyph_extents_t
 103 {
 104   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. */
 108 } hb_glyph_extents_t;
 109 
 110 /* func types */
 111 
 112 typedef hb_bool_t (*hb_font_get_font_extents_func_t) (hb_font_t *font, void *font_data,
 113                                                        hb_font_extents_t *extents,
 114                                                        void *user_data);
 115 typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
 116 typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
 117 
 118 
 119 typedef 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);
 123 typedef 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);
 127 
 128 typedef unsigned int (*hb_font_get_nominal_glyphs_func_t) (hb_font_t *font, void *font_data,
 129                                                            unsigned int count,
 130                                                            const hb_codepoint_t *first_unicode,
 131                                                            unsigned int unicode_stride,
 132                                                            hb_codepoint_t *first_glyph,
 133                                                            unsigned int glyph_stride,
 134                                                            void *user_data);
 135 
 136 
 137 typedef hb_position_t (*hb_font_get_glyph_advance_func_t) (hb_font_t *font, void *font_data,
 138                                                            hb_codepoint_t glyph,
 139                                                            void *user_data);
 140 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
 141 typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
 142 
 143 typedef void (*hb_font_get_glyph_advances_func_t) (hb_font_t* font, void* font_data,
 144                                                    unsigned int count,
 145                                                    const hb_codepoint_t *first_glyph,
 146                                                    unsigned glyph_stride,
 147                                                    hb_position_t *first_advance,
 148                                                    unsigned advance_stride,
 149                                                    void *user_data);
 150 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
 151 typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
 152 
 153 typedef hb_bool_t (*hb_font_get_glyph_origin_func_t) (hb_font_t *font, void *font_data,
 154                                                       hb_codepoint_t glyph,
 155                                                       hb_position_t *x, hb_position_t *y,
 156                                                       void *user_data);
 157 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
 158 typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
 159 
 160 
 161 typedef hb_bool_t (*hb_font_get_glyph_extents_func_t) (hb_font_t *font, void *font_data,
 162                                                        hb_codepoint_t glyph,
 163                                                        hb_glyph_extents_t *extents,
 164                                                        void *user_data);
 165 typedef hb_bool_t (*hb_font_get_glyph_contour_point_func_t) (hb_font_t *font, void *font_data,
 166                                                              hb_codepoint_t glyph, unsigned int point_index,
 167                                                              hb_position_t *x, hb_position_t *y,
 168                                                              void *user_data);
 169 
 170 
 171 typedef hb_bool_t (*hb_font_get_glyph_name_func_t) (hb_font_t *font, void *font_data,
 172                                                     hb_codepoint_t glyph,
 173                                                     char *name, unsigned int size,
 174                                                     void *user_data);
 175 typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *font_data,
 176                                                          const char *name, int len, /* -1 means nul-terminated */
 177                                                          hb_codepoint_t *glyph,
 178                                                          void *user_data);
 179 
 180 
 181 /* func setters */
 182 
 183 /**
 184  * hb_font_funcs_set_font_h_extents_func:
 185  * @ffuncs: font functions.
 186  * @func: (closure user_data) (destroy destroy) (scope notified):
 187  * @user_data:
 188  * @destroy:
 189  *
 190  *
 191  *
 192  * Since: 1.1.2
 193  **/
 194 HB_EXTERN void
 195 hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
 196                                        hb_font_get_font_h_extents_func_t func,
 197                                        void *user_data, hb_destroy_func_t destroy);
 198 
 199 /**
 200  * hb_font_funcs_set_font_v_extents_func:
 201  * @ffuncs: font functions.
 202  * @func: (closure user_data) (destroy destroy) (scope notified):
 203  * @user_data:
 204  * @destroy:
 205  *
 206  *
 207  *
 208  * Since: 1.1.2
 209  **/
 210 HB_EXTERN void
 211 hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
 212                                        hb_font_get_font_v_extents_func_t func,
 213                                        void *user_data, hb_destroy_func_t destroy);
 214 
 215 /**
 216  * hb_font_funcs_set_nominal_glyph_func:
 217  * @ffuncs: font functions.
 218  * @func: (closure user_data) (destroy destroy) (scope notified):
 219  * @user_data:
 220  * @destroy:
 221  *
 222  *
 223  *
 224  * Since: 1.2.3
 225  **/
 226 HB_EXTERN void
 227 hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
 228                                       hb_font_get_nominal_glyph_func_t func,
 229                                       void *user_data, hb_destroy_func_t destroy);
 230 
 231 /**
 232  * hb_font_funcs_set_nominal_glyphs_func:
 233  * @ffuncs: font functions.
 234  * @func: (closure user_data) (destroy destroy) (scope notified):
 235  * @user_data:
 236  * @destroy:
 237  *
 238  *
 239  *
 240  * Since: 2.0.0
 241  **/
 242 HB_EXTERN void
 243 hb_font_funcs_set_nominal_glyphs_func (hb_font_funcs_t *ffuncs,
 244                                        hb_font_get_nominal_glyphs_func_t func,
 245                                        void *user_data, hb_destroy_func_t destroy);
 246 
 247 /**
 248  * hb_font_funcs_set_variation_glyph_func:
 249  * @ffuncs: font functions.
 250  * @func: (closure user_data) (destroy destroy) (scope notified):
 251  * @user_data:
 252  * @destroy:
 253  *
 254  *
 255  *
 256  * Since: 1.2.3
 257  **/
 258 HB_EXTERN void
 259 hb_font_funcs_set_variation_glyph_func (hb_font_funcs_t *ffuncs,
 260                                         hb_font_get_variation_glyph_func_t func,
 261                                         void *user_data, hb_destroy_func_t destroy);
 262 
 263 /**
 264  * hb_font_funcs_set_glyph_h_advance_func:
 265  * @ffuncs: font functions.
 266  * @func: (closure user_data) (destroy destroy) (scope notified):
 267  * @user_data:
 268  * @destroy:
 269  *
 270  *
 271  *
 272  * Since: 0.9.2
 273  **/
 274 HB_EXTERN void
 275 hb_font_funcs_set_glyph_h_advance_func (hb_font_funcs_t *ffuncs,
 276                                         hb_font_get_glyph_h_advance_func_t func,
 277                                         void *user_data, hb_destroy_func_t destroy);
 278 
 279 /**
 280  * hb_font_funcs_set_glyph_v_advance_func:
 281  * @ffuncs: font functions.
 282  * @func: (closure user_data) (destroy destroy) (scope notified):
 283  * @user_data:
 284  * @destroy:
 285  *
 286  *
 287  *
 288  * Since: 0.9.2
 289  **/
 290 HB_EXTERN void
 291 hb_font_funcs_set_glyph_v_advance_func (hb_font_funcs_t *ffuncs,
 292                                         hb_font_get_glyph_v_advance_func_t func,
 293                                         void *user_data, hb_destroy_func_t destroy);
 294 
 295 /**
 296  * hb_font_funcs_set_glyph_h_advances_func:
 297  * @ffuncs: font functions.
 298  * @func: (closure user_data) (destroy destroy) (scope notified):
 299  * @user_data:
 300  * @destroy:
 301  *
 302  *
 303  *
 304  * Since: 1.8.6
 305  **/
 306 HB_EXTERN void
 307 hb_font_funcs_set_glyph_h_advances_func (hb_font_funcs_t *ffuncs,
 308                                         hb_font_get_glyph_h_advances_func_t func,
 309                                         void *user_data, hb_destroy_func_t destroy);
 310 
 311 /**
 312  * hb_font_funcs_set_glyph_v_advances_func:
 313  * @ffuncs: font functions.
 314  * @func: (closure user_data) (destroy destroy) (scope notified):
 315  * @user_data:
 316  * @destroy:
 317  *
 318  *
 319  *
 320  * Since: 1.8.6
 321  **/
 322 HB_EXTERN void
 323 hb_font_funcs_set_glyph_v_advances_func (hb_font_funcs_t *ffuncs,
 324                                         hb_font_get_glyph_v_advances_func_t func,
 325                                         void *user_data, hb_destroy_func_t destroy);
 326 
 327 /**
 328  * hb_font_funcs_set_glyph_h_origin_func:
 329  * @ffuncs: font functions.
 330  * @func: (closure user_data) (destroy destroy) (scope notified):
 331  * @user_data:
 332  * @destroy:
 333  *
 334  *
 335  *
 336  * Since: 0.9.2
 337  **/
 338 HB_EXTERN void
 339 hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
 340                                        hb_font_get_glyph_h_origin_func_t func,
 341                                        void *user_data, hb_destroy_func_t destroy);
 342 
 343 /**
 344  * hb_font_funcs_set_glyph_v_origin_func:
 345  * @ffuncs: font functions.
 346  * @func: (closure user_data) (destroy destroy) (scope notified):
 347  * @user_data:
 348  * @destroy:
 349  *
 350  *
 351  *
 352  * Since: 0.9.2
 353  **/
 354 HB_EXTERN void
 355 hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
 356                                        hb_font_get_glyph_v_origin_func_t func,
 357                                        void *user_data, hb_destroy_func_t destroy);
 358 
 359 /**
 360  * hb_font_funcs_set_glyph_extents_func:
 361  * @ffuncs: font functions.
 362  * @func: (closure user_data) (destroy destroy) (scope notified):
 363  * @user_data:
 364  * @destroy:
 365  *
 366  *
 367  *
 368  * Since: 0.9.2
 369  **/
 370 HB_EXTERN void
 371 hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
 372                                       hb_font_get_glyph_extents_func_t func,
 373                                       void *user_data, hb_destroy_func_t destroy);
 374 
 375 /**
 376  * hb_font_funcs_set_glyph_contour_point_func:
 377  * @ffuncs: font functions.
 378  * @func: (closure user_data) (destroy destroy) (scope notified):
 379  * @user_data:
 380  * @destroy:
 381  *
 382  *
 383  *
 384  * Since: 0.9.2
 385  **/
 386 HB_EXTERN void
 387 hb_font_funcs_set_glyph_contour_point_func (hb_font_funcs_t *ffuncs,
 388                                             hb_font_get_glyph_contour_point_func_t func,
 389                                             void *user_data, hb_destroy_func_t destroy);
 390 
 391 /**
 392  * hb_font_funcs_set_glyph_name_func:
 393  * @ffuncs: font functions.
 394  * @func: (closure user_data) (destroy destroy) (scope notified):
 395  * @user_data:
 396  * @destroy:
 397  *
 398  *
 399  *
 400  * Since: 0.9.2
 401  **/
 402 HB_EXTERN void
 403 hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
 404                                    hb_font_get_glyph_name_func_t func,
 405                                    void *user_data, hb_destroy_func_t destroy);
 406 
 407 /**
 408  * hb_font_funcs_set_glyph_from_name_func:
 409  * @ffuncs: font functions.
 410  * @func: (closure user_data) (destroy destroy) (scope notified):
 411  * @user_data:
 412  * @destroy:
 413  *
 414  *
 415  *
 416  * Since: 0.9.2
 417  **/
 418 HB_EXTERN void
 419 hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
 420                                         hb_font_get_glyph_from_name_func_t func,
 421                                         void *user_data, hb_destroy_func_t destroy);
 422 
 423 /* func dispatch */
 424 
 425 HB_EXTERN hb_bool_t
 426 hb_font_get_h_extents (hb_font_t *font,
 427                        hb_font_extents_t *extents);
 428 HB_EXTERN hb_bool_t
 429 hb_font_get_v_extents (hb_font_t *font,
 430                        hb_font_extents_t *extents);
 431 
 432 HB_EXTERN hb_bool_t
 433 hb_font_get_nominal_glyph (hb_font_t *font,
 434                            hb_codepoint_t unicode,
 435                            hb_codepoint_t *glyph);
 436 HB_EXTERN hb_bool_t
 437 hb_font_get_variation_glyph (hb_font_t *font,
 438                              hb_codepoint_t unicode, hb_codepoint_t variation_selector,
 439                              hb_codepoint_t *glyph);
 440 
 441 HB_EXTERN hb_position_t
 442 hb_font_get_glyph_h_advance (hb_font_t *font,
 443                              hb_codepoint_t glyph);
 444 HB_EXTERN hb_position_t
 445 hb_font_get_glyph_v_advance (hb_font_t *font,
 446                              hb_codepoint_t glyph);
 447 
 448 HB_EXTERN void
 449 hb_font_get_glyph_h_advances (hb_font_t* font,
 450                               unsigned int count,
 451                               const hb_codepoint_t *first_glyph,
 452                               unsigned glyph_stride,
 453                               hb_position_t *first_advance,
 454                               unsigned advance_stride);
 455 HB_EXTERN void
 456 hb_font_get_glyph_v_advances (hb_font_t* font,
 457                               unsigned int count,
 458                               const hb_codepoint_t *first_glyph,
 459                               unsigned glyph_stride,
 460                               hb_position_t *first_advance,
 461                               unsigned advance_stride);
 462 
 463 HB_EXTERN hb_bool_t
 464 hb_font_get_glyph_h_origin (hb_font_t *font,
 465                             hb_codepoint_t glyph,
 466                             hb_position_t *x, hb_position_t *y);
 467 HB_EXTERN hb_bool_t
 468 hb_font_get_glyph_v_origin (hb_font_t *font,
 469                             hb_codepoint_t glyph,
 470                             hb_position_t *x, hb_position_t *y);
 471 
 472 HB_EXTERN hb_bool_t
 473 hb_font_get_glyph_extents (hb_font_t *font,
 474                            hb_codepoint_t glyph,
 475                            hb_glyph_extents_t *extents);
 476 
 477 HB_EXTERN hb_bool_t
 478 hb_font_get_glyph_contour_point (hb_font_t *font,
 479                                  hb_codepoint_t glyph, unsigned int point_index,
 480                                  hb_position_t *x, hb_position_t *y);
 481 
 482 HB_EXTERN hb_bool_t
 483 hb_font_get_glyph_name (hb_font_t *font,
 484                         hb_codepoint_t glyph,
 485                         char *name, unsigned int size);
 486 HB_EXTERN hb_bool_t
 487 hb_font_get_glyph_from_name (hb_font_t *font,
 488                              const char *name, int len, /* -1 means nul-terminated */
 489                              hb_codepoint_t *glyph);
 490 
 491 
 492 /* high-level funcs, with fallback */
 493 
 494 /* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
 495  * otherwise calls hb_font_get_variation_glyph(). */
 496 HB_EXTERN hb_bool_t
 497 hb_font_get_glyph (hb_font_t *font,
 498                    hb_codepoint_t unicode, hb_codepoint_t variation_selector,
 499                    hb_codepoint_t *glyph);
 500 
 501 HB_EXTERN void
 502 hb_font_get_extents_for_direction (hb_font_t *font,
 503                                    hb_direction_t direction,
 504                                    hb_font_extents_t *extents);
 505 HB_EXTERN void
 506 hb_font_get_glyph_advance_for_direction (hb_font_t *font,
 507                                          hb_codepoint_t glyph,
 508                                          hb_direction_t direction,
 509                                          hb_position_t *x, hb_position_t *y);
 510 HB_EXTERN void
 511 hb_font_get_glyph_advances_for_direction (hb_font_t* font,
 512                                           hb_direction_t direction,
 513                                           unsigned int count,
 514                                           const hb_codepoint_t *first_glyph,
 515                                           unsigned glyph_stride,
 516                                           hb_position_t *first_advance,
 517                                           unsigned advance_stride);
 518 HB_EXTERN void
 519 hb_font_get_glyph_origin_for_direction (hb_font_t *font,
 520                                         hb_codepoint_t glyph,
 521                                         hb_direction_t direction,
 522                                         hb_position_t *x, hb_position_t *y);
 523 HB_EXTERN void
 524 hb_font_add_glyph_origin_for_direction (hb_font_t *font,
 525                                         hb_codepoint_t glyph,
 526                                         hb_direction_t direction,
 527                                         hb_position_t *x, hb_position_t *y);
 528 HB_EXTERN void
 529 hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
 530                                              hb_codepoint_t glyph,
 531                                              hb_direction_t direction,
 532                                              hb_position_t *x, hb_position_t *y);
 533 
 534 HB_EXTERN hb_bool_t
 535 hb_font_get_glyph_extents_for_origin (hb_font_t *font,
 536                                       hb_codepoint_t glyph,
 537                                       hb_direction_t direction,
 538                                       hb_glyph_extents_t *extents);
 539 
 540 HB_EXTERN hb_bool_t
 541 hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
 542                                             hb_codepoint_t glyph, unsigned int point_index,
 543                                             hb_direction_t direction,
 544                                             hb_position_t *x, hb_position_t *y);
 545 
 546 /* Generates gidDDD if glyph has no name. */
 547 HB_EXTERN void
 548 hb_font_glyph_to_string (hb_font_t *font,
 549                          hb_codepoint_t glyph,
 550                          char *s, unsigned int size);
 551 /* Parses gidDDD and uniUUUU strings automatically. */
 552 HB_EXTERN hb_bool_t
 553 hb_font_glyph_from_string (hb_font_t *font,
 554                            const char *s, int len, /* -1 means nul-terminated */
 555                            hb_codepoint_t *glyph);
 556 
 557 
 558 /*
 559  * hb_font_t
 560  */
 561 
 562 /* Fonts are very light-weight objects */
 563 
 564 HB_EXTERN hb_font_t *
 565 hb_font_create (hb_face_t *face);
 566 
 567 HB_EXTERN hb_font_t *
 568 hb_font_create_sub_font (hb_font_t *parent);
 569 
 570 HB_EXTERN hb_font_t *
 571 hb_font_get_empty (void);
 572 
 573 HB_EXTERN hb_font_t *
 574 hb_font_reference (hb_font_t *font);
 575 
 576 HB_EXTERN void
 577 hb_font_destroy (hb_font_t *font);
 578 
 579 HB_EXTERN hb_bool_t
 580 hb_font_set_user_data (hb_font_t          *font,
 581                        hb_user_data_key_t *key,
 582                        void *              data,
 583                        hb_destroy_func_t   destroy,
 584                        hb_bool_t           replace);
 585 
 586 
 587 HB_EXTERN void *
 588 hb_font_get_user_data (hb_font_t          *font,
 589                        hb_user_data_key_t *key);
 590 
 591 HB_EXTERN void
 592 hb_font_make_immutable (hb_font_t *font);
 593 
 594 HB_EXTERN hb_bool_t
 595 hb_font_is_immutable (hb_font_t *font);
 596 
 597 HB_EXTERN void
 598 hb_font_set_parent (hb_font_t *font,
 599                     hb_font_t *parent);
 600 
 601 HB_EXTERN hb_font_t *
 602 hb_font_get_parent (hb_font_t *font);
 603 
 604 HB_EXTERN void
 605 hb_font_set_face (hb_font_t *font,
 606                   hb_face_t *face);
 607 
 608 HB_EXTERN hb_face_t *
 609 hb_font_get_face (hb_font_t *font);
 610 
 611 
 612 HB_EXTERN void
 613 hb_font_set_funcs (hb_font_t         *font,
 614                    hb_font_funcs_t   *klass,
 615                    void              *font_data,
 616                    hb_destroy_func_t  destroy);
 617 
 618 /* Be *very* careful with this function! */
 619 HB_EXTERN void
 620 hb_font_set_funcs_data (hb_font_t         *font,
 621                         void              *font_data,
 622                         hb_destroy_func_t  destroy);
 623 
 624 
 625 HB_EXTERN void
 626 hb_font_set_scale (hb_font_t *font,
 627                    int x_scale,
 628                    int y_scale);
 629 
 630 HB_EXTERN void
 631 hb_font_get_scale (hb_font_t *font,
 632                    int *x_scale,
 633                    int *y_scale);
 634 
 635 /*
 636  * A zero value means "no hinting in that direction"
 637  */
 638 HB_EXTERN void
 639 hb_font_set_ppem (hb_font_t *font,
 640                   unsigned int x_ppem,
 641                   unsigned int y_ppem);
 642 
 643 HB_EXTERN void
 644 hb_font_get_ppem (hb_font_t *font,
 645                   unsigned int *x_ppem,
 646                   unsigned int *y_ppem);
 647 
 648 /*
 649  * Point size per EM.  Used for optical-sizing in CoreText.
 650  * A value of zero means "not set".
 651  */
 652 HB_EXTERN void
 653 hb_font_set_ptem (hb_font_t *font, float ptem);
 654 
 655 HB_EXTERN float
 656 hb_font_get_ptem (hb_font_t *font);
 657 
 658 HB_EXTERN void
 659 hb_font_set_variations (hb_font_t *font,
 660                         const hb_variation_t *variations,
 661                         unsigned int variations_length);
 662 
 663 HB_EXTERN void
 664 hb_font_set_var_coords_design (hb_font_t *font,
 665                                const float *coords,
 666                                unsigned int coords_length);
 667 
 668 HB_EXTERN void
 669 hb_font_set_var_coords_normalized (hb_font_t *font,
 670                                    const int *coords, /* 2.14 normalized */
 671                                    unsigned int coords_length);
 672 
 673 HB_EXTERN const int *
 674 hb_font_get_var_coords_normalized (hb_font_t *font,
 675                                    unsigned int *length);
 676 
 677 HB_END_DECLS
 678 
 679 #endif /* HB_FONT_H */