[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