Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14749
Modified Files: Tag: devel_0_39 m_pd.h desire.c Log Message: g_pd becomes _class
Index: m_pd.h =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v retrieving revision 1.4.4.11.2.29 retrieving revision 1.4.4.11.2.30 diff -C2 -d -r1.4.4.11.2.29 -r1.4.4.11.2.30 *** m_pd.h 27 Nov 2006 23:44:46 -0000 1.4.4.11.2.29 --- m_pd.h 28 Nov 2006 00:44:54 -0000 1.4.4.11.2.30 *************** *** 211,215 **** --- 211,220 ---- typedef struct _gobj /* a graphical object */ { + #ifdef PD_PLUSPLUS_FACE + #define g_pd _class + t_pd _class; /* pure datum header (class) */ + #else t_pd g_pd; /* pure datum header (class) */ + #endif #ifdef DESIRE /* g_next is moved out to keep ABI compat */
Index: desire.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v retrieving revision 1.1.2.204 retrieving revision 1.1.2.205 diff -C2 -d -r1.1.2.204 -r1.1.2.205 *** desire.c 27 Nov 2006 23:44:46 -0000 1.1.2.204 --- desire.c 28 Nov 2006 00:44:54 -0000 1.1.2.205 *************** *** 45,49 **** #define L printf("%s:%d\n",__FILE__,__LINE__); #define LS printf("%s:%d (self=%lx\n",__FILE__,__LINE__,(long)self);\ ! printf("class=%s)\n",((t_gobj *)self)->g_pd->c_name->s_name); */ /* no sys_vgui logging for MSVC... we have no vararg macros */ --- 45,49 ---- #define L printf("%s:%d\n",__FILE__,__LINE__); #define LS printf("%s:%d (self=%lx\n",__FILE__,__LINE__,(long)self);\ ! printf("class=%s)\n",((t_gobj *)self)->_class->c_name->s_name); */ /* no sys_vgui logging for MSVC... we have no vararg macros */ *************** *** 52,56 **** #define L printf("%s:%d in %s\n",__FILE__,__LINE__,__PRETTY_FUNCTION__); #define LS printf("%s:%d in %s (self=%lx\n",__FILE__,__LINE__,__PRETTY_FUNCTION__,(long)self);\ ! printf("class=%s)\n",((t_gobj *)self)->g_pd->c_name->s_name);
/* --- 52,56 ---- #define L printf("%s:%d in %s\n",__FILE__,__LINE__,__PRETTY_FUNCTION__); #define LS printf("%s:%d in %s (self=%lx\n",__FILE__,__LINE__,__PRETTY_FUNCTION__,(long)self);\ ! printf("class=%s)\n",((t_gobj *)self)->_class->c_name->s_name);
/* *************** *** 161,165 **** void gobj_changed (void *self_, const char *k) { t_gobj *self = (t_gobj *)self_; ! int dirty = k ? (1<<class_getfieldindex(self->g_pd,k)) : -1; t_atom argv[1]; SETFLOAT(argv,(float)dirty); --- 161,165 ---- void gobj_changed (void *self_, const char *k) { t_gobj *self = (t_gobj *)self_; ! int dirty = k ? (1<<class_getfieldindex(self->_class,k)) : -1; t_atom argv[1]; SETFLOAT(argv,(float)dirty); *************** *** 181,187 **** for (int i=0; i<d->nobs; i++) { t_gobj *obs = d->obs[i]; ! t_notice ice = obs->g_pd->c_notice; if (ice) ice(obs,origin,argc,argv); ! else post("null func ptr for class %s",self->g_pd->c_name->s_name); } } --- 181,187 ---- for (int i=0; i<d->nobs; i++) { t_gobj *obs = d->obs[i]; ! t_notice ice = obs->_class->c_notice; if (ice) ice(obs,origin,argc,argv); ! else post("null func ptr for class %s",self->_class->c_name->s_name); } } *************** *** 275,279 **** if (!o) continue; /* cancelled notice */ if (!o->g_adix->dirtyc) continue; ! /*post("UPLOADING a %s",o->g_pd->c_name->s_name);*/ pd_upload(o); o->g_adix->dirtyc = 0; --- 275,279 ---- if (!o) continue; /* cancelled notice */ if (!o->g_adix->dirtyc) continue; ! /*post("UPLOADING a %s",o->_class->c_name->s_name);*/ pd_upload(o); o->g_adix->dirtyc = 0; *************** *** 457,461 **** t_object *ob = 0; t_gobj *y = t->from ? t->from->g_next : t->canvas->list; ! for (; y; y = y->g_next) if ((ob = pd_checkobject(&y->g_pd))) break; if (!ob) return 0; t->from = ob; --- 457,461 ---- t_object *ob = 0; t_gobj *y = t->from ? t->from->g_next : t->canvas->list; ! for (; y; y = y->g_next) if ((ob = pd_checkobject(&y->_class))) break; if (!ob) return 0; t->from = ob; *************** *** 808,812 ****
static void canvas_loadbangabstractions(t_canvas *x) { ! canvas_each(y,x) if (pd_class(&y->g_pd) == canvas_class) { if (canvas_isabstraction((t_canvas *)y)) canvas_loadbang((t_canvas *)y); --- 808,812 ----
static void canvas_loadbangabstractions(t_canvas *x) { ! canvas_each(y,x) if (pd_class(&y->_class) == canvas_class) { if (canvas_isabstraction((t_canvas *)y)) canvas_loadbang((t_canvas *)y); *************** *** 818,827 **** void canvas_loadbangsubpatches(t_canvas *x) { t_symbol *s = gensym("loadbang"); ! canvas_each(y,x) if (pd_class(&y->g_pd) == canvas_class) if (!canvas_isabstraction((t_canvas *)y)) canvas_loadbangsubpatches((t_canvas *)y); canvas_each(y,x) ! if ((pd_class(&y->g_pd) != canvas_class) && zgetfn(&y->g_pd, s)) ! pd_vmess(&y->g_pd, s, ""); }
--- 818,827 ---- void canvas_loadbangsubpatches(t_canvas *x) { t_symbol *s = gensym("loadbang"); ! canvas_each(y,x) if (pd_class(&y->_class) == canvas_class) if (!canvas_isabstraction((t_canvas *)y)) canvas_loadbangsubpatches((t_canvas *)y); canvas_each(y,x) ! if ((pd_class(&y->_class) != canvas_class) && zgetfn(&y->_class, s)) ! pd_vmess(&y->_class, s, ""); }
*************** *** 974,978 ****
/* find all the "dsp" boxes and add them to the graph */ ! canvas_each(y,x) if ((ob = pd_checkobject(&y->g_pd)) && zgetfn(&y->g_pd, dspsym)) ugen_add(dc, ob);
/* ... and all dsp interconnections */ --- 974,978 ----
/* find all the "dsp" boxes and add them to the graph */ ! canvas_each(y,x) if ((ob = pd_checkobject(&y->_class)) && zgetfn(&y->_class, dspsym)) ugen_add(dc, ob);
/* ... and all dsp interconnections */ *************** *** 1041,1045 **** t_canvas *canvas = *canvasp; void *ret = 0; ! canvas_each(g,canvas) if (g->g_pd == blockclass) ret = g; *canvasp = canvas->owner; return ret; --- 1041,1045 ---- t_canvas *canvas = *canvasp; void *ret = 0; ! canvas_each(g,canvas) if (g->_class == blockclass) ret = g; *canvasp = canvas->owner; return ret; *************** *** 1072,1080 **** int vis = canvas_isvisible(gl); canvas_each(g,gl) { ! if (vis && g->g_pd == scalar_class) { if (action == 1) {/*if (canvas_isvisible(gl)) gobj_vis(g, gl, 1);*/} else if (action == 2) {/*if (canvas_isvisible(gl)) gobj_vis(g, gl, 0);*/} else scalar_redraw((t_scalar *)g, gl); ! } else if (g->g_pd == canvas_class) canvas_redrawall((t_canvas *)g, action); } } --- 1072,1080 ---- int vis = canvas_isvisible(gl); canvas_each(g,gl) { ! if (vis && g->_class == scalar_class) { if (action == 1) {/*if (canvas_isvisible(gl)) gobj_vis(g, gl, 1);*/} else if (action == 2) {/*if (canvas_isvisible(gl)) gobj_vis(g, gl, 0);*/} else scalar_redraw((t_scalar *)g, gl); ! } else if (g->_class == canvas_class) canvas_redrawall((t_canvas *)g, action); } } *************** *** 1090,1094 **** t_symbol *s1 = gensym("struct"); canvas_each(g,x) { ! t_object *ob = pd_checkobject(&g->g_pd); t_atom *argv; if (!ob || ob->te_type != T_OBJECT || binbuf_getnatom(ob->te_binbuf) < 2) continue; --- 1090,1094 ---- t_symbol *s1 = gensym("struct"); canvas_each(g,x) { ! t_object *ob = pd_checkobject(&g->_class); t_atom *argv; if (!ob || ob->te_type != T_OBJECT || binbuf_getnatom(ob->te_binbuf) < 2) continue; *************** *** 1161,1165 **** int i=0, nobj = canvas_getindex(gl, 0); /* number of objects */ for (t_gobj *g = gl->list; g && i < nobj; i++) { ! if (g != except && pd_class(&g->g_pd) == canvas_class && canvas_isabstraction((t_canvas *)g) && ((t_canvas *)g)->name == name && --- 1161,1165 ---- int i=0, nobj = canvas_getindex(gl, 0); /* number of objects */ for (t_gobj *g = gl->list; g && i < nobj; i++) { ! if (g != except && pd_class(&g->_class) == canvas_class && canvas_isabstraction((t_canvas *)g) && ((t_canvas *)g)->name == name && *************** *** 1175,1179 **** if (!hadwindow) canvas_vis(canvas_getcanvas(gl), 0); } else { ! if (g != except && pd_class(&g->g_pd) == canvas_class) canvas_doreload((t_canvas *)g, name, dir, except); g = g->g_next; --- 1175,1179 ---- if (!hadwindow) canvas_vis(canvas_getcanvas(gl), 0); } else { ! if (g != except && pd_class(&g->_class) == canvas_class) canvas_doreload((t_canvas *)g, name, dir, except); g = g->g_next; *************** *** 1211,1215 **** x->isgraph = 1; if (!nogoprect && !x->goprect) { ! canvas_each(g,x) if (pd_checkobject(&g->g_pd)) {x->goprect = 1; break;} } if (canvas_isvisible(x) && x->goprect) canvas_redraw(x); --- 1211,1215 ---- x->isgraph = 1; if (!nogoprect && !x->goprect) { ! canvas_each(g,x) if (pd_checkobject(&g->_class)) {x->goprect = 1; break;} } if (canvas_isvisible(x) && x->goprect) canvas_redraw(x); *************** *** 1270,1274 **** if (myindex1 >= canvas_find_index1) { canvas_each(y,x) { ! t_object *ob = pd_checkobject(&y->g_pd); if (ob && binbuf_match(ob->ob_binbuf, canvas_findbuf)) { if (myindex1 > canvas_find_index1 || --- 1270,1274 ---- if (myindex1 >= canvas_find_index1) { canvas_each(y,x) { ! t_object *ob = pd_checkobject(&y->_class); if (ob && binbuf_match(ob->ob_binbuf, canvas_findbuf)) { if (myindex1 > canvas_find_index1 || *************** *** 1285,1289 **** myindex2=0; canvas_each(y,x) { ! if (pd_class(&y->g_pd) == canvas_class) { (*myindex1p)++; if (canvas_dofind((t_canvas *)y, myindex1p)) return 1; --- 1285,1289 ---- myindex2=0; canvas_each(y,x) { ! if (pd_class(&y->_class) == canvas_class) { (*myindex1p)++; if (canvas_dofind((t_canvas *)y, myindex1p)) return 1; *************** *** 1334,1338 **** return 1; } ! else if (g->g_pd == canvas_class) { if (canvas_dofinderror((t_canvas *)g, error_object)) return 1; } --- 1334,1338 ---- return 1; } ! else if (g->_class == canvas_class) { if (canvas_dofinderror((t_canvas *)g, error_object)) return 1; } *************** *** 1643,1647 **** static t_canvas *canvas_findgraph(t_canvas *x) { t_gobj *y = 0; ! canvas_each(z,x) if (pd_class(&z->g_pd) == canvas_class && ((t_canvas *)z)->isgraph) y = z; return (t_canvas *)y; } --- 1643,1647 ---- static t_canvas *canvas_findgraph(t_canvas *x) { t_gobj *y = 0; ! canvas_each(z,x) if (pd_class(&z->_class) == canvas_class && ((t_canvas *)z)->isgraph) y = z; return (t_canvas *)y; } *************** *** 1712,1716 **** x->listviewing = 1; sprintf(cmdbuf, "pdtk_array_listview_new %%s %s %d\n", x->realname->s_name, 0); ! gfxstub_new(&x->x_gobj.g_pd, x, cmdbuf); for (int i=0; i < ARRAYPAGESIZE && i < a->n; i++) { yval = *(float *)(a->vec + elemsize*i + yonset); --- 1712,1716 ---- x->listviewing = 1; sprintf(cmdbuf, "pdtk_array_listview_new %%s %s %d\n", x->realname->s_name, 0); ! gfxstub_new(&x->x_gobj._class, x, cmdbuf); for (int i=0; i < ARRAYPAGESIZE && i < a->n; i++) { yval = *(float *)(a->vec + elemsize*i + yonset); *************** *** 2254,2259 **** void canvas_add(t_canvas *x, t_gobj *y) { #ifdef DEBUG_CANVAS_ADD ! if (!y->g_pd->c_patchable) { ! printf("canvas_add %p %p class=%s (non-t_text)\n",x,y,y->g_pd->c_name->s_name); } else { char *buf; int bufn; --- 2254,2259 ---- void canvas_add(t_canvas *x, t_gobj *y) { #ifdef DEBUG_CANVAS_ADD ! if (!y->_class->c_patchable) { ! printf("canvas_add %p %p class=%s (non-t_text)\n",x,y,y->_class->c_name->s_name); } else { char *buf; int bufn; *************** *** 2264,2268 **** free(buf); } else { ! printf("canvas_add %p %p class=%s (binbuf without b_vec !)\n",x,y,y->g_pd->c_name->s_name); } } --- 2264,2268 ---- free(buf); } else { ! printf("canvas_add %p %p class=%s (binbuf without b_vec !)\n",x,y,y->_class->c_name->s_name); } } *************** *** 2294,2302 **** } gobj_changed(x,0); ! if (x->isgraph && !x->goprect && pd_checkobject(&y->g_pd)) { x->goprect = 1; canvas_drawredrect(x, 1); } ! if (class_isdrawcommand(y->g_pd)) canvas_redrawallfortemplate(template_findbyname(canvas_makebindsym(canvas_getcanvas(x)->name)), 0); } --- 2294,2302 ---- } gobj_changed(x,0); ! if (x->isgraph && !x->goprect && pd_checkobject(&y->_class)) { x->goprect = 1; canvas_drawredrect(x, 1); } ! if (class_isdrawcommand(y->_class)) canvas_redrawallfortemplate(template_findbyname(canvas_makebindsym(canvas_getcanvas(x)->name)), 0); } *************** *** 2304,2309 **** /* delete an object from a canvas and free it */ void canvas_delete(t_canvas *x, t_gobj *y) { ! t_gotfn chkdsp = zgetfn(&y->g_pd, gensym("dsp")); ! int drawcommand = class_isdrawcommand(y->g_pd);
/* if we're a drawing command, erase all scalars now, before deleting --- 2304,2309 ---- /* delete an object from a canvas and free it */ void canvas_delete(t_canvas *x, t_gobj *y) { ! t_gotfn chkdsp = zgetfn(&y->_class, gensym("dsp")); ! int drawcommand = class_isdrawcommand(y->_class);
/* if we're a drawing command, erase all scalars now, before deleting *************** *** 2333,2337 **** while ((y = x->list)) { /* to avoid unnecessary DSP resorting, we suspend DSP only if we find a DSP object. */ ! if (!suspended && pd_checkobject(&y->g_pd) && zgetfn(&y->g_pd, dspsym)) { dspstate = canvas_suspend_dsp(); suspended = 1; --- 2333,2337 ---- while ((y = x->list)) { /* to avoid unnecessary DSP resorting, we suspend DSP only if we find a DSP object. */ ! if (!suspended && pd_checkobject(&y->_class) && zgetfn(&y->_class, dspsym)) { dspstate = canvas_suspend_dsp(); suspended = 1; *************** *** 2350,2354 ****
static float gobj_getxforsort(t_gobj *g) { ! if (pd_class(&g->g_pd) == scalar_class) { float x1, y1; scalar_getbasexy((t_scalar *)g, &x1, &y1); --- 2350,2354 ----
static float gobj_getxforsort(t_gobj *g) { ! if (pd_class(&g->_class) == scalar_class) { float x1, y1; scalar_getbasexy((t_scalar *)g, &x1, &y1); *************** *** 2432,2439 **** int n=0, j, xmax, x1; t_gobj *y, **vec, **vp, **maxp; ! canvas_each(y,x) if (pd_class(&y->g_pd) == vinlet_class) n++; if (n<2) return; vp = vec = (t_gobj **)getbytes(n*sizeof(*vec)); ! canvas_each(y,x) if (pd_class(&y->g_pd) == vinlet_class) *vp++ = y; for (int i=n; i--;) { t_inlet *ip; --- 2432,2439 ---- int n=0, j, xmax, x1; t_gobj *y, **vec, **vp, **maxp; ! canvas_each(y,x) if (pd_class(&y->_class) == vinlet_class) n++; if (n<2) return; vp = vec = (t_gobj **)getbytes(n*sizeof(*vec)); ! canvas_each(y,x) if (pd_class(&y->_class) == vinlet_class) *vp++ = y; for (int i=n; i--;) { t_inlet *ip; *************** *** 2445,2449 **** if (!maxp) break; y = *maxp; *maxp = 0; ! ip = vinlet_getit(&y->g_pd); obj_moveinletfirst(&x->gl_obj, ip); } --- 2445,2449 ---- if (!maxp) break; y = *maxp; *maxp = 0; ! ip = vinlet_getit(&y->_class); obj_moveinletfirst(&x->gl_obj, ip); } *************** *** 2453,2460 **** int n=0, j, xmax, x1; t_gobj *y, **vec, **vp, **maxp; ! canvas_each(y,x) if (pd_class(&y->g_pd) == voutlet_class) n++; if (n<2) return; vp = vec = (t_gobj **)getbytes(n*sizeof(*vec)); ! canvas_each(y,x) if (pd_class(&y->g_pd) == voutlet_class) *vp++ = y; for (int i=n; i--;) { t_outlet *ip; --- 2453,2460 ---- int n=0, j, xmax, x1; t_gobj *y, **vec, **vp, **maxp; ! canvas_each(y,x) if (pd_class(&y->_class) == voutlet_class) n++; if (n<2) return; vp = vec = (t_gobj **)getbytes(n*sizeof(*vec)); ! canvas_each(y,x) if (pd_class(&y->_class) == voutlet_class) *vp++ = y; for (int i=n; i--;) { t_outlet *ip; *************** *** 2466,2470 **** if (!maxp) break; y = *maxp; *maxp = 0; ! ip = voutlet_getit(&y->g_pd); obj_moveoutletfirst(&x->gl_obj, ip); } --- 2466,2470 ---- if (!maxp) break; y = *maxp; *maxp = 0; ! ip = voutlet_getit(&y->_class); obj_moveoutletfirst(&x->gl_obj, ip); } *************** *** 2598,2602 **** /* if there's just one "garray" in the graph, write its name along the top */ g = x->list; ! if (g && !g->g_next && g->g_pd == garray_class) { int ymin = y1<y2 ? y1 : y2; t_symbol *s = garray_getname((t_garray *)g); --- 2598,2602 ---- /* if there's just one "garray" in the graph, write its name along the top */ g = x->list; ! if (g && !g->g_next && g->_class == garray_class) { int ymin = y1<y2 ? y1 : y2; t_symbol *s = garray_getname((t_garray *)g); *************** *** 3052,3056 **** static void canvas_writelist(t_gobj *y, t_binbuf *b) { for (; y; y = y->g_next) ! if (pd_class(&y->g_pd) == scalar_class) canvas_writescalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, b, 0); } --- 3052,3056 ---- static void canvas_writelist(t_gobj *y, t_binbuf *b) { for (; y; y = y->g_next) ! if (pd_class(&y->_class) == scalar_class) canvas_writescalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, b, 0); } *************** *** 3081,3085 **** static void canvas_addtemplatesforlist(t_gobj *y, int *p_ntemplates, t_symbol ***p_templatevec) { for (; y; y = y->g_next) ! if (pd_class(&y->g_pd) == scalar_class) canvas_addtemplatesforscalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, p_ntemplates, p_templatevec); --- 3081,3085 ---- static void canvas_addtemplatesforlist(t_gobj *y, int *p_ntemplates, t_symbol ***p_templatevec) { for (; y; y = y->g_next) ! if (pd_class(&y->_class) == scalar_class) canvas_addtemplatesforscalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, p_ntemplates, p_templatevec); *************** *** 3090,3094 **** int ntemplates = 0; t_binbuf *b = binbuf_new(); ! canvas_each(y,x) if ((pd_class(&y->g_pd) == scalar_class) && wholething) { t_scalar *s = (t_scalar *)y; canvas_addtemplatesforscalar(s->sc_template, s->sc_vec, &ntemplates, &templatevec); --- 3090,3094 ---- int ntemplates = 0; t_binbuf *b = binbuf_new(); ! canvas_each(y,x) if ((pd_class(&y->_class) == scalar_class) && wholething) { t_scalar *s = (t_scalar *)y; canvas_addtemplatesforscalar(s->sc_template, s->sc_vec, &ntemplates, &templatevec); *************** *** 3118,3122 **** /* now write out the objects themselves */ canvas_each(y,x) ! if (pd_class(&y->g_pd) == scalar_class && wholething) canvas_writescalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, b, 0); return b; --- 3118,3122 ---- /* now write out the objects themselves */ canvas_each(y,x) ! if (pd_class(&y->_class) == scalar_class && wholething) canvas_writescalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, b, 0); return b; *************** *** 3183,3190 **** t_symbol ***templatevecp, int wholething) { canvas_each(y,x) { ! if (pd_class(&y->g_pd) == scalar_class && wholething) canvas_addtemplatesforscalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, ntemplatesp, templatevecp); ! else if (pd_class(&y->g_pd) == canvas_class && wholething) canvas_collecttemplatesfor((t_canvas *)y, ntemplatesp, templatevecp, 1); } --- 3183,3190 ---- t_symbol ***templatevecp, int wholething) { canvas_each(y,x) { ! if (pd_class(&y->_class) == scalar_class && wholething) canvas_addtemplatesforscalar(((t_scalar *)y)->sc_template, ((t_scalar *)y)->sc_vec, ntemplatesp, templatevecp); ! else if (pd_class(&y->_class) == canvas_class && wholething) canvas_collecttemplatesfor((t_canvas *)y, ntemplatesp, templatevecp, 1); } *************** *** 3803,3807 **** TEMPLATE_CHECK(owner,templatesym,0) t_scalar *x = (t_scalar *)getbytes(sizeof(t_scalar) + (t->n - 1) * sizeof(*x->sc_vec)); ! x->sc_gobj.g_pd = scalar_class; x->sc_template = templatesym; gpointer_setcanvas(&gp, owner, x); --- 3803,3807 ---- TEMPLATE_CHECK(owner,templatesym,0) t_scalar *x = (t_scalar *)getbytes(sizeof(t_scalar) + (t->n - 1) * sizeof(*x->sc_vec)); ! x->sc_gobj._class = scalar_class; x->sc_template = templatesym; gpointer_setcanvas(&gp, owner, x); *************** *** 3870,3874 **** } canvas_each(y,templatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); if (wb) wb->w_parentvisfn(y, owner, x->sc_vec, t, basex, basey, vis); } --- 3870,3874 ---- } canvas_each(y,templatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->_class); if (wb) wb->w_parentvisfn(y, owner, x->sc_vec, t, basex, basey, vis); } *************** *** 3892,3896 **** float basey = template_getfloat(t, gensym("y"), data, 0); canvas_each(y,templatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); if (!wb) continue; hit = wb->w_parentclickfn(y, owner, data, t, sc, ap, basex+xloc, basey+yloc, --- 3892,3896 ---- float basey = template_getfloat(t, gensym("y"), data, 0); canvas_each(y,templatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->_class); if (!wb) continue; hit = wb->w_parentclickfn(y, owner, data, t, sc, ap, basex+xloc, basey+yloc, *************** *** 4131,4135 **** gpointer_init(&gp); x = (t_scalar *)getbytes(sizeof(t_scalar) + (tto->n - 1) * sizeof(*x->sc_vec)); ! x->sc_gobj.g_pd = scalar_class; x->sc_template = tfrom->sym; gpointer_setcanvas(&gp, canvas, x); --- 4131,4135 ---- gpointer_init(&gp); x = (t_scalar *)getbytes(sizeof(t_scalar) + (tto->n - 1) * sizeof(*x->sc_vec)); ! x->sc_gobj._class = scalar_class; x->sc_template = tfrom->sym; gpointer_setcanvas(&gp, canvas, x); *************** *** 4203,4207 **** static void template_conformcanvas(t_template *tfrom, t_template *tto, int *conformaction, t_canvas *canvas) { canvas_each(g,canvas) { ! t_class *c = pd_class(&g->g_pd); if (c==scalar_class) g = (t_gobj *)template_conformscalar(tfrom, tto, conformaction, canvas, (t_scalar *)g); --- 4203,4207 ---- static void template_conformcanvas(t_template *tfrom, t_template *tto, int *conformaction, t_canvas *canvas) { canvas_each(g,canvas) { ! t_class *c = pd_class(&g->_class); if (c==scalar_class) g = (t_gobj *)template_conformscalar(tfrom, tto, conformaction, canvas, (t_scalar *)g); *************** *** 4910,4914 **** canvas_each(y,elemtemplatecanvas) { int xx1, xx2, yy1, yy2; ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); if (!wb) continue; wb->w_parentgetrectfn(y, canvas, (t_word *)((char *)array->vec + elemsize*i), --- 4910,4914 ---- canvas_each(y,elemtemplatecanvas) { int xx1, xx2, yy1, yy2; ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->_class); if (!wb) continue; wb->w_parentgetrectfn(y, canvas, (t_word *)((char *)array->vec + elemsize*i), *************** *** 5071,5075 **** useyloc = basey + yloc + slot_cvttocoord(yslot, yval); canvas_each(y,elemtemplatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); if (wb) wb->w_parentvisfn(y, canvas, (t_word *)(elem+elemsize*i), elemtemplate, usexloc, useyloc, tovis); --- 5071,5075 ---- useyloc = basey + yloc + slot_cvttocoord(yslot, yval); canvas_each(y,elemtemplatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->_class); if (wb) wb->w_parentvisfn(y, canvas, (t_word *)(elem+elemsize*i), elemtemplate, usexloc, useyloc, tovis); *************** *** 5082,5086 **** for (int i=0; i<nelem; i++) { canvas_each(y,elemtemplatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->g_pd); if (wb) wb->w_parentvisfn(y, canvas, (t_word *)(elem+elemsize*i), elemtemplate,0,0,0); } --- 5082,5086 ---- for (int i=0; i<nelem; i++) { canvas_each(y,elemtemplatecanvas) { ! t_parentwidgetbehavior *wb = pd_getparentwidget(&y->_class); if (wb) wb->w_parentvisfn(y, canvas, (t_word *)(elem+elemsize*i), elemtemplate,0,0,0); } *************** *** 5428,5432 **** if (!gobj) gobj = canvas->list; else gobj = gobj->g_next; ! while (gobj && (pd_class(&gobj->g_pd) != scalar_class || wantselected)) gobj = gobj->g_next; if (gobj) { t_typedout *to = x->typedout; --- 5428,5432 ---- if (!gobj) gobj = canvas->list; else gobj = gobj->g_next; ! while (gobj && (pd_class(&gobj->_class) != scalar_class || wantselected)) gobj = gobj->g_next; if (gobj) { t_typedout *to = x->typedout; *************** *** 6680,6684 **** void pd_upload(t_gobj *self) { t_binbuf *b = binbuf_new(); ! t_class *c = self->g_pd; int n; char *s; --- 6680,6684 ---- void pd_upload(t_gobj *self) { t_binbuf *b = binbuf_new(); ! t_class *c = self->_class; int n; char *s;