diff --git a/pd/src/g_template.c b/pd/src/g_template.c index 8a1c19e13de64def06460d84a14c11491d38e339..91ed269b45df4ca77f49b4d89c36222713fe60d5 100644 --- a/pd/src/g_template.c +++ b/pd/src/g_template.c @@ -1598,18 +1598,18 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, &x->x_strokewidth.a_attr, template, data, 1)); *predraw_bbox = 1; } - else if (s == gensym("rx") || s == gensym("r")) + 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 == gensym("r") ? "r" : "rx", fielddesc_getcoord( + s->s_name, fielddesc_getcoord( &x->x_rx.a_attr, template, data, 1)); *predraw_bbox = 1; } - else if (s == gensym("ry")) + else if (s == gensym("ry") || s == gensym("y2")) { //sys_vgui(".x%lx.c itemconfigure %s -ry %g\n", // glist_getcanvas(c), tag, fielddesc_getcoord( @@ -1666,26 +1666,26 @@ void svg_sendupdate(t_svg *x, t_canvas *c, t_symbol *s, &x->x_width.a_attr, template, data, 1)); *predraw_bbox = 1; } - else if (s == gensym("x") || s == gensym("cx")) + 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 == gensym("x") ? "x" : "cx", fielddesc_getcoord( + s->s_name, fielddesc_getcoord( &x->x_x.a_attr, template, data, 1)); *predraw_bbox = 1; } - else if (s == gensym("y") || s == gensym("cy")) + 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 == gensym("y") ? "y" : "cy", fielddesc_getcoord( + s->s_name, fielddesc_getcoord( &x->x_y.a_attr, template, data, 1)); *predraw_bbox = 1; } @@ -1942,8 +1942,10 @@ t_svg_attr *svg_getattr(t_svg *x, t_symbol *s) 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")) return &x->x_rx; - else if (s == gensym("ry")) return &x->x_ry; + 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; @@ -1952,8 +1954,10 @@ t_svg_attr *svg_getattr(t_svg *x, t_symbol *s) 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")) return &x->x_x; - else if (s == gensym("y") || s == gensym("cy")) return &x->x_y; + 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; } @@ -3297,7 +3301,6 @@ static void draw_getrect(t_gobj *z, t_glist *glist, &x1, &y1, &x2, &y2); } else if (sa->x_type == gensym("polyline") || - sa->x_type == gensym("line") || sa->x_type == gensym("polygon")) { int nxy = n >> 1; @@ -3334,21 +3337,32 @@ static void draw_getrect(t_gobj *z, t_glist *glist, } else if (sa->x_type == gensym("rect") || sa->x_type == gensym("circle") || - sa->x_type == gensym("ellipse")) + sa->x_type == gensym("ellipse") || + sa->x_type == gensym("line")) { t_float m1, m2, m3, m4, m5, m6; /* matrix */ t_float xx1, yy1, xx2, yy2; t_float tx1, ty1, tx2, ty2, t5, t6; /* transformed points */ - if (sa->x_type == gensym("rect")) + if (sa->x_type == gensym("rect") || sa->x_type == gensym("line")) { xx1 = fielddesc_getcoord(&sa->x_x.a_attr, template, data, 0); yy1 = fielddesc_getcoord(&sa->x_y.a_attr, template, data, 0); - t_float rwidth = fielddesc_getcoord(&sa->x_width.a_attr, - template, data, 0); - t_float rheight = fielddesc_getcoord(&sa->x_height.a_attr, - template, data, 0); - xx2 = xx1 + rwidth; - yy2 = yy1 + rheight; + if (sa->x_type == gensym("rect")) + { + t_float rwidth = fielddesc_getcoord(&sa->x_width.a_attr, + template, data, 0); + t_float rheight = fielddesc_getcoord(&sa->x_height.a_attr, + template, data, 0); + xx2 = xx1 + rwidth; + yy2 = yy1 + rheight; + } + else + { + xx2 = fielddesc_getcoord(&sa->x_rx.a_attr, + template, data, 0); + yy2 = fielddesc_getcoord(&sa->x_ry.a_attr, + template, data, 0); + } } else { @@ -3378,7 +3392,7 @@ static void draw_getrect(t_gobj *z, t_glist *glist, transformed. Since the shapes could be crazy skewed/rotated I have to check each coordinate of the rect, so I do it again below. */ - if (sa->x_type == gensym("rect")) + if (sa->x_type == gensym("rect") || sa->x_type == gensym("line")) mset(mtx2, xx1, yy1, xx2, yy1, 0, 0); else mset(mtx2, xx1, yy1 + yy2, xx1 + xx2, yy1, 0, 0); @@ -3393,7 +3407,7 @@ static void draw_getrect(t_gobj *z, t_glist *glist, if (tx2 > x2) x2 = tx2; if (ty1 > y2) y2 = ty1; if (ty2 > y2) y2 = ty2; - if (sa->x_type == gensym("rect")) + if (sa->x_type == gensym("rect") || sa->x_type == gensym("line")) mset(mtx2, xx2, yy2, xx1, yy2, 0, 0); else mset(mtx2, xx1, yy1 - yy2, xx1 - xx2, yy1, 0, 0); @@ -3544,22 +3558,25 @@ static void svg_togui(t_svg *x, t_template *template, t_word *data) } if (x->x_rx.a_flag) { - gui_s(x->x_type == gensym("circle") ? "r" : "rx"); + gui_s(x->x_type == gensym("circle") ? "r" : + x->x_type == gensym("line") ? "x2" : "rx"); gui_f(fielddesc_getfloat(&x->x_rx.a_attr, template, data, 1)); } if (x->x_ry.a_flag) { - gui_s("ry"); + gui_s(x->x_type == gensym("ellipse") ? "ry" : "y2"); gui_f(fielddesc_getfloat(&x->x_ry.a_attr, template, data, 1)); } if (x->x_x.a_flag) { - gui_s(x->x_type == gensym("rect") ? "x" : "cx"); + gui_s(x->x_type == gensym("rect") ? "x" : + x->x_type == gensym("line") ? "x1" : "cx"); gui_f(fielddesc_getfloat(&x->x_x.a_attr, template, data, 1)); } if (x->x_y.a_flag) { - gui_s(x->x_type == gensym("rect") ? "y" : "cy"); + gui_s(x->x_type == gensym("rect") ? "y" : + x->x_type == gensym("line") ? "y1" : "cy"); gui_f(fielddesc_getfloat(&x->x_y.a_attr, template, data, 1)); } if (x->x_width.a_flag) @@ -4244,15 +4261,15 @@ static void draw_setup(void) gensym("width"), A_GIMME, 0); class_addmethod(svg_class, (t_method)svg_setattr, gensym("x"), A_GIMME, 0); - class_addmethod(svg_class, (t_method)svg_linepoints, + class_addmethod(svg_class, (t_method)svg_setattr, gensym("x1"), A_GIMME, 0); - class_addmethod(svg_class, (t_method)svg_linepoints, + class_addmethod(svg_class, (t_method)svg_setattr, gensym("x2"), A_GIMME, 0); class_addmethod(svg_class, (t_method)svg_setattr, gensym("y"), A_GIMME, 0); - class_addmethod(svg_class, (t_method)svg_linepoints, + class_addmethod(svg_class, (t_method)svg_setattr, gensym("y1"), A_GIMME, 0); - class_addmethod(svg_class, (t_method)svg_linepoints, + class_addmethod(svg_class, (t_method)svg_setattr, gensym("y2"), A_GIMME, 0); }