[PD-cvs] pd/src desire.c,1.1.2.147,1.1.2.148

Mathieu Bouchard matju at users.sourceforge.net
Wed Sep 6 01:35:17 CEST 2006


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11762

Modified Files:
      Tag: devel_0_39
	desire.c 
Log Message:
introducing glist_wire_each.
fix to canvas_vis and canvas_map.


Index: desire.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v
retrieving revision 1.1.2.147
retrieving revision 1.1.2.148
diff -C2 -d -r1.1.2.147 -r1.1.2.148
*** desire.c	4 Sep 2006 02:01:12 -0000	1.1.2.147
--- desire.c	5 Sep 2006 23:35:13 -0000	1.1.2.148
***************
*** 48,54 ****
  #define template templaet
  
  #define glist_each(CHILD,GLIST)   for(CHILD=(GLIST)->gl_list; CHILD; CHILD=CHILD->g_next)
  #define glists_each(GLIST,GLISTS) for(GLIST=GLISTS; GLIST; GLIST=GLIST->gl_next)
! #define class_addmethod3(_cl,_ptr,_str,_sig) class_addmethod2(_cl,(t_method)_ptr,gensym(_str),_sig)
  
  
--- 48,56 ----
  #define template templaet
  
+ #define class_addmethod3(_cl,_ptr,_str,_sig) class_addmethod2(_cl,(t_method)_ptr,gensym(_str),_sig)
  #define glist_each(CHILD,GLIST)   for(CHILD=(GLIST)->gl_list; CHILD; CHILD=CHILD->g_next)
  #define glists_each(GLIST,GLISTS) for(GLIST=GLISTS; GLIST; GLIST=GLIST->gl_next)
! #define glist_wire_each(WIRE,TRAV,GLIST) \
! 	for(linetraverser_start(&TRAV,GLIST); WIRE; WIRE=linetraverser_next(&TRAV))
  
  
***************
*** 576,582 ****
      x->gl_x2 = x2; x->gl_y2 = y2; x->gl_obj.te_ypix = py1; x->gl_pixheight = py2-py1;
      x->gl_font =  (canvas_getcurrent() ? canvas_getcurrent()->gl_font : sys_defaultfont);
!     x->gl_screenx1 = x->gl_screeny1 = 0;
!     x->gl_screenx2 = 450;
!     x->gl_screeny2 = 300;
      if (strcmp(x->gl_name->s_name, "Pd")) pd_bind((t_pd *)x, canvas_makebindsym(x->gl_name));
      x->gl_owner = g;
--- 578,582 ----
      x->gl_x2 = x2; x->gl_y2 = y2; x->gl_obj.te_ypix = py1; x->gl_pixheight = py2-py1;
      x->gl_font =  (canvas_getcurrent() ? canvas_getcurrent()->gl_font : sys_defaultfont);
!     x->gl_screenx1 = x->gl_screeny1 = 0; x->gl_screenx2 = 450; x->gl_screeny2 = 300;
      if (strcmp(x->gl_name->s_name, "Pd")) pd_bind((t_pd *)x, canvas_makebindsym(x->gl_name));
      x->gl_owner = g;
***************
*** 641,656 ****
  called from the GUI after the fact to "notify" us that we're mapped. */
  void canvas_map(t_canvas *x, t_floatarg f) {
!     if (f!=0) {
!         if (!glist_isvisible(x)) {
! 	    t_gobj *y;
!             if (!x->gl_havewindow) {bug("canvas_map"); canvas_vis(x,1);}
!             glist_each(y,x) gobj_changed(y,0);
!             x->gl_mapped = 1;
!             canvas_drawlines(x);
!             if (x->gl_isgraph && x->gl_goprect) canvas_drawredrect(x, 1);
!             sys_mgui(x,"getscroll","");
!         }
!     } else {
!         if (glist_isvisible(x)) {sys_mgui(x,"erase",""); x->gl_mapped=0;}
      }
  }
--- 641,656 ----
  called from the GUI after the fact to "notify" us that we're mapped. */
  void canvas_map(t_canvas *x, t_floatarg f) {
!     if (f!=0 && !glist_isvisible(x)) {
! 	t_gobj *y;
! 	if (!x->gl_havewindow) {bug("canvas_map"); canvas_vis(x,1);}
! 	glist_each(y,x) gobj_changed(y,0);
! 	x->gl_mapped = 1;
! 	canvas_drawlines(x);
! 	if (x->gl_isgraph && x->gl_goprect) canvas_drawredrect(x, 1);
!     }
!     if (f==0 && glist_isvisible(x)) {
! 	sys_mgui(x,"delete_window","");
! 	x->gl_mapped = 0;
! 	gobj_unsubscribe((t_gobj *)x,(t_gobj *)manager);
      }
  }
