diff options
author | Grigori Goronzy <greg@blackbox> | 2009-08-12 01:45:39 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2009-08-12 01:50:59 +0200 |
commit | ceefa4d7517a611de4c27c7de416a4ca7d22eeef (patch) | |
tree | d81b8a9036e8aa5ce604907a9be09e2aa1a9bfa9 | |
parent | f3b3c6897e5cb7df6b40885c772e564d7ab5c82d (diff) | |
download | libass-ceefa4d7517a611de4c27c7de416a4ca7d22eeef.tar.bz2 libass-ceefa4d7517a611de4c27c7de416a4ca7d22eeef.tar.xz |
Fix advance for italic to non-italic style changes
After a italic to non-italic style change the space between the glyphs
is sometimes wrongly calculated, especially if the font doesn't have
an italic version and FreeType falls back to oblique glyphs.
In such cases, add additional space to the glyph's advance to make up
for the slant of the glyph; the amount is calculated from the glyph's
bbox.
-rw-r--r-- | libass/ass_render.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index f970f96..a7557fe 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -2576,6 +2576,15 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, get_outline_glyph(render_priv, code, text_info->glyphs + text_info->length, drawing); + // Add additional space after italic to nonitalic style changes + if (text_info->length && + text_info->glyphs[text_info->length - 1].hash_key.italic && + !render_priv->state.italic) { + GlyphInfo *og = &text_info->glyphs[text_info->length - 1]; + int advmax = FFMAX(0, og->bbox.xMax - og->advance.x); + pen.x += advmax; + } + text_info->glyphs[text_info->length].pos.x = pen.x; text_info->glyphs[text_info->length].pos.y = pen.y; |