Commit f7bf51a2 authored by Ivica Ico Bukvic's avatar Ivica Ico Bukvic
Browse files

Fixed segfault when creating undo for array apply (e.g. when changing array...

Fixed segfault when creating undo for array apply (e.g. when changing array size). Also expanded moving by tag to arrays and scalars. Now, the entire array even with a ton of points is moving like knife through the butter :-)
parent fd2ee7a7
......@@ -1049,7 +1049,7 @@ void *canvas_undo_set_apply(t_canvas *x, int n)
if (!x->gl_edit)
canvas_editmode(x, 1);
obj = glist_nth(x, n);
if (!glist_isselected(x, obj))
if (obj && !glist_isselected(x, obj))
glist_select(x, obj);
int nnotsel= glist_selectionindex(x, 0, 0); /* get number of all items for the offset below */
buf = (t_undo_apply *)getbytes(sizeof(*buf));
......
......@@ -1052,19 +1052,11 @@ static void graph_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy)
{
t_glist *x = (t_glist *)z;
if (!x->gl_isgraph)
text_widgetbehavior.w_displacefn(z, glist, dx, dy);
text_widgetbehavior.w_displacefnwtag(z, glist, dx, dy);
else
{
x->gl_obj.te_xpix += dx;
x->gl_obj.te_ypix += dy;
/*char tag[80];
sprintf(tag, "%s", rtext_gettag(glist_findrtext((x->gl_owner ? x->gl_owner: x), &x->gl_obj)));
sys_vgui(".x%lx.c move %s %d %d\n",
glist_getcanvas(x->gl_owner), tag, dx, dy);
sys_vgui(".x%lx.c move %sR %d %d\n",
glist_getcanvas(x->gl_owner), tag, dx, dy);*/
//glist_redraw(x);
//gobj_select(z, glist, 1);
canvas_fixlinesfor(glist_getcanvas(glist), &x->gl_obj);
}
}
......@@ -1092,16 +1084,23 @@ static void graph_displace(t_gobj *z, t_glist *glist, int dx, int dy)
static void graph_select(t_gobj *z, t_glist *glist, int state)
{
//fprintf(stderr,"graph_select\n");
//fprintf(stderr,"graph_select .x%lx...\n", (t_int)z);
t_glist *x = (t_glist *)z;
if (!x->gl_isgraph)
text_widgetbehavior.w_selectfn(z, glist, state);
else if(glist_istoplevel(glist))
else //if(glist_istoplevel(glist))
{
//fprintf(stderr,"...yes\n");
t_rtext *y = glist_findrtext(glist, &x->gl_obj);
if (canvas_showtext(x))
rtext_select(y, state);
sys_vgui(".x%lx.c itemconfigure %sR -fill %s\n", glist,
t_glist *canvas;
if (!glist_istoplevel(glist)) {
canvas = glist_getcanvas(glist);
} else {
canvas = glist;
}
sys_vgui(".x%lx.c itemconfigure %sR -fill %s\n", canvas,
rtext_gettag(y), (state? "$select_color" : "$graph_outline"));
/*
sys_vgui(".x%lx.c itemconfigure graph%lx -fill %s\n",
......@@ -1109,13 +1108,13 @@ static void graph_select(t_gobj *z, t_glist *glist, int state)
(state? "$select_color" : "$graph_outline"));
*/
sys_vgui(".x%lx.c itemconfigure %s -fill %s\n",
glist, rtext_gettag(y),
canvas, rtext_gettag(y),
(state? "$select_color" : "black"));
t_gobj *g;
if (x->gl_list)
for (g = x->gl_list; g; g = g->g_next)
gobj_select(g, x, state);
sys_vgui("pdtk_select_all_gop_widgets .x%lx %s %d\n", glist, rtext_gettag(glist_findrtext(glist, &x->gl_obj)), state);
sys_vgui("pdtk_select_all_gop_widgets .x%lx %s %d\n", canvas, rtext_gettag(glist_findrtext(glist, &x->gl_obj)), state);
}
}
......
......@@ -204,7 +204,7 @@ static void scalar_drawselectrect(t_scalar *x, t_glist *glist, int state)
scalar_getrect(&x->sc_gobj, glist, &x1, &y1, &x2, &y2);
x1--; x2++; y1--; y2++;
sys_vgui(".x%lx.c create line %d %d %d %d %d %d %d %d %d %d \
-width 0 -fill $select_color -tags select%lx\n",
-width 0 -fill $select_color -tags {select%lx selected}\n",
glist_getcanvas(glist), x1, y1, x1, y2, x2, y2, x2, y1, x1, y1,
x);
}
......
......@@ -1173,14 +1173,16 @@ static void curve_vis(t_gobj *z, t_glist *glist,
fill, outline);
else sys_vgui("-fill %s\\\n", outline);
if (flags & BEZ) sys_vgui("-smooth 1\\\n");
sys_vgui("-tags curve%lx\n", data);
sys_vgui("-tags .x%lx%s.curve%lx\n", glist_getcanvas(glist),
(glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))),data);
}
else post("warning: curves need at least two points to be graphed");
}
else
{
if (n > 1) sys_vgui(".x%lx.c delete curve%lx\n",
glist_getcanvas(glist), data);
if (n > 1) sys_vgui(".x%lx.c delete .x%lx%s.curve%lx\n",
glist_getcanvas(glist), glist_getcanvas(glist),
(glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))),data);
}
}
......@@ -1646,6 +1648,7 @@ static void plot_vis(t_gobj *z, t_glist *glist,
t_word *data, t_template *template, t_float basex, t_float basey,
int tovis)
{
//fprintf(stderr,"plot_vis %lx %lx %lx %s\n", (t_int)z, (t_int)glist, (t_int)glist_getcanvas(glist), rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj)));
t_plot *x = (t_plot *)z;
int elemsize, yonset, wonset, xonset, i;
t_canvas *elemtemplatecanvas;
......@@ -1717,13 +1720,14 @@ static void plot_vis(t_gobj *z, t_glist *glist,
{
//we subtract 1 from y to keep it in sync with the rest of the types of templates
sys_vgui(
".x%lx.c create rectangle %d %d %d %d -fill black -width 0 -tags plot%lx\n",
".x%lx.c create rectangle %d %d %d %d -fill black -width 0 -tags .x%lx%s.plot%lx\n",
glist_getcanvas(glist),
ixpix, (int)glist_ytopixels(glist,
basey + fielddesc_cvttocoord(yfielddesc, minyval)) - 1,
inextx, (int)(glist_ytopixels(glist,
basey + fielddesc_cvttocoord(yfielddesc, maxyval))
+ linewidth) - 1, data);
+ linewidth) - 1, glist_getcanvas(glist),
(glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
ndrawn++;
minyval = 1e20;
maxyval = -1e20;
......@@ -1816,7 +1820,8 @@ static void plot_vis(t_gobj *z, t_glist *glist,
outline, outline);
if (style == PLOTSTYLE_BEZ) sys_vgui("-smooth 1\\\n");
sys_vgui("-tags plot%lx\n", data);
sys_vgui("-tags .x%lx%s.plot%lx\n", glist_getcanvas(glist),
(glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
}
else if (linewidth > 0)
{
......@@ -1859,7 +1864,7 @@ static void plot_vis(t_gobj *z, t_glist *glist,
sys_vgui("-fill %s\\\n", outline);
if (style == PLOTSTYLE_BEZ) sys_vgui("-smooth 1\\\n");
sys_vgui("-tags plot%lx\n", data);
sys_vgui("-tags .x%lx%s.plot%lx\n", glist_getcanvas(glist), (glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
}
}
/* We're done with the outline; now draw all the points.
......@@ -1911,8 +1916,8 @@ static void plot_vis(t_gobj *z, t_glist *glist,
}
}
/* and then the trace */
sys_vgui(".x%lx.c delete plot%lx\n",
glist_getcanvas(glist), data);
sys_vgui(".x%lx.c delete .x%lx%s.plot%lx\n",
glist_getcanvas(glist), glist_getcanvas(glist), (glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
}
}
......@@ -2139,9 +2144,11 @@ static void drawnumber_vis(t_gobj *z, t_glist *glist,
glist_getcanvas(glist), xloc, yloc, colorstring, buf);
sys_vgui(" -font {{%s} %d %s}", sys_font,
sys_hostfontsize(glist_getfont(glist)), sys_fontweight);
sys_vgui(" -tags drawnumber%lx\n", data);
sys_vgui(" -tags .x%lx%s.drawnumber%lx\n",
glist_getcanvas(glist), (glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
}
else sys_vgui(".x%lx.c delete drawnumber%lx\n", glist_getcanvas(glist), data);
else sys_vgui(".x%lx.c delete .x%lx%s.drawnumber%lx\n", glist_getcanvas(glist),
glist_getcanvas(glist), (glist_istoplevel(glist) ? "bogus" : rtext_gettag(glist_findrtext(glist_getcanvas(glist), &glist->gl_obj))), data);
}
static t_float drawnumber_motion_ycumulative;
......
......@@ -1150,6 +1150,7 @@ static void text_getrect(t_gobj *z, t_glist *glist,
static void text_displace(t_gobj *z, t_glist *glist,
int dx, int dy)
{
//fprintf(stderr,"text_displace\n");
t_text *x = (t_text *)z;
x->te_xpix += dx;
x->te_ypix += dy;
......@@ -1166,14 +1167,15 @@ static void text_displace(t_gobj *z, t_glist *glist,
static void text_displace_withtag(t_gobj *z, t_glist *glist,
int dx, int dy)
{
//fprintf(stderr,"text_displace_withtag\n");
t_text *x = (t_text *)z;
x->te_xpix += dx;
x->te_ypix += dy;
if (glist_isvisible(glist))
{
t_rtext *y = glist_findrtext(glist, x);
text_drawborder_withtag(x, glist, rtext_gettag(y),
rtext_width(y), rtext_height(y), 0);
//text_drawborder_withtag(x, glist, rtext_gettag(y),
// rtext_width(y), rtext_height(y), 0);
canvas_fixlinesfor(glist_getcanvas(glist), x);
/*if this is a subpatcher in which case we may be possibly moving nlets around
which in turn requires that we redraw parent's nlets */
......
......@@ -2897,7 +2897,7 @@ proc pdtk_canvas_mouseup {name x y b} {
#}
proc pdtk_select_all_gop_widgets {name gop state} {
#puts stderr "======================$name"
#puts stderr "======================$name $gop"
foreach item [$name.c find all] {
#puts stderr [$name.c gettags $item]
foreach tag [$name.c gettags $item] {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment