From 042a22af3cb47a3320083a6b3ca8dbd8e255678d Mon Sep 17 00:00:00 2001 From: Oleg Oshmyan Date: Fri, 30 May 2014 00:15:03 +0100 Subject: Simplify drawing text assignment --- libass/ass_drawing.c | 31 ++++++------------------------- libass/ass_drawing.h | 7 +------ libass/ass_parse.c | 2 +- libass/ass_render.c | 4 ++-- 4 files changed, 10 insertions(+), 34 deletions(-) (limited to 'libass') diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c index a5938c5..7837e27 100644 --- a/libass/ass_drawing.c +++ b/libass/ass_drawing.c @@ -335,8 +335,6 @@ ASS_Drawing *ass_drawing_new(ASS_Library *lib, FT_Library ftlib) ASS_Drawing *drawing; drawing = calloc(1, sizeof(*drawing)); - drawing->text = calloc(1, DRAWING_INITIAL_SIZE); - drawing->size = DRAWING_INITIAL_SIZE; drawing->cbox.xMin = drawing->cbox.yMin = INT_MAX; drawing->cbox.xMax = drawing->cbox.yMax = INT_MIN; drawing->ftlibrary = ftlib; @@ -367,31 +365,14 @@ void ass_drawing_free(ASS_Drawing* drawing) } /* - * \brief Add one ASCII character to the drawing text buffer + * \brief Copy an ASCII string to the drawing text buffer */ -void ass_drawing_add_char(ASS_Drawing* drawing, char symbol) +void ass_drawing_set_text(ASS_Drawing* drawing, char *str, size_t len) { - drawing->text[drawing->i++] = symbol; - drawing->text[drawing->i] = 0; - - if (drawing->i + 1 >= drawing->size) { - drawing->size *= 2; - drawing->text = realloc(drawing->text, drawing->size); - } -} - -/* - * \brief Add an ASCII string to the drawing text buffer - */ -void ass_drawing_add_chars(ASS_Drawing* drawing, char *str, int n) -{ - if (drawing->i + n + 1 >= drawing->size) { - drawing->size = drawing->i + n + 1; - drawing->text = realloc(drawing->text, drawing->size); - } - - memcpy(drawing->text + drawing->i, str, n); - drawing->text[drawing->i += n] = 0; + free(drawing->text); + drawing->text = malloc(len + 1); + memcpy(drawing->text, str, len); + drawing->text[len] = 0; } /* diff --git a/libass/ass_drawing.h b/libass/ass_drawing.h index a6c9186..62010eb 100644 --- a/libass/ass_drawing.h +++ b/libass/ass_drawing.h @@ -24,8 +24,6 @@ #include "ass.h" -#define DRAWING_INITIAL_SIZE 256 - typedef enum { TOKEN_MOVE, TOKEN_MOVE_NC, @@ -46,7 +44,6 @@ typedef struct ass_drawing_token { typedef struct { char *text; // drawing string - int i; // text index int scale; // scale (1-64) for subpixel accuracy double pbo; // drawing will be shifted in y direction by this amount double scale_x; // FontScaleX @@ -60,7 +57,6 @@ typedef struct { // private FT_Library ftlibrary; // needed for font ops ASS_Library *library; - int size; // current buffer size ASS_DrawingToken *tokens; // tokenized drawing int max_points; // current maximum size int max_contours; @@ -71,8 +67,7 @@ typedef struct { ASS_Drawing *ass_drawing_new(ASS_Library *lib, FT_Library ftlib); void ass_drawing_free(ASS_Drawing* drawing); -void ass_drawing_add_char(ASS_Drawing* drawing, char symbol); -void ass_drawing_add_chars(ASS_Drawing* drawing, char *str, int n); +void ass_drawing_set_text(ASS_Drawing* drawing, char *str, size_t n); void ass_drawing_hash(ASS_Drawing* drawing); FT_Outline *ass_drawing_parse(ASS_Drawing *drawing, int raw_mode); diff --git a/libass/ass_parse.c b/libass/ass_parse.c index afba8a7..2e74842 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -256,7 +256,7 @@ static int parse_vector_clip(ASS_Renderer *render_priv, drawing->scale_x = render_priv->font_scale_x * render_priv->font_scale; drawing->scale_y = render_priv->font_scale; text = args[nargs - 1]; - ass_drawing_add_chars(drawing, text.start, text.end - text.start); + ass_drawing_set_text(drawing, text.start, text.end - text.start); return 1; } diff --git a/libass/ass_render.c b/libass/ass_render.c index 0544930..419dc7b 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1934,7 +1934,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, q++; while ((*q != '{') && (*q != 0)) q++; - ass_drawing_add_chars(drawing, p, q - p); + ass_drawing_set_text(drawing, p, q - p); code = 0xfffc; // object replacement character p = q; break; @@ -1961,7 +1961,7 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, memset(info, 0, sizeof(GlyphInfo)); // Parse drawing - if (drawing->i) { + if (drawing->text) { drawing->scale_x = render_priv->state.scale_x * render_priv->font_scale; drawing->scale_y = render_priv->state.scale_y * -- cgit v1.2.3