void gobj_recreate(t_glist *gl, t_gobj *ob, t_binbuf *bb) { /* LATER revisit all gobj calls, and sort out the gop case */ t_text *newt; int xpix = ((t_text *)ob)->te_xpix, ypix = ((t_text *)ob)->te_ypix; t_binbuf *bb1 = binbuf_new(); int ac = binbuf_getnatom(bb); t_atom *av = binbuf_getvec(bb); canvas_setcurrent(gl); gobj_totail(gl, ob); gobj_stowconnections(gl, ob, bb1); glist_delete(gl, ob); if (newt = (t_text *)forky_newobject(av->a_w.w_symbol, ac - 1, av + 1)) { newt->te_binbuf = bb; newt->te_xpix = xpix; newt->te_ypix = ypix; newt->te_width = 0; newt->te_type = T_OBJECT; glist_add(gl, (t_gobj *)newt); gobj_restoreconnections(gl, bb1); } else bug("gobj_recreate"); binbuf_free(bb1); canvas_unsetcurrent(gl); }
static void *iem_send_kernel_new(void) { t_iem_send_kernel *x = (t_iem_send_kernel *)pd_new(iem_send_kernel_class); t_glist *glist = (t_glist *)canvas_getcurrent(); t_canvas *canvas=glist_getcanvas(glist); int ac=0; t_atom *av; canvas_setcurrent(canvas); canvas_getargs(&ac, &av); canvas_unsetcurrent(canvas); if(ac > 0) { if(IS_A_SYMBOL(av,0)) { x->x_sym = atom_getsymbol(av); } else if(IS_A_FLOAT(av,0)) { char str[100]; sprintf(str, "%g", atom_getfloat(av)); x->x_sym = gensym(str); } else x->x_sym = 0; } else x->x_sym = 0; return (x); }
static void gobj_restoreconnections(t_glist *gl, t_binbuf *bb) { #ifdef FRINGE_DEBUG fprintf(stderr, "restoring connections:\n"); binbuf_print(bb); #endif canvas_setcurrent(gl); binbuf_eval(bb, 0, 0, 0); canvas_unsetcurrent(gl); }
DYN_EXPORT int dyn_NewConnection(int sched,dyn_id *cid,dyn_callback cb,dyn_id soid,int outlet,dyn_id doid,int inlet) { ASSERT(cid); ASSERT(soid && inlet >= 0); ASSERT(doid && outlet >= 0); dyn_patchable *sobj = soid->Patchable(); dyn_patchable *dobj = doid->Patchable(); int ret = DYN_ERROR_NONE; dyn_id conn = DYN_ID_NONE; if(!sobj || !dobj) { ret = DYN_ERROR_TYPEMISMATCH; goto error; } if(sobj->owner != dobj->owner) { ret = DYN_ERROR_CONN_PATCHER; goto error; } { dyn_patcher *patcher = sobj->owner; ASSERT(patcher); // sys_lock(); canvas_setcurrent(patcher->glist()); bool ok = !canvas_isconnected(patcher->glist(),(t_text *)sobj->pdobj,outlet,(t_text *)dobj->pdobj,inlet) && obj_connect((t_object *)sobj->pdobj, outlet,(t_object *)dobj->pdobj,inlet); canvas_unsetcurrent(patcher->glist()); // sys_unlock(); if(!ok) { ret = DYN_ERROR_CONN_GENERAL; goto error; } } conn = new dyn_ident(DYN_TYPE_CONN,cb); conn->Set(new dyn_conn(conn,soid,outlet,doid,inlet)); // add connection to object lists sobj->AddOutlet(conn->Conn()); dobj->AddInlet(conn->Conn()); *cid = conn; return ret; error: if(conn != DYN_ID_NONE) delete conn; return ret; }
static void *dollarg_new(void) { t_dollarg *x = (t_dollarg *)pd_new(dollarg_class); t_glist *glist=(t_glist *)canvas_getcurrent(); t_canvas *canvas=glist_getcanvas(glist); int pargc; t_atom *pargv, *at; canvas_setcurrent(canvas); canvas_getargs(&pargc, &pargv); canvas_unsetcurrent(canvas); x->x_at = (t_atom *)getbytes(pargc*sizeof(t_atom)); x->x_ac = pargc; at = x->x_at; while(pargc--) *at++ = *pargv++; outlet_new(&x->x_obj, &s_list); x->x_outlet_ac = outlet_new(&x->x_obj, &s_float); return (x); }
static void canvasargs_bang(t_canvasargs *x) { int argc=0; t_atom*argv=0; t_binbuf*b=0; if(!x->x_canvas) return; b=x->x_canvas->gl_obj.te_binbuf; if(b) { argc=binbuf_getnatom(b)-1; argv=binbuf_getvec(b)+1; } else { canvas_setcurrent(x->x_canvas); canvas_getargs(&argc, &argv); canvas_unsetcurrent(x->x_canvas); } if(argv) outlet_list(x->x_obj.ob_outlet, &s_list, argc, argv); }
static t_does *does_new(t_symbol *name) { t_does *does = (t_does *)pd_new(c_does_class); does->ons = new (std::nothrow) t_on_map; //does->does_canvas = canvas_new(NULL, NULL, 6, args); //canvas_unsetcurrent(does->does_canvas); t_canvas *canvas = does_canvas_get_and_add_sym_ref(name); if (!canvas) { t_atom args[6]; SETFLOAT(args+0, 0); SETFLOAT(args+1, 0); SETFLOAT(args+2, 400); SETFLOAT(args+3, 400); SETSYMBOL(args+4, name); SETFLOAT(args+5, 1); canvas = canvas_new(NULL, NULL, 6, args); //printf("does: new canvas: %X\n", (unsigned)canvas); does_canvas_set_for_sym(name, canvas); canvas_unsetcurrent(canvas); } does->sym_name = name; does->out_msg = outlet_new(&does->x_obj, gensym("out")); return does; }
static void *iem_append_kernel_new(void) { t_iem_append_kernel *x = (t_iem_append_kernel *)pd_new(iem_append_kernel_class); t_glist *glist = (t_glist *)canvas_getcurrent(); t_canvas *canvas=glist_getcanvas(glist); int ac=0; t_atom *av; canvas_setcurrent(canvas); canvas_getargs(&ac, &av); canvas_unsetcurrent(canvas); x->x_type1 = A_NULL; x->x_sym1 = &s_list; x->x_size2 = 10; if(ac > 5) x->x_size2 = 2*ac; x->x_at2 = (t_atom *)getbytes(x->x_size2 * sizeof(t_atom)); x->x_size12 = x->x_size2 + 10; x->x_at12 = (t_atom *)getbytes(x->x_size12 * sizeof(t_atom)); x->x_ac1 = 0; x->x_inlet_select = 1; if(ac <= 0) { x->x_type2 = A_NULL; x->x_ac2 = 0; x->x_sym2 = &s_list; } else { if(IS_A_FLOAT(av, 0)) { if(ac == 1) iem_append_kernel_float(x, atom_getfloat(av)); else iem_append_kernel_list(x, &s_list, ac, av); } else if(IS_A_SYMBOL(av, 0)) { t_symbol *xsym=atom_getsymbol(av); if(xsym == gensym("symbol")) { if(ac > 1) iem_append_kernel_symbol(x, atom_getsymbol(av+1)); else iem_append_kernel_symbol(x, gensym("")); } else if(xsym == gensym("float")) { if(ac > 1) { if(IS_A_FLOAT(av, 1)) iem_append_kernel_float(x, atom_getfloat(av+1)); else iem_append_kernel_float(x, 0.0f); } else iem_append_kernel_float(x, 0.0f); } else if(xsym == gensym("list")) { iem_append_kernel_list(x, &s_list, ac-1, av+1); } else { iem_append_kernel_anything(x, xsym, ac-1, av+1); } } } outlet_new(&x->x_obj, &s_list); return (x); }