diff options
Diffstat (limited to 'web/web_svg.c')
-rw-r--r-- | web/web_svg.c | 69 |
1 files changed, 2 insertions, 67 deletions
diff --git a/web/web_svg.c b/web/web_svg.c index 2f7dc07..3d3288c 100644 --- a/web/web_svg.c +++ b/web/web_svg.c @@ -1,4 +1,5 @@ #include "web_svg.h" +#include "web_dom.h" #include "board.h" #include "comp.h" @@ -19,68 +20,11 @@ #define C_WIRE "#909ca0" #define C_WIRE_INNER "#d8e6ec" -struct elem { - char *ns, *name, *content; - int n_attrs, size_attrs; - char **attr_names, **attr_vals; -}; - -struct elem *elem_init(char *ns, char *name, int size_attrs) -{ - struct elem *e = malloc(sizeof(*e)); - - e->ns = ns ? strdup(ns) : NULL; - e->name = strdup(name); - - e->n_attrs = 0; - e->size_attrs = size_attrs; - e->attr_names = malloc(size_attrs * sizeof(*(e->attr_names))); - e->attr_vals = malloc(size_attrs * sizeof(*(e->attr_vals))); - e->content = NULL; - - return e; -} - static inline struct elem *svg_elem_init(char *name, int size_attrs) { return elem_init("http://www.w3.org/2000/svg", name, size_attrs); } -void elem_free(struct elem *e) -{ - for(int i = 0; i < e->n_attrs; ++i) { - free(e->attr_names[i]); - free(e->attr_vals[i]); - } - - free(e->content); - free(e->attr_names); - free(e->attr_vals); - free(e->name); - free(e); -} - -void elem_add_attr(struct elem *e, char *name, char *val) -{ - if (e->n_attrs == e->size_attrs) { - e->size_attrs *= 2; - e->attr_names = realloc(e->attr_names, - e->size_attrs * sizeof(*(e->attr_names))); - e->attr_vals = realloc(e->attr_vals, - e->size_attrs * sizeof(*(e->attr_vals))); - } - - e->attr_names[e->n_attrs] = strdup(name); - e->attr_vals[e->n_attrs++] = strdup(val); -} - -void elem_add_attr_double(struct elem *e, char *name, double val) -{ - char str[512]; - sprintf(str, "%f", val); - elem_add_attr(e, name, str); -} - // draws a ring if angles are equal struct elem *gen_arc(double a1, double a2, double r1, double r2, char *col) { @@ -204,15 +148,6 @@ int draw_numbers(int elemc, struct elem **elemv) return elemc; } -void append_elemv(char *sel, int elemc, struct elem **elemv) -{ - EM_ASM({elemAppendElemv($0, $1, $2, $3, $4, $5, $6, $7, $8)}, - sel, elemc, elemv, - offsetof(struct elem, ns), offsetof(struct elem, name), - offsetof(struct elem, content), offsetof(struct elem, n_attrs), - offsetof(struct elem, attr_names), offsetof(struct elem, attr_vals)); -} - void svg_draw_board() { struct elem **elemv = malloc(200 * sizeof(*elemv)); @@ -238,7 +173,7 @@ void svg_draw_board() append_elemv("#dartboard .base", elemc, elemv); for (int i = 0; i < elemc; ++i) - free(elemv[i]); + elem_free(elemv[i]); free(elemv); } |