/** * 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. * * The default font functions are implemented in terms of the * #hb_font_funcs_t methods of the parent font object. This allows * client programs to override only the methods they need to, and * otherwise inherit the parent font's implementation, if any.
**/
/** * 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(get_,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 (const 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. Stops at the * first unsupported glyph ID. * * 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. * * According to the OpenType specification, glyph names are limited to 63 * characters and can only contain (a subset of) ASCII. * * 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);
}
#ifndef HB_DISABLE_DEPRECATED /** * 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 callbacks of the @dfuncs * objects, with @draw_data passed to them. * * Since: 4.0.0 * Deprecated: 7.0.0: Use hb_font_draw_glyph() instead
*/ void
hb_font_get_glyph_shape (hb_font_t *font,
hb_codepoint_t glyph,
hb_draw_funcs_t *dfuncs, void *draw_data)
{
hb_font_draw_glyph (font, glyph, dfuncs, draw_data);
} #endif
/** * hb_font_draw_glyph: * @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 * * Draws the outline that corresponds to a glyph in the specified @font. * * The outline is returned by way of calls to the callbacks of the @dfuncs * objects, with @draw_data passed to them. * * Since: 7.0.0
**/ void
hb_font_draw_glyph (hb_font_t *font,
hb_codepoint_t glyph,
hb_draw_funcs_t *dfuncs, void *draw_data)
{
font->draw_glyph (glyph, dfuncs, draw_data);
}
/** * hb_font_paint_glyph: * @font: #hb_font_t to work upon * @glyph: The glyph ID * @pfuncs: #hb_paint_funcs_t to paint with * @paint_data: User data to pass to paint callbacks * @palette_index: The index of the font's color palette to use * @foreground: The foreground color, unpremultipled * * Paints the glyph. * * The painting instructions are returned by way of calls to * the callbacks of the @funcs object, with @paint_data passed * to them. * * If the font has color palettes (see hb_ot_color_has_palettes()), * then @palette_index selects the palette to use. If the font only * has one palette, this will be 0. * * Since: 7.0.0
*/ void
hb_font_paint_glyph (hb_font_t *font,
hb_codepoint_t glyph,
hb_paint_funcs_t *pfuncs, void *paint_data, unsignedint palette_index,
hb_color_t foreground)
{
font->paint_glyph (glyph, pfuncs, paint_data, palette_index, foreground);
}
/* 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. * * According to the OpenType specification, glyph names are limited to 63 * characters and can only contain (a subset of) ASCII. * * 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 ()
{ returnconst_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 (const 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
**/ unsignedint
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;
if (parent == font->parent) return;
font->serial++;
if (!parent)
parent = hb_font_get_empty ();
hb_font_t *old = font->parent;
font->parent = hb_font_reference (parent);
hb_font_destroy (old);
}
/** * hb_font_get_parent: * @font: #hb_font_t to work upon * * Fetches the parent font of @font. * * Return value: (transfer none): The parent font object * * Since: 0.9.2
**/
hb_font_t *
hb_font_get_parent (hb_font_t *font)
{ return font->parent;
}
/** * hb_font_set_face: * @font: #hb_font_t to work upon * @face: The #hb_face_t to assign * * Sets @face as the font-face value of @font. * * Since: 1.4.3
**/ void
hb_font_set_face (hb_font_t *font,
hb_face_t *face)
{ if (hb_object_is_immutable (font)) return;
if (face == font->face) return;
font->serial++;
if (unlikely (!face))
face = hb_face_get_empty ();
/** * hb_font_get_face: * @font: #hb_font_t to work upon * * Fetches the face associated with the specified font object. * * Return value: (transfer none): The #hb_face_t value * * Since: 0.9.2
**/
hb_face_t *
hb_font_get_face (hb_font_t *font)
{ return font->face;
}
/** * hb_font_set_funcs: * @font: #hb_font_t to work upon * @klass: (closure font_data) (destroy destroy) (scope notified): The font-functions structure. * @font_data: Data to attach to @font * @destroy: (nullable): The function to call when @font_data is not needed anymore * * Replaces the font-functions structure attached to a font, updating * the font's user-data with @font-data and the @destroy callback. * * Since: 0.9.2
**/ void
hb_font_set_funcs (hb_font_t *font,
hb_font_funcs_t *klass, void *font_data,
hb_destroy_func_t destroy /* May be NULL. */)
{ if (hb_object_is_immutable (font))
{ if (destroy)
destroy (font_data); return;
}
font->serial++;
if (font->destroy)
font->destroy (font->user_data);
/** * hb_font_set_funcs_data: * @font: #hb_font_t to work upon * @font_data: (destroy destroy) (scope notified): Data to attach to @font * @destroy: (nullable): The function to call when @font_data is not needed anymore * * Replaces the user data attached to a font, updating the font's * @destroy callback. * * Since: 0.9.2
**/ void
hb_font_set_funcs_data (hb_font_t *font, void *font_data,
hb_destroy_func_t destroy /* May be NULL. */)
{ /* Destroy user_data? */ if (hb_object_is_immutable (font))
{ if (destroy)
destroy (font_data); return;
}
font->serial++;
if (font->destroy)
font->destroy (font->user_data);
/** * hb_font_set_scale: * @font: #hb_font_t to work upon * @x_scale: Horizontal scale value to assign * @y_scale: Vertical scale value to assign * * Sets the horizontal and vertical scale of a font. * * The font scale is a number related to, but not the same as, * font size. Typically the client establishes a scale factor * to be used between the two. For example, 64, or 256, which * would be the fractional-precision part of the font scale. * This is necessary because #hb_position_t values are integer * types and you need to leave room for fractional values * in there. * * For example, to set the font size to 20, with 64 * levels of fractional precision you would call * `hb_font_set_scale(font, 20 * 64, 20 * 64)`. * * In the example above, even what font size 20 means is up to * you. It might be 20 pixels, or 20 points, or 20 millimeters. * HarfBuzz does not care about that. You can set the point * size of the font using hb_font_set_ptem(), and the pixel * size using hb_font_set_ppem(). * * The choice of scale is yours but needs to be consistent between * what you set here, and what you expect out of #hb_position_t * as well has draw / paint API output values. * * Fonts default to a scale equal to the UPEM value of their face. * A font with this setting is sometimes called an "unscaled" font. * * Since: 0.9.2
**/ void
hb_font_set_scale (hb_font_t *font, int x_scale, int y_scale)
{ if (hb_object_is_immutable (font)) return;
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5
¤ Dauer der Verarbeitung: 0.27 Sekunden
(vorverarbeitet)
¤
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 und die Messung sind noch experimentell.