src/hb-common.cc | 36 ++++++++++---------- src/hb-common.h | 10 ++--- src/hb-face.cc | 6 --- src/hb-font.cc | 90 +++++++++++++++++++++++++++++++++++++++++++------- src/hb-font.h | 15 +++++++- src/hb-ft.cc | 10 +++++ src/hb-ot-layout.cc | 5 -- src/hb-ot-math.cc | 2 - src/hb-ot-tag.cc | 3 - util/helper-cairo.cc | 16 ++++++++ util/options.cc | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ util/options.hh | 8 +++- 12 files changed, 241 insertions(+), 51 deletions(-)
New commits: commit 47ee34e84745756a9aaeb964772377b6c1417ed1 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 18:10:08 2017 -0800 [var] Hook up variations to FreeType face hb-view correctly renders variations with ft font-funcs now. hb-ot-font needs HVAR implementation. diff --git a/src/hb-ft.cc b/src/hb-ft.cc index d5f8d52..acb7bb1 100644 --- a/src/hb-ft.cc +++ b/src/hb-ft.cc @@ -736,6 +736,16 @@ hb_ft_font_set_funcs (hb_font_t *font) FT_Set_Transform (ft_face, &matrix, NULL); } + unsigned int num_coords; + int *coords = hb_font_get_var_coords_normalized (font, &num_coords); + if (num_coords) + { + FT_Fixed ft_coords[num_coords]; + for (unsigned int i = 0; i < num_coords; i++) + ft_coords[i] = coords[i] << 2; + FT_Set_Var_Blend_Coordinates (ft_face, num_coords, ft_coords); + } + ft_face->generic.data = blob; ft_face->generic.finalizer = (FT_Generic_Finalizer) _release_blob; diff --git a/util/helper-cairo.cc b/util/helper-cairo.cc index 8f30eea..df5173b 100644 --- a/util/helper-cairo.cc +++ b/util/helper-cairo.cc @@ -28,6 +28,7 @@ #include <cairo-ft.h> #include <hb-ft.h> +#include FT_MULTIPLE_MASTERS_H #include "helper-cairo-ansi.hh" #ifdef CAIRO_HAS_SVG_SURFACE @@ -76,7 +77,8 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts) cairo_font_face_t *cairo_face; /* We cannot use the FT_Face from hb_font_t, as doing so will confuse hb_font_t because - * cairo will reset the face size. As such, create new face... */ + * cairo will reset the face size. As such, create new face... + * TODO Perhaps add API to hb-ft to encapsulate this code. */ FT_Face ft_face = NULL;//hb_ft_font_get_face (font); if (!ft_face) { @@ -100,7 +102,19 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts) CAIRO_FONT_WEIGHT_NORMAL); } else + { + unsigned int num_coords; + int *coords = hb_font_get_var_coords_normalized (font, &num_coords); + if (num_coords) + { + FT_Fixed ft_coords[num_coords]; + for (unsigned int i = 0; i < num_coords; i++) + ft_coords[i] = coords[i] << 2; + FT_Set_Var_Blend_Coordinates (ft_face, num_coords, ft_coords); + } + cairo_face = cairo_ft_font_face_create_for_ft_face (ft_face, 0); + } cairo_matrix_t ctm, font_matrix; cairo_font_options_t *font_options; commit 111f3e55178f7cd5a8ae4e8ae111cb48aea4acb5 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 17:51:41 2017 -0800 [util] Add --variations Is hooked up to the font, but not to FreeType, so raster doesn't show yet. Documentation needs to be done. diff --git a/util/options.cc b/util/options.cc index bc699c1..8c79c4a 100644 --- a/util/options.cc +++ b/util/options.cc @@ -254,6 +254,47 @@ parse_features (const char *name G_GNUC_UNUSED, return true; } +static gboolean +parse_variations (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + font_options_t *font_opts = (font_options_t *) data; + char *s = (char *) arg; + char *p; + + font_opts->num_variations = 0; + g_free (font_opts->variations); + font_opts->variations = NULL; + + if (!*s) + return true; + + /* count the variations first, so we can allocate memory */ + p = s; + do { + font_opts->num_variations++; + p = strchr (p, ','); + if (p) + p++; + } while (p); + + font_opts->variations = (hb_variation_t *) calloc (font_opts->num_variations, sizeof (*font_opts->variations)); + + /* now do the actual parsing */ + p = s; + font_opts->num_variations = 0; + while (p && *p) { + char *end = strchr (p, ','); + if (hb_variation_from_string (p, end ? end - p : -1, &font_opts->variations[font_opts->num_variations])) + font_opts->num_variations++; + p = end ? end + 1 : NULL; + } + + return true; +} + void view_options_t::add_options (option_parser_t *parser) @@ -415,6 +456,54 @@ font_options_t::add_options (option_parser_t *parser) "Font options:", "Options controlling the font", this); + + const gchar *variations_help = "Comma-separated list of font variations\n" + "\n" + " XXXXXXXXXXXXXXX\n" + " Features can be enabled or disabled, either globally or limited to\n" + " specific character ranges. The format for specifying feature settings\n" + " follows. All valid CSS font-feature-settings values other than 'normal'\n" + " and 'inherited' are also accepted, though, not documented below.\n" + "\n" + " The range indices refer to the positions between Unicode characters,\n" + " unless the --utf8-clusters is provided, in which case range indices\n" + " refer to UTF-8 byte indices. The position before the first character\n" + " is always 0.\n" + "\n" + " The format is Python-esque. Here is how it all works:\n" + "\n" + " Syntax: Value: Start: End:\n" + "\n" + " Setting value:\n" + " \"kern\" 1 0 â # Turn feature on\n" + " \"+kern\" 1 0 â # Turn feature on\n" + " \"-kern\" 0 0 â # Turn feature off\n" + " \"kern=0\" 0 0 â # Turn feature off\n" + " \"kern=1\" 1 0 â # Turn feature on\n" + " \"aalt=2\" 2 0 â # Choose 2nd alternate\n" + "\n" + " Setting index:\n" + " \"kern[]\" 1 0 â # Turn feature on\n" + " \"kern[:]\" 1 0 â # Turn feature on\n" + " \"kern[5:]\" 1 5 â # Turn feature on, partial\n" + " \"kern[:5]\" 1 0 5 # Turn feature on, partial\n" + " \"kern[3:5]\" 1 3 5 # Turn feature on, range\n" + " \"kern[3]\" 1 3 3+1 # Turn feature on, single char\n" + "\n" + " Mixing it all:\n" + "\n" + " \"aalt[3:5]=2\" 2 3 5 # Turn 2nd alternate on for range"; + + GOptionEntry entries2[] = + { + {"variations", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_variations, variations_help, "list"}, + {NULL} + }; + parser->add_group (entries2, + "variations", + "Varitions options:", + "Options controlling font variations used", + this); } void @@ -561,6 +650,8 @@ font_options_t::get_font (void) const hb_font_set_scale (font, scale_x, scale_y); hb_face_destroy (face); + hb_font_set_variations (font, variations, num_variations); + void (*set_font_funcs) (hb_font_t *) = NULL; if (!font_funcs) { diff --git a/util/options.hh b/util/options.hh index 919e4f8..9ed4fd0 100644 --- a/util/options.hh +++ b/util/options.hh @@ -285,7 +285,10 @@ struct font_options_t : option_group_t { font_options_t (option_parser_t *parser, int default_font_size_, - unsigned int subpixel_bits_) { + unsigned int subpixel_bits_) + { + variations = NULL; + num_variations = 0; default_font_size = default_font_size_; subpixel_bits = subpixel_bits_; font_file = NULL; @@ -299,6 +302,7 @@ struct font_options_t : option_group_t } ~font_options_t (void) { g_free (font_file); + free (variations); g_free (font_funcs); hb_font_destroy (font); } @@ -309,6 +313,8 @@ struct font_options_t : option_group_t char *font_file; int face_index; + hb_variation_t *variations; + unsigned int num_variations; int default_font_size; unsigned int subpixel_bits; mutable double font_size_x; commit bb1e19268f02d4aad2240c52852e72afcf0f79ad Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 17:41:37 2017 -0800 [var] Rename var_coord to variation Looks much better. diff --git a/src/hb-common.cc b/src/hb-common.cc index 25c979c..a804f82 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -608,7 +608,7 @@ hb_version_atleast (unsigned int major, -/* hb_feature_t and hb_var_coord_t */ +/* hb_feature_t and hb_variation_t */ static bool parse_space (const char **pp, const char *end) @@ -880,59 +880,59 @@ hb_feature_to_string (hb_feature_t *feature, buf[len] = '\0'; } -/* hb_var_coord_t */ +/* hb_variation_t */ static bool -parse_var_coord_value (const char **pp, const char *end, hb_var_coord_t *var_coord) +parse_variation_value (const char **pp, const char *end, hb_variation_t *variation) { parse_char (pp, end, '='); /* Optional. */ - return parse_float (pp, end, &var_coord->value); + return parse_float (pp, end, &variation->value); } static bool -parse_one_var_coord (const char **pp, const char *end, hb_var_coord_t *var_coord) +parse_one_variation (const char **pp, const char *end, hb_variation_t *variation) { - return parse_tag (pp, end, &var_coord->tag) && - parse_var_coord_value (pp, end, var_coord) && + return parse_tag (pp, end, &variation->tag) && + parse_variation_value (pp, end, variation) && parse_space (pp, end) && *pp == end; } hb_bool_t -hb_var_coord_from_string (const char *str, int len, - hb_var_coord_t *var_coord) +hb_variation_from_string (const char *str, int len, + hb_variation_t *variation) { - hb_var_coord_t coord; + hb_variation_t var; if (len < 0) len = strlen (str); - if (likely (parse_one_var_coord (&str, str + len, &coord))) + if (likely (parse_one_variation (&str, str + len, &var))) { - if (var_coord) - *var_coord = coord; + if (variation) + *variation = var; return true; } - if (var_coord) - memset (var_coord, 0, sizeof (*var_coord)); + if (variation) + memset (variation, 0, sizeof (*variation)); return false; } void -hb_var_coord_to_string (hb_var_coord_t *var_coord, +hb_variation_to_string (hb_variation_t *variation, char *buf, unsigned int size) { if (unlikely (!size)) return; char s[128]; unsigned int len = 0; - hb_tag_to_string (var_coord->tag, s + len); + hb_tag_to_string (variation->tag, s + len); len += 4; while (len && s[len - 1] == ' ') len--; s[len++] = '='; - len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", var_coord->value)); + len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", variation->value)); assert (len < ARRAY_LENGTH (s)); len = MIN (len, size - 1); diff --git a/src/hb-common.h b/src/hb-common.h index e483fb8..ed0b97d 100644 --- a/src/hb-common.h +++ b/src/hb-common.h @@ -379,17 +379,17 @@ HB_EXTERN void hb_feature_to_string (hb_feature_t *feature, char *buf, unsigned int size); -typedef struct hb_var_coord_t { +typedef struct hb_variation_t { hb_tag_t tag; float value; -} hb_var_coord_t; +} hb_variation_t; HB_EXTERN hb_bool_t -hb_var_coord_from_string (const char *str, int len, - hb_var_coord_t *var_coord); +hb_variation_from_string (const char *str, int len, + hb_variation_t *variation); HB_EXTERN void -hb_var_coord_to_string (hb_var_coord_t *var_coord, +hb_variation_to_string (hb_variation_t *variation, char *buf, unsigned int size); diff --git a/src/hb-font.cc b/src/hb-font.cc index 39d1769..607bd48 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1552,14 +1552,14 @@ _hb_font_adopt_var_coords_normalized (hb_font_t *font, } void -hb_font_set_var_coords (hb_font_t *font, - const hb_var_coord_t *coords, - unsigned int coords_length) +hb_font_set_variations (hb_font_t *font, + const hb_variation_t *variations, + unsigned int variations_length) { if (font->immutable) return; - if (!coords_length) + if (!variations_length) { hb_font_set_var_coords_normalized (font, NULL, 0); return; @@ -1567,18 +1567,18 @@ hb_font_set_var_coords (hb_font_t *font, hb_face_t *face = font->face; - unsigned int length = hb_ot_var_get_axis_count (face); + unsigned int coords_length = hb_ot_var_get_axis_count (face); - int *normalized = length ? (int *) calloc (length, sizeof (int)) : NULL; - if (unlikely (length && !normalized)) + int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : NULL; + if (unlikely (coords_length && !normalized)) return; /* normalized is filled with zero already. */ - for (unsigned int i = 0; i < coords_length; i++) + for (unsigned int i = 0; i < variations_length; i++) { unsigned int axis_index; - if (hb_ot_var_find_axis (face, coords[i].tag, &axis_index, NULL)) - normalized[axis_index] = hb_ot_var_normalize_axis_value (face, axis_index, coords[i].value); + if (hb_ot_var_find_axis (face, variations[i].tag, &axis_index, NULL)) + normalized[axis_index] = hb_ot_var_normalize_axis_value (face, axis_index, variations[i].value); } _hb_font_adopt_var_coords_normalized (font, normalized, coords_length); diff --git a/src/hb-font.h b/src/hb-font.h index 83eb68c..fce4206 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -604,9 +604,9 @@ hb_font_get_ppem (hb_font_t *font, unsigned int *y_ppem); HB_EXTERN void -hb_font_set_var_coords (hb_font_t *font, - const hb_var_coord_t *coords, - unsigned int coords_length); +hb_font_set_variations (hb_font_t *font, + const hb_variation_t *variations, + unsigned int variations_length); HB_EXTERN void hb_font_set_var_coords_design (hb_font_t *font, commit 64fe92bf2d43a0ea31743d774e073f202021dbd1 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 15:36:35 2017 -0800 [var] Remove use of variable-length arrays diff --git a/src/hb-font.cc b/src/hb-font.cc index 1b4ed7e..39d1769 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1540,6 +1540,17 @@ hb_font_get_ppem (hb_font_t *font, * Variations */ +static void +_hb_font_adopt_var_coords_normalized (hb_font_t *font, + int *coords, /* 2.14 normalized */ + unsigned int coords_length) +{ + free (font->coords); + + font->coords = coords; + font->num_coords = coords_length; +} + void hb_font_set_var_coords (hb_font_t *font, const hb_var_coord_t *coords, @@ -1557,10 +1568,12 @@ hb_font_set_var_coords (hb_font_t *font, hb_face_t *face = font->face; unsigned int length = hb_ot_var_get_axis_count (face); - int normalized[length]; // XXX Remove variable-length array use... - memset (normalized, 0, length * sizeof (normalized[0])); + int *normalized = length ? (int *) calloc (length, sizeof (int)) : NULL; + if (unlikely (length && !normalized)) + return; + /* normalized is filled with zero already. */ for (unsigned int i = 0; i < coords_length; i++) { unsigned int axis_index; @@ -1568,7 +1581,7 @@ hb_font_set_var_coords (hb_font_t *font, normalized[axis_index] = hb_ot_var_normalize_axis_value (face, axis_index, coords[i].value); } - hb_font_set_var_coords_normalized (font, normalized, coords_length); + _hb_font_adopt_var_coords_normalized (font, normalized, coords_length); } void @@ -1579,13 +1592,15 @@ hb_font_set_var_coords_design (hb_font_t *font, if (font->immutable) return; - int normalized[coords_length]; // XXX Remove variable-length array use... + int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : NULL; + if (unlikely (coords_length && !normalized)) + return; hb_face_t *face = font->face; for (unsigned int i = 0; i < coords_length; i++) normalized[i] = hb_ot_var_normalize_axis_value (face, i, coords[i]); - hb_font_set_var_coords_normalized (font, normalized, coords_length); + _hb_font_adopt_var_coords_normalized (font, normalized, coords_length); } void @@ -1603,10 +1618,7 @@ hb_font_set_var_coords_normalized (hb_font_t *font, if (coords_length) memcpy (copy, coords, coords_length * sizeof (coords[0])); - free (font->coords); - - font->coords = copy; - font->num_coords = coords_length; + _hb_font_adopt_var_coords_normalized (font, copy, coords_length); } int * commit 2491134b386507f611a47e43e3f7c2766d0d288b Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 15:21:50 2017 -0800 [var] Add hb_font_set_var_coords() diff --git a/src/hb-font.cc b/src/hb-font.cc index 08c00bf..1b4ed7e 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1541,10 +1541,44 @@ hb_font_get_ppem (hb_font_t *font, */ void +hb_font_set_var_coords (hb_font_t *font, + const hb_var_coord_t *coords, + unsigned int coords_length) +{ + if (font->immutable) + return; + + if (!coords_length) + { + hb_font_set_var_coords_normalized (font, NULL, 0); + return; + } + + hb_face_t *face = font->face; + + unsigned int length = hb_ot_var_get_axis_count (face); + int normalized[length]; // XXX Remove variable-length array use... + + memset (normalized, 0, length * sizeof (normalized[0])); + + for (unsigned int i = 0; i < coords_length; i++) + { + unsigned int axis_index; + if (hb_ot_var_find_axis (face, coords[i].tag, &axis_index, NULL)) + normalized[axis_index] = hb_ot_var_normalize_axis_value (face, axis_index, coords[i].value); + } + + hb_font_set_var_coords_normalized (font, normalized, coords_length); +} + +void hb_font_set_var_coords_design (hb_font_t *font, - float *coords, + const float *coords, unsigned int coords_length) { + if (font->immutable) + return; + int normalized[coords_length]; // XXX Remove variable-length array use... hb_face_t *face = font->face; @@ -1556,7 +1590,7 @@ hb_font_set_var_coords_design (hb_font_t *font, void hb_font_set_var_coords_normalized (hb_font_t *font, - int *coords, /* 2.14 normalized */ + const int *coords, /* 2.14 normalized */ unsigned int coords_length) { if (font->immutable) diff --git a/src/hb-font.h b/src/hb-font.h index 31e5971..83eb68c 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -603,15 +603,19 @@ hb_font_get_ppem (hb_font_t *font, unsigned int *x_ppem, unsigned int *y_ppem); +HB_EXTERN void +hb_font_set_var_coords (hb_font_t *font, + const hb_var_coord_t *coords, + unsigned int coords_length); HB_EXTERN void hb_font_set_var_coords_design (hb_font_t *font, - float *coords, + const float *coords, unsigned int coords_length); HB_EXTERN void hb_font_set_var_coords_normalized (hb_font_t *font, - int *coords, /* 2.14 normalized */ + const int *coords, /* 2.14 normalized */ unsigned int coords_length); HB_EXTERN int * commit 113393efec5e0c4c10c141a6d4b801d50fcd8ab8 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 15:12:03 2017 -0800 Remove a few unused includes diff --git a/src/hb-face.cc b/src/hb-face.cc index 6b563bc..1ba9707 100644 --- a/src/hb-face.cc +++ b/src/hb-face.cc @@ -28,15 +28,11 @@ #include "hb-private.hh" -#include "hb-ot-layout-private.hh" - -#include "hb-font-private.hh" +#include "hb-face-private.hh" #include "hb-open-file-private.hh" #include "hb-ot-head-table.hh" #include "hb-ot-maxp-table.hh" -#include <string.h> - /* * hb_face_t diff --git a/src/hb-font.cc b/src/hb-font.cc index e7f5752..08c00bf 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -28,14 +28,7 @@ #include "hb-private.hh" -#include "hb-ot-layout-private.hh" - #include "hb-font-private.hh" -#include "hb-open-file-private.hh" -#include "hb-ot-head-table.hh" -#include "hb-ot-maxp-table.hh" - -#include <string.h> /* diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc index d8d6284..d7ededd 100644 --- a/src/hb-ot-layout.cc +++ b/src/hb-ot-layout.cc @@ -34,13 +34,10 @@ #include "hb-ot-layout-gdef-table.hh" #include "hb-ot-layout-gsub-table.hh" #include "hb-ot-layout-gpos-table.hh" -#include "hb-ot-layout-jstf-table.hh" +#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise. #include "hb-ot-map-private.hh" -#include <stdlib.h> -#include <string.h> - HB_SHAPER_DATA_ENSURE_DECLARE(ot, face) diff --git a/src/hb-ot-tag.cc b/src/hb-ot-tag.cc index 5c348e8..9b0db50 100644 --- a/src/hb-ot-tag.cc +++ b/src/hb-ot-tag.cc @@ -28,9 +28,6 @@ #include "hb-private.hh" -#include <string.h> - - /* hb_script_t */ commit 2d40923ca914c90304d07d6e7b9b1040c79c76fe Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 15:06:15 2017 -0800 Minor diff --git a/src/hb-ot-math.cc b/src/hb-ot-math.cc index ec8df2c..eb08bad 100644 --- a/src/hb-ot-math.cc +++ b/src/hb-ot-math.cc @@ -120,7 +120,7 @@ hb_ot_math_get_glyph_top_accent_attachment (hb_font_t *font, /** * hb_ot_math_is_glyph_extended_shape: - * @font: a #hb_font_t to test + * @face: a #hb_face_t to test * @glyph: a glyph index to test * * Return value: true if the glyph is an extended shape, false otherwise commit 8b2a58047095604dcdc576ecbe3e8c2ebb8f48f0 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 15:05:00 2017 -0800 [var] Add hb_font_set_var_coords_design() diff --git a/src/hb-font.cc b/src/hb-font.cc index e2a0a5f..e7f5752 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1543,10 +1543,27 @@ hb_font_get_ppem (hb_font_t *font, if (y_ppem) *y_ppem = font->y_ppem; } +/* + * Variations + */ + +void +hb_font_set_var_coords_design (hb_font_t *font, + float *coords, + unsigned int coords_length) +{ + int normalized[coords_length]; // XXX Remove variable-length array use... + + hb_face_t *face = font->face; + for (unsigned int i = 0; i < coords_length; i++) + normalized[i] = hb_ot_var_normalize_axis_value (face, i, coords[i]); + + hb_font_set_var_coords_normalized (font, normalized, coords_length); +} void hb_font_set_var_coords_normalized (hb_font_t *font, - int *coords, /* XXX 2.14 normalized */ + int *coords, /* 2.14 normalized */ unsigned int coords_length) { if (font->immutable) @@ -1570,7 +1587,7 @@ hb_font_get_var_coords_normalized (hb_font_t *font, unsigned int *length) { if (length) - *length = font->coords_length; + *length = font->num_coords; return font->coords; } diff --git a/src/hb-font.h b/src/hb-font.h index 5f22331..31e5971 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -605,8 +605,13 @@ hb_font_get_ppem (hb_font_t *font, HB_EXTERN void +hb_font_set_var_coords_design (hb_font_t *font, + float *coords, + unsigned int coords_length); + +HB_EXTERN void hb_font_set_var_coords_normalized (hb_font_t *font, - int *coords, /* XXX 2.14 normalized */ + int *coords, /* 2.14 normalized */ unsigned int coords_length); HB_EXTERN int * commit 0dcc7b49a830e2680d3e6d86d953efab85cef6ff Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 14:50:22 2017 -0800 [var] Minor lifecycle adjustment diff --git a/src/hb-font.cc b/src/hb-font.cc index a8b9e4c..e2a0a5f 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1556,11 +1556,11 @@ hb_font_set_var_coords_normalized (hb_font_t *font, if (unlikely (coords_length && !copy)) return; - free (font->coords); - if (coords_length) memcpy (copy, coords, coords_length * sizeof (coords[0])); + free (font->coords); + font->coords = copy; font->num_coords = coords_length; } commit bf0d3a665baac9e33c0f774b22197c321b864c80 Author: Behdad Esfahbod <beh...@behdad.org> Date: Sat Jan 21 14:48:46 2017 -0800 [var] Add hb_font_get_var_coords_normalized() diff --git a/src/hb-font.cc b/src/hb-font.cc index b91a35b..a8b9e4c 100644 --- a/src/hb-font.cc +++ b/src/hb-font.cc @@ -1565,6 +1565,16 @@ hb_font_set_var_coords_normalized (hb_font_t *font, font->num_coords = coords_length; } +int * +hb_font_get_var_coords_normalized (hb_font_t *font, + unsigned int *length) +{ + if (length) + *length = font->coords_length; + + return font->coords; +} + #ifndef HB_DISABLE_DEPRECATED diff --git a/src/hb-font.h b/src/hb-font.h index 8813286..5f22331 100644 --- a/src/hb-font.h +++ b/src/hb-font.h @@ -609,6 +609,10 @@ hb_font_set_var_coords_normalized (hb_font_t *font, int *coords, /* XXX 2.14 normalized */ unsigned int coords_length); +HB_EXTERN int * +hb_font_get_var_coords_normalized (hb_font_t *font, + unsigned int *length); + HB_END_DECLS #endif /* HB_FONT_H */
_______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz