diff options
author | Oleg Oshmyan <chortos@inbox.lv> | 2014-05-18 00:31:14 +0100 |
---|---|---|
committer | Oleg Oshmyan <chortos@inbox.lv> | 2014-06-06 15:08:16 +0100 |
commit | 0908a56be261915f9155e771bca6593645418da8 (patch) | |
tree | 5bd60dba152db7441a4c88fb9b76e46defb433a3 | |
parent | cc9aaeb4596af2c57d09ae8853670b5c811d19cd (diff) | |
download | libass-0908a56be261915f9155e771bca6593645418da8.tar.bz2 libass-0908a56be261915f9155e771bca6593645418da8.tar.xz |
Introduce ass_drawing_add_chars for adding a whole string at once
-rw-r--r-- | libass/ass_drawing.c | 14 | ||||
-rw-r--r-- | libass/ass_drawing.h | 1 | ||||
-rw-r--r-- | libass/ass_parse.c | 7 |
3 files changed, 18 insertions, 4 deletions
diff --git a/libass/ass_drawing.c b/libass/ass_drawing.c index 258ea30..a5938c5 100644 --- a/libass/ass_drawing.c +++ b/libass/ass_drawing.c @@ -381,6 +381,20 @@ void ass_drawing_add_char(ASS_Drawing* drawing, char symbol) } /* + * \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; +} + +/* * \brief Create a hashcode for the drawing * XXX: To avoid collisions a better hash algorithm might be useful. */ diff --git a/libass/ass_drawing.h b/libass/ass_drawing.h index b17d7e3..a6c9186 100644 --- a/libass/ass_drawing.h +++ b/libass/ass_drawing.h @@ -72,6 +72,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_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 adab0e6..a62cea6 100644 --- a/libass/ass_parse.c +++ b/libass/ass_parse.c @@ -241,7 +241,7 @@ static int parse_vector_clip(ASS_Renderer *render_priv, int scale = 1; int res = 0; ASS_Drawing *drawing = render_priv->state.clip_drawing; - char *p; + struct arg text; if (nargs != 1 && nargs != 2) return 0; @@ -255,9 +255,8 @@ static int parse_vector_clip(ASS_Renderer *render_priv, drawing->scale = scale; drawing->scale_x = render_priv->font_scale_x * render_priv->font_scale; drawing->scale_y = render_priv->font_scale; - p = args[nargs - 1].start; - while (p < args[nargs - 1].end) - ass_drawing_add_char(drawing, *p++); + text = args[nargs - 1]; + ass_drawing_add_chars(drawing, text.start, text.end - text.start); return 1; } |