## hb-font

hb-font — Font objects

## Functions

void | hb_font_add_glyph_origin_for_direction ()
hb_font_t * | hb_font_create ()
hb_font_t * | hb_font_create_sub_font ()
void | hb_font_destroy ()
hb_font_funcs_t * | hb_font_funcs_create ()
void | hb_font_funcs_destroy ()
hb_font_funcs_t * | hb_font_funcs_get_empty ()
void * | hb_font_funcs_get_user_data ()
hb_bool_t | hb_font_funcs_is_immutable ()
void | hb_font_funcs_make_immutable ()
hb_font_funcs_t * | hb_font_funcs_reference ()
void | hb_font_funcs_set_glyph_contour_point_func ()
void | hb_font_funcs_set_glyph_extents_func ()
void | hb_font_funcs_set_glyph_from_name_func ()
void | hb_font_funcs_set_glyph_h_advance_func ()
void | hb_font_funcs_set_glyph_h_advances_func ()
void | hb_font_funcs_set_glyph_h_kerning_func ()
void | hb_font_funcs_set_glyph_h_origin_func ()
void | hb_font_funcs_set_glyph_name_func ()
void | hb_font_funcs_set_glyph_v_advance_func ()
void | hb_font_funcs_set_glyph_v_advances_func ()
void | hb_font_funcs_set_glyph_v_origin_func ()
void | hb_font_funcs_set_nominal_glyph_func ()
void | hb_font_funcs_set_nominal_glyphs_func ()
hb_bool_t | hb_font_funcs_set_user_data ()
void | hb_font_funcs_set_variation_glyph_func ()
hb_font_t * | hb_font_get_empty ()
hb_face_t * | hb_font_get_face ()
hb_bool_t | hb_font_get_glyph ()
void | hb_font_get_glyph_advance_for_direction ()
hb_position_t | (*hb_font_get_glyph_advance_func_t) ()
void | hb_font_get_glyph_advances_for_direction ()
void | (*hb_font_get_glyph_advances_func_t) ()
hb_bool_t | hb_font_get_glyph_contour_point ()
hb_bool_t | hb_font_get_glyph_contour_point_for_origin ()
hb_bool_t | (*hb_font_get_glyph_contour_point_func_t) ()
hb_bool_t | hb_font_get_glyph_extents ()
hb_bool_t | hb_font_get_glyph_extents_for_origin ()
hb_bool_t | (*hb_font_get_glyph_extents_func_t) ()
hb_bool_t | hb_font_get_glyph_from_name ()
hb_bool_t | (*hb_font_get_glyph_from_name_func_t) ()
hb_position_t | hb_font_get_glyph_h_advance ()
void | hb_font_get_glyph_h_advances ()
hb_position_t | hb_font_get_glyph_h_kerning ()
hb_bool_t | hb_font_get_glyph_h_origin ()
void | hb_font_get_glyph_kerning_for_direction ()
hb_position_t | (*hb_font_get_glyph_kerning_func_t) ()
hb_bool_t | hb_font_get_glyph_name ()
hb_bool_t | (*hb_font_get_glyph_name_func_t) ()
void | hb_font_get_glyph_origin_for_direction ()
hb_bool_t | (*hb_font_get_glyph_origin_func_t) ()
hb_position_t | hb_font_get_glyph_v_advance ()
void | hb_font_get_glyph_v_advances ()
hb_bool_t | hb_font_get_glyph_v_origin ()
hb_bool_t | hb_font_get_nominal_glyph ()
hb_bool_t | (*hb_font_get_nominal_glyph_func_t) ()
unsigned int | hb_font_get_nominal_glyphs ()
unsigned int | (*hb_font_get_nominal_glyphs_func_t) ()
hb_font_t * | hb_font_get_parent ()
void | hb_font_get_ppem ()
float | hb_font_get_ptem ()
void | hb_font_get_scale ()
void * | hb_font_get_user_data ()
hb_bool_t | hb_font_get_variation_glyph ()
hb_bool_t | (*hb_font_get_variation_glyph_func_t) ()
const int * | hb_font_get_var_coords_normalized ()
hb_bool_t | hb_font_glyph_from_string ()
void | hb_font_glyph_to_string ()
hb_bool_t | hb_font_is_immutable ()
void | hb_font_make_immutable ()
hb_font_t * | hb_font_reference ()
void | hb_font_set_face ()
void | hb_font_set_funcs ()
void | hb_font_set_funcs_data ()
void | hb_font_set_parent ()
void | hb_font_set_ppem ()
void | hb_font_set_ptem ()
void | hb_font_set_scale ()
hb_bool_t | hb_font_set_user_data ()
void | hb_font_set_variations ()
void | hb_font_set_var_coords_design ()
void | hb_font_set_var_coords_normalized ()
void | hb_font_set_var_named_instance ()
void | hb_font_subtract_glyph_origin_for_direction ()
hb_blob_t * | (*hb_reference_table_func_t) ()
void | hb_font_funcs_set_font_h_extents_func ()
void | hb_font_funcs_set_font_v_extents_func ()
void | hb_font_get_extents_for_direction ()
hb_bool_t | (*hb_font_get_font_extents_func_t) ()
hb_bool_t | hb_font_get_h_extents ()
hb_bool_t | hb_font_get_v_extents ()

## Types and Values

typedef | hb_font_funcs_t
typedef | hb_font_get_glyph_h_advance_func_t
typedef | hb_font_get_glyph_h_advances_func_t
typedef | hb_font_get_glyph_h_kerning_func_t
typedef | hb_font_get_glyph_h_origin_func_t
typedef | hb_font_get_glyph_v_advance_func_t
typedef | hb_font_get_glyph_v_advances_func_t
typedef | hb_font_get_glyph_v_origin_func_t
typedef | hb_font_t
typedef | hb_font_get_font_h_extents_func_t
typedef | hb_font_get_font_v_extents_func_t
| hb_font_extents_t
| hb_glyph_extents_t

