Exemple #1
0
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);
}
Exemple #3
0
void *hoa_canvas_new(t_symbol *s, long argc, t_atom *argv)
{
    t_atom av[3];
    
    atom_setfloat(av, 0);
	t_hoa_canvas *x = (t_hoa_canvas *)pd_new(hoa_canvas_class);
    t_canvas* owner = canvas_getcurrent();
    x->x_canvas = canvas_new(0, 0, 0, NULL);
    canvas_vis(x->x_canvas, 0);
    pd_typedmess((t_pd *)x->x_canvas, gensym("pop"), 1, av);
    canvas_setcurrent(owner);
    
    if(argc && atom_gettype(argv) == A_SYM)
    {
        
        
        atom_setfloat(av, 0);
        atom_setfloat(av+1, 20);
        atom_setsym(av+2, atom_getsym(argv));
        pd_typedmess((t_pd *)x->x_canvas, gensym("obj"), 3, av);
    }
    
    canvas_loadbang(x->x_canvas);
    canvas_vis(x->x_canvas, 1);
    
    outlet_new((t_object *)x, &s_signal);
    return (x);
}
Exemple #4
0
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);
}
Exemple #5
0
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;
}
Exemple #6
0
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);
}
Exemple #7
0
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 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);
}