summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-09-08 22:21:43 +0200
committerGrigori Goronzy <greg@blackbox>2009-09-08 22:21:43 +0200
commit0d3ddc12295e38cdcb11c79f8dcb5c8d9f1a8b69 (patch)
treecdbd5facfdb64aec15c8ff9f35c55ed51cc03463
parent9c7d5d41736ddb5dc11574c122807e484d774856 (diff)
downloadlibass-0d3ddc12295e38cdcb11c79f8dcb5c8d9f1a8b69.tar.bz2
libass-0d3ddc12295e38cdcb11c79f8dcb5c8d9f1a8b69.tar.xz
Disable kerning by default and make it configurable
Kerning causes problems with many (broken) fonts. VSFilter doesn't use kerning so these problems won't be apparant, while libass uses kerning by default. For compatibility reasons, disable kerning by default. In addition, make it configurable through style overrides and the Script Info header. I.e. put "Kerning: yes" into the Script Info header to enable kerning. With MPlayer, using "-ass-force-style Kerning=yes" will always enable kerning. This also includes a minor ABI change for tracking the kerning boolean. As this only affects code that creates or modifies ASS_Tracks manually, and I'm not aware of anyone doing that, the SONAME will not be bumped.
-rw-r--r--libass/ass.c4
-rw-r--r--libass/ass_render.c3
-rw-r--r--libass/ass_types.h1
3 files changed, 7 insertions, 1 deletions
diff --git a/libass/ass.c b/libass/ass.c
index 057a6e3..f7f5bcc 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -389,6 +389,8 @@ void ass_process_force_style(ASS_Track *track)
track->WrapStyle = atoi(token);
else if (!strcasecmp(*fs, "ScaledBorderAndShadow"))
track->ScaledBorderAndShadow = parse_bool(token);
+ else if (!strcasecmp(*fs, "Kerning"))
+ track->Kerning = parse_bool(token);
dt = strrchr(*fs, '.');
if (dt) {
@@ -571,6 +573,8 @@ static int process_info_line(ASS_Track *track, char *str)
track->WrapStyle = atoi(str + 10);
} else if (!strncmp(str, "ScaledBorderAndShadow:", 22)) {
track->ScaledBorderAndShadow = parse_bool(str + 22);
+ } else if (!strncmp(str, "Kerning:", 8)) {
+ track->Kerning = parse_bool(str + 8);
}
return 0;
}
diff --git a/libass/ass_render.c b/libass/ass_render.c
index edb0c84..e713ab0 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1816,6 +1816,7 @@ 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;
@@ -1879,7 +1880,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event,
}
// Add kerning to pen
- if (previous && code && !drawing->hash) {
+ if (kern && previous && code && !drawing->hash) {
FT_Vector delta;
delta =
ass_font_get_kerning(render_priv->state.font, previous,
diff --git a/libass/ass_types.h b/libass/ass_types.h
index d6a0111..63bc36c 100644
--- a/libass/ass_types.h
+++ b/libass/ass_types.h
@@ -113,6 +113,7 @@ typedef struct ass_track {
double Timer;
int WrapStyle;
int ScaledBorderAndShadow;
+ int Kerning;
int default_style; // index of default style
char *name; // file name in case of external subs, 0 for streams