summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOleg Oshmyan <chortos@inbox.lv>2014-05-18 00:31:14 +0100
committerOleg Oshmyan <chortos@inbox.lv>2014-06-06 15:08:16 +0100
commit0908a56be261915f9155e771bca6593645418da8 (patch)
tree5bd60dba152db7441a4c88fb9b76e46defb433a3
parentcc9aaeb4596af2c57d09ae8853670b5c811d19cd (diff)
downloadlibass-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.c14
-rw-r--r--libass/ass_drawing.h1
-rw-r--r--libass/ass_parse.c7
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;
}