## Includes

    #include <hb.h>

## Description

Functions for working with font objects.

A font object represents a font face at a specific size and with certain other parameters (pixels-per-em, points-per-em, variation settings) specified. Font objects are created from font face objects, and are used as input to `hb_shape()`, among other things.

Client programs can optionally pass in their own functions that implement the basic, lower-level queries of font objects. This set of font functions is defined by the virtual methods in hb_font_funcs_t.

HarfBuzz provides a built-in set of lightweight default functions for each method in hb_font_funcs_t.

## Functions

### hb_font_add_glyph_origin_for_direction ()

    void
    hb_font_add_glyph_origin_for_direction
                                   (hb_font_t *font,
                                    hb_codepoint_t glyph,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Adds the origin coordinates to an (X,Y) point coordinate, in the specified glyph ID in the specified font.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
direction | The direction of the text segment |
x | Input = The original X coordinate Output = The X coordinate plus the X-coordinate of the origin. | [inout]
y | Input = The original Y coordinate Output = The Y coordinate plus the Y-coordinate of the origin. | [inout]

Since: 0.9.2

### hb_font_create ()

    hb_font_t *
    hb_font_create (hb_face_t *face);

Constructs a new font object from the specified face.

[Xconstructor]

#### Parameters

face | a face. |

#### Returns

The new font object.

[transfer full]

Since: 0.9.2

### hb_font_create_sub_font ()

    hb_font_t *
    hb_font_create_sub_font (hb_font_t *parent);

Constructs a sub-font font object from the specified `parent` font, replicating the parent's properties.

#### Parameters

parent | The parent font object |

#### Returns

The new sub-font font object.

[transfer full]

Since: 0.9.2

### hb_font_destroy ()

    void
    hb_font_destroy (hb_font_t *font);

Decreases the reference count on the given font object. When the reference count reaches zero, the font is destroyed, freeing all memory.

[skip]

#### Parameters

font | hb_font_t to work upon |

Since: 0.9.2

### hb_font_funcs_create ()

    hb_font_funcs_t *
    hb_font_funcs_create (void);

Creates a new hb_font_funcs_t structure of font functions.

[Xconstructor]

#### Returns

The font-functions structure.

[transfer full]

Since: 0.9.2

### hb_font_funcs_destroy ()

    void
    hb_font_funcs_destroy (hb_font_funcs_t *ffuncs);

Decreases the reference count on a font-functions structure. When the reference count reaches zero, the font-functions structure is destroyed, freeing all memory.

[skip]

#### Parameters

ffuncs | The font-functions structure |

Since: 0.9.2

### hb_font_funcs_get_empty ()

    hb_font_funcs_t *
    hb_font_funcs_get_empty (void);

Fetches an empty font-functions structure.

#### Returns

The font-functions structure.

[transfer full]

Since: 0.9.2

### hb_font_funcs_get_user_data ()

    void *
    hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
                                 hb_user_data_key_t *key);

Fetches the user data associated with the specified key, attached to the specified font-functions structure.

[skip]

#### Parameters

ffuncs | The font-functions structure |
key | The user-data key to query |

#### Returns

A pointer to the user data.

[transfer none]

Since: 0.9.2

### hb_font_funcs_is_immutable ()

    hb_bool_t
    hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs);

Tests whether a font-functions structure is immutable.

#### Parameters

ffuncs | The font-functions structure |

#### Returns

`true` if `ffuncs` is immutable, `false` otherwise

Since: 0.9.2

### hb_font_funcs_make_immutable ()

    void
    hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs);

Makes a font-functions structure immutable.

#### Parameters

ffuncs | The font-functions structure |

Since: 0.9.2

### hb_font_funcs_reference ()

    hb_font_funcs_t *
    hb_font_funcs_reference (hb_font_funcs_t *ffuncs);

Increases the reference count on a font-functions structure.

[skip]

#### Parameters

ffuncs | The font-functions structure |

#### Returns

The font-functions structure

Since: 0.9.2

