summaryrefslogtreecommitdiffstats
path: root/libass/ass_render.c
diff options
context:
space:
mode:
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r--libass/ass_render.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 78fd003..3923e52 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -1962,16 +1962,23 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event,
pen.x = 0;
pen.y = 0;
int lineno = 1;
+ double last_pen_x = 0;
+ double last_fay = 0;
for (i = 0; i < text_info->length; i++) {
GlyphInfo *info = glyphs + cmap[i];
if (glyphs[i].linebreak) {
- pen.y -= (info->fay / info->scale_x * info->scale_y) * pen.x;
- pen.x = 0;
+ pen.y -= (last_fay / info->scale_x * info->scale_y) * (pen.x - last_pen_x);
+ last_pen_x = pen.x = 0;
pen.y += double_to_d6(text_info->lines[lineno-1].desc);
pen.y += double_to_d6(text_info->lines[lineno].asc);
pen.y += double_to_d6(render_priv->settings.line_spacing);
lineno++;
}
+ else if (last_fay != info->fay) {
+ pen.y -= (last_fay / info->scale_x * info->scale_y) * (pen.x - last_pen_x);
+ last_pen_x = pen.x;
+ }
+ last_fay = info->fay;
if (info->skip) continue;
FT_Vector cluster_pen = pen;
while (info) {