[HarfBuzz] [PATCH] Add glyph extent information to hb-shape.
Behdad Esfahbod
behdad.esfahbod at gmail.com
Mon Aug 24 05:32:12 PDT 2015
Thanks Simon.
Should we move the extents to reflect the glyph position? Just add the
offset? Or both offsets and advances?
b
On 15-08-23 08:23 PM, Simon Cozens wrote:
> ---
> src/hb-buffer-serialize.cc | 17 +++++++++++++++++
> src/hb-buffer.h | 3 ++-
> util/hb-shape.cc | 2 ++
> util/options.cc | 2 ++
> util/options.hh | 2 ++
> 5 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/src/hb-buffer-serialize.cc b/src/hb-buffer-serialize.cc
> index 8a22224..6a8509e 100644
> --- a/src/hb-buffer-serialize.cc
> +++ b/src/hb-buffer-serialize.cc
> @@ -145,6 +145,16 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
> pos[i].x_advance, pos[i].y_advance);
> }
>
> + if (flags & HB_BUFFER_SERIALIZE_FLAG_SHOW_EXTENTS)
> + {
> + hb_glyph_extents_t extents;
> + hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
> + p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"xb\":%d,\"yb\":%d",
> + extents.x_bearing, extents.y_bearing));
> + p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"w\":%d,\"h\":%d",
> + extents.width, extents.height));
> + }
> +
> *p++ = '}';
>
> unsigned int l = p - b;
> @@ -210,6 +220,13 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
> p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
> }
>
> + if (flags & HB_BUFFER_SERIALIZE_FLAG_SHOW_EXTENTS)
> + {
> + hb_glyph_extents_t extents;
> + hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
> + p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "<%d,%d,%d,%d>", extents.x_bearing, extents.y_bearing, extents.width, extents.height));
> + }
> +
> unsigned int l = p - b;
> if (buf_size > l)
> {
> diff --git a/src/hb-buffer.h b/src/hb-buffer.h
> index 4b285bb..622d112 100644
> --- a/src/hb-buffer.h
> +++ b/src/hb-buffer.h
> @@ -323,7 +323,8 @@ typedef enum { /*< flags >*/
> HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u,
> HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u,
> HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u,
> - HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u
> + HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u,
> + HB_BUFFER_SERIALIZE_FLAG_SHOW_EXTENTS = 0x00000008u
> } hb_buffer_serialize_flags_t;
>
> typedef enum {
> diff --git a/util/hb-shape.cc b/util/hb-shape.cc
> index f38f387..e7df07b 100644
> --- a/util/hb-shape.cc
> +++ b/util/hb-shape.cc
> @@ -70,6 +70,8 @@ struct output_buffer_t
> flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS;
> if (!format.show_positions)
> flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
> + if (format.show_extents)
> + flags |= HB_BUFFER_SERIALIZE_FLAG_SHOW_EXTENTS;
> format_flags = (hb_buffer_serialize_flags_t) flags;
> }
> void new_line (void)
> diff --git a/util/options.cc b/util/options.cc
> index 0821a17..743b91b 100644
> --- a/util/options.cc
> +++ b/util/options.cc
> @@ -706,6 +706,8 @@ format_options_t::add_options (option_parser_t *parser)
> G_OPTION_ARG_NONE, &this->show_positions, "Do not output glyph positions", NULL},
> {"no-clusters", 0, G_OPTION_FLAG_REVERSE,
> G_OPTION_ARG_NONE, &this->show_clusters, "Do not output cluster indices", NULL},
> + {"show-extents", 0, 0,
> + G_OPTION_ARG_NONE, &this->show_extents, "Show glyph extents", NULL},
> {NULL}
> };
> parser->add_group (entries,
> diff --git a/util/options.hh b/util/options.hh
> index 6eb6c04..f1ec8cf 100644
> --- a/util/options.hh
> +++ b/util/options.hh
> @@ -410,6 +410,7 @@ struct format_options_t : option_group_t
> show_text = false;
> show_unicode = false;
> show_line_num = false;
> + show_extents = false;
>
> add_options (parser);
> }
> @@ -450,6 +451,7 @@ struct format_options_t : option_group_t
> hb_bool_t show_text;
> hb_bool_t show_unicode;
> hb_bool_t show_line_num;
> + hb_bool_t show_extents;
> };
>
>
>
More information about the HarfBuzz
mailing list