diff --git a/pd/src/g_array.c b/pd/src/g_array.c index 1699faef9b6a412bb435fc39eb656c1342ce99d2..54941f0da089061c9ab01ba81215a32751b51289 100644 --- a/pd/src/g_array.c +++ b/pd/src/g_array.c @@ -67,7 +67,7 @@ void garray_arrayviewlist_close(t_garray *x); void array_resize(t_array *x, int n) { - //fprintf(stderr,"array_resize\n"); + //fprintf(stderr,"array_resize %d\n", n); int elemsize, oldn; t_template *template = template_findbyname(x->a_templatesym); if (n < 1) @@ -271,11 +271,12 @@ int garray_joc(t_garray *x) return (x->x_joc); } - /* if there is one garray in a graph, reset the graph's coordinates - to fit a new size and style for the garray */ -void garray_fittograph(t_garray *x, int n) + /* if there is one garray in a graph, reset the graph's coordinates + to fit a new size and style for the garray */ + // flag options -1 = don't resize or redraw, 0 = resize, 1 = resize and redraw +void garray_fittograph(t_garray *x, int n, int flag) { - //fprintf(stderr,"garray_fittoraph %d\n", n); + //fprintf(stderr,"garray_fittograph %d %d\n", n, flag); // here we check for x->x_glist validity because when creating // a new array from the menu gl is null at the first garray_vis call if (!x->x_glist) @@ -284,6 +285,7 @@ void garray_fittograph(t_garray *x, int n) t_glist *gl = x->x_glist; if (gl->gl_list == &x->x_gobj && !x->x_gobj.g_next) { + //fprintf(stderr,"loop\n"); vmess(&gl->gl_pd, gensym("bounds"), "ffff", 0., gl->gl_y1, (double) (x->x_style == PLOTSTYLE_POINTS || x->x_style == PLOTSTYLE_BARS @@ -294,7 +296,13 @@ void garray_fittograph(t_garray *x, int n) close the properties which is annoying */ gfxstub_deleteforkey(gl); } - array_resize_and_redraw(array, x->x_glist, n); + if (flag >= 0) + { + if (flag == 1) + array_resize_and_redraw(array, x->x_glist, n); + else + array_resize(array, n); + } } /* handle "array" message to glists; call graph_scalar above with @@ -375,7 +383,8 @@ t_garray *graph_array(t_glist *gl, t_symbol *s, int argc, t_atom *argv) // when creating from the menu but not when loading from the file) int gop_w = (x->x_style == PLOTSTYLE_POINTS || x->x_style == PLOTSTYLE_BARS || n == 1 ? n : n-1); - if (gl->gl_x2 < gop_w) gl->gl_x2 = gop_w; + //fprintf(stderr,"graph_array glist->gl_x2=%g gop_w=%d n=%d\n", gl->gl_x2, gop_w, n); + if (gl->gl_x2 != gop_w) gl->gl_x2 = gop_w; template_setfloat(template, gensym("style"), x->x_scalar->sc_vec, x->x_style, 1); @@ -392,7 +401,7 @@ t_garray *graph_array(t_glist *gl, t_symbol *s, int argc, t_atom *argv) /* todo: need to test to see if this is necessary doesn't seem like it is... - garray_fittograph(x, n); + garray_fittograph(x, n, 1); */ return (x); } @@ -477,7 +486,7 @@ void glist_arraydialog(t_glist *parent, t_symbol *s, int argc, t_atom *argv) canvas_dirty(parent, 1); //canvas_redraw(glist_getcanvas(parent)); - garray_fittograph(a, (int)size); + garray_fittograph(a, (int)size, 1); sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (long unsigned int)glist_getcanvas(parent)); } @@ -571,7 +580,7 @@ void garray_arraydialog(t_garray *x, t_symbol *s, int argc, t_atom *argv) if (style != x->x_style) { x->x_style = style; - garray_fittograph(x, size); + garray_fittograph(x, size, 1); } //fprintf(stderr,"style=%d %f\n", style, (t_float)x->x_style); template_setfloat(scalartemplate, gensym("style"), @@ -1254,6 +1263,8 @@ static void garray_delete(t_gobj *z, t_glist *glist) /* nothing to do */ } +extern int do_not_redraw; + static void garray_vis(t_gobj *z, t_glist *glist, int vis) { //fprintf(stderr,"garray_vis %d\n", vis); @@ -1264,9 +1275,13 @@ static void garray_vis(t_gobj *z, t_glist *glist, int vis) int ne = a->a_n; int n = (x->x_style == PLOTSTYLE_POINTS || x->x_style == PLOTSTYLE_BARS || ne == 1 ? ne : ne-1); - if (glist->gl_x2 < n) { + //fprintf(stderr,"garray_vis glist->gl_x2=%g n=%d a->a_n=%d\n", glist->gl_x2, n, a->a_n); + if (glist->gl_x2 != n) { glist->gl_x2 = n; - garray_fittograph(x, n); + // this causes infinite recursion when changing array size from dialog + do_not_redraw = 1; + garray_fittograph(x, n, 0); + do_not_redraw = 0; } } gobj_vis(&x->x_scalar->sc_gobj, glist, vis); @@ -1778,10 +1793,12 @@ void garray_resize(t_garray *x, t_floatarg f) { t_array *array = garray_getarray(x); int n = (f < 1 ? 1 : f); - garray_fittograph(x, n);/*template_getfloat( + //fprintf(stderr,"garray_resize %d\n", n); + array_resize(array, n); + garray_fittograph(x, n, -1);/*template_getfloat( template_findbyname(x->x_scalar->sc_template), gensym("style"), x->x_scalar->sc_vec, 1));*/ - array_resize_and_redraw(array, x->x_glist, n); + //array_resize_and_redraw(array, x->x_glist, n); if (x->x_usedindsp) canvas_update_dsp(); } diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c index 4503d1ef17f845929236c671450ca2c38cd3d728..f8f8af4d79a7c463e13c9405adc4fd92ce15f642 100644 --- a/pd/src/g_canvas.c +++ b/pd/src/g_canvas.c @@ -1181,7 +1181,7 @@ void canvas_closebang(t_canvas *x) /* needed for readjustment of garrays */ extern t_array *garray_getarray(t_garray *x); -extern void garray_fittograph(t_garray *x, int n); +extern void garray_fittograph(t_garray *x, int n, int redraw); extern t_rtext *glist_findrtext(t_glist *gl, t_text *who); extern void rtext_gettext(t_rtext *x, char **buf, int *bufsize); @@ -1217,7 +1217,7 @@ static void canvas_relocate(t_canvas *x, t_symbol *canvasgeom, { a = garray_getarray(ga); num_elem = a->a_n; - garray_fittograph(ga, num_elem); + garray_fittograph(ga, num_elem, 1); } } } diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c index d01cb8ad46034f53e31cd8e5e4a60d642b4b509e..1a32f9b6e8cfdbba8423b00d38b8820fefb282df 100644 --- a/pd/src/g_editor.c +++ b/pd/src/g_editor.c @@ -2344,7 +2344,7 @@ void canvas_map(t_canvas *x, t_floatarg f); in front of all windows; or with "f" zero, when we want to get rid of the window. */ //extern t_array *garray_getarray(t_garray *x); -//extern void garray_fittograph(t_garray *x, int n); +//extern void garray_fittograph(t_garray *x, int n, int redraw); //extern t_rtext *glist_findrtext(t_glist *gl, t_text *who); //extern void rtext_gettext(t_rtext *x, char **buf, int *bufsize); @@ -2410,7 +2410,7 @@ void canvas_vis(t_canvas *x, t_floatarg f) if (ga) { a = garray_getarray(ga); num_elem = a->a_n; - garray_fittograph(ga, num_elem); + garray_fittograph(ga, num_elem, 1); } } //for garrays in gop inside a newly opened patch window @@ -2430,7 +2430,7 @@ void canvas_vis(t_canvas *x, t_floatarg f) if (ga) { a = garray_getarray(ga); num_elem = a->a_n; - garray_fittograph(ga, num_elem); + garray_fittograph(ga, num_elem, 1); canvas_dirty(x, 2); } } diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c index 3f960b99d37d8b760caf93a8890524d29d7d3880..e32bfaa39c0ee6efb0e3b9df796b530464aa5c25 100644 --- a/pd/src/g_graph.c +++ b/pd/src/g_graph.c @@ -607,7 +607,8 @@ static void graph_bounds(t_glist *x, t_floatarg x1, t_floatarg y1, x1 = y1 = 0; x2 = y2 = 1; } - glist_redraw(x); + if (!do_not_redraw) + glist_redraw(x); } static void graph_xticks(t_glist *x,