diff options
author | Grigori Goronzy <greg@blackbox> | 2009-06-27 22:48:48 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2009-06-27 23:35:09 +0200 |
commit | 07bcf7f7cee44d208e07ae13d890d61a94c2d260 (patch) | |
tree | 0c2121cbd5f26466c12441ff922af6c8c1dc4f12 | |
parent | 29d541c5a3774f98854fcdeb379c39e8bf13e3b3 (diff) | |
download | libass-07bcf7f7cee44d208e07ae13d890d61a94c2d260.tar.bz2 libass-07bcf7f7cee44d208e07ae13d890d61a94c2d260.tar.xz |
Make \shad, \xshad and \yshad animatable.
-rw-r--r-- | libass/ass_render.c | 23 |
1 files 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 |