diff options
author | Grigori Goronzy <greg@blackbox> | 2010-07-29 03:05:19 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2010-07-29 03:05:19 +0200 |
commit | d698daa0be6c510917f9f852fd1a00465ecb2847 (patch) | |
tree | a24614e48b9d03a03ca935f8a7d063222442794c /libass/ass_render.c | |
parent | b10dac7e1ce1e177dcfdda5bdb2bab12ad83d1db (diff) | |
download | libass-d698daa0be6c510917f9f852fd1a00465ecb2847.tar.bz2 libass-d698daa0be6c510917f9f852fd1a00465ecb2847.tar.xz |
Parse vector clip mask only after cache miss
Diffstat (limited to 'libass/ass_render.c')
-rw-r--r-- | libass/ass_render.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 59d13ed..cf11f92 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -598,8 +598,29 @@ static void blend_vector_clip(ASS_Renderer *render_priv, } else { GlyphHashValue v; - // Not found in cache, rasterize it - glyph = (FT_Glyph) drawing->glyph; + // Not found in cache, parse and rasterize it + glyph = (FT_Glyph) *ass_drawing_parse(drawing, 1); + if (!glyph) { + ass_msg(render_priv->library, MSGL_WARN, + "Clip vector parsing failed. Skipping."); + goto blend_vector_exit; + } + + // We need to translate the clip according to screen borders + if (render_priv->settings.left_margin != 0 || + render_priv->settings.top_margin != 0) { + FT_Vector trans = { + .x = int_to_d6(render_priv->settings.left_margin), + .y = -int_to_d6(render_priv->settings.top_margin), + }; + FT_Outline_Translate(&drawing->glyph->outline, + trans.x, trans.y); + } + + ass_msg(render_priv->library, MSGL_DBG2, + "Parsed vector clip: scales (%f, %f) string [%s]\n", + drawing->scale_x, drawing->scale_y, drawing->text); + error = FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1); if (error) { ass_msg(render_priv->library, MSGL_WARN, |