### hb_font_funcs_set_glyph_contour_point_func ()

    void
    hb_font_funcs_set_glyph_contour_point_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_contour_point_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_contour_point_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_extents_func ()

    void
    hb_font_funcs_set_glyph_extents_func (hb_font_funcs_t *ffuncs,
                                          hb_font_get_glyph_extents_func_t func,
                                          void *user_data,
                                          hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_extents_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_from_name_func ()

    void
    hb_font_funcs_set_glyph_from_name_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_from_name_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_from_name_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_h_advance_func ()

    void
    hb_font_funcs_set_glyph_h_advance_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_h_advance_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_h_advance_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_h_advances_func ()

    void
    hb_font_funcs_set_glyph_h_advances_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_h_advances_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_h_advances_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.8.6

### hb_font_funcs_set_glyph_h_kerning_func ()

    void
    hb_font_funcs_set_glyph_h_kerning_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_h_kerning_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_h_kerning_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_h_origin_func ()

    void
    hb_font_funcs_set_glyph_h_origin_func (hb_font_funcs_t *ffuncs,
                                           hb_font_get_glyph_h_origin_func_t func,
                                           void *user_data,
                                           hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_h_origin_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_name_func ()

    void
    hb_font_funcs_set_glyph_name_func (hb_font_funcs_t *ffuncs,
                                       hb_font_get_glyph_name_func_t func,
                                       void *user_data,
                                       hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_name_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_v_advance_func ()

    void
    hb_font_funcs_set_glyph_v_advance_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_v_advance_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_v_advance_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_glyph_v_advances_func ()

    void
    hb_font_funcs_set_glyph_v_advances_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_glyph_v_advances_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_v_advances_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.8.6

### hb_font_funcs_set_glyph_v_origin_func ()

    void
    hb_font_funcs_set_glyph_v_origin_func (hb_font_funcs_t *ffuncs,
                                           hb_font_get_glyph_v_origin_func_t func,
                                           void *user_data,
                                           hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_glyph_v_origin_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_funcs_set_nominal_glyph_func ()

    void
    hb_font_funcs_set_nominal_glyph_func (hb_font_funcs_t *ffuncs,
                                          hb_font_get_nominal_glyph_func_t func,
                                          void *user_data,
                                          hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_nominal_glyph_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.2.3

### hb_font_funcs_set_nominal_glyphs_func ()

    void
    hb_font_funcs_set_nominal_glyphs_func (hb_font_funcs_t *ffuncs,
                                           hb_font_get_nominal_glyphs_func_t func,
                                           void *user_data,
                                           hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_nominal_glyphs_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 2.0.0

### hb_font_funcs_set_user_data ()

    hb_bool_t
    hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
                                 hb_user_data_key_t *key,
                                 void *data,
                                 hb_destroy_func_t destroy,
                                 hb_bool_t replace);

Attaches a user-data key/data pair to the specified font-functions structure.

[skip]

#### Parameters

ffuncs | The font-functions structure |
key | The user-data key to set |
data | A pointer to the user data set |
destroy | A callback to call when `data` is not needed anymore. | [nullable]
replace | Whether to replace an existing data with the same key |

#### Returns

`true` if success, `false` otherwise

Since: 0.9.2

### hb_font_funcs_set_variation_glyph_func ()

    void
    hb_font_funcs_set_variation_glyph_func
                                   (hb_font_funcs_t *ffuncs,
                                    hb_font_get_variation_glyph_func_t func,
                                    void *user_data,
                                    hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_variation_glyph_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.2.3

### hb_font_get_empty ()

    hb_font_t *
    hb_font_get_empty (void);

Fetches the empty font object.

#### Returns

The empty font object.

[transfer full]

Since: 0.9.2

### hb_font_get_face ()

    hb_face_t *
    hb_font_get_face (hb_font_t *font);

Fetches the face associated with the specified font object.

#### Parameters

font | hb_font_t to work upon |

#### Returns

The hb_face_t value.

[transfer none]

Since: 0.9.2

### hb_font_get_glyph ()

    hb_bool_t
    hb_font_get_glyph (hb_font_t *font,
                       hb_codepoint_t unicode,
                       hb_codepoint_t variation_selector,
                       hb_codepoint_t *glyph);

Fetches the glyph ID for a Unicode code point in the specified font, with an optional variation selector.

If `variation_selector` is 0, calls `hb_font_get_nominal_glyph()`; otherwise calls `hb_font_get_variation_glyph()`.

#### Parameters

font | hb_font_t to work upon |
unicode | The Unicode code point to query |
variation_selector | A variation-selector code point |
glyph | The glyph ID retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_advance_for_direction ()

    void
    hb_font_get_glyph_advance_for_direction
                                   (hb_font_t *font,
                                    hb_codepoint_t glyph,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Fetches the advance for a glyph ID from the specified font, in a text segment of the specified direction.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
direction | The direction of the text segment |
x | The horizontal advance retrieved. | [out]
y | The vertical advance retrieved. | [out]

Since: 0.9.2

### hb_font_get_glyph_advance_func_t ()

    hb_position_t
    (*hb_font_get_glyph_advance_func_t) (hb_font_t *font,
                                         void *font_data,
                                         hb_codepoint_t glyph,
                                         void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advance for a specified glyph. The method must return an hb_position_t.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
glyph | The glyph ID to query |
user_data | User data pointer passed by the caller |

#### Returns

The advance of `glyph` within `font`

### hb_font_get_glyph_advances_for_direction ()

    void
    hb_font_get_glyph_advances_for_direction
                                   (hb_font_t *font,
                                    hb_direction_t direction,
                                    unsigned int count,
                                    const hb_codepoint_t *first_glyph,
                                    unsigned  glyph_stride,
                                    hb_position_t *first_advance,
                                    unsigned  advance_stride);

Fetches the advances for a sequence of glyph IDs in the specified font, in a text segment of the specified direction.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
direction | The direction of the text segment |
count | The number of glyph IDs in the sequence queried |
first_glyph | The first glyph ID to query |
glyph_stride | The stride between successive glyph IDs |
first_advance | The first advance retrieved. | [out]
advance_stride | The stride between successive advances. | [out]

Since: 1.8.6

### hb_font_get_glyph_advances_func_t ()

    void
    (*hb_font_get_glyph_advances_func_t) (hb_font_t *font,
                                          void *font_data,
                                          unsigned int count,
                                          const hb_codepoint_t *first_glyph,
                                          unsigned  glyph_stride,
                                          hb_position_t *first_advance,
                                          unsigned  advance_stride,
                                          void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advances for a sequence of glyphs.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
count | The number of glyph IDs in the sequence queried |
first_glyph | The first glyph ID to query |
glyph_stride | The stride between successive glyph IDs |
first_advance | The first advance retrieved. | [out]
advance_stride | The stride between successive advances |
user_data | User data pointer passed by the caller |

### hb_font_get_glyph_contour_point ()

    hb_bool_t
    hb_font_get_glyph_contour_point (hb_font_t *font,
                                     hb_codepoint_t glyph,
                                     unsigned int point_index,
                                     hb_position_t *x,
                                     hb_position_t *y);

Fetches the (x,y) coordinates of a specified contour-point index in the specified glyph, within the specified font.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
point_index | The contour-point index to query |
x | The X value retrieved for the contour point. | [out]
y | The Y value retrieved for the contour point. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_contour_point_for_origin ()

    hb_bool_t
    hb_font_get_glyph_contour_point_for_origin
                                   (hb_font_t *font,
                                    hb_codepoint_t glyph,
                                    unsigned int point_index,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Fetches the (X,Y) coordinates of a specified contour-point index in the specified glyph ID in the specified font, with respect to the origin in a text segment in the specified direction.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
point_index | The contour-point index to query |
direction | The direction of the text segment |
x | The X value retrieved for the contour point. | [out]
y | The Y value retrieved for the contour point. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_contour_point_func_t ()

    hb_bool_t
    (*hb_font_get_glyph_contour_point_func_t)
                                   (hb_font_t *font,
                                    void *font_data,
                                    hb_codepoint_t glyph,
                                    unsigned int point_index,
                                    hb_position_t *x,
                                    hb_position_t *y,
                                    void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the (X,Y) coordinates (in font units) for a specified contour point in a glyph. Each coordinate must be returned as an hb_position_t output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
glyph | The glyph ID to query |
point_index | The contour-point index to query |
x | The X value retrieved for the contour point. | [out]
y | The Y value retrieved for the contour point. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_glyph_extents ()

    hb_bool_t
    hb_font_get_glyph_extents (hb_font_t *font,
                               hb_codepoint_t glyph,
                               hb_glyph_extents_t *extents);

Fetches the hb_glyph_extents_t data for a glyph ID in the specified font.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
extents | The hb_glyph_extents_t retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_extents_for_origin ()

    hb_bool_t
    hb_font_get_glyph_extents_for_origin (hb_font_t *font,
                                          hb_codepoint_t glyph,
                                          hb_direction_t direction,
                                          hb_glyph_extents_t *extents);

Fetches the hb_glyph_extents_t data for a glyph ID in the specified font, with respect to the origin in a text segment in the specified direction.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
direction | The direction of the text segment |
extents | The hb_glyph_extents_t retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_extents_func_t ()

    hb_bool_t
    (*hb_font_get_glyph_extents_func_t) (hb_font_t *font,
                                         void *font_data,
                                         hb_codepoint_t glyph,
                                         hb_glyph_extents_t *extents,
                                         void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the extents for a specified glyph. Extents must be returned in an hb_glyph_extents output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
glyph | The glyph ID to query |
extents | The hb_glyph_extents_t retrieved. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_glyph_from_name ()

    hb_bool_t
    hb_font_get_glyph_from_name (hb_font_t *font,
                                 const char *name,
                                 int len,
                                 hb_codepoint_t *glyph);

Fetches the glyph ID that corresponds to a name string in the specified `font` .

Note: `len` == -1 means the name string is null-terminated.

#### Parameters

font | hb_font_t to work upon |
name | The name string to query. | [array length=len]
len | The length of the name queried |
glyph | The glyph ID retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_from_name_func_t ()

    hb_bool_t
    (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font,
                                           void *font_data,
                                           const char *name,
                                           int len,
                                           hb_codepoint_t *glyph,
                                           void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the glyph ID that corresponds to a glyph-name string.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
name | The name string to query. | [array length=len]
len | The length of the name queried |
glyph | The glyph ID retrieved. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_glyph_h_advance ()

    hb_position_t
    hb_font_get_glyph_h_advance (hb_font_t *font,
                                 hb_codepoint_t glyph);

Fetches the advance for a glyph ID in the specified font, for horizontal text segments.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |

#### Returns

The advance of `glyph` within `font`

Since: 0.9.2

### hb_font_get_glyph_h_advances ()

    void
    hb_font_get_glyph_h_advances (hb_font_t *font,
                                  unsigned int count,
                                  const hb_codepoint_t *first_glyph,
                                  unsigned  glyph_stride,
                                  hb_position_t *first_advance,
                                  unsigned  advance_stride);

Fetches the advances for a sequence of glyph IDs in the specified font, for horizontal text segments.

#### Parameters

font | hb_font_t to work upon |
count | The number of glyph IDs in the sequence queried |
first_glyph | The first glyph ID to query |
glyph_stride | The stride between successive glyph IDs |
first_advance | The first advance retrieved. | [out]
advance_stride | The stride between successive advances |

Since: 1.8.6

### hb_font_get_glyph_h_kerning ()

    hb_position_t
    hb_font_get_glyph_h_kerning (hb_font_t *font,
                                 hb_codepoint_t left_glyph,
                                 hb_codepoint_t right_glyph);

Fetches the kerning-adjustment value for a glyph-pair in the specified font, for horizontal text segments.

It handles legacy kerning only (as returned by the corresponding hb_font_funcs_t function).

#### Parameters

font | hb_font_t to work upon |
left_glyph | The glyph ID of the left glyph in the glyph pair |
right_glyph | The glyph ID of the right glyph in the glyph pair |

#### Returns

The kerning adjustment value

Since: 0.9.2

### hb_font_get_glyph_h_origin ()

    hb_bool_t
    hb_font_get_glyph_h_origin (hb_font_t *font,
                                hb_codepoint_t glyph,
                                hb_position_t *x,
                                hb_position_t *y);

Fetches the (X,Y) coordinates of the origin for a glyph ID in the specified font, for horizontal text segments.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
x | The X coordinate of the origin. | [out]
y | The Y coordinate of the origin. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_kerning_for_direction ()

    void
    hb_font_get_glyph_kerning_for_direction
                                   (hb_font_t *font,
                                    hb_codepoint_t first_glyph,
                                    hb_codepoint_t second_glyph,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Fetches the kerning-adjustment value for a glyph-pair in the specified font.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
first_glyph | The glyph ID of the first glyph in the glyph pair to query |
second_glyph | The glyph ID of the second glyph in the glyph pair to query |
direction | The direction of the text segment |
x | The horizontal kerning-adjustment value retrieved. | [out]
y | The vertical kerning-adjustment value retrieved. | [out]

Since: 0.9.2

### hb_font_get_glyph_kerning_func_t ()

    hb_position_t
    (*hb_font_get_glyph_kerning_func_t) (hb_font_t *font,
                                         void *font_data,
                                         hb_codepoint_t first_glyph,
                                         hb_codepoint_t second_glyph,
                                         void *user_data);

This method should retrieve the kerning-adjustment value for a glyph-pair in the specified font, for horizontal text segments.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
first_glyph | The glyph ID of the first glyph in the glyph pair |
second_glyph | The glyph ID of the second glyph in the glyph pair |
user_data | User data pointer passed by the caller |

### hb_font_get_glyph_name ()

    hb_bool_t
    hb_font_get_glyph_name (hb_font_t *font,
                            hb_codepoint_t glyph,
                            char *name,
                            unsigned int size);

Fetches the glyph-name string for a glyph ID in the specified `font` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
name | Name string retrieved for the glyph ID. | [out][array length=size]
size | Length of the glyph-name string retrieved |

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_glyph_name_func_t ()

    hb_bool_t
    (*hb_font_get_glyph_name_func_t) (hb_font_t *font,
                                      void *font_data,
                                      hb_codepoint_t glyph,
                                      char *name,
                                      unsigned int size,
                                      void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the glyph name that corresponds to a glyph ID. The name should be returned in a string output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
glyph | The glyph ID to query |
name | Name string retrieved for the glyph ID. | [out][array length=size]
size | Length of the glyph-name string retrieved |
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_glyph_origin_for_direction ()

    void
    hb_font_get_glyph_origin_for_direction
                                   (hb_font_t *font,
                                    hb_codepoint_t glyph,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Fetches the (X,Y) coordinates of the origin for a glyph in the specified font.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
direction | The direction of the text segment |
x | The X coordinate retrieved for the origin. | [out]
y | The Y coordinate retrieved for the origin. | [out]

Since: 0.9.2

### hb_font_get_glyph_origin_func_t ()

    hb_bool_t
    (*hb_font_get_glyph_origin_func_t) (hb_font_t *font,
                                        void *font_data,
                                        hb_codepoint_t glyph,
                                        hb_position_t *x,
                                        hb_position_t *y,
                                        void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the (X,Y) coordinates (in font units) of the origin for a glyph. Each coordinate must be returned in an hb_position_t output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
glyph | The glyph ID to query |
x | The X coordinate of the origin. | [out]
y | The Y coordinate of the origin. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_glyph_v_advance ()

    hb_position_t
    hb_font_get_glyph_v_advance (hb_font_t *font,
                                 hb_codepoint_t glyph);

Fetches the advance for a glyph ID in the specified font, for vertical text segments.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |

#### Returns

The advance of `glyph` within `font`

Since: 0.9.2

### hb_font_get_glyph_v_advances ()

    void
    hb_font_get_glyph_v_advances (hb_font_t *font,
                                  unsigned int count,
                                  const hb_codepoint_t *first_glyph,
                                  unsigned  glyph_stride,
                                  hb_position_t *first_advance,
                                  unsigned  advance_stride);

Fetches the advances for a sequence of glyph IDs in the specified font, for vertical text segments.

#### Parameters

font | hb_font_t to work upon |
count | The number of glyph IDs in the sequence queried |
first_glyph | The first glyph ID to query |
glyph_stride | The stride between successive glyph IDs |
first_advance | The first advance retrieved. | [out]
advance_stride | The stride between successive advances. | [out]

Since: 1.8.6

### hb_font_get_glyph_v_origin ()

    hb_bool_t
    hb_font_get_glyph_v_origin (hb_font_t *font,
                                hb_codepoint_t glyph,
                                hb_position_t *x,
                                hb_position_t *y);

Fetches the (X,Y) coordinates of the origin for a glyph ID in the specified font, for vertical text segments.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
x | The X coordinate of the origin. | [out]
y | The Y coordinate of the origin. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_get_nominal_glyph ()

    hb_bool_t
    hb_font_get_nominal_glyph (hb_font_t *font,
                               hb_codepoint_t unicode,
                               hb_codepoint_t *glyph);

Fetches the nominal glyph ID for a Unicode code point in the specified font.

This version of the function should not be used to fetch glyph IDs for code points modified by variation selectors. For variation-selector support, user `hb_font_get_variation_glyph()` or use `hb_font_get_glyph()`.

#### Parameters

font | hb_font_t to work upon |
unicode | The Unicode code point to query |
glyph | The glyph ID retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 1.2.3

### hb_font_get_nominal_glyph_func_t ()

    hb_bool_t
    (*hb_font_get_nominal_glyph_func_t) (hb_font_t *font,
                                         void *font_data,
                                         hb_codepoint_t unicode,
                                         hb_codepoint_t *glyph,
                                         void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the nominal glyph ID for a specified Unicode code point. Glyph IDs must be returned in a hb_codepoint_t output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
unicode | The Unicode code point to query |
glyph | The glyph ID retrieved. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_nominal_glyphs ()

    unsigned int
    hb_font_get_nominal_glyphs (hb_font_t *font,
                                unsigned int count,
                                const hb_codepoint_t *first_unicode,
                                unsigned int unicode_stride,
                                hb_codepoint_t *first_glyph,
                                unsigned int glyph_stride);

Fetches the nominal glyph IDs for a sequence of Unicode code points. Glyph IDs must be returned in a hb_codepoint_t output parameter.

#### Parameters

font | hb_font_t to work upon |
count | number of code points to query |
first_unicode | The first Unicode code point to query |
unicode_stride | The stride between successive code points |
first_glyph | The first glyph ID retrieved. | [out]
glyph_stride | The stride between successive glyph IDs |

#### Returns

the number of code points processed

Since: 2.6.3

### hb_font_get_nominal_glyphs_func_t ()

    unsigned int
    (*hb_font_get_nominal_glyphs_func_t) (hb_font_t *font,
                                          void *font_data,
                                          unsigned int count,
                                          const hb_codepoint_t *first_unicode,
                                          unsigned int unicode_stride,
                                          hb_codepoint_t *first_glyph,
                                          unsigned int glyph_stride,
                                          void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the nominal glyph IDs for a sequence of Unicode code points. Glyph IDs must be returned in a hb_codepoint_t output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
count | number of code points to query |
first_unicode | The first Unicode code point to query |
unicode_stride | The stride between successive code points |
first_glyph | The first glyph ID retrieved. | [out]
glyph_stride | The stride between successive glyph IDs |
user_data | User data pointer passed by the caller |

#### Returns

the number of code points processed

### hb_font_get_parent ()

    hb_font_t *
    hb_font_get_parent (hb_font_t *font);

Fetches the parent font of `font` .

#### Parameters

font | hb_font_t to work upon |

#### Returns

The parent font object.

[transfer none]

Since: 0.9.2

### hb_font_get_ppem ()

    void
    hb_font_get_ppem (hb_font_t *font,
                      unsigned int *x_ppem,
                      unsigned int *y_ppem);

Fetches the horizontal and vertical points-per-em (ppem) of a font.

#### Parameters

font | hb_font_t to work upon |
x_ppem | Horizontal ppem value. | [out]
y_ppem | Vertical ppem value. | [out]

Since: 0.9.2

### hb_font_get_ptem ()

    float
    hb_font_get_ptem (hb_font_t *font);

Fetches the "point size" of a font. Used in CoreText to implement optical sizing.

#### Parameters

font | hb_font_t to work upon |

#### Returns

Point size. A value of zero means "not set."

Since: 0.9.2

### hb_font_get_scale ()

    void
    hb_font_get_scale (hb_font_t *font,
                       int *x_scale,
                       int *y_scale);

Fetches the horizontal and vertical scale of a font.

#### Parameters

font | hb_font_t to work upon |
x_scale | Horizontal scale value. | [out]
y_scale | Vertical scale value. | [out]

Since: 0.9.2

### hb_font_get_user_data ()

    void *
    hb_font_get_user_data (hb_font_t *font,
                           hb_user_data_key_t *key);

Fetches the user-data object associated with the specified key, attached to the specified font object.

[skip]

#### Parameters

font | hb_font_t to work upon |
key | The user-data key to query |

#### Returns

Pointer to the user data.

[transfer none]

Since: 0.9.2

### hb_font_get_variation_glyph ()

    hb_bool_t
    hb_font_get_variation_glyph (hb_font_t *font,
                                 hb_codepoint_t unicode,
                                 hb_codepoint_t variation_selector,
                                 hb_codepoint_t *glyph);

Fetches the glyph ID for a Unicode code point when followed by by the specified variation-selector code point, in the specified font.

#### Parameters

font | hb_font_t to work upon |
unicode | The Unicode code point to query |
variation_selector | The variation-selector code point to query |
glyph | The glyph ID retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 1.2.3

### hb_font_get_variation_glyph_func_t ()

    hb_bool_t
    (*hb_font_get_variation_glyph_func_t) (hb_font_t *font,
                                           void *font_data,
                                           hb_codepoint_t unicode,
                                           hb_codepoint_t variation_selector,
                                           hb_codepoint_t *glyph,
                                           void *user_data);

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the glyph ID for a specified Unicode code point followed by a specified Variation Selector code point. Glyph IDs must be returned in a hb_codepoint_t output parameter.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
unicode | The Unicode code point to query |
variation_selector | The variation-selector code point to query |
glyph | The glyph ID retrieved. | [out]
user_data | User data pointer passed by the caller |

#### Returns

`true` if data found, `false` otherwise

### hb_font_get_var_coords_normalized ()

    const int *
    hb_font_get_var_coords_normalized (hb_font_t *font,
                                       unsigned int *length);

Fetches the list of normalized variation coordinates currently set on a font.

Return value is valid as long as variation coordinates of the font are not modified.

#### Parameters

font | hb_font_t to work upon |
length | Number of coordinates retrieved |

Since: 1.4.2

### hb_font_glyph_from_string ()

    hb_bool_t
    hb_font_glyph_from_string (hb_font_t *font,
                               const char *s,
                               int len,
                               hb_codepoint_t *glyph);

Fetches the glyph ID from `font` that matches the specified string. Strings of the format `gidDDD` or `uniUUUU` are parsed automatically.

Note: `len` == -1 means the string is null-terminated.

#### Parameters

font | hb_font_t to work upon |
s | string to query. | [array length=len][element-type uint8_t]
len | The length of the string `s` |
glyph | The glyph ID corresponding to the string requested. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 0.9.2

### hb_font_glyph_to_string ()

    void
    hb_font_glyph_to_string (hb_font_t *font,
                             hb_codepoint_t glyph,
                             char *s,
                             unsigned int size);

Fetches the name of the specified glyph ID in `font` and returns it in string `s` .

If the glyph ID has no name in `font` , a string of the form `gidDDD` is generated, with `DDD` being the glyph ID.

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
s | The string containing the glyph name. | [out][array length=size]
size | Length of string `s` |

Since: 0.9.2

### hb_font_is_immutable ()

    hb_bool_t
    hb_font_is_immutable (hb_font_t *font);

Tests whether a font object is immutable.

#### Parameters

font | hb_font_t to work upon |

#### Returns

`true` if `font` is immutable, `false` otherwise

Since: 0.9.2

### hb_font_make_immutable ()

    void
    hb_font_make_immutable (hb_font_t *font);

Makes `font` immutable.

#### Parameters

font | hb_font_t to work upon |

Since: 0.9.2

### hb_font_reference ()

    hb_font_t *
    hb_font_reference (hb_font_t *font);

Increases the reference count on the given font object.

[skip]

#### Parameters

font | hb_font_t to work upon |

#### Returns

The `font` object.

[transfer full]

Since: 0.9.2

### hb_font_set_face ()

    void
    hb_font_set_face (hb_font_t *font,
                      hb_face_t *face);

Sets `face` as the font-face value of `font` .

#### Parameters

font | hb_font_t to work upon |
face | The hb_face_t to assign |

Since: 1.4.3

### hb_font_set_funcs ()

    void
    hb_font_set_funcs (hb_font_t *font,
                       hb_font_funcs_t *klass,
                       void *font_data,
                       hb_destroy_func_t destroy);

Replaces the font-functions structure attached to a font, updating the font's user-data with `font` -data and the `destroy` callback.

#### Parameters

font | hb_font_t to work upon |
klass | The font-functions structure. | [closure font_data][destroy destroy][scope notified]
font_data | Data to attach to `font` |
destroy | The function to call when `font_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_set_funcs_data ()

    void
    hb_font_set_funcs_data (hb_font_t *font,
                            void *font_data,
                            hb_destroy_func_t destroy);

Replaces the user data attached to a font, updating the font's `destroy` callback.

#### Parameters

font | hb_font_t to work upon |
font_data | Data to attach to `font` . | [destroy destroy][scope notified]
destroy | The function to call when `font_data` is not needed anymore. | [nullable]

Since: 0.9.2

### hb_font_set_parent ()

    void
    hb_font_set_parent (hb_font_t *font,
                        hb_font_t *parent);

Sets the parent font of `font` .

#### Parameters

font | hb_font_t to work upon |
parent | The parent font object to assign |

Since: 1.0.5

### hb_font_set_ppem ()

    void
    hb_font_set_ppem (hb_font_t *font,
                      unsigned int x_ppem,
                      unsigned int y_ppem);

Sets the horizontal and vertical pixels-per-em (ppem) of a font.

#### Parameters

font | hb_font_t to work upon |
x_ppem | Horizontal ppem value to assign |
y_ppem | Vertical ppem value to assign |

Since: 0.9.2

### hb_font_set_ptem ()

    void
    hb_font_set_ptem (hb_font_t *font,
                      float ptem);

Sets the "point size" of a font. Set to zero to unset. Used in CoreText to implement optical sizing.

Note: There are 72 points in an inch.

#### Parameters

font | hb_font_t to work upon |
ptem | font size in points. |

Since: 1.6.0

### hb_font_set_scale ()

    void
    hb_font_set_scale (hb_font_t *font,
                       int x_scale,
                       int y_scale);

Sets the horizontal and vertical scale of a font.

#### Parameters

font | hb_font_t to work upon |
x_scale | Horizontal scale value to assign |
y_scale | Vertical scale value to assign |

Since: 0.9.2

### hb_font_set_user_data ()

    hb_bool_t
    hb_font_set_user_data (hb_font_t *font,
                           hb_user_data_key_t *key,
                           void *data,
                           hb_destroy_func_t destroy,
                           hb_bool_t replace);

Attaches a user-data key/data pair to the specified font object.

[skip]

#### Parameters

font | hb_font_t to work upon |
key | The user-data key |
data | A pointer to the user data |
destroy | A callback to call when `data` is not needed anymore. | [nullable]
replace | Whether to replace an existing data with the same key |

#### Returns

`true` if success, `false` otherwise

Since: 0.9.2

### hb_font_set_variations ()

    void
    hb_font_set_variations (hb_font_t *font,
                            const hb_variation_t *variations,
                            unsigned int variations_length);

Applies a list of font-variation settings to a font.

#### Parameters

font | hb_font_t to work upon |
variations | Array of variation settings to apply. | [array length=variations_length]
variations_length | Number of variations to apply |

Since: 1.4.2

### hb_font_set_var_coords_design ()

    void
    hb_font_set_var_coords_design (hb_font_t *font,
                                   const float *coords,
                                   unsigned int coords_length);

Applies a list of variation coordinates (in design-space units) to a font.

#### Parameters

font | hb_font_t to work upon |
coords | Array of variation coordinates to apply. | [array length=coords_length]
coords_length | Number of coordinates to apply |

Since: 1.4.2

### hb_font_set_var_coords_normalized ()

    void
    hb_font_set_var_coords_normalized (hb_font_t *font,
                                       const int *coords,
                                       unsigned int coords_length);

Applies a list of variation coordinates (in normalized units) to a font.

Note: Coordinates should be normalized to 2.14.

#### Parameters

font | hb_font_t to work upon |
coords | Array of variation coordinates to apply. | [array length=coords_length]
coords_length | Number of coordinates to apply |

Since: 1.4.2

### hb_font_set_var_named_instance ()

    void
    hb_font_set_var_named_instance (hb_font_t *font,
                                    unsigned  instance_index);

Sets design coords of a font from a named instance index.

#### Parameters

font | a font. |
instance_index | named instance index. |

Since: 2.6.0

### hb_font_subtract_glyph_origin_for_direction ()

    void
    hb_font_subtract_glyph_origin_for_direction
                                   (hb_font_t *font,
                                    hb_codepoint_t glyph,
                                    hb_direction_t direction,
                                    hb_position_t *x,
                                    hb_position_t *y);

Subtracts the origin coordinates from an (X,Y) point coordinate, in the specified glyph ID in the specified font.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
glyph | The glyph ID to query |
direction | The direction of the text segment |
x | Input = The original X coordinate Output = The X coordinate minus the X-coordinate of the origin. | [inout]
y | Input = The original Y coordinate Output = The Y coordinate minus the Y-coordinate of the origin. | [inout]

Since: 0.9.2

### hb_reference_table_func_t ()

    hb_blob_t *
    (*hb_reference_table_func_t) (hb_face_t *face,
                                  hb_tag_t tag,
                                  void *user_data);

Callback function for `hb_face_create_for_tables()`.

#### Parameters

face | an hb_face_t to reference table for |
tag | the tag of the table to reference |
user_data | User data pointer passed by the caller |

#### Returns

A pointer to the `tag` table within `face` .

[transfer full]

Since: 0.9.2

### hb_font_funcs_set_font_h_extents_func ()

    void
    hb_font_funcs_set_font_h_extents_func (hb_font_funcs_t *ffuncs,
                                           hb_font_get_font_h_extents_func_t func,
                                           void *user_data,
                                           hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_font_h_extents_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.1.2

### hb_font_funcs_set_font_v_extents_func ()

    void
    hb_font_funcs_set_font_v_extents_func (hb_font_funcs_t *ffuncs,
                                           hb_font_get_font_v_extents_func_t func,
                                           void *user_data,
                                           hb_destroy_func_t destroy);

Sets the implementation function for hb_font_get_font_v_extents_func_t.

#### Parameters

ffuncs | A font-function structure |
func | The callback function to assign. | [closure user_data][destroy destroy][scope notified]
user_data | Data to pass to `func` |
destroy | The function to call when `user_data` is not needed anymore. | [nullable]

Since: 1.1.2

### hb_font_get_extents_for_direction ()

    void
    hb_font_get_extents_for_direction (hb_font_t *font,
                                       hb_direction_t direction,
                                       hb_font_extents_t *extents);

Fetches the extents for a font in a text segment of the specified direction.

Calls the appropriate direction-specific variant (horizontal or vertical) depending on the value of `direction` .

#### Parameters

font | hb_font_t to work upon |
direction | The direction of the text segment |
extents | The hb_font_extents_t retrieved. | [out]

Since: 1.1.3

### hb_font_get_font_extents_func_t ()

    hb_bool_t
    (*hb_font_get_font_extents_func_t) (hb_font_t *font,
                                        void *font_data,
                                        hb_font_extents_t *extents,
                                        void *user_data);

This method should retrieve the extents for a font.

#### Parameters

font | hb_font_t to work upon |
font_data | `font` user data pointer |
extents | The font extents retrieved. | [out]
user_data | User data pointer passed by the caller |

### hb_font_get_h_extents ()

    hb_bool_t
    hb_font_get_h_extents (hb_font_t *font,
                           hb_font_extents_t *extents);

Fetches the extents for a specified font, for horizontal text segments.

#### Parameters

font | hb_font_t to work upon |
extents | The font extents retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 1.1.3

### hb_font_get_v_extents ()

    hb_bool_t
    hb_font_get_v_extents (hb_font_t *font,
                           hb_font_extents_t *extents);

Fetches the extents for a specified font, for vertical text segments.

#### Parameters

font | hb_font_t to work upon |
extents | The font extents retrieved. | [out]

#### Returns

`true` if data found, `false` otherwise

Since: 1.1.3

## Types and Values

### hb_font_funcs_t

    typedef struct hb_font_funcs_t hb_font_funcs_t;

Data type containing a set of virtual methods used for working on hb_font_t font objects.

HarfBuzz provides a lightweight default function for each of the methods in hb_font_funcs_t. Client programs can implement their own replacements for the individual font functions, as needed, and replace the default by calling the setter for a method.

### hb_font_get_glyph_h_advance_func_t

    typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advance for a specified glyph, in horizontal-direction text segments. Advances must be returned in an hb_position_t output parameter.

### hb_font_get_glyph_h_advances_func_t

    typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advances for a sequence of glyphs, in horizontal-direction text segments.

### hb_font_get_glyph_h_kerning_func_t

    typedef hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the kerning-adjustment value for a glyph-pair in the specified font, for horizontal text segments.

### hb_font_get_glyph_h_origin_func_t

    typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the (X,Y) coordinates (in font units) of the origin for a glyph, for horizontal-direction text segments. Each coordinate must be returned in an hb_position_t output parameter.

### hb_font_get_glyph_v_advance_func_t

    typedef hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advance for a specified glyph, in vertical-direction text segments. Advances must be returned in an hb_position_t output parameter.

### hb_font_get_glyph_v_advances_func_t

    typedef hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the advances for a sequence of glyphs, in vertical-direction text segments.

### hb_font_get_glyph_v_origin_func_t

    typedef hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the (X,Y) coordinates (in font units) of the origin for a glyph, for vertical-direction text segments. Each coordinate must be returned in an hb_position_t output parameter.

### hb_font_t

    typedef struct hb_font_t hb_font_t;

Data type for holding fonts.

### hb_font_get_font_h_extents_func_t

    typedef hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the extents for a font, for horizontal-direction text segments. Extents must be returned in an hb_glyph_extents output parameter.

### hb_font_get_font_v_extents_func_t

    typedef hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;

A virtual method for the hb_font_funcs_t of an hb_font_t object.

This method should retrieve the extents for a font, for vertical-direction text segments. Extents must be returned in an hb_glyph_extents output parameter.

### hb_font_extents_t

    typedef struct {
      hb_position_t ascender;
      hb_position_t descender;
      hb_position_t line_gap;
    } hb_font_extents_t;

Font-wide extent values, measured in font units.

Note that typically `ascender` is positive and `descender` negative, in coordinate systems that grow up.

#### Members

hb_position_t `ascender`; | The height of typographic ascenders. |
hb_position_t `descender`; | The depth of typographic descenders. |
hb_position_t `line_gap`; | The suggested line-spacing gap. |

### hb_glyph_extents_t

    typedef struct {
      hb_position_t x_bearing;
      hb_position_t y_bearing;
      hb_position_t width;
      hb_position_t height;
    } hb_glyph_extents_t;

Glyph extent values, measured in font units.

Note that `height` is negative, in coordinate systems that grow up.

#### Members

hb_position_t `x_bearing`; | Distance from the x-origin to the left extremum of the glyph. |
hb_position_t `y_bearing`; | Distance from the top extremum of the glyph to the y-origin. |
hb_position_t `width`; | Distance from the left extremum of the glyph to the right extremum. |
hb_position_t `height`; | Distance from the top extremum of the glyph to the bottom extremum. |