summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@blackbox>2009-06-27 22:48:48 +0200
committerGrigori Goronzy <greg@blackbox>2009-06-27 23:35:09 +0200
commit07bcf7f7cee44d208e07ae13d890d61a94c2d260 (patch)
tree0c2121cbd5f26466c12441ff922af6c8c1dc4f12
parent29d541c5a3774f98854fcdeb379c39e8bf13e3b3 (diff)
downloadlibass-07bcf7f7cee44d208e07ae13d890d61a94c2d260.tar.bz2
libass-07bcf7f7cee44d208e07ae13d890d61a94c2d260.tar.xz
Make \shad, \xshad and \yshad animatable.
-rw-r--r--libass/ass_render.c23
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