summaryrefslogtreecommitdiffstats
path: root/libass/ass_drawing.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_drawing.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_drawing.c')
-rw-r--r--libass/ass_drawing.c51
1 files changed, 8 insertions, 43 deletions
diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c
index c0ea548..11ff399 100644
--- a/libass/ass_drawing.c
+++ b/libass/ass_drawing.c
@@ -224,57 +224,21 @@ static bool drawing_add_curve(ASS_Drawing *drawing, ASS_DrawingToken *token,
}
/*
- * \brief Create and initialize a new drawing and return it
+ * \brief Convert token list to outline. Calls the line and curve evaluators.
*/
-ASS_Drawing *ass_drawing_new(ASS_Library *lib)
+ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, ASS_Library *lib, bool raw_mode)
{
- ASS_Drawing *drawing = calloc(1, sizeof(*drawing));
- if (!drawing)
- return NULL;
- rectangle_reset(&drawing->cbox);
drawing->library = lib;
- drawing->scale_x = 1.;
- drawing->scale_y = 1.;
-
- if (!outline_alloc(&drawing->outline, GLYPH_INITIAL_POINTS, GLYPH_INITIAL_SEGMENTS)) {
- free(drawing);
+ rectangle_reset(&drawing->cbox);
+ if (!outline_alloc(&drawing->outline, GLYPH_INITIAL_POINTS, GLYPH_INITIAL_SEGMENTS))
return NULL;
- }
- return drawing;
-}
-
-/*
- * \brief Free a drawing
- */
-void ass_drawing_free(ASS_Drawing *drawing)
-{
- if (drawing) {
- free(drawing->text);
- outline_free(&drawing->outline);
- }
- free(drawing);
-}
-
-/*
- * \brief Copy an ASCII string to the drawing text buffer
- */
-void ass_drawing_set_text(ASS_Drawing *drawing, char *str, size_t len)
-{
- free(drawing->text);
- drawing->text = strndup(str, len);
-}
-
-/*
- * \brief Convert token list to outline. Calls the line and curve evaluators.
- */
-ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, bool raw_mode)
-{
- bool started = false;
- ASS_Vector pen = {0, 0};
+ drawing->outline.n_points = drawing->outline.n_segments = 0;
ASS_DrawingToken *tokens = drawing_tokenize(drawing->text);
drawing_prepare(drawing);
+ bool started = false;
+ ASS_Vector pen = {0, 0};
ASS_DrawingToken *token = tokens;
while (token) {
// Draw something according to current command
@@ -349,5 +313,6 @@ ASS_Outline *ass_drawing_parse(ASS_Drawing *drawing, bool raw_mode)
error:
drawing_free_tokens(tokens);
+ outline_free(&drawing->outline);
return NULL;
}