***************
*** 711,741 ****
     in front of all windows; or with "f" zero, when we want to get rid of the window. */
  static void canvas_vis(t_canvas *x, t_floatarg f) {
!     if (!!f) {
!         if (x->gl_editor) { /* already visible, so just raise window */
! 		sys_mgui(x,"raise","");
!         } else {
              canvas_create_editor(x, 1);
              x->gl_havewindow = 1;
  	    gobj_subscribe((t_gobj *)x,(t_gobj *)manager);
  	    gobj_changed(x,0);
!         }
!     } else {    /* make invisible */
!         if (!x->gl_havewindow) {
!                 /* bug workaround -- a graph in a visible patch gets "invised"
!                 when the patch is closed, and must lose the editor here.  It's
!                 probably not the natural place to do this.  Other cases like
!                 subpatches fall here too but don'd need the editor freed, so
!                 we check if it exists. */
!             if (x->gl_editor) canvas_create_editor(x, 0);
!             return;
!         }
!         if (glist_isvisible(x)) canvas_map(x, 0);
          canvas_create_editor(x, 0);
! 	/* if we're a graph on our parent, and if the parent exists
! 	   and is visible, show ourselves on parent. */
          if (x->gl_isgraph && x->gl_owner) {
              canvas_create_editor(x, 1);
              x->gl_havewindow = 0;
- 	    gobj_unsubscribe((t_gobj *)x,(t_gobj *)manager);
          } else {
  	    x->gl_havewindow = 0;
--- 711,728 ----
     in front of all windows; or with "f" zero, when we want to get rid of the window. */
  static void canvas_vis(t_canvas *x, t_floatarg f) {
!     if (f && x->gl_editor) sys_mgui(x,"raise","");
!     if (f && !x->gl_editor) {
              canvas_create_editor(x, 1);
              x->gl_havewindow = 1;
  	    gobj_subscribe((t_gobj *)x,(t_gobj *)manager);
  	    gobj_changed(x,0);
!     }
!     if (!f && x->gl_editor) {
          canvas_create_editor(x, 0);
!         if (glist_isvisible(x)) canvas_map(x, 0);
! 	/* if we're a graph on our parent and the parent exists and is visible, show ourselves on parent. */
          if (x->gl_isgraph && x->gl_owner) {
              canvas_create_editor(x, 1);
              x->gl_havewindow = 0;
          } else {
  	    x->gl_havewindow = 0;
***************
*** 795,810 ****
  
  static void canvas_drawlines(t_canvas *x) {
!     t_linetraverser t;
!     t_outconnect *oc;
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t))) gobj_changed(oc,0);
  }
  
  /* kill all lines for one inlet or outlet */
  void canvas_deletelinesforio(t_canvas *x, t_text *text, t_inlet *inp, t_outlet *outp) {
!     t_linetraverser t;
!     t_outconnect *oc;
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t)))
          if ((t.tr_ob == text && t.tr_outlet == outp) ||
              (t.tr_ob2 == text && t.tr_inlet == inp))
--- 782,793 ----
  
  static void canvas_drawlines(t_canvas *x) {
!     t_linetraverser t; t_outconnect *oc;
!     glist_wire_each(oc,t,x) gobj_changed(oc,0);
  }
  
  /* kill all lines for one inlet or outlet */
  void canvas_deletelinesforio(t_canvas *x, t_text *text, t_inlet *inp, t_outlet *outp) {
!     t_linetraverser t; t_outconnect *oc;
!     glist_wire_each(oc,t,x)
          if ((t.tr_ob == text && t.tr_outlet == outp) ||
              (t.tr_ob2 == text && t.tr_inlet == inp))
***************
*** 813,820 ****
  
  void canvas_deletelinesfor(t_canvas *x, t_text *text) {
!     t_linetraverser t;
!     t_outconnect *oc;
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t)))
          if (t.tr_ob == text || t.tr_ob2 == text)
              obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
