/** * SECTION:hb-font * @title: hb-font * @short_description: Font objects * @include: hb.h * * 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.
**/
/** * hb_font_funcs_reference: (skip) * @ffuncs: The font-functions structure * * Increases the reference count on a font-functions structure. * * Return value: The font-functions structure * * Since: 0.9.2
**/
hb_font_funcs_t *
hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
{ return hb_object_reference (ffuncs);
}
/** * hb_font_funcs_destroy: (skip) * @ffuncs: The font-functions structure * * Decreases the reference count on a font-functions structure. When * the reference count reaches zero, the font-functions structure is * destroyed, freeing all memory. * * Since: 0.9.2
**/ void
hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
{ if (!hb_object_destroy (ffuncs)) return;
if (ffuncs->destroy)
{ #define HB_FONT_FUNC_IMPLEMENT(name) if (ffuncs->destroy->name) \
ffuncs->destroy->name (!ffuncs->user_data ? nullptr : ffuncs->user_data->name);
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS #undef HB_FONT_FUNC_IMPLEMENT
}
/** * hb_font_funcs_set_user_data: (skip) * @ffuncs: The font-functions structure * @key: The user-data key to set * @data: A pointer to the user data set * @destroy: (nullable): A callback to call when @data is not needed anymore * @replace: Whether to replace an existing data with the same key * * Attaches a user-data key/data pair to the specified font-functions structure. * * Return value: %true if success, %false otherwise * * Since: 0.9.2
**/
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 /* May be NULL. */,
hb_bool_t replace)
{ return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
}
/** * hb_font_funcs_get_user_data: (skip) * @ffuncs: The font-functions structure * @key: The user-data key to query * * Fetches the user data associated with the specified key, * attached to the specified font-functions structure. * * Return value: (transfer none): A pointer to the user data * * Since: 0.9.2
**/ void *
hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
hb_user_data_key_t *key)
{ return hb_object_get_user_data (ffuncs, key);
}
/** * hb_font_funcs_make_immutable: * @ffuncs: The font-functions structure * * Makes a font-functions structure immutable. * * Since: 0.9.2
**/ void
hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
{ if (hb_object_is_immutable (ffuncs)) return;
hb_object_make_immutable (ffuncs);
}
/** * hb_font_funcs_is_immutable: * @ffuncs: The font-functions structure * * Tests whether a font-functions structure is immutable. * * Return value: %true if @ffuncs is immutable, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
{ return hb_object_is_immutable (ffuncs);
}
/** * hb_font_get_h_extents: * @font: #hb_font_t to work upon * @extents: (out): The font extents retrieved * * Fetches the extents for a specified font, for horizontal * text segments. * * Return value: %true if data found, %false otherwise * * Since: 1.1.3
**/
hb_bool_t
hb_font_get_h_extents (hb_font_t *font,
hb_font_extents_t *extents)
{ return font->get_font_h_extents (extents);
}
/** * hb_font_get_v_extents: * @font: #hb_font_t to work upon * @extents: (out): The font extents retrieved * * Fetches the extents for a specified font, for vertical * text segments. * * Return value: %true if data found, %false otherwise * * Since: 1.1.3
**/
hb_bool_t
hb_font_get_v_extents (hb_font_t *font,
hb_font_extents_t *extents)
{ return font->get_font_v_extents (extents);
}
/** * hb_font_get_glyph: * @font: #hb_font_t to work upon * @unicode: The Unicode code point to query * @variation_selector: A variation-selector code point * @glyph: (out): The glyph ID retrieved * * 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(). * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph (hb_font_t *font,
hb_codepoint_t unicode,
hb_codepoint_t variation_selector,
hb_codepoint_t *glyph)
{ if (unlikely (variation_selector)) return font->get_variation_glyph (unicode, variation_selector, glyph); return font->get_nominal_glyph (unicode, glyph);
}
/** * hb_font_get_nominal_glyph: * @font: #hb_font_t to work upon * @unicode: The Unicode code point to query * @glyph: (out): The glyph ID retrieved * * 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(). * * Return value: %true if data found, %false otherwise * * Since: 1.2.3
**/
hb_bool_t
hb_font_get_nominal_glyph (hb_font_t *font,
hb_codepoint_t unicode,
hb_codepoint_t *glyph)
{ return font->get_nominal_glyph (unicode, glyph);
}
/** * hb_font_get_nominal_glyphs: * @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: (out): The first glyph ID retrieved * @glyph_stride: The stride between successive glyph IDs * * Fetches the nominal glyph IDs for a sequence of Unicode code points. Glyph * IDs must be returned in a #hb_codepoint_t output parameter. * * Return value: the number of code points processed * * Since: 2.6.3
**/ unsignedint
hb_font_get_nominal_glyphs (hb_font_t *font, unsignedint count, const hb_codepoint_t *first_unicode, unsignedint unicode_stride,
hb_codepoint_t *first_glyph, unsignedint glyph_stride)
{ return font->get_nominal_glyphs (count,
first_unicode, unicode_stride,
first_glyph, glyph_stride);
}
/** * hb_font_get_variation_glyph: * @font: #hb_font_t to work upon * @unicode: The Unicode code point to query * @variation_selector: The variation-selector code point to query * @glyph: (out): The glyph ID retrieved * * Fetches the glyph ID for a Unicode code point when followed by * by the specified variation-selector code point, in the specified * font. * * Return value: %true if data found, %false otherwise * * Since: 1.2.3
**/
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)
{ return font->get_variation_glyph (unicode, variation_selector, glyph);
}
/** * hb_font_get_glyph_h_advance: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * * Fetches the advance for a glyph ID in the specified font, * for horizontal text segments. * * Return value: The advance of @glyph within @font * * Since: 0.9.2
**/
hb_position_t
hb_font_get_glyph_h_advance (hb_font_t *font,
hb_codepoint_t glyph)
{ return font->get_glyph_h_advance (glyph);
}
/** * hb_font_get_glyph_v_advance: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * * Fetches the advance for a glyph ID in the specified font, * for vertical text segments. * * Return value: The advance of @glyph within @font * * Since: 0.9.2
**/
hb_position_t
hb_font_get_glyph_v_advance (hb_font_t *font,
hb_codepoint_t glyph)
{ return font->get_glyph_v_advance (glyph);
}
/** * hb_font_get_glyph_h_advances: * @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: (out): The first advance retrieved * @advance_stride: The stride between successive advances * * Fetches the advances for a sequence of glyph IDs in the specified * font, for horizontal text segments. * * Since: 1.8.6
**/ void
hb_font_get_glyph_h_advances (hb_font_t* font, unsignedint count, const hb_codepoint_t *first_glyph, unsigned glyph_stride,
hb_position_t *first_advance, unsigned advance_stride)
{
font->get_glyph_h_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
} /** * hb_font_get_glyph_v_advances: * @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: (out): The first advance retrieved * @advance_stride: (out): The stride between successive advances * * Fetches the advances for a sequence of glyph IDs in the specified * font, for vertical text segments. * * Since: 1.8.6
**/ void
hb_font_get_glyph_v_advances (hb_font_t* font, unsignedint count, const hb_codepoint_t *first_glyph, unsigned glyph_stride,
hb_position_t *first_advance, unsigned advance_stride)
{
font->get_glyph_v_advances (count, first_glyph, glyph_stride, first_advance, advance_stride);
}
/** * hb_font_get_glyph_h_origin: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @x: (out): The X coordinate of the origin * @y: (out): The Y coordinate of the origin * * Fetches the (X,Y) coordinates of the origin for a glyph ID * in the specified font, for horizontal text segments. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
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)
{ return font->get_glyph_h_origin (glyph, x, y);
}
/** * hb_font_get_glyph_v_origin: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @x: (out): The X coordinate of the origin * @y: (out): The Y coordinate of the origin * * Fetches the (X,Y) coordinates of the origin for a glyph ID * in the specified font, for vertical text segments. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
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)
{ return font->get_glyph_v_origin (glyph, x, y);
}
/** * hb_font_get_glyph_h_kerning: * @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 * * Fetches the kerning-adjustment value for a glyph-pair in * the specified font, for horizontal text segments. * * <note>It handles legacy kerning only (as returned by the corresponding * #hb_font_funcs_t function).</note> * * Return value: The kerning adjustment value * * Since: 0.9.2
**/
hb_position_t
hb_font_get_glyph_h_kerning (hb_font_t *font,
hb_codepoint_t left_glyph,
hb_codepoint_t right_glyph)
{ return font->get_glyph_h_kerning (left_glyph, right_glyph);
}
#ifndef HB_DISABLE_DEPRECATED /** * hb_font_get_glyph_v_kerning: * @font: #hb_font_t to work upon * @top_glyph: The glyph ID of the top glyph in the glyph pair * @bottom_glyph: The glyph ID of the bottom glyph in the glyph pair * * Fetches the kerning-adjustment value for a glyph-pair in * the specified font, for vertical text segments. * * <note>It handles legacy kerning only (as returned by the corresponding * #hb_font_funcs_t function).</note> * * Return value: The kerning adjustment value * * Since: 0.9.2 * Deprecated: 2.0.0
**/
hb_position_t
hb_font_get_glyph_v_kerning (hb_font_t *font,
hb_codepoint_t top_glyph,
hb_codepoint_t bottom_glyph)
{ return font->get_glyph_v_kerning (top_glyph, bottom_glyph);
} #endif
/** * hb_font_get_glyph_extents: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @extents: (out): The #hb_glyph_extents_t retrieved * * Fetches the #hb_glyph_extents_t data for a glyph ID * in the specified font. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph_extents (hb_font_t *font,
hb_codepoint_t glyph,
hb_glyph_extents_t *extents)
{ return font->get_glyph_extents (glyph, extents);
}
/** * hb_font_get_glyph_contour_point: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @point_index: The contour-point index to query * @x: (out): The X value retrieved for the contour point * @y: (out): The Y value retrieved for the contour point * * Fetches the (x,y) coordinates of a specified contour-point index * in the specified glyph, within the specified font. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph_contour_point (hb_font_t *font,
hb_codepoint_t glyph, unsignedint point_index,
hb_position_t *x,
hb_position_t *y)
{ return font->get_glyph_contour_point (glyph, point_index, x, y);
}
/** * hb_font_get_glyph_name: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @name: (out) (array length=size): Name string retrieved for the glyph ID * @size: Length of the glyph-name string retrieved * * Fetches the glyph-name string for a glyph ID in the specified @font. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph_name (hb_font_t *font,
hb_codepoint_t glyph, char *name, unsignedint size)
{ return font->get_glyph_name (glyph, name, size);
}
/** * hb_font_get_glyph_from_name: * @font: #hb_font_t to work upon * @name: (array length=len): The name string to query * @len: The length of the name queried * @glyph: (out): The glyph ID retrieved * * Fetches the glyph ID that corresponds to a name string in the specified @font. * * <note>Note: @len == -1 means the name string is null-terminated.</note> * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph_from_name (hb_font_t *font, constchar *name, int len, /* -1 means nul-terminated */
hb_codepoint_t *glyph)
{ return font->get_glyph_from_name (name, len, glyph);
}
/** * hb_font_get_glyph_shape: * @font: #hb_font_t to work upon * @glyph: : The glyph ID * @dfuncs: #hb_draw_funcs_t to draw to * @draw_data: User data to pass to draw callbacks * * Fetches the glyph shape that corresponds to a glyph in the specified @font. * The shape is returned by way of calls to the callsbacks of the @dfuncs * objects, with @draw_data passed to them. * * Since: 4.0.0
**/ void
hb_font_get_glyph_shape (hb_font_t *font,
hb_codepoint_t glyph,
hb_draw_funcs_t *dfuncs, void *draw_data)
{
font->get_glyph_shape (glyph, dfuncs, draw_data);
}
/* A bit higher-level, and with fallback */
/** * hb_font_get_extents_for_direction: * @font: #hb_font_t to work upon * @direction: The direction of the text segment * @extents: (out): The #hb_font_extents_t retrieved * * 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. * * Since: 1.1.3
**/ void
hb_font_get_extents_for_direction (hb_font_t *font,
hb_direction_t direction,
hb_font_extents_t *extents)
{
font->get_extents_for_direction (direction, extents);
} /** * hb_font_get_glyph_advance_for_direction: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @direction: The direction of the text segment * @x: (out): The horizontal advance retrieved * @y: (out): The vertical advance retrieved * * 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. * * Since: 0.9.2
**/ 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)
{
font->get_glyph_advance_for_direction (glyph, direction, x, y);
} /** * hb_font_get_glyph_advances_for_direction: * @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: (out): The first advance retrieved * @advance_stride: (out): The stride between successive advances * * 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. * * Since: 1.8.6
**/
HB_EXTERN void
hb_font_get_glyph_advances_for_direction (hb_font_t* font,
hb_direction_t direction, unsignedint count, const hb_codepoint_t *first_glyph, unsigned glyph_stride,
hb_position_t *first_advance, unsigned advance_stride)
{
font->get_glyph_advances_for_direction (direction, count, first_glyph, glyph_stride, first_advance, advance_stride);
}
/** * hb_font_get_glyph_origin_for_direction: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @direction: The direction of the text segment * @x: (out): The X coordinate retrieved for the origin * @y: (out): The Y coordinate retrieved for the origin * * 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. * * Since: 0.9.2
**/ 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)
{ return font->get_glyph_origin_for_direction (glyph, direction, x, y);
}
/** * hb_font_add_glyph_origin_for_direction: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @direction: The direction of the text segment * @x: (inout): Input = The original X coordinate * Output = The X coordinate plus the X-coordinate of the origin * @y: (inout): Input = The original Y coordinate * Output = The Y coordinate plus the Y-coordinate of the origin * * 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. * * Since: 0.9.2
**/ 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)
{ return font->add_glyph_origin_for_direction (glyph, direction, x, y);
}
/** * hb_font_subtract_glyph_origin_for_direction: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @direction: The direction of the text segment * @x: (inout): Input = The original X coordinate * Output = The X coordinate minus the X-coordinate of the origin * @y: (inout): Input = The original Y coordinate * Output = The Y coordinate minus the Y-coordinate of the origin * * 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. * * Since: 0.9.2
**/ 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)
{ return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
}
/** * hb_font_get_glyph_kerning_for_direction: * @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: (out): The horizontal kerning-adjustment value retrieved * @y: (out): The vertical kerning-adjustment value retrieved * * 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. * * Since: 0.9.2
**/ 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)
{ return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direction, x, y);
}
/** * hb_font_get_glyph_extents_for_origin: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @direction: The direction of the text segment * @extents: (out): The #hb_glyph_extents_t retrieved * * 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. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
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)
{ return font->get_glyph_extents_for_origin (glyph, direction, extents);
}
/** * hb_font_get_glyph_contour_point_for_origin: * @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: (out): The X value retrieved for the contour point * @y: (out): The Y value retrieved for the contour point * * 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. * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
hb_codepoint_t glyph, unsignedint point_index,
hb_direction_t direction,
hb_position_t *x,
hb_position_t *y)
{ return font->get_glyph_contour_point_for_origin (glyph, point_index, direction, x, y);
}
/** * hb_font_glyph_to_string: * @font: #hb_font_t to work upon * @glyph: The glyph ID to query * @s: (out) (array length=size): The string containing the glyph name * @size: Length of string @s * * 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. * * Since: 0.9.2
**/ void
hb_font_glyph_to_string (hb_font_t *font,
hb_codepoint_t glyph, char *s, unsignedint size)
{
font->glyph_to_string (glyph, s, size);
}
/** * hb_font_glyph_from_string: * @font: #hb_font_t to work upon * @s: (array length=len) (element-type uint8_t): string to query * @len: The length of the string @s * @glyph: (out): The glyph ID corresponding to the string requested * * Fetches the glyph ID from @font that matches the specified string. * Strings of the format `gidDDD` or `uniUUUU` are parsed automatically. * * <note>Note: @len == -1 means the string is null-terminated.</note> * * Return value: %true if data found, %false otherwise * * Since: 0.9.2
**/
hb_bool_t
hb_font_glyph_from_string (hb_font_t *font, constchar *s, int len,
hb_codepoint_t *glyph)
{ return font->glyph_from_string (s, len, glyph);
}
/** * hb_font_create: * @face: a face. * * Constructs a new font object from the specified face. * * <note>Note: If @face's index value (as passed to hb_face_create() * has non-zero top 16-bits, those bits minus one are passed to * hb_font_set_var_named_instance(), effectively loading a named-instance * of a variable font, instead of the default-instance. This allows * specifying which named-instance to load by default when creating the * face.</note> * * Return value: (transfer full): The new font object * * Since: 0.9.2
**/
hb_font_t *
hb_font_create (hb_face_t *face)
{
hb_font_t *font = _hb_font_create (face);
font->mults_changed (); // Easiest to call this to drop cached data
}
/** * hb_font_create_sub_font: * @parent: The parent font object * * Constructs a sub-font font object from the specified @parent font, * replicating the parent's properties. * * Return value: (transfer full): The new sub-font font object * * Since: 0.9.2
**/
hb_font_t *
hb_font_create_sub_font (hb_font_t *parent)
{ if (unlikely (!parent))
parent = hb_font_get_empty ();
hb_font_t *font = _hb_font_create (parent->face);
if (unlikely (hb_object_is_immutable (font))) return font;
/**
* hb_font_get_empty:
*
* Fetches the empty font object.
*
* Return value: (transfer full): The empty font object
*
* Since: 0.9.2
**/
hb_font_t *
hb_font_get_empty ()
{
return const_cast<hb_font_t *> (&Null (hb_font_t));
}
/**
* hb_font_reference: (skip)
* @font: #hb_font_t to work upon
*
* Increases the reference count on the given font object.
*
* Return value: (transfer full): The @font object
*
* Since: 0.9.2
**/
hb_font_t *
hb_font_reference (hb_font_t *font)
{
return hb_object_reference (font);
}
/**
* hb_font_destroy: (skip)
* @font: #hb_font_t to work upon
*
* Decreases the reference count on the given font object. When the
* reference count reaches zero, the font is destroyed,
* freeing all memory.
*
* Since: 0.9.2
**/
void
hb_font_destroy (hb_font_t *font)
{
if (!hb_object_destroy (font)) return;
font->data.fini ();
if (font->destroy)
font->destroy (font->user_data);
/**
* hb_font_set_user_data: (skip)
* @font: #hb_font_t to work upon
* @key: The user-data key
* @data: A pointer to the user data
* @destroy: (nullable): A callback to call when @data is not needed anymore
* @replace: Whether to replace an existing data with the same key
*
* Attaches a user-data key/data pair to the specified font object.
*
* Return value: %true if success, %false otherwise
*
* Since: 0.9.2
**/
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 /* May be NULL. */,
hb_bool_t replace)
{
if (!hb_object_is_immutable (font))
font->serial++;
/**
* hb_font_get_user_data: (skip)
* @font: #hb_font_t to work upon
* @key: The user-data key to query
*
* Fetches the user-data object associated with the specified key,
* attached to the specified font object.
*
* Return value: (transfer none): Pointer to the user data
*
* Since: 0.9.2
**/
void *
hb_font_get_user_data (hb_font_t *font,
hb_user_data_key_t *key)
{
return hb_object_get_user_data (font, key);
}
/**
* hb_font_make_immutable:
* @font: #hb_font_t to work upon
*
* Makes @font immutable.
*
* Since: 0.9.2
**/
void
hb_font_make_immutable (hb_font_t *font)
{
if (hb_object_is_immutable (font))
return;
if (font->parent)
hb_font_make_immutable (font->parent);
hb_object_make_immutable (font);
}
/**
* hb_font_is_immutable:
* @font: #hb_font_t to work upon
*
* Tests whether a font object is immutable.
*
* Return value: %true if @font is immutable, %false otherwise
*
* Since: 0.9.2
**/
hb_bool_t
hb_font_is_immutable (hb_font_t *font)
{
return hb_object_is_immutable (font);
}
/**
* hb_font_get_serial:
* @font: #hb_font_t to work upon
*
* Returns the internal serial number of the font. The serial
* number is increased every time a setting on the font is
* changed, using a setter function.
*
* Return value: serial number
*
* Since: 4.4.0.
**/
unsigned int
hb_font_get_serial (hb_font_t *font)
{
return font->serial;
}
/**
* hb_font_changed:
* @font: #hb_font_t to work upon
*
* Notifies the @font that underlying font data has changed.
* This has the effect of increasing the serial as returned
* by hb_font_get_serial(), which invalidates internal caches.
*
* Since: 4.4.0.
**/
void
hb_font_changed (hb_font_t *font)
{
if (hb_object_is_immutable (font))
return;
font->serial++;
font->mults_changed ();
}
/**
* hb_font_set_parent:
* @font: #hb_font_t to work upon
* @parent: The parent font object to assign
*
* Sets the parent font of @font.
*
* Since: 1.0.5
**/
void
hb_font_set_parent (hb_font_t *font,
hb_font_t *parent)
{
if (hb_object_is_immutable (font))
return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.