/**
* 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,
unsigned int 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,
unsigned int 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,
const char *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;
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.
*
* 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;
if (font->x_scale == x_scale && font->y_scale == y_scale)
return;
/**
* hb_font_get_scale:
* @font: #hb_font_t to work upon
* @x_scale: (out): Horizontal scale value
* @y_scale: (out): Vertical scale value
*
* Fetches the horizontal and vertical scale of a font.
*
* Since: 0.9.2
**/
void
hb_font_get_scale (hb_font_t *font,
int *x_scale,
int *y_scale)
{
if (x_scale) *x_scale = font->x_scale;
if (y_scale) *y_scale = font->y_scale;
}
/**
* hb_font_set_ppem:
* @font: #hb_font_t to work upon
* @x_ppem: Horizontal ppem value to assign
* @y_ppem: Vertical ppem value to assign
*
* Sets the horizontal and vertical pixels-per-em (ppem) of a font.
*
* Since: 0.9.2
**/
void
hb_font_set_ppem (hb_font_t *font,
unsigned int x_ppem,
unsigned int y_ppem)
{
if (hb_object_is_immutable (font))
return;
if (font->x_ppem == x_ppem && font->y_ppem == y_ppem)
return;
font->serial++;
font->x_ppem = x_ppem;
font->y_ppem = y_ppem;
}
/**
* hb_font_get_ppem:
* @font: #hb_font_t to work upon
* @x_ppem: (out): Horizontal ppem value
* @y_ppem: (out): Vertical ppem value
*
* Fetches the horizontal and vertical points-per-em (ppem) of a font.
*
* Since: 0.9.2
**/
void
hb_font_get_ppem (hb_font_t *font,
unsigned int *x_ppem,
unsigned int *y_ppem)
{
if (x_ppem) *x_ppem = font->x_ppem;
if (y_ppem) *y_ppem = font->y_ppem;
}
/**
* hb_font_set_ptem:
* @font: #hb_font_t to work upon
* @ptem: font size in points.
*
* Sets the "point size" of a font. Set to zero to unset.
* Used in CoreText to implement optical sizing.
*
* <note>Note: There are 72 points in an inch.</note>
*
* Since: 1.6.0
**/
void
hb_font_set_ptem (hb_font_t *font,
float ptem)
{
if (hb_object_is_immutable (font))
return;
if (font->ptem == ptem)
return;
font->serial++;
font->ptem = ptem;
}
/**
* hb_font_get_ptem:
* @font: #hb_font_t to work upon
*
* Fetches the "point size" of a font. Used in CoreText to
* implement optical sizing.
*
* Return value: Point size. A value of zero means "not set."
*
* Since: 1.6.0
**/
float
hb_font_get_ptem (hb_font_t *font)
{
return font->ptem;
}
/**
* hb_font_set_synthetic_slant:
* @font: #hb_font_t to work upon
* @slant: synthetic slant value.
*
* Sets the "synthetic slant" of a font. By default is zero.
* Synthetic slant is the graphical skew applied to the font
* at rendering time.
*
* HarfBuzz needs to know this value to adjust shaping results,
* metrics, and style values to match the slanted rendering.
*
* <note>Note: The glyph shape fetched via the
* hb_font_get_glyph_shape() is slanted to reflect this value
* as well.</note>
*
* <note>Note: The slant value is a ratio. For example, a
* 20% slant would be represented as a 0.2 value.</note>
*
* Since: 3.3.0
**/
HB_EXTERN void
hb_font_set_synthetic_slant (hb_font_t *font, float slant)
{
if (hb_object_is_immutable (font))
return;
if (font->slant == slant)
return;
font->serial++;
font->slant = slant;
font->mults_changed ();
}
/**
* hb_font_get_synthetic_slant:
* @font: #hb_font_t to work upon
*
* Fetches the "synthetic slant" of a font.
*
* Return value: Synthetic slant. By default is zero.
*
* Since: 3.3.0
**/
HB_EXTERN float
hb_font_get_synthetic_slant (hb_font_t *font)
{
return font->slant;
}
#ifndef HB_NO_VAR
/*
* Variations
*/
/**
* hb_font_set_variations:
* @font: #hb_font_t to work upon
* @variations: (array length=variations_length): Array of variation settings to apply
* @variations_length: Number of variations to apply
*
* Applies a list of font-variation settings to a font.
*
* Note that this overrides all existing variations set on @font.
* Axes not included in @variations will be effectively set to their
* default values.
*
* Since: 1.4.2
*/
void
hb_font_set_variations (hb_font_t *font,
const hb_variation_t *variations,
unsigned int variations_length)
{
if (hb_object_is_immutable (font))
return;
font->serial_coords = ++font->serial;
if (!variations_length)
{
hb_font_set_var_coords_normalized (font, nullptr, 0);
return;
}
for (unsigned int i = 0; i < variations_length; i++)
{
const auto tag = variations[i].tag;
const auto v = variations[i].value;
for (unsigned axis_index = 0; axis_index < coords_length; axis_index++)
if (axes[axis_index].axisTag == tag)
{
design_coords[axis_index] = v;
normalized[axis_index] = fvar.normalize_axis_value (axis_index, v);
}
}
font->face->table.avar->map_coords (normalized, coords_length);
/**
* hb_font_set_var_coords_design:
* @font: #hb_font_t to work upon
* @coords: (array length=coords_length): Array of variation coordinates to apply
* @coords_length: Number of coordinates to apply
*
* Applies a list of variation coordinates (in design-space units)
* to a font.
*
* Note that this overrides all existing variations set on @font.
* Axes not included in @coords will be effectively set to their
* default values.
*
* Since: 1.4.2
*/
void
hb_font_set_var_coords_design (hb_font_t *font,
const float *coords,
unsigned int coords_length)
{
if (hb_object_is_immutable (font))
return;
/**
* hb_font_set_var_named_instance:
* @font: a font.
* @instance_index: named instance index.
*
* Sets design coords of a font from a named instance index.
*
* Since: 2.6.0
*/
void
hb_font_set_var_named_instance (hb_font_t *font,
unsigned instance_index)
{
if (hb_object_is_immutable (font))
return;
font->serial_coords = ++font->serial;
unsigned int coords_length = hb_ot_var_named_instance_get_design_coords (font->face, instance_index, nullptr, nullptr);
/**
* hb_font_set_var_coords_normalized:
* @font: #hb_font_t to work upon
* @coords: (array length=coords_length): Array of variation coordinates to apply
* @coords_length: Number of coordinates to apply
*
* Applies a list of variation coordinates (in normalized units)
* to a font.
*
* Note that this overrides all existing variations set on @font.
* Axes not included in @coords will be effectively set to their
* default values.
*
* <note>Note: Coordinates should be normalized to 2.14.</note>
*
* Since: 1.4.2
*/
void
hb_font_set_var_coords_normalized (hb_font_t *font,
const int *coords, /* 2.14 normalized */
unsigned int coords_length)
{
if (hb_object_is_immutable (font))
return;
/**
* hb_font_get_var_coords_normalized:
* @font: #hb_font_t to work upon
* @length: (out): Number of coordinates retrieved
*
* Fetches the list of normalized variation coordinates currently
* set on a font.
*
* Note that this returned array may only contain values for some
* (or none) of the axes; omitted axes effectively have zero values.
*
* Return value is valid as long as variation coordinates of the font
* are not modified.
*
* Return value: coordinates array
*
* Since: 1.4.2
*/
const int *
hb_font_get_var_coords_normalized (hb_font_t *font,
unsigned int *length)
{
if (length)
*length = font->num_coords;
return font->coords;
}
/**
* hb_font_get_var_coords_design:
* @font: #hb_font_t to work upon
* @length: (out): Number of coordinates retrieved
*
* Fetches the list of variation coordinates (in design-space units) currently
* set on a font.
*
* Note that this returned array may only contain values for some
* (or none) of the axes; omitted axes effectively have their default
* values.
*
* Return value is valid as long as variation coordinates of the font
* are not modified.
*
* Return value: coordinates array
*
* Since: 3.3.0
*/
const float *
hb_font_get_var_coords_design (hb_font_t *font,
unsigned int *length)
{
if (length)
*length = font->num_coords;
/**
* hb_font_funcs_set_glyph_func:
* @ffuncs: The font-functions structure
* @func: (closure user_data) (destroy destroy) (scope notified): callback function
* @user_data: data to pass to @func
* @destroy: (nullable): function to call when @user_data is not needed anymore
*
* Deprecated. Use hb_font_funcs_set_nominal_glyph_func() and
* hb_font_funcs_set_variation_glyph_func() instead.
*
* Since: 0.9.2
* Deprecated: 1.2.3
**/
void
hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
hb_font_get_glyph_func_t func,
void *user_data,
hb_destroy_func_t destroy /* May be NULL. */)
{
if (hb_object_is_immutable (ffuncs))
{
if (destroy)
destroy (user_data);
return;
}
hb_font_get_glyph_trampoline_t *trampoline;
trampoline = trampoline_create (func, user_data, destroy);
if (unlikely (!trampoline))
{
if (destroy)
destroy (user_data);
return;
}
/* Since we pass it to two destroying functions. */
trampoline_reference (&trampoline->closure);
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.