diff --git a/pd/src/g_template.c b/pd/src/g_template.c index 91ed269b45df4ca77f49b4d89c36222713fe60d5..822e0200ba9710a21f1d0c1eed7743f2011f2ce9 100644 --- a/pd/src/g_template.c +++ b/pd/src/g_template.c @@ -1454,6 +1454,32 @@ char *get_strokelinejoin(int a) return (strokelinejoin); } +t_svg_attr *svg_getattr(t_svg *x, t_symbol *s) +{ + if (s == gensym("fill-opacity")) return &x->x_fillopacity; + else if (s == gensym("fill-rule")) return &x->x_fillrule; + else if (s == gensym("height")) return &x->x_height; + else if (s == gensym("opacity")) return &x->x_opacity; + else if (s == gensym("pointer-events")) return &x->x_pointerevents; + else if (s == gensym("rx") || s == gensym("r") || s == gensym("x2")) + return &x->x_rx; + else if (s == gensym("ry") || s == gensym("y2")) + return &x->x_ry; + else if (s == gensym("stroke-opacity")) return &x->x_strokeopacity; + else if (s == gensym("stroke-dashoffset")) return &x->x_strokedashoffset; + else if (s == gensym("stroke-linecap")) return &x->x_strokelinecap; + else if (s == gensym("stroke-linejoin")) return &x->x_strokelinejoin; + else if (s == gensym("stroke-miterlimit")) return &x->x_strokemiterlimit; + else if (s == gensym("stroke-width")) return &x->x_strokewidth; + else if (s == gensym("vis")) return &x->x_vis; + else if (s == gensym("width")) return &x->x_width; + else if (s == gensym("x") || s == gensym("cx") || s == gensym("x1")) + return &x->x_x; + else if (s == gensym("y") || s == gensym("cy") || s == gensym("y1")) + return &x->x_y; + return 0; +} + void svg_parsetransform(t_svg *x, t_template *template, t_word *data, t_float *mp1, t_float *mp2, t_float *mp3, t_float *mp4, t_float *mp5, t_float *mp6); @@ -1466,7 +1492,7 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, t_template *template, t_word *data, int *predraw_bbox, void *parent, t_scalar *sc) { - /* todo-- I'm mixing "c" with glist_getcanvas(c) a little too freely... + /* todo-- I'm mixing "c" with glist_getcanvas(c) too freely... need to experiment with gop scalars to make sure I'm not breaking anything */ int in_array = (sc->sc_vec != data); @@ -1521,102 +1547,49 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, (int)fielddesc_getfloat(fd+2, template, data, 1))); } else stroke = &s_; - //sys_vgui(".x%lx.c itemconfigure %s -stroke %s\n", - // glist_getcanvas(c), tag, stroke->s_name); gui_vmess("gui_draw_configure", "ssss", canvas_tag(glist_getcanvas(c)), tag, s->s_name, stroke->s_name); } - else if (s == gensym("fill-opacity")) - //sys_vgui(".x%lx.c itemconfigure %s -fillopacity %g\n", - // glist_getcanvas(c), tag, - // fielddesc_getcoord(&x->x_fillopacity.a_attr, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "fill-opacity", - fielddesc_getcoord(&x->x_fillopacity.a_attr, template, data, 1)); else if (s == gensym("fill-rule")) - //sys_vgui(".x%lx.c itemconfigure %s -fillrule %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_fillrule.a_attr, template, data, 1) ? - // "evenodd" : "nonzero"); gui_vmess("gui_draw_configure", "sssi", - canvas_tag(glist_getcanvas(c)), tag, "fill-rule", (int)fielddesc_getcoord( + canvas_tag(glist_getcanvas(c)), tag, "fill-rule", + (int)fielddesc_getcoord( &x->x_fillrule.a_attr, template, data, 1) ? "evenodd" : "nonzero"); - else if (s == gensym("opacity")) + else if (s == gensym("fill-opacity") || + s == gensym("opacity") || + s == gensym("stroke-dashoffset") || + s == gensym("stroke-miterlimit") || + s == gensym("stroke-opacity")) gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "opacity", - fielddesc_getcoord(&x->x_opacity.a_attr, template, data, 1)); + canvas_tag(glist_getcanvas(c)), tag, s->s_name, + fielddesc_getcoord( + &(svg_getattr(x, s)->a_attr), template, data, 1)); else if (s == gensym("pointer-events")) *predraw_bbox = 1; else if (s == gensym("stroke-linecap")) - //sys_vgui(".x%lx.c itemconfigure %s -strokelinecap %s\n", - // glist_getcanvas(c), tag, get_strokelinecap( - // (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr, - // template, data, 1))); gui_vmess("gui_draw_configure", "ssss", - canvas_tag(glist_getcanvas(c)), tag, "stroke-linecap", get_strokelinecap( - (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr, - template, data, 1))); + canvas_tag(glist_getcanvas(c)), tag, "stroke-linecap", + get_strokelinecap( + (int)fielddesc_getcoord(&x->x_strokelinecap.a_attr, + template, data, 1))); else if (s == gensym("stroke-linejoin")) - //sys_vgui(".x%lx.c itemconfigure %s -strokelinejoin %s\n", - // glist_getcanvas(c), tag, get_strokelinejoin( - // (int)fielddesc_getcoord(&x->x_strokelinejoin.a_attr, - // template, data, 1))); gui_vmess("gui_draw_configure", "ssss", - canvas_tag(glist_getcanvas(c)), tag, "stroke-linejoin", get_strokelinejoin( - (int)fielddesc_getcoord(&x->x_strokelinejoin.a_attr, - template, data, 1))); - else if (s == gensym("stroke-miterlimit")) - //sys_vgui(".x%lx.c itemconfigure %s -strokemiterlimit %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // &x->x_strokemiterlimit.a_attr, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "stroke-miterlimit", fielddesc_getcoord( - &x->x_strokemiterlimit.a_attr, template, data, 1)); - else if (s == gensym("stroke-opacity")) - //sys_vgui(".x%lx.c itemconfigure %s -strokeopacity %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // &x->x_strokeopacity.a_attr, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "stroke-opacity", fielddesc_getcoord( - &x->x_strokeopacity.a_attr, template, data, 1)); - else if (s == gensym("stroke-dashoffset")) - //sys_vgui(".x%lx.c itemconfigure %s -strokeopacity %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // &x->x_strokeopacity.a_attr, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "stroke-dashoffset", - fielddesc_getcoord( - &x->x_strokedashoffset.a_attr, template, data, 1)); - else if (s == gensym("stroke-width")) - { - //sys_vgui(".x%lx.c itemconfigure %s -strokewidth %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // &x->x_strokewidth.a_attr, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "stroke-width", fielddesc_getcoord( - &x->x_strokewidth.a_attr, template, data, 1)); - *predraw_bbox = 1; - } - else if (s == gensym("rx") || s == gensym("r") || s == gensym("x2")) - { - //sys_vgui(".x%lx.c itemconfigure %s -rx %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // x->x_vec+2, template, data, 1)); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, - s->s_name, fielddesc_getcoord( - &x->x_rx.a_attr, template, data, 1)); - *predraw_bbox = 1; - } - else if (s == gensym("ry") || s == gensym("y2")) + canvas_tag(glist_getcanvas(c)), tag, "stroke-linejoin", + get_strokelinejoin( + (int)fielddesc_getcoord(&x->x_strokelinejoin.a_attr, + template, data, 1))); + else if (s == gensym("stroke-width") || + s == gensym("rx") || s == gensym("r") || s == gensym("x2") || + s == gensym("ry") || s == gensym("y2") || + s == gensym("x") || s == gensym("cx") || s == gensym("x1") || + s == gensym("y") || s == gensym("cy") || s == gensym("y1") || + s == gensym("height") || s == gensym("width")) { - //sys_vgui(".x%lx.c itemconfigure %s -ry %g\n", - // glist_getcanvas(c), tag, fielddesc_getcoord( - // x->x_vec+3, template, data, 1)); gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, s->s_name, fielddesc_getcoord( - &x->x_ry.a_attr, template, data, 1)); + canvas_tag(glist_getcanvas(c)), tag, s->s_name, + fielddesc_getcoord( + &(svg_getattr(x, s)->a_attr), template, data, 1)); *predraw_bbox = 1; } else if (s == gensym("transform")) @@ -1635,10 +1608,6 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, x->x_pathrect_cache = 0; } svg_parsetransform(x, template, data, &m1, &m2, &m3, &m4, &m5, &m6); - //sys_vgui(".x%lx.c itemconfigure %s -matrix " - // "{ {%g %g} {%g %g} {%g %g} }\n", - // glist_getcanvas(c), tag, - // m1, m2, m3, m4, m5, m6); char mbuf[MAXPDSTRING]; sprintf(mbuf, "matrix(%g %g %g %g %g %g)", m1, m2, m3, m4, m5, m6); gui_vmess("gui_draw_configure", "ssss", @@ -1648,88 +1617,32 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, } else if (s == gensym("vis")) { - //sys_vgui(".x%lx.c itemconfigure %s -state %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden"); gui_vmess("gui_draw_configure", "ssss", - canvas_tag(glist_getcanvas(c)), tag, "visibility", (int)fielddesc_getcoord( - &x->x_vis.a_attr, template, data, 1) ? "visible" : "hidden"); - *predraw_bbox = 1; - } - else if (s == gensym("width")) - { - //sys_vgui(".x%lx.c itemconfigure %s -state %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden"); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "width", fielddesc_getcoord( - &x->x_width.a_attr, template, data, 1)); + canvas_tag(glist_getcanvas(c)), tag, "visibility", + (int)fielddesc_getcoord( + &x->x_vis.a_attr, template, data, 1) ? "visible" : "hidden"); *predraw_bbox = 1; } - else if (s == gensym("x") || s == gensym("cx") || s == gensym("x1")) - { - //sys_vgui(".x%lx.c itemconfigure %s -state %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden"); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, - s->s_name, fielddesc_getcoord( - &x->x_x.a_attr, template, data, 1)); - *predraw_bbox = 1; - } - - else if (s == gensym("y") || s == gensym("cy") || s == gensym("y1")) - { - //sys_vgui(".x%lx.c itemconfigure %s -state %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden"); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, - s->s_name, fielddesc_getcoord( - &x->x_y.a_attr, template, data, 1)); - *predraw_bbox = 1; - } - - else if (s == gensym("height")) - { - //sys_vgui(".x%lx.c itemconfigure %s -state %s\n", - // glist_getcanvas(c), tag, (int)fielddesc_getcoord( - // &x->x_vis.a_attr, template, data, 1) ? "normal" : "hidden"); - gui_vmess("gui_draw_configure", "sssf", - canvas_tag(glist_getcanvas(c)), tag, "height", fielddesc_getcoord( - &x->x_height.a_attr, template, data, 1)); - *predraw_bbox = 1; - } - - else if (s == gensym("stroke-dasharray")) { - // not ready yet... need a gui interface for variable size attrs if (x->x_ndash) { t_fielddesc *fd = x->x_strokedasharray; int i; - //sys_vgui(".x%lx.c itemconfigure %s -strokedasharray {", - // glist_getcanvas(c), tag); gui_start_vmess("gui_draw_configure", "sss", canvas_tag(glist_getcanvas(c)), tag, s->s_name); gui_start_array(); for (i = 0; i < x->x_ndash; i++) - { - //sys_vgui(" %g ", fielddesc_getcoord(fd+i, template, data, 1)); gui_f(fielddesc_getcoord(fd+i, template, data, 1)); - } - //sys_gui("}\n"); gui_end_array(); gui_end_vmess(); } } else if (s == gensym("data")) { - //sys_vgui(".x%lx.c coords .draw%lx.%lx {\\\n", - // glist_getcanvas(c), parent, data); char tagbuf[MAXPDSTRING]; - sprintf(tagbuf, "draw%lx.%lx", (long unsigned int)parent, (long unsigned int)data); + sprintf(tagbuf, "draw%lx.%lx", + (long unsigned int)parent, (long unsigned int)data); gui_start_vmess("gui_draw_configure", "sss", canvas_tag(glist_getcanvas(c)), tagbuf, "d"); /* let's turn off bbox caching so we can recalculate the bbox */ @@ -1774,8 +1687,6 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, char tagbuf[MAXPDSTRING]; sprintf(tagbuf, "draw%lx.%lx", (long unsigned int)parent, (long unsigned int)data); - //sys_vgui(".x%lx.c coords .draw%lx.%lx \\\n", - // glist_getcanvas(c), parent, data); gui_start_vmess("gui_draw_coords", "sss", canvas_tag(glist_getcanvas(c)), tagbuf, x->x_type->s_name); gui_start_array(); @@ -1799,11 +1710,9 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, gui_f(yval); gui_f(w); gui_f(h); - //sys_vgui("%g %g %g %g\\\n", xval, yval, w, h); } else { - //sys_vgui("%g %g\\\n", xval, yval); gui_f(xval); gui_f(yval); } @@ -1812,13 +1721,8 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, { int n = (x->x_type == gensym("circle")) ? 2 : x->x_nargs; for (i = 0; i < n; i++) - { - //sys_vgui("%g\\\n", fielddesc_getcoord( - // f+i, template, data, 1)); gui_f(fielddesc_getcoord(f+i, template, data, 1)); - } } - //sys_gui("\n"); gui_end_array(); gui_end_vmess(); } @@ -1935,31 +1839,6 @@ void svg_update(t_svg *x, t_symbol *s) svg_doupdate(x, c, s); } -t_svg_attr *svg_getattr(t_svg *x, t_symbol *s) -{ - if (s == gensym("fill-opacity")) return &x->x_fillopacity; - else if (s == gensym("fill-rule")) return &x->x_fillrule; - else if (s == gensym("height")) return &x->x_height; - else if (s == gensym("opacity")) return &x->x_opacity; - else if (s == gensym("pointer-events")) return &x->x_pointerevents; - else if (s == gensym("rx") || s == gensym("r") || s == gensym("x2")) - return &x->x_rx; - else if (s == gensym("ry") || s == gensym("y2")) - return &x->x_ry; - else if (s == gensym("stroke-opacity")) return &x->x_strokeopacity; - else if (s == gensym("stroke-dashoffset")) return &x->x_strokedashoffset; - else if (s == gensym("stroke-linecap")) return &x->x_strokelinecap; - else if (s == gensym("stroke-linejoin")) return &x->x_strokelinejoin; - else if (s == gensym("stroke-miterlimit")) return &x->x_strokemiterlimit; - else if (s == gensym("stroke-width")) return &x->x_strokewidth; - else if (s == gensym("vis")) return &x->x_vis; - else if (s == gensym("width")) return &x->x_width; - else if (s == gensym("x") || s == gensym("cx") || s == gensym("x1")) - return &x->x_x; - else if (s == gensym("y") || s == gensym("cy") || s == gensym("y1")) - return &x->x_y; - return 0; -} void svg_setattr(t_svg *x, t_symbol *s, t_int argc, t_atom *argv) { @@ -2422,7 +2301,7 @@ void svg_parsetransform(t_svg *x, t_template *template, t_word *data, /* this doesn't jibe with glist_xtopixels, ytopixels, etc. */ else if (type == gensym("rotate")) { - /* we need to convert degrees to radians */ + /* we need to convert degrees to radians for the matrix */ t_float a = (fielddesc_getfloat(fd++, template, data, 0)) * 3.14159 / 180; argc--;