Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7337/pd/src
Modified Files: configure.in d_ctl.c d_soundfile.c g_array.c g_canvas.h g_numbox.c g_template.c makefile.in notes.txt u_main.tk Log Message: major extensions to drawing commands in templates, to allow scaling and invisibilizing.
New "coreaudio" search (from patch).
couple of bug fixes.
Index: notes.txt =================================================================== RCS file: /cvsroot/pure-data/pd/src/notes.txt,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** notes.txt 30 May 2005 03:04:18 -0000 1.11 --- notes.txt 25 Jun 2005 02:49:15 -0000 1.12 *************** *** 5,11 **** --- 5,15 ---- fixed array onset bug rfft bug fix + bug fix in d_soundfile.c + bugfix in number2 + plot drawing instructions turn on and off
check: MIDI I/O for windows + blechman patch for s_inter.c
At the source level, "regular" arrays and arrays withing data structures *************** *** 28,31 **** --- 32,36 ----
problems: + patcher inlets don't deal with scalars (zbug.pd) Macintosh .pd extension not added to filenames need to optimize canvas_motion (get rid of box hit test??)
Index: g_array.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_array.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** g_array.c 30 May 2005 03:04:17 -0000 1.6 --- g_array.c 25 Jun 2005 02:49:15 -0000 1.7 *************** *** 81,85 **** char *cp = x->a_vec + elemsize * oldn; int i = n - oldn; - post("%d->%d", oldn, i); for (; i--; cp += elemsize) { --- 81,84 ---- *************** *** 731,735 **** int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, t_symbol *elemtemplatesym, ! float linewidth, float xloc, float xinc, float yloc, t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, int xpix, int ypix, int shift, int alt, int dbl, int doit) --- 730,734 ---- int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, t_symbol *elemtemplatesym, ! float linewidth, float xloc, float xinc, float yloc, float scalarvis, t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, int xpix, int ypix, int shift, int alt, int dbl, int doit) *************** *** 778,785 **** } if (best > 8) ! return (array_doclick_element(array, glist, sc, ap, ! elemtemplatesym, linewidth, xloc, xinc, yloc, ! xfield, yfield, wfield, ! xpix, ypix, shift, alt, dbl, doit)); best += 0.001; /* add truncation error margin */ for (i = 0; i < array->a_n; i += incr) --- 777,788 ---- } if (best > 8) ! { ! if (scalarvis != 0) ! return (array_doclick_element(array, glist, sc, ap, ! elemtemplatesym, linewidth, xloc, xinc, yloc, ! xfield, yfield, wfield, ! xpix, ypix, shift, alt, dbl, doit)); ! else return (0); ! } best += 0.001; /* add truncation error margin */ for (i = 0; i < array->a_n; i += incr)
Index: u_main.tk =================================================================== RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** u_main.tk 18 May 2005 04:28:51 -0000 1.9 --- u_main.tk 25 Jun 2005 02:49:15 -0000 1.10 *************** *** 49,53 **** set pd_gui2 [string range $argv0 0 [expr [string last / $argv0 ] - 1]] set pd_guidir $pd_gui2/.. ! load $pd_guidir/bin/pdtcl set pd_tearoff 0
--- 49,53 ---- set pd_gui2 [string range $argv0 0 [expr [string last / $argv0 ] - 1]] set pd_guidir $pd_gui2/.. ! load $pd_guidir/bin/libPdTcl.dylib set pd_tearoff 0
Index: g_canvas.h =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_canvas.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** g_canvas.h 18 May 2005 04:28:50 -0000 1.6 --- g_canvas.h 25 Jun 2005 02:49:15 -0000 1.7 *************** *** 557,561 **** EXTERN int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, t_symbol *elemtemplatesym, ! float linewidth, float xloc, float xinc, float yloc, t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, int xpix, int ypix, int shift, int alt, int dbl, int doit); --- 557,561 ---- EXTERN int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, t_symbol *elemtemplatesym, ! float linewidth, float xloc, float xinc, float yloc, float scalarvis, t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, int xpix, int ypix, int shift, int alt, int dbl, int doit);
Index: configure.in =================================================================== RCS file: /cvsroot/pure-data/pd/src/configure.in,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** configure.in 30 May 2005 04:37:25 -0000 1.10 --- configure.in 25 Jun 2005 02:49:08 -0000 1.11 *************** *** 13,16 **** --- 13,17 ---- AC_SUBST(USE_DEBUG_CFLAGS, no) AC_SUBST(SYSSRC) + AC_SUBST(TCLTK_FRAMEWORKS_PATH) AC_SUBST(STRIPFLAG) AC_SUBST(GUINAME) *************** *** 174,177 **** --- 175,180 ---- fi if test x$portaudio == "xyes"; + + then MORECFLAGS="-DUSEAPI_PORTAUDIO -DPA19 "$MORECFLAGS *************** *** 211,214 **** --- 214,235 ---- echo OPT_CFLAGS --------------- $OPT_CFLAGS OSNUMBER=0 + + if test x$jack == "xyes"; + then + LDFLAGS=$LDFLAGS" -lrt -ljack" + fi + if test x$jack == "xrun"; + then + LDFLAGS=$LDFLAGS" -lrt -ljack" + fi + fi + + if test x$jack == "xyes"; + then + LDFLAGS=$LDFLAGS" -lrt -ljack" + fi + if test x$jack == "xrun"; + then + LDFLAGS=$LDFLAGS" -lrt -ljack" fi
*************** *** 246,254 **** ../portmidi/porttime/ptmacosx_cf.c " STRIPFLAG="" ! GUINAME="pdtcl" ! GUIFLAGS="-F../../Frameworks -framework Tcl -framework Tk \ ! -I../../Frameworks/Tk.framework/Versions/Current/Headers \ ! -I../../Frameworks/Tcl.framework/Versions/Current/Headers \ ! -I../../Frameworks/Tcl.framework/Versions/8.4/PrivateHeaders" if test x$USE_DEBUG_CFLAGS == "xyes"; then --- 267,289 ---- ../portmidi/porttime/ptmacosx_cf.c " STRIPFLAG="" ! GUINAME="libPdTcl.dylib" ! ! # find the Tcl/Tk Frameworks ! if test -d "../../Frameworks"; ! then ! # Miller's location ! TCLTK_FRAMEWORKS_PATH="../../Frameworks" ! elif test -d "/Library/Frameworks"; ! then ! # get it from the default install location ! TCLTK_FRAMEWORKS_PATH="/Library/Frameworks" ! else ! # Panther has Tcl here; Tiger has Tcl and Tk here ! TCLTK_FRAMEWORKS_PATH="/System/Library/Frameworks" ! fi ! GUIFLAGS="-F$TCLTK_FRAMEWORKS_PATH -framework Tcl -framework Tk \ ! -I$TCLTK_FRAMEWORKS_PATH/Tk.framework/Versions/Current/Headers \ ! -I$TCLTK_FRAMEWORKS_PATH/Tcl.framework/Versions/Current/Headers \ ! -I$TCLTK_FRAMEWORKS_PATH/Tcl.framework/Versions/8.4/PrivateHeaders" if test x$USE_DEBUG_CFLAGS == "xyes"; then *************** *** 262,267 **** then LDFLAGS=$LDFLAGS" -framework Jack" ! MORECFLAGS=$MORECFLAGS" -DUSEAPI_JACK" ! SYSSRC=$SYSSRC" s_audio_jack.c" fi fi --- 297,304 ---- then LDFLAGS=$LDFLAGS" -framework Jack" ! fi ! if test x$jack == "xrun"; ! then ! LDFLAGS=$LDFLAGS" -framework Jack" fi fi *************** *** 273,277 **** MORECFLAGS=$MORECFLAGS" -DUSEAPI_JACK" SYSSRC=$SYSSRC" s_audio_jack.c" - LDFLAGS=$LDFLAGS" -lrt -ljack" fi if test x$jack == "xrun"; --- 310,313 ---- *************** *** 279,283 **** MORECFLAGS=$MORECFLAGS" -DUSEAPI_JACK -DJACK_XRUN" SYSSRC=$SYSSRC" s_audio_jack.c" - LDFLAGS=$LDFLAGS" -lrt -ljack" fi
--- 315,318 ----
Index: makefile.in =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile.in,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** makefile.in 18 May 2005 04:28:51 -0000 1.6 --- makefile.in 25 Jun 2005 02:49:15 -0000 1.7 *************** *** 98,106 ****
#this is for Max OSX only... ! $(BIN_DIR)/pdtcl: $(GOBJ) $(GSRC) ! cd ../obj; libtool -dynamic -o $(BIN_DIR)/pdtcl $(GOBJ) \ ! ../../Frameworks/Tk.framework/Versions/Current/Tk \ ! ../../Frameworks/Tcl.framework/Versions/Current/Tcl \ ! /usr/lib/libSystem.B.dylib
externs: --- 98,112 ----
#this is for Max OSX only... ! $(BIN_DIR)/libPdTcl.dylib: $(GOBJ) $(GSRC) ! cd ../obj && $(CC) -dynamiclib -read_only_relocs warning \ ! -o $(BIN_DIR)/libPdTcl.dylib $(GOBJ) \ ! -F@TCLTK_FRAMEWORKS_PATH@ \ ! -framework Tcl -framework Tk -framework System \ ! -Wl,-install_name,@executable_path/../Resources/bin/libPdTcl.dylib ! install_name_tool -change @TCLTK_FRAMEWORKS_PATH@/Tcl.framework/Versions/8.4/Tcl\ ! @executable_path/../Frameworks/Tcl.framework/Versions/8.4/Tcl \ ! -change @TCLTK_FRAMEWORKS_PATH@/Tk.framework/Versions/8.4/Tk \ ! @executable_path/../Frameworks/Tk.framework/Versions/8.4/Tk \ ! ../bin/libPdTcl.dylib
externs:
Index: d_soundfile.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_soundfile.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** d_soundfile.c 30 May 2005 03:04:17 -0000 1.5 --- d_soundfile.c 25 Jun 2005 02:49:09 -0000 1.6 *************** *** 1711,1714 **** --- 1711,1720 ---- sfread_cond_signal(&x->x_requestcondition); sfread_cond_wait(&x->x_answercondition, &x->x_mutex); + /* resync local cariables -- bug fix thanks to Shahrokh */ + vecsize = x->x_vecsize; + bytespersample = x->x_bytespersample; + sfchannels = x->x_sfchannels; + wantbytes = sfchannels * vecsize * bytespersample; + bigendian = x->x_bigendian; #ifdef DEBUG_SOUNDFILE pute("done\n");
Index: d_ctl.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_ctl.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** d_ctl.c 6 Sep 2004 20:20:33 -0000 1.3 --- d_ctl.c 25 Jun 2005 02:49:08 -0000 1.4 *************** *** 553,558 **** /* ---------------- env~ - simple envelope follower. ----------------- */
! #define MAXOVERLAP 10 ! #define MAXVSTAKEN 64
typedef struct sigenv --- 553,558 ---- /* ---------------- env~ - simple envelope follower. ----------------- */
! #define MAXOVERLAP 32 ! #define INITVSTAKEN 64
typedef struct sigenv *************** *** 569,572 **** --- 569,573 ---- float x_sumbuf[MAXOVERLAP]; /* summing buffer */ float x_f; + int x_allocforvs; /* extra buffer for DSP vector size */ } t_sigenv;
*************** *** 586,590 **** if (period < npoints / MAXOVERLAP + 1) period = npoints / MAXOVERLAP + 1; ! if (!(buf = getbytes(sizeof(float) * (npoints + MAXVSTAKEN)))) { error("env: couldn't allocate buffer"); --- 587,591 ---- if (period < npoints / MAXOVERLAP + 1) period = npoints / MAXOVERLAP + 1; ! if (!(buf = getbytes(sizeof(float) * (npoints + INITVSTAKEN)))) { error("env: couldn't allocate buffer"); *************** *** 599,606 **** for (i = 0; i < npoints; i++) buf[i] = (1. - cos((2 * 3.14159 * i) / npoints))/npoints; ! for (; i < npoints+MAXVSTAKEN; i++) buf[i] = 0; x->x_clock = clock_new(x, (t_method)env_tilde_tick); x->x_outlet = outlet_new(&x->x_obj, gensym("float")); x->x_f = 0; return (x); } --- 600,608 ---- for (i = 0; i < npoints; i++) buf[i] = (1. - cos((2 * 3.14159 * i) / npoints))/npoints; ! for (; i < npoints+INITVSTAKEN; i++) buf[i] = 0; x->x_clock = clock_new(x, (t_method)env_tilde_tick); x->x_outlet = outlet_new(&x->x_obj, gensym("float")); x->x_f = 0; + x->x_allocforvs = INITVSTAKEN; return (x); } *************** *** 649,654 **** x->x_period + sp[0]->s_n - (x->x_period % sp[0]->s_n); else x->x_realperiod = x->x_period; dsp_add(env_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); - if (sp[0]->s_n > MAXVSTAKEN) bug("env_tilde_dsp"); }
--- 651,668 ---- x->x_period + sp[0]->s_n - (x->x_period % sp[0]->s_n); else x->x_realperiod = x->x_period; + if (sp[0]->s_n > x->x_allocforvs) + { + void *xx = resizebytes(x->x_buf, + (x->x_npoints + x->x_allocforvs) * sizeof(float), + (x->x_npoints + sp[0]->s_n) * sizeof(float)); + if (!xx) + { + post("env~: out of memory"); + return; + } + x->x_buf = (t_float *)xx; + x->x_allocforvs = sp[0]->s_n; + } dsp_add(env_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); }
*************** *** 661,665 **** { clock_free(x->x_clock); ! freebytes(x->x_buf, (x->x_npoints + MAXVSTAKEN) * sizeof(float)); }
--- 675,679 ---- { clock_free(x->x_clock); ! freebytes(x->x_buf, (x->x_npoints + x->x_allocforvs) * sizeof(float)); }
Index: g_numbox.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_numbox.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** g_numbox.c 6 Sep 2004 20:20:34 -0000 1.4 --- g_numbox.c 25 Jun 2005 02:49:15 -0000 1.5 *************** *** 37,44 **** static void my_numbox_tick_reset(t_my_numbox *x) { ! if(x->x_gui.x_fsf.x_change) { x->x_gui.x_fsf.x_change = 0; - glist_grab(x->x_gui.x_glist, 0, 0, 0, 0, 0); (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); } --- 37,43 ---- static void my_numbox_tick_reset(t_my_numbox *x) { ! if(x->x_gui.x_fsf.x_change && x->x_gui.x_glist) { x->x_gui.x_fsf.x_change = 0; (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); } *************** *** 384,390 **** x->x_gui.x_fsf.x_change = 0; clock_unset(x->x_clock_reset); - glist_grab(x->x_gui.x_glist, 0, 0, 0, 0, 0); (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); - } binbuf_addv(b, "ssiisiiffiisssiiiiiiifi", gensym("#X"),gensym("obj"), --- 383,387 ---- *************** *** 450,454 **** x->x_gui.x_fsf.x_change = 0; clock_unset(x->x_clock_reset); - glist_grab(x->x_gui.x_glist, 0, 0, 0, 0, 0); (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
--- 447,450 ---- *************** *** 557,562 **** x->x_gui.x_fsf.x_change = 1; clock_delay(x->x_clock_reset, 3000); - /* glist_grab(x->x_gui.x_glist, &x->x_gui.x_obj.ob_g, - 0, my_numbox_key, 0, 0); */
x->x_buf[0] = 0; --- 553,556 ---- *************** *** 566,570 **** x->x_gui.x_fsf.x_change = 0; clock_unset(x->x_clock_reset); - glist_grab(x->x_gui.x_glist, 0, 0, 0, 0, 0); x->x_buf[0] = 0; (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE); --- 560,563 ----
Index: g_template.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_template.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** g_template.c 30 May 2005 03:04:18 -0000 1.7 --- g_template.c 25 Jun 2005 02:49:15 -0000 1.8 *************** *** 1240,1244 **** { t_object x_obj; - int x_vis; t_canvas *x_canvas; t_fielddesc x_outlinecolor; --- 1240,1243 ---- *************** *** 1252,1255 **** --- 1251,1256 ---- t_fielddesc x_ypoints; t_fielddesc x_wpoints; + t_fielddesc x_vis; /* visible */ + t_fielddesc x_scalarvis; /* true if drawing the scalar at each point */ } t_plot;
*************** *** 1257,1262 **** { t_plot *x = (t_plot *)pd_new(plot_class); ! int defstyle = PLOTSTYLE_POLY; ! x->x_vis = 1; x->x_canvas = canvas_getcurrent();
--- 1258,1262 ---- { t_plot *x = (t_plot *)pd_new(plot_class); ! int defstyle = PLOTSTYLE_POLY, vis = 1, scalarvis = 1; x->x_canvas = canvas_getcurrent();
*************** *** 1276,1280 **** else if (!strcmp(firstarg->s_name, "-n")) { ! x->x_vis = 0; argc--; argv++; } --- 1276,1285 ---- else if (!strcmp(firstarg->s_name, "-n")) { ! vis = 0; ! argc--; argv++; ! } ! else if (!strcmp(firstarg->s_name, "-noscalar")) ! { ! scalarvis = 0; argc--; argv++; } *************** *** 1310,1313 **** --- 1315,1322 ---- if (argc) fielddesc_setfloatarg(&x->x_style, argc--, argv++); else fielddesc_setfloat_const(&x->x_style, defstyle); + if (argc) fielddesc_setfloatarg(&x->x_vis, argc--, argv++); + else fielddesc_setfloat_const(&x->x_vis, vis); + if (argc) fielddesc_setfloatarg(&x->x_scalarvis, argc--, argv++); + else fielddesc_setfloat_const(&x->x_scalarvis, 1); return (x); } *************** *** 1315,1322 **** void plot_float(t_plot *x, t_floatarg f) { ! if ((f != 0 && x->x_vis) || (f == 0 && !x->x_vis)) return; canvas_redrawallfortemplatecanvas(x->x_canvas, 2); ! x->x_vis = (f!= 0); canvas_redrawallfortemplatecanvas(x->x_canvas, 1); } --- 1324,1338 ---- void plot_float(t_plot *x, t_floatarg f) { ! if (x->x_vis.fd_type != A_FLOAT || x->x_vis.fd_var) ! { ! pd_error(x, "global vis/invis for a template with variable visibility"); ! return; ! } ! int viswas = (x->x_vis.fd_un.fd_float != 0); ! ! if ((f != 0 && viswas) || (f == 0 && !viswas)) return; canvas_redrawallfortemplatecanvas(x->x_canvas, 2); ! fielddesc_setfloat_const(&x->x_vis, (f != 0)); canvas_redrawallfortemplatecanvas(x->x_canvas, 1); } *************** *** 1331,1334 **** --- 1347,1351 ---- t_symbol **elemtemplatesymp, t_array **arrayp, float *linewidthp, float *xlocp, float *xincp, float *ylocp, float *stylep, + float *visp, float *scalarvisp, t_fielddesc **xfield, t_fielddesc **yfield, t_fielddesc **wfield) { *************** *** 1360,1363 **** --- 1377,1382 ---- *ylocp = fielddesc_getfloat(&x->x_yloc, ownertemplate, data, 1); *stylep = fielddesc_getfloat(&x->x_style, ownertemplate, data, 1); + *visp = fielddesc_getfloat(&x->x_vis, ownertemplate, data, 1); + *scalarvisp = fielddesc_getfloat(&x->x_scalarvis, ownertemplate, data, 1); *elemtemplatesymp = elemtemplatesym; *arrayp = array; *************** *** 1435,1439 **** t_template *elemtemplate; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style, xsum, yval; t_array *array; int x1 = 0x7fffffff, y1 = 0x7fffffff, x2 = -0x7fffffff, y2 = -0x7fffffff; --- 1454,1458 ---- t_template *elemtemplate; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style, xsum, yval, vis, scalarvis; t_array *array; int x1 = 0x7fffffff, y1 = 0x7fffffff, x2 = -0x7fffffff, y2 = -0x7fffffff; *************** *** 1441,1447 **** float xpix, ypix, wpix; t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc; ! if (x->x_vis && !plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &xfielddesc, &yfielddesc, &wfielddesc) && !array_getfields(elemtemplatesym, &elemtemplatecanvas, &elemtemplate, &elemsize, --- 1460,1467 ---- float xpix, ypix, wpix; t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc; ! if (!plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &vis, &scalarvis, &xfielddesc, &yfielddesc, &wfielddesc) && ! (vis != 0) && !array_getfields(elemtemplatesym, &elemtemplatecanvas, &elemtemplate, &elemsize, *************** *** 1466,1497 **** y2 = ypix + wpix;
! /* check also the drawing instructions for the scalar */ ! if (xonset >= 0) ! usexloc = basex + xloc + fielddesc_cvttocoord(xfielddesc, ! *(float *)(((char *)(array->a_vec) + elemsize * i) ! + xonset)); ! else usexloc = basex + xsum, xsum += xinc; ! if (yonset >= 0) ! yval = *(float *)(((char *)(array->a_vec) + elemsize * i) ! + yonset); ! else yval = 0; ! useyloc = basey + yloc + fielddesc_cvttocoord(yfielddesc, yval); ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) { ! int xx1, xx2, yy1, yy2; ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentgetrectfn)(y, glist, ! (t_word *)((char *)(array->a_vec) + elemsize * i), ! elemtemplate, usexloc, useyloc, ! &xx1, &yy1, &xx2, &yy2); ! if (xx1 < x1) ! x1 = xx1; ! if (yy1 < y1) ! y1 = yy1; ! if (xx2 > x2) ! x2 = xx2; ! if (yy2 > y2) ! y2 = yy2; } } --- 1486,1520 ---- y2 = ypix + wpix;
! if (scalarvis != 0) { ! /* check also the drawing instructions for the scalar */ ! if (xonset >= 0) ! usexloc = basex + xloc + fielddesc_cvttocoord(xfielddesc, ! *(float *)(((char *)(array->a_vec) + elemsize * i) ! + xonset)); ! else usexloc = basex + xsum, xsum += xinc; ! if (yonset >= 0) ! yval = *(float *)(((char *)(array->a_vec) + elemsize * i) ! + yonset); ! else yval = 0; ! useyloc = basey + yloc + fielddesc_cvttocoord(yfielddesc, yval); ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) ! { ! int xx1, xx2, yy1, yy2; ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentgetrectfn)(y, glist, ! (t_word *)((char *)(array->a_vec) + elemsize * i), ! elemtemplate, usexloc, useyloc, ! &xx1, &yy1, &xx2, &yy2); ! if (xx1 < x1) ! x1 = xx1; ! if (yy1 < y1) ! y1 = yy1; ! if (xx2 > x2) ! x2 = xx2; ! if (yy2 > y2) ! y2 = yy2; ! } } } *************** *** 1527,1531 **** static void plot_vis(t_gobj *z, t_glist *glist, t_word *data, t_template *template, float basex, float basey, ! int vis) { t_plot *x = (t_plot *)z; --- 1550,1554 ---- static void plot_vis(t_gobj *z, t_glist *glist, t_word *data, t_template *template, float basex, float basey, ! int tovis) { t_plot *x = (t_plot *)z; *************** *** 1534,1538 **** t_template *elemtemplate; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style, usexloc, xsum, yval; t_array *array; int nelem; --- 1557,1562 ---- t_template *elemtemplate; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style, usexloc, xsum, yval, vis, ! scalarvis; t_array *array; int nelem; *************** *** 1540,1548 **** t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc;
- if (!x->x_vis) - return; if (plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &xfielddesc, &yfielddesc, &wfielddesc) || array_getfields(elemtemplatesym, &elemtemplatecanvas, &elemtemplate, &elemsize, xfielddesc, yfielddesc, wfielddesc, --- 1564,1571 ---- t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc;
if (plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &vis, &scalarvis, &xfielddesc, &yfielddesc, &wfielddesc) || ! (vis == 0) || array_getfields(elemtemplatesym, &elemtemplatecanvas, &elemtemplate, &elemsize, xfielddesc, yfielddesc, wfielddesc, *************** *** 1552,1556 **** elem = (char *)array->a_vec;
! if (vis) { if (style == PLOTSTYLE_POINTS) --- 1575,1579 ---- elem = (char *)array->a_vec;
! if (tovis) { if (style == PLOTSTYLE_POINTS) *************** *** 1739,1762 **** This code is inefficient since the template has to be searched for drawing instructions for every last point. */ ! ! for (xsum = xloc, i = 0; i < nelem; i++) { ! float usexloc, useyloc; ! t_gobj *y; ! if (xonset >= 0) ! usexloc = basex + xloc + ! *(float *)((elem + elemsize * i) + xonset); ! else usexloc = basex + xsum, xsum += xinc; ! if (yonset >= 0) ! yval = *(float *)((elem + elemsize * i) + yonset); ! else yval = 0; ! useyloc = basey + fielddesc_cvttocoord(yfielddesc, yloc + yval); ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentvisfn)(y, glist, ! (t_word *)(elem + elemsize * i), ! elemtemplate, usexloc, useyloc, vis); } } --- 1762,1787 ---- This code is inefficient since the template has to be searched for drawing instructions for every last point. */ ! if (scalarvis != 0) { ! for (xsum = xloc, i = 0; i < nelem; i++) { ! float usexloc, useyloc; ! t_gobj *y; ! if (xonset >= 0) ! usexloc = basex + xloc + ! *(float *)((elem + elemsize * i) + xonset); ! else usexloc = basex + xsum, xsum += xinc; ! if (yonset >= 0) ! yval = *(float *)((elem + elemsize * i) + yonset); ! else yval = 0; ! useyloc = basey + fielddesc_cvttocoord(yfielddesc, yloc+yval); ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) ! { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentvisfn)(y, glist, ! (t_word *)(elem + elemsize * i), ! elemtemplate, usexloc, useyloc, tovis); ! } } } *************** *** 1765,1779 **** { /* un-draw the individual points */ ! int i; ! for (i = 0; i < nelem; i++) { ! t_gobj *y; ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentvisfn)(y, glist, ! (t_word *)(elem + elemsize * i), elemtemplate, ! 0, 0, 0); } } --- 1790,1807 ---- { /* un-draw the individual points */ ! if (scalarvis != 0) { ! int i; ! for (i = 0; i < nelem; i++) { ! t_gobj *y; ! for (y = elemtemplatecanvas->gl_list; y; y = y->g_next) ! { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); ! if (!wb) continue; ! (*wb->w_parentvisfn)(y, glist, ! (t_word *)(elem + elemsize * i), elemtemplate, ! 0, 0, 0); ! } } } *************** *** 1791,1795 **** t_plot *x = (t_plot *)z; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style; t_array *array; t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc; --- 1819,1823 ---- t_plot *x = (t_plot *)z; t_symbol *elemtemplatesym; ! float linewidth, xloc, xinc, yloc, style, vis, scalarvis; t_array *array; t_fielddesc *xfielddesc, *yfielddesc, *wfielddesc; *************** *** 1797,1805 **** if (!plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &xfielddesc, &yfielddesc, &wfielddesc)) { return (array_doclick(array, glist, sc, ap, elemtemplatesym, ! linewidth, basex + xloc, xinc, basey + yloc, xfielddesc, yfielddesc, wfielddesc, xpix, ypix, shift, alt, dbl, doit)); --- 1825,1834 ---- if (!plot_readownertemplate(x, data, template, &elemtemplatesym, &array, &linewidth, &xloc, &xinc, &yloc, &style, ! &vis, &scalarvis, ! &xfielddesc, &yfielddesc, &wfielddesc) && (vis != 0)) { return (array_doclick(array, glist, sc, ap, elemtemplatesym, ! linewidth, basex + xloc, xinc, basey + yloc, scalarvis, xfielddesc, yfielddesc, wfielddesc, xpix, ypix, shift, alt, dbl, doit)); *************** *** 2032,2036 **** &x1, &y1, &x2, &y2); if (xpix >= x1 && xpix <= x2 && ypix >= y1 && ypix <= y2 ! && x->x_value.fd_var) { if (doit) --- 2061,2065 ---- &x1, &y1, &x2, &y2); if (xpix >= x1 && xpix <= x2 && ypix >= y1 && ypix <= y2 ! && x->x_value.fd_var && x->x_vis) { if (doit)