| Index: third_party/harfbuzz-ng/src/hb-font.cc
|
| diff --git a/third_party/harfbuzz-ng/src/hb-font.cc b/third_party/harfbuzz-ng/src/hb-font.cc
|
| index b59fdebaea782af48fefda154d4178be652aa076..855864377e7f0fbb13a992376e683c146aa4d8ce 100644
|
| --- a/third_party/harfbuzz-ng/src/hb-font.cc
|
| +++ b/third_party/harfbuzz-ng/src/hb-font.cc
|
| @@ -41,7 +41,6 @@
|
| #include <string.h>
|
|
|
|
|
| -
|
| /*
|
| * hb_font_funcs_t
|
| */
|
| @@ -231,6 +230,15 @@ static const hb_font_funcs_t _hb_font_funcs_nil = {
|
| };
|
|
|
|
|
| +/**
|
| + * hb_font_funcs_create: (Xconstructor)
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_funcs_t *
|
| hb_font_funcs_create (void)
|
| {
|
| @@ -244,18 +252,45 @@ hb_font_funcs_create (void)
|
| return ffuncs;
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_get_empty:
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_funcs_t *
|
| hb_font_funcs_get_empty (void)
|
| {
|
| return const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil);
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_reference: (skip)
|
| + * @ffuncs: font functions.
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_funcs_t *
|
| hb_font_funcs_reference (hb_font_funcs_t *ffuncs)
|
| {
|
| return hb_object_reference (ffuncs);
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_destroy: (skip)
|
| + * @ffuncs: font functions.
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
|
| {
|
| @@ -269,6 +304,20 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
|
| free (ffuncs);
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_set_user_data: (skip)
|
| + * @ffuncs: font functions.
|
| + * @key:
|
| + * @data:
|
| + * @destroy:
|
| + * @replace:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
|
| hb_user_data_key_t *key,
|
| @@ -279,6 +328,17 @@ hb_font_funcs_set_user_data (hb_font_funcs_t *ffuncs,
|
| return hb_object_set_user_data (ffuncs, key, data, destroy, replace);
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_get_user_data: (skip)
|
| + * @ffuncs: font functions.
|
| + * @key:
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer none):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void *
|
| hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
|
| hb_user_data_key_t *key)
|
| @@ -287,6 +347,14 @@ hb_font_funcs_get_user_data (hb_font_funcs_t *ffuncs,
|
| }
|
|
|
|
|
| +/**
|
| + * hb_font_funcs_make_immutable:
|
| + * @ffuncs: font functions.
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
|
| {
|
| @@ -296,6 +364,16 @@ hb_font_funcs_make_immutable (hb_font_funcs_t *ffuncs)
|
| ffuncs->immutable = true;
|
| }
|
|
|
| +/**
|
| + * hb_font_funcs_is_immutable:
|
| + * @ffuncs: font functions.
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_funcs_is_immutable (hb_font_funcs_t *ffuncs)
|
| {
|
| @@ -337,6 +415,19 @@ HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
|
|
|
| /* Public getters */
|
|
|
| +/**
|
| + * hb_font_get_glyph:
|
| + * @font: a font.
|
| + * @unicode:
|
| + * @variation_selector:
|
| + * @glyph: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph (hb_font_t *font,
|
| hb_codepoint_t unicode, hb_codepoint_t variation_selector,
|
| @@ -345,6 +436,17 @@ hb_font_get_glyph (hb_font_t *font,
|
| return font->get_glyph (unicode, variation_selector, glyph);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_h_advance:
|
| + * @font: a font.
|
| + * @glyph:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_position_t
|
| hb_font_get_glyph_h_advance (hb_font_t *font,
|
| hb_codepoint_t glyph)
|
| @@ -352,6 +454,17 @@ hb_font_get_glyph_h_advance (hb_font_t *font,
|
| return font->get_glyph_h_advance (glyph);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_v_advance:
|
| + * @font: a font.
|
| + * @glyph:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_position_t
|
| hb_font_get_glyph_v_advance (hb_font_t *font,
|
| hb_codepoint_t glyph)
|
| @@ -359,6 +472,19 @@ hb_font_get_glyph_v_advance (hb_font_t *font,
|
| return font->get_glyph_v_advance (glyph);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_h_origin:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_h_origin (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -367,6 +493,19 @@ hb_font_get_glyph_h_origin (hb_font_t *font,
|
| return font->get_glyph_h_origin (glyph, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_v_origin:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_v_origin (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -375,6 +514,18 @@ hb_font_get_glyph_v_origin (hb_font_t *font,
|
| return font->get_glyph_v_origin (glyph, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_h_kerning:
|
| + * @font: a font.
|
| + * @left_glyph:
|
| + * @right_glyph:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_position_t
|
| hb_font_get_glyph_h_kerning (hb_font_t *font,
|
| hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
|
| @@ -382,13 +533,37 @@ hb_font_get_glyph_h_kerning (hb_font_t *font,
|
| return font->get_glyph_h_kerning (left_glyph, right_glyph);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_v_kerning:
|
| + * @font: a font.
|
| + * @top_glyph:
|
| + * @bottom_glyph:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_position_t
|
| hb_font_get_glyph_v_kerning (hb_font_t *font,
|
| - hb_codepoint_t left_glyph, hb_codepoint_t right_glyph)
|
| + hb_codepoint_t top_glyph, hb_codepoint_t bottom_glyph)
|
| {
|
| - return font->get_glyph_v_kerning (left_glyph, right_glyph);
|
| + return font->get_glyph_v_kerning (top_glyph, bottom_glyph);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_extents:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @extents: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_extents (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -397,6 +572,20 @@ hb_font_get_glyph_extents (hb_font_t *font,
|
| return font->get_glyph_extents (glyph, extents);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_contour_point:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @point_index:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_contour_point (hb_font_t *font,
|
| hb_codepoint_t glyph, unsigned int point_index,
|
| @@ -405,6 +594,19 @@ hb_font_get_glyph_contour_point (hb_font_t *font,
|
| return font->get_glyph_contour_point (glyph, point_index, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_name:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @name: (array length=size):
|
| + * @size:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_name (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -413,6 +615,19 @@ hb_font_get_glyph_name (hb_font_t *font,
|
| return font->get_glyph_name (glyph, name, size);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_from_name:
|
| + * @font: a font.
|
| + * @name: (array length=len):
|
| + * @len:
|
| + * @glyph: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_from_name (hb_font_t *font,
|
| const char *name, int len, /* -1 means nul-terminated */
|
| @@ -424,6 +639,18 @@ hb_font_get_glyph_from_name (hb_font_t *font,
|
|
|
| /* A bit higher-level, and with fallback */
|
|
|
| +/**
|
| + * hb_font_get_glyph_advance_for_direction:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_get_glyph_advance_for_direction (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -433,6 +660,18 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
|
| return font->get_glyph_advance_for_direction (glyph, direction, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_origin_for_direction:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_get_glyph_origin_for_direction (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -442,6 +681,18 @@ hb_font_get_glyph_origin_for_direction (hb_font_t *font,
|
| return font->get_glyph_origin_for_direction (glyph, direction, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_add_glyph_origin_for_direction:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_add_glyph_origin_for_direction (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -451,6 +702,18 @@ hb_font_add_glyph_origin_for_direction (hb_font_t *font,
|
| return font->add_glyph_origin_for_direction (glyph, direction, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_subtract_glyph_origin_for_direction:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -460,6 +723,19 @@ hb_font_subtract_glyph_origin_for_direction (hb_font_t *font,
|
| return font->subtract_glyph_origin_for_direction (glyph, direction, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_kerning_for_direction:
|
| + * @font: a font.
|
| + * @first_glyph:
|
| + * @second_glyph:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
|
| hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
|
| @@ -469,6 +745,19 @@ hb_font_get_glyph_kerning_for_direction (hb_font_t *font,
|
| return font->get_glyph_kerning_for_direction (first_glyph, second_glyph, direction, x, y);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_extents_for_origin:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @direction:
|
| + * @extents: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_extents_for_origin (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -478,6 +767,21 @@ hb_font_get_glyph_extents_for_origin (hb_font_t *font,
|
| return font->get_glyph_extents_for_origin (glyph, direction, extents);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_glyph_contour_point_for_origin:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @point_index:
|
| + * @direction:
|
| + * @x: (out):
|
| + * @y: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
|
| hb_codepoint_t glyph, unsigned int point_index,
|
| @@ -488,6 +792,17 @@ hb_font_get_glyph_contour_point_for_origin (hb_font_t *font,
|
| }
|
|
|
| /* Generates gidDDD if glyph has no name. */
|
| +/**
|
| + * hb_font_glyph_to_string:
|
| + * @font: a font.
|
| + * @glyph:
|
| + * @s: (array length=size):
|
| + * @size:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_glyph_to_string (hb_font_t *font,
|
| hb_codepoint_t glyph,
|
| @@ -497,6 +812,19 @@ hb_font_glyph_to_string (hb_font_t *font,
|
| }
|
|
|
| /* Parses gidDDD and uniUUUU strings automatically. */
|
| +/**
|
| + * hb_font_glyph_from_string:
|
| + * @font: a font.
|
| + * @s: (array length=len):
|
| + * @len:
|
| + * @glyph: (out):
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_glyph_from_string (hb_font_t *font,
|
| const char *s, int len, /* -1 means nul-terminated */
|
| @@ -507,277 +835,19 @@ hb_font_glyph_from_string (hb_font_t *font,
|
|
|
|
|
| /*
|
| - * hb_face_t
|
| - */
|
| -
|
| -static const hb_face_t _hb_face_nil = {
|
| - HB_OBJECT_HEADER_STATIC,
|
| -
|
| - true, /* immutable */
|
| -
|
| - NULL, /* reference_table_func */
|
| - NULL, /* user_data */
|
| - NULL, /* destroy */
|
| -
|
| - 0, /* index */
|
| - 1000, /* upem */
|
| - 0, /* num_glyphs */
|
| -
|
| - {
|
| -#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
|
| -#include "hb-shaper-list.hh"
|
| -#undef HB_SHAPER_IMPLEMENT
|
| - },
|
| -
|
| - NULL, /* shape_plans */
|
| -};
|
| -
|
| -
|
| -hb_face_t *
|
| -hb_face_create_for_tables (hb_reference_table_func_t reference_table_func,
|
| - void *user_data,
|
| - hb_destroy_func_t destroy)
|
| -{
|
| - hb_face_t *face;
|
| -
|
| - if (!reference_table_func || !(face = hb_object_create<hb_face_t> ())) {
|
| - if (destroy)
|
| - destroy (user_data);
|
| - return hb_face_get_empty ();
|
| - }
|
| -
|
| - face->reference_table_func = reference_table_func;
|
| - face->user_data = user_data;
|
| - face->destroy = destroy;
|
| -
|
| - face->upem = 0;
|
| - face->num_glyphs = (unsigned int) -1;
|
| -
|
| - return face;
|
| -}
|
| -
|
| -
|
| -typedef struct hb_face_for_data_closure_t {
|
| - hb_blob_t *blob;
|
| - unsigned int index;
|
| -} hb_face_for_data_closure_t;
|
| -
|
| -static hb_face_for_data_closure_t *
|
| -_hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
|
| -{
|
| - hb_face_for_data_closure_t *closure;
|
| -
|
| - closure = (hb_face_for_data_closure_t *) malloc (sizeof (hb_face_for_data_closure_t));
|
| - if (unlikely (!closure))
|
| - return NULL;
|
| -
|
| - closure->blob = blob;
|
| - closure->index = index;
|
| -
|
| - return closure;
|
| -}
|
| -
|
| -static void
|
| -_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
|
| -{
|
| - hb_blob_destroy (closure->blob);
|
| - free (closure);
|
| -}
|
| -
|
| -static hb_blob_t *
|
| -_hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
|
| -{
|
| - hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) user_data;
|
| -
|
| - if (tag == HB_TAG_NONE)
|
| - return hb_blob_reference (data->blob);
|
| -
|
| - const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
|
| - const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
|
| -
|
| - const OT::OpenTypeTable &table = ot_face.get_table_by_tag (tag);
|
| -
|
| - hb_blob_t *blob = hb_blob_create_sub_blob (data->blob, table.offset, table.length);
|
| -
|
| - return blob;
|
| -}
|
| -
|
| -hb_face_t *
|
| -hb_face_create (hb_blob_t *blob,
|
| - unsigned int index)
|
| -{
|
| - hb_face_t *face;
|
| -
|
| - if (unlikely (!blob || !hb_blob_get_length (blob)))
|
| - return hb_face_get_empty ();
|
| -
|
| - hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
|
| -
|
| - if (unlikely (!closure))
|
| - return hb_face_get_empty ();
|
| -
|
| - face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
|
| - closure,
|
| - (hb_destroy_func_t) _hb_face_for_data_closure_destroy);
|
| -
|
| - hb_face_set_index (face, index);
|
| -
|
| - return face;
|
| -}
|
| -
|
| -hb_face_t *
|
| -hb_face_get_empty (void)
|
| -{
|
| - return const_cast<hb_face_t *> (&_hb_face_nil);
|
| -}
|
| -
|
| -
|
| -hb_face_t *
|
| -hb_face_reference (hb_face_t *face)
|
| -{
|
| - return hb_object_reference (face);
|
| -}
|
| -
|
| -void
|
| -hb_face_destroy (hb_face_t *face)
|
| -{
|
| - if (!hb_object_destroy (face)) return;
|
| -
|
| - for (hb_face_t::plan_node_t *node = face->shape_plans; node; )
|
| - {
|
| - hb_face_t::plan_node_t *next = node->next;
|
| - hb_shape_plan_destroy (node->shape_plan);
|
| - free (node);
|
| - node = next;
|
| - }
|
| -
|
| -#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_DESTROY(shaper, face);
|
| -#include "hb-shaper-list.hh"
|
| -#undef HB_SHAPER_IMPLEMENT
|
| -
|
| - if (face->destroy)
|
| - face->destroy (face->user_data);
|
| -
|
| - free (face);
|
| -}
|
| -
|
| -hb_bool_t
|
| -hb_face_set_user_data (hb_face_t *face,
|
| - hb_user_data_key_t *key,
|
| - void * data,
|
| - hb_destroy_func_t destroy,
|
| - hb_bool_t replace)
|
| -{
|
| - return hb_object_set_user_data (face, key, data, destroy, replace);
|
| -}
|
| -
|
| -void *
|
| -hb_face_get_user_data (hb_face_t *face,
|
| - hb_user_data_key_t *key)
|
| -{
|
| - return hb_object_get_user_data (face, key);
|
| -}
|
| -
|
| -void
|
| -hb_face_make_immutable (hb_face_t *face)
|
| -{
|
| - if (hb_object_is_inert (face))
|
| - return;
|
| -
|
| - face->immutable = true;
|
| -}
|
| -
|
| -hb_bool_t
|
| -hb_face_is_immutable (hb_face_t *face)
|
| -{
|
| - return face->immutable;
|
| -}
|
| -
|
| -
|
| -hb_blob_t *
|
| -hb_face_reference_table (hb_face_t *face,
|
| - hb_tag_t tag)
|
| -{
|
| - return face->reference_table (tag);
|
| -}
|
| -
|
| -hb_blob_t *
|
| -hb_face_reference_blob (hb_face_t *face)
|
| -{
|
| - return face->reference_table (HB_TAG_NONE);
|
| -}
|
| -
|
| -void
|
| -hb_face_set_index (hb_face_t *face,
|
| - unsigned int index)
|
| -{
|
| - if (hb_object_is_inert (face))
|
| - return;
|
| -
|
| - face->index = index;
|
| -}
|
| -
|
| -unsigned int
|
| -hb_face_get_index (hb_face_t *face)
|
| -{
|
| - return face->index;
|
| -}
|
| -
|
| -void
|
| -hb_face_set_upem (hb_face_t *face,
|
| - unsigned int upem)
|
| -{
|
| - if (hb_object_is_inert (face))
|
| - return;
|
| -
|
| - face->upem = upem;
|
| -}
|
| -
|
| -unsigned int
|
| -hb_face_get_upem (hb_face_t *face)
|
| -{
|
| - return face->get_upem ();
|
| -}
|
| -
|
| -void
|
| -hb_face_t::load_upem (void) const
|
| -{
|
| - hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
|
| - const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
|
| - upem = head_table->get_upem ();
|
| - hb_blob_destroy (head_blob);
|
| -}
|
| -
|
| -void
|
| -hb_face_set_glyph_count (hb_face_t *face,
|
| - unsigned int glyph_count)
|
| -{
|
| - if (hb_object_is_inert (face))
|
| - return;
|
| -
|
| - face->num_glyphs = glyph_count;
|
| -}
|
| -
|
| -unsigned int
|
| -hb_face_get_glyph_count (hb_face_t *face)
|
| -{
|
| - return face->get_num_glyphs ();
|
| -}
|
| -
|
| -void
|
| -hb_face_t::load_num_glyphs (void) const
|
| -{
|
| - hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_OT_TAG_maxp));
|
| - const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob);
|
| - num_glyphs = maxp_table->get_num_glyphs ();
|
| - hb_blob_destroy (maxp_blob);
|
| -}
|
| -
|
| -
|
| -/*
|
| * hb_font_t
|
| */
|
|
|
| +/**
|
| + * hb_font_create: (Xconstructor)
|
| + * @face: a face.
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_t *
|
| hb_font_create (hb_face_t *face)
|
| {
|
| @@ -797,6 +867,16 @@ hb_font_create (hb_face_t *face)
|
| return font;
|
| }
|
|
|
| +/**
|
| + * hb_font_create_sub_font:
|
| + * @parent: parent font.
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_t *
|
| hb_font_create_sub_font (hb_font_t *parent)
|
| {
|
| @@ -819,6 +899,15 @@ hb_font_create_sub_font (hb_font_t *parent)
|
| return font;
|
| }
|
|
|
| +/**
|
| + * hb_font_get_empty:
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full)
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_t *
|
| hb_font_get_empty (void)
|
| {
|
| @@ -850,12 +939,30 @@ hb_font_get_empty (void)
|
| return const_cast<hb_font_t *> (&_hb_font_nil);
|
| }
|
|
|
| +/**
|
| + * hb_font_reference: (skip)
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer full):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_t *
|
| hb_font_reference (hb_font_t *font)
|
| {
|
| return hb_object_reference (font);
|
| }
|
|
|
| +/**
|
| + * hb_font_destroy: (skip)
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_destroy (hb_font_t *font)
|
| {
|
| @@ -875,6 +982,20 @@ hb_font_destroy (hb_font_t *font)
|
| free (font);
|
| }
|
|
|
| +/**
|
| + * hb_font_set_user_data: (skip)
|
| + * @font: a font.
|
| + * @key:
|
| + * @data:
|
| + * @destroy:
|
| + * @replace:
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_set_user_data (hb_font_t *font,
|
| hb_user_data_key_t *key,
|
| @@ -885,6 +1006,17 @@ hb_font_set_user_data (hb_font_t *font,
|
| return hb_object_set_user_data (font, key, data, destroy, replace);
|
| }
|
|
|
| +/**
|
| + * hb_font_get_user_data: (skip)
|
| + * @font: a font.
|
| + * @key:
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer none):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void *
|
| hb_font_get_user_data (hb_font_t *font,
|
| hb_user_data_key_t *key)
|
| @@ -892,6 +1024,14 @@ hb_font_get_user_data (hb_font_t *font,
|
| return hb_object_get_user_data (font, key);
|
| }
|
|
|
| +/**
|
| + * hb_font_make_immutable:
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_make_immutable (hb_font_t *font)
|
| {
|
| @@ -901,18 +1041,48 @@ hb_font_make_immutable (hb_font_t *font)
|
| font->immutable = true;
|
| }
|
|
|
| +/**
|
| + * hb_font_is_immutable:
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Return value:
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_bool_t
|
| hb_font_is_immutable (hb_font_t *font)
|
| {
|
| return font->immutable;
|
| }
|
|
|
| +/**
|
| + * hb_font_get_parent:
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer none):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_font_t *
|
| hb_font_get_parent (hb_font_t *font)
|
| {
|
| return font->parent;
|
| }
|
|
|
| +/**
|
| + * hb_font_get_face:
|
| + * @font: a font.
|
| + *
|
| + *
|
| + *
|
| + * Return value: (transfer none):
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| hb_face_t *
|
| hb_font_get_face (hb_font_t *font)
|
| {
|
| @@ -920,15 +1090,26 @@ hb_font_get_face (hb_font_t *font)
|
| }
|
|
|
|
|
| +/**
|
| + * hb_font_set_funcs:
|
| + * @font: a font.
|
| + * @klass: (closure font_data) (destroy destroy) (scope notified):
|
| + * @font_data:
|
| + * @destroy:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_set_funcs (hb_font_t *font,
|
| hb_font_funcs_t *klass,
|
| - void *user_data,
|
| + void *font_data,
|
| hb_destroy_func_t destroy)
|
| {
|
| if (font->immutable) {
|
| if (destroy)
|
| - destroy (user_data);
|
| + destroy (font_data);
|
| return;
|
| }
|
|
|
| @@ -941,30 +1122,50 @@ hb_font_set_funcs (hb_font_t *font,
|
| hb_font_funcs_reference (klass);
|
| hb_font_funcs_destroy (font->klass);
|
| font->klass = klass;
|
| - font->user_data = user_data;
|
| + font->user_data = font_data;
|
| font->destroy = destroy;
|
| }
|
|
|
| +/**
|
| + * hb_font_set_funcs_data:
|
| + * @font: a font.
|
| + * @font_data: (destroy destroy) (scope notified):
|
| + * @destroy:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_set_funcs_data (hb_font_t *font,
|
| - void *user_data,
|
| + void *font_data,
|
| hb_destroy_func_t destroy)
|
| {
|
| /* Destroy user_data? */
|
| if (font->immutable) {
|
| if (destroy)
|
| - destroy (user_data);
|
| + destroy (font_data);
|
| return;
|
| }
|
|
|
| if (font->destroy)
|
| font->destroy (font->user_data);
|
|
|
| - font->user_data = user_data;
|
| + font->user_data = font_data;
|
| font->destroy = destroy;
|
| }
|
|
|
|
|
| +/**
|
| + * hb_font_set_scale:
|
| + * @font: a font.
|
| + * @x_scale:
|
| + * @y_scale:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_set_scale (hb_font_t *font,
|
| int x_scale,
|
| @@ -977,6 +1178,16 @@ hb_font_set_scale (hb_font_t *font,
|
| font->y_scale = y_scale;
|
| }
|
|
|
| +/**
|
| + * hb_font_get_scale:
|
| + * @font: a font.
|
| + * @x_scale: (out):
|
| + * @y_scale: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_get_scale (hb_font_t *font,
|
| int *x_scale,
|
| @@ -986,6 +1197,16 @@ hb_font_get_scale (hb_font_t *font,
|
| if (y_scale) *y_scale = font->y_scale;
|
| }
|
|
|
| +/**
|
| + * hb_font_set_ppem:
|
| + * @font: a font.
|
| + * @x_ppem:
|
| + * @y_ppem:
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_set_ppem (hb_font_t *font,
|
| unsigned int x_ppem,
|
| @@ -998,6 +1219,16 @@ hb_font_set_ppem (hb_font_t *font,
|
| font->y_ppem = y_ppem;
|
| }
|
|
|
| +/**
|
| + * hb_font_get_ppem:
|
| + * @font: a font.
|
| + * @x_ppem: (out):
|
| + * @y_ppem: (out):
|
| + *
|
| + *
|
| + *
|
| + * Since: 1.0
|
| + **/
|
| void
|
| hb_font_get_ppem (hb_font_t *font,
|
| unsigned int *x_ppem,
|
|
|