summaryrefslogtreecommitdiffstats
path: root/libass/ass_parse.c
diff options
context:
space:
mode:
authorDr.Smile <vabnick@gmail.com>2018-12-02 22:34:45 +0300
committerDr.Smile <vabnick@gmail.com>2019-05-19 20:18:51 +0300
commit59ee1255c3d0368005159b03912b747a4641336a (patch)
treea8e9cdabc2587333f8be1240e04bc9d3edc24a7e /libass/ass_parse.c
parentea7cb5f75920a16c4101a23c47fb46122caf85d8 (diff)
downloadlibass-59ee1255c3d0368005159b03912b747a4641336a.tar.bz2
libass-59ee1255c3d0368005159b03912b747a4641336a.tar.xz
drawing: separate drawing text reading from outline construction
Purpose of this commit is to simplify logic behind drawing handling.
Diffstat (limited to 'libass/ass_parse.c')
-rw-r--r--libass/ass_parse.c31
1 files changed, 11 insertions, 20 deletions
diff --git a/libass/ass_parse.c b/libass/ass_parse.c
index 3ccf556..9397971 100644
--- a/libass/ass_parse.c
+++ b/libass/ass_parse.c
@@ -198,29 +198,20 @@ interpolate_alpha(long long now, long long t1, long long t2, long long t3,
* Parse a vector clip into an outline, using the proper scaling
* parameters. Translate it to correct for screen borders, if needed.
*/
-static int parse_vector_clip(ASS_Renderer *render_priv,
- struct arg *args, int nargs)
+static bool parse_vector_clip(ASS_Renderer *render_priv,
+ struct arg *args, int nargs)
{
- int scale = 1;
- ASS_Drawing *drawing = render_priv->state.clip_drawing;
-
if (nargs != 1 && nargs != 2)
- return 0;
+ return false;
+
+ int scale = 1;
if (nargs == 2)
scale = argtoi(args[0]);
- struct arg text = args[nargs - 1];
-
- ass_drawing_free(drawing);
- render_priv->state.clip_drawing = ass_drawing_new(render_priv->library);
- drawing = render_priv->state.clip_drawing;
- if (drawing) {
- drawing->scale = scale;
- drawing->scale_x = render_priv->font_scale_x * render_priv->font_scale;
- drawing->scale_y = render_priv->font_scale;
- ass_drawing_set_text(drawing, text.start, text.end - text.start);
- }
- return 1;
+ struct arg text = args[nargs - 1];
+ render_priv->state.clip_drawing_text = strndup(text.start, text.end - text.start);
+ render_priv->state.clip_drawing_scale = scale;
+ return true;
}
/**
@@ -361,7 +352,7 @@ char *parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr,
render_priv->state.clip_y1 =
render_priv->state.clip_y1 * (1 - pwr) + y1 * pwr;
render_priv->state.clip_mode = 1;
- } else if (!render_priv->state.clip_drawing) {
+ } else if (!render_priv->state.clip_drawing_text) {
if (parse_vector_clip(render_priv, args, nargs))
render_priv->state.clip_drawing_mode = 1;
}
@@ -682,7 +673,7 @@ char *parse_tags(ASS_Renderer *render_priv, char *p, char *end, double pwr,
render_priv->state.clip_y1 =
render_priv->state.clip_y1 * (1 - pwr) + y1 * pwr;
render_priv->state.clip_mode = 0;
- } else if (!render_priv->state.clip_drawing) {
+ } else if (!render_priv->state.clip_drawing_text) {
if (parse_vector_clip(render_priv, args, nargs))
render_priv->state.clip_drawing_mode = 0;
}