--- 796,801 ----
  
  void canvas_deletelinesfor(t_canvas *x, t_text *text) {
!     t_linetraverser t; t_outconnect *oc;
!     glist_wire_each(oc,t,x)
          if (t.tr_ob == text || t.tr_ob2 == text)
              obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
***************
*** 1040,1045 ****
  
  static void canvas_dodsp(t_canvas *x, int toplevel, t_signal **sp) {
!     t_linetraverser t;
!     t_outconnect *oc;
      t_gobj *y;
      t_object *ob;
--- 1021,1025 ----
  
  static void canvas_dodsp(t_canvas *x, int toplevel, t_signal **sp) {
!     t_linetraverser t; t_outconnect *oc;
      t_gobj *y;
      t_object *ob;
***************
*** 1059,1064 ****
  
      /* ... and all dsp interconnections */
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t)))
          if (obj_issignaloutlet(t.tr_ob, t.tr_outno))
              ugen_connect(dc, t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
--- 1039,1043 ----
  
      /* ... and all dsp interconnections */
!     glist_wire_each(oc,t,x)
          if (obj_issignaloutlet(t.tr_ob, t.tr_outno))
              ugen_connect(dc, t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
***************
*** 1228,1240 ****
  }
  
! void canvas_disconnect(t_canvas *x, float index1, float outno, float index2, float inno) {
!     t_linetraverser t;
!     t_outconnect *oc;
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t))) {
!         int srcno = canvas_getindex(x, &t.tr_ob->ob_g);
!         int sinkno = canvas_getindex(x, &t.tr_ob2->ob_g);
!         if (srcno == index1 && t.tr_outno == outno &&
!             sinkno == index2 && t.tr_inno == inno) {
  	  //sys_mgui(oc,"delete","");
  	  obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
--- 1207,1217 ----
  }
  
! void canvas_disconnect(t_canvas *x, float from_, float outlet, float to_, float inlet) {
!     t_linetraverser t; t_outconnect *oc;
!     glist_wire_each(oc,t,x) {
!         int from = canvas_getindex(x, &t.tr_ob->ob_g);
!         int to   = canvas_getindex(x, &t.tr_ob2->ob_g);
!         if (from == from_ && t.tr_outno == outlet &&
!             to   == to_   && t.tr_inno  == inlet) {
  	  //sys_mgui(oc,"delete","");
  	  obj_disconnect(t.tr_ob, t.tr_outno, t.tr_ob2, t.tr_inno);
***************
*** 1305,1314 ****
          if (x->gl_pixwidth  <= 0) x->gl_pixwidth  = GLIST_DEFGRAPHWIDTH;
          if (x->gl_pixheight <= 0) x->gl_pixheight = GLIST_DEFGRAPHHEIGHT;
-         /*if (x->gl_owner && !x->gl_loading && glist_isvisible(x->gl_owner))
-             gobj_vis((t_gobj *)x, x->gl_owner, 0);*/
          x->gl_isgraph = 1;
          if (!nogoprect && !x->gl_goprect) {
              t_gobj *g;
!             for (g = x->gl_list; g; g = g->g_next) if (pd_checkobject(&g->g_pd)) {
                  x->gl_goprect = 1;
                  break;
--- 1282,1289 ----
          if (x->gl_pixwidth  <= 0) x->gl_pixwidth  = GLIST_DEFGRAPHWIDTH;
          if (x->gl_pixheight <= 0) x->gl_pixheight = GLIST_DEFGRAPHHEIGHT;
          x->gl_isgraph = 1;
          if (!nogoprect && !x->gl_goprect) {
              t_gobj *g;
!             glist_each(g,x) if (pd_checkobject(&g->g_pd)) {
                  x->gl_goprect = 1;
                  break;
***************
*** 1368,1375 ****
  /* keep me */
  static int canvas_isconnected (t_canvas *x, t_text *ob1, int n1, t_text *ob2, int n2) {
!     t_linetraverser t;
!     t_outconnect *oc;
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t)))
          if (t.tr_ob == ob1 && t.tr_outno == n1 &&
              t.tr_ob2 == ob2 && t.tr_inno == n2)
--- 1343,1348 ----
  /* keep me */
  static int canvas_isconnected (t_canvas *x, t_text *ob1, int n1, t_text *ob2, int n2) {
!     t_linetraverser t; t_outconnect *oc;
!     glist_wire_each(oc,t,x)
          if (t.tr_ob == ob1 && t.tr_outno == n1 &&
              t.tr_ob2 == ob2 && t.tr_inno == n2)
***************
*** 1478,1483 ****
  static void canvas_stowconnections(t_canvas *x, t_gobj *o) {
      t_gobj *selhead = 0, *seltail = 0, *nonhead = 0, *nontail = 0, *y, *y2;
!     t_linetraverser t;
!     t_outconnect *oc;
      t_binbuf *b;
      if (!x->gl_editor) {error("canvas_stowconnections without editor"); return;}
--- 1451,1455 ----
  static void canvas_stowconnections(t_canvas *x, t_gobj *o) {
      t_gobj *selhead = 0, *seltail = 0, *nonhead = 0, *nontail = 0, *y, *y2;
!     t_linetraverser t; t_outconnect *oc;
      t_binbuf *b;
      if (!x->gl_editor) {error("canvas_stowconnections without editor"); return;}
***************
*** 1500,1505 ****
      /* add connections to binbuf */
      binbuf_clear(b);
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t))) {
          /*int s1 = glist_isselected(x, &t.tr_ob->ob_g);*/
          /*int s2 = glist_isselected(x, &t.tr_ob2->ob_g);*/
--- 1472,1476 ----
      /* add connections to binbuf */
      binbuf_clear(b);
!     glist_wire_each(oc,t,x) {
          /*int s1 = glist_isselected(x, &t.tr_ob->ob_g);*/
          /*int s2 = glist_isselected(x, &t.tr_ob2->ob_g);*/
***************
*** 3619,3629 ****
  
  static void canvas_saveto(t_canvas *x, t_binbuf *b) {
      t_gobj *y;
-     t_linetraverser t;
-     t_outconnect *oc;
      canvas_savecontainerto(x,b);
      glist_each(y,x) gobj_save(y, b);
!     linetraverser_start(&t, x);
!     while ((oc = linetraverser_next(&t))) {
          int from = canvas_getindex(x, &t.tr_ob->ob_g);
          int to   = canvas_getindex(x, &t.tr_ob2->ob_g);
--- 3590,3598 ----
  
  static void canvas_saveto(t_canvas *x, t_binbuf *b) {
+     t_linetraverser t; t_outconnect *oc;
      t_gobj *y;
      canvas_savecontainerto(x,b);
      glist_each(y,x) gobj_save(y, b);
!     glist_wire_each(oc,t,x) {
          int from = canvas_getindex(x, &t.tr_ob->ob_g);
          int to   = canvas_getindex(x, &t.tr_ob2->ob_g);
***************
*** 7759,7771 ****
  		char *bar;
  		t_canvas *can = (t_canvas *)self;
! 		t_linetraverser t;
! 		t_outconnect *oc;
  		t_gobj *y;
  		bar=foo; *foo=0;
- 		linetraverser_start(&t,can);
  		glist_each(y,can) bar+=sprintf(bar,"x%lx ",(long)y);
  		sys_mgui((t_gobj *)self,"children=","S",foo);
  		bar=foo; *foo=0;
! 		while((oc = linetraverser_next(&t))) bar+=sprintf(bar,"{%ld %ld %ld %ld} ",
  			(long)canvas_getindex(can,(t_gobj *)t.tr_ob),  (long)t.tr_outno,
  			(long)canvas_getindex(can,(t_gobj *)t.tr_ob2), (long)t.tr_inno);
--- 7728,7738 ----
  		char *bar;
  		t_canvas *can = (t_canvas *)self;
! 		t_linetraverser t; t_outconnect *oc;
  		t_gobj *y;
  		bar=foo; *foo=0;
  		glist_each(y,can) bar+=sprintf(bar,"x%lx ",(long)y);
  		sys_mgui((t_gobj *)self,"children=","S",foo);
  		bar=foo; *foo=0;
! 		glist_wire_each(oc,t,can) bar+=sprintf(bar,"{%ld %ld %ld %ld} ",
  			(long)canvas_getindex(can,(t_gobj *)t.tr_ob),  (long)t.tr_outno,
  			(long)canvas_getindex(can,(t_gobj *)t.tr_ob2), (long)t.tr_inno);
***************
*** 8704,8709 ****
  void canvas_notice(t_gobj *x, struct _gobj *origin, int argc, t_atom *argv) {
  	t_canvas *self = (t_canvas *)x;
- 	/*post("canvas_notice(%p,%p,%d,...): havewindow=%d mapped=%d",
- 		x,origin,argc,self->gl_havewindow,self->gl_mapped);*/
  	gobj_changed3(self,origin,argc,argv);
  }
--- 8671,8674 ----
***************
*** 8737,8741 ****
      class_addmethod3(c,canvas_mycnv,"mycnv","*");
      class_addmethod3(c,canvas_numbox,"numbox","*");
-     //class_addmethod3(c,canvas_wire,"wire","*");
  
      class_addmethod3(c,canvas_pop,"pop","F");
--- 8702,8705 ----
***************
*** 8747,8752 ****
  
      class_addmethod3(c,glist_clear,"clear","");
!     class_addcreator((t_newmethod)subcanvas_new,gensym("pd"), A_DEFSYMBOL, 0);
!     class_addcreator((t_newmethod)subcanvas_new, gensym("page"),  A_DEFSYMBOL, 0);
      class_addmethod3(c,canvas_dsp,"dsp","");
      class_addmethod3(c,canvas_rename_method,"rename","*");
--- 8711,8716 ----
  
      class_addmethod3(c,glist_clear,"clear","");
!     class_addcreator((t_newmethod)subcanvas_new, gensym("pd"),   A_DEFSYMBOL, 0);
!     class_addcreator((t_newmethod)subcanvas_new, gensym("page"), A_DEFSYMBOL, 0);
      class_addmethod3(c,canvas_dsp,"dsp","");
      class_addmethod3(c,canvas_rename_method,"rename","*");
***************
*** 8979,8980 ****
--- 8943,8945 ----
      }
  }
+ 





More information about the Pd-cvs mailing list