summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2011-07-13 22:37:23 +0200
committerGrigori Goronzy <greg@blackbox>2011-07-13 22:37:23 +0200
commit2be0c0eaea35ad9fc640c6d748031cf1c3fc8669 (patch)
treef78a3863b1aaee4c3b00c2f88c90ab5268cf3147
parent7763d4020495a5af6faa685aea9e6ea460ba5af2 (diff)
downloadlibass-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.
-rw-r--r--libass/ass_render.c3
-rw-r--r--libass/ass_shaper.c10
-rw-r--r--libass/ass_shaper.h1
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);