From 07bcf7f7cee44d208e07ae13d890d61a94c2d260 Mon Sep 17 00:00:00 2001 From: Grigori Goronzy Date: Sat, 27 Jun 2009 22:48:48 +0200 Subject: [PATCH] Make \shad, \xshad and \yshad animatable. --- libass/ass_render.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libass/ass_render.c b/libass/ass_render.c index 4ea7196..a9de0af 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -969,11 +969,17 @@ static char *parse_tag(ass_renderer_t *render_priv, char *p, double pwr) } else if (mystrcmp(&p, "xshad")) { double val; if (mystrtod(&p, &val)) - render_priv->state.shadow_x = val; + val = render_priv->state.shadow_x * (1 - pwr) + val * pwr; + else + val = 0.; + render_priv->state.shadow_x = val; } else if (mystrcmp(&p, "yshad")) { double val; if (mystrtod(&p, &val)) - render_priv->state.shadow_y = val; + val = render_priv->state.shadow_y * (1 - pwr) + val * pwr; + else + val = 0.; + render_priv->state.shadow_y = val; } else if (mystrcmp(&p, "fax")) { double val; if (mystrtod(&p, &val)) @@ -1421,12 +1427,13 @@ static char *parse_tag(ass_renderer_t *render_priv, char *p, double pwr) render_priv->state.effect_timing; render_priv->state.effect_timing = val * 10; } else if (mystrcmp(&p, "shad")) { - int val; - if (mystrtoi(&p, &val)) - render_priv->state.shadow_x = render_priv->state.shadow_y = val; - else - render_priv->state.shadow_x = render_priv->state.shadow_y = - render_priv->state.style->Shadow; + double val; + if (mystrtod(&p, &val)) { + if (render_priv->state.shadow_x == render_priv->state.shadow_y) + val = render_priv->state.shadow_x * (1 - pwr) + val * pwr; + } else + val = 0.; + render_priv->state.shadow_x = render_priv->state.shadow_y = val; } else if (mystrcmp(&p, "pbo")) { int val = 0; mystrtoi(&p, &val); // ignored -- 2.40.0