diff options
author | Grigori Goronzy <greg@blackbox> | 2011-07-13 22:37:23 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2011-07-13 22:37:23 +0200 |
commit | 2be0c0eaea35ad9fc640c6d748031cf1c3fc8669 (patch) | |
tree | f78a3863b1aaee4c3b00c2f88c90ab5268cf3147 /libass | |
parent | 7763d4020495a5af6faa685aea9e6ea460ba5af2 (diff) | |
download | libass-2be0c0eaea35ad9fc640c6d748031cf1c3fc8669.tar.bz2 libass-2be0c0eaea35ad9fc640c6d748031cf1c3fc8669.tar.xz |
Add kerning toggle for HarfBuzz shaping
Make the "Kerning" track property toggle the OpenType feature "kern".
The old TrueType kerning code won't come back.
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_render.c | 3 | ||||
-rw-r--r-- | libass/ass_shaper.c | 10 | ||||
-rw-r--r-- | libass/ass_shaper.h | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 81dadb9..40923ba 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1719,7 +1719,6 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, int MarginL, MarginR, MarginV; int last_break; int alignment, halign, valign; - int kern = render_priv->track->Kerning; double device_x = 0; double device_y = 0; TextInfo *text_info = &render_priv->text_info; @@ -2265,6 +2264,8 @@ ass_start_frame(ASS_Renderer *render_priv, ASS_Track *track, else render_priv->border_scale = 1.; + ass_shaper_set_kerning(render_priv->shaper, track->Kerning); + // PAR correction render_priv->font_scale_x = render_priv->settings.aspect / render_priv->settings.storage_aspect; diff --git a/libass/ass_shaper.c b/libass/ass_shaper.c index 816674c..802f118 100644 --- a/libass/ass_shaper.c +++ b/libass/ass_shaper.c @@ -239,6 +239,16 @@ static void shape_fribidi(ASS_Shaper *shaper, size_t len) } /** + * \brief Toggle kerning for HarfBuzz shaping. + * NOTE: currently only works with OpenType fonts, the TrueType fallback *always* + * kerns. It's a bug in HarfBuzz. + */ +void ass_shaper_set_kerning(ASS_Shaper *shaper, int kern) +{ + shaper->features[KERN].value = !!kern; +} + +/** * \brief Find shape runs according to the event's selected fonts */ void ass_shaper_find_runs(ASS_Shaper *shaper, ASS_Renderer *render_priv, diff --git a/libass/ass_shaper.h b/libass/ass_shaper.h index e067d3f..cbfcdd7 100644 --- a/libass/ass_shaper.h +++ b/libass/ass_shaper.h @@ -27,6 +27,7 @@ void ass_shaper_info(ASS_Library *lib); ASS_Shaper *ass_shaper_new(size_t prealloc); void ass_shaper_free(ASS_Shaper *shaper); +void ass_shaper_set_kerning(ASS_Shaper *shaper, int kern); void ass_shaper_find_runs(ASS_Shaper *shaper, ASS_Renderer *render_priv, GlyphInfo *glyphs, size_t len); void ass_shaper_shape(ASS_Shaper *shaper, TextInfo *text_info); |