[PD-cvs] pd/src desire.c,1.1.2.217.2.209,1.1.2.217.2.210

Mathieu Bouchard matju at users.sourceforge.net
Wed Aug 15 23:21:14 CEST 2007


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

Modified Files:
      Tag: desiredata
	desire.c 
Log Message:
replace canvas_map by onsubscribe


Index: desire.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v
retrieving revision 1.1.2.217.2.209
retrieving revision 1.1.2.217.2.210
diff -C2 -d -r1.1.2.217.2.209 -r1.1.2.217.2.210
*** desire.c	13 Aug 2007 20:24:46 -0000	1.1.2.217.2.209
--- desire.c	15 Aug 2007 21:21:09 -0000	1.1.2.217.2.210
***************
*** 120,123 ****
--- 120,125 ----
  
  /* subscribing N spies takes N*N time, but it's not important for now */
+ /* subscription could become just a special use of t_outlet in the future, or sometimes become implied. */
+ /* perhaps use [bindelem] here? */
  void gobj_subscribe(t_gobj *self, t_gobj *observer) {
  	t_appendix *d = self->dix;
***************
*** 125,129 ****
  	d->obs=(t_gobj **)realloc(d->obs,sizeof(t_gobj *)*(1+d->nobs));
  	d->obs[d->nobs++] = observer;
! 	gobj_changed(self,0);
  }
  
--- 127,133 ----
  	d->obs=(t_gobj **)realloc(d->obs,sizeof(t_gobj *)*(1+d->nobs));
  	d->obs[d->nobs++] = observer;
! 	t_onsubscribe ons = self->_class->onsubscribe;
! 	ons(self,observer);
! 	//post("x%p has %d observers",self,(int)d->nobs);
  }
  
***************
*** 141,145 ****
  	if (self->dix->canvas) gobj_unsubscribe(self,self->dix->canvas);
  	self->dix->canvas = c;
! 	if (self->dix->canvas) gobj_subscribe(self,self->dix->canvas);
  }
  
--- 145,149 ----
  	if (self->dix->canvas) gobj_unsubscribe(self,self->dix->canvas);
  	self->dix->canvas = c;
! 	if (self->dix->canvas)   gobj_subscribe(self,self->dix->canvas);
  }
  
***************
*** 363,367 ****
      x->gl_next = canvas_list;
      canvas_list = x;
!     if (x->havewindow || x->willvis) gobj_subscribe(x,manager);
  }
  
--- 367,374 ----
      x->gl_next = canvas_list;
      canvas_list = x;
!     if (x->havewindow || x->willvis) {
! 	gobj_subscribe(x,manager);
! 	//canvas_each(y,x) gobj_
!     }
  }
  
***************
*** 375,381 ****
  }
  
! /* if there's an old one lying around free it here.  This
!    happens if an abstraction is loaded but never gets as far
!    as calling canvas_new(). */
  void canvas_setargs(int argc, t_atom *argv) {
      if (canvas_newargv) free(canvas_newargv);
--- 382,387 ----
  }
  
! /* if there's an old one lying around free it here.
!    This happens if an abstraction is loaded but never gets as far as calling canvas_new(). */
  void canvas_setargs(int argc, t_atom *argv) {
      if (canvas_newargv) free(canvas_newargv);
***************
*** 495,499 ****
      x->ylabel = (t_symbol **)getbytes(0);
      // only manage this canvas if it's not one of the 3 invisible builtin canvases
-     // if (hack) gobj_subscribe(x,manager);
      return x;
  }
--- 501,504 ----
***************
*** 638,659 ****
  t_symbol *canvas_makebindsym(t_symbol *s) {return symprintf("pd-%s",s->name);}
  
- static void canvas_vis(t_canvas *x, t_floatarg f);
- 
- void canvas_map(t_canvas *x) {
- 	gobj_subscribe(x,manager);
- 	canvas_redraw(x); /* lazy update implies deleting this */
- 	canvas_each(y,x) {
- 		if (y->_class==canvas_class && canvas_getcanvas((t_canvas *)y)==x) canvas_map((t_canvas *)y);
- 		gobj_changed(y,0); // could be made implicit
- 	}
- 	canvas_wires_each(oc,t,x) gobj_changed(oc,0); // this too
- }
- 
  static void canvas_vis(t_canvas *x, t_floatarg f) {
!     int hadwindow = x->havewindow;
!     /* if window contents have never been subscribed it should subscribe them here but it doesn't */
!     SET(havewindow,!!f);
!     if (!hadwindow && x->havewindow) canvas_map(x);
! //    if (hadwindow && !x->havewindow) gobj_unsubscribe(x,manager);
  }
  
--- 643,651 ----
  t_symbol *canvas_makebindsym(t_symbol *s) {return symprintf("pd-%s",s->name);}
  
  static void canvas_vis(t_canvas *x, t_floatarg f) {
! 	int hadwindow = x->havewindow;
! 	SET(havewindow,!!f);
! 	if (hadwindow && !x->havewindow) gobj_unsubscribe(x,manager);
! 	if (!hadwindow && x->havewindow)   gobj_subscribe(x,manager);
  }
  
***************
*** 661,666 ****
  static void canvas_menu_open(t_canvas *x) {
      if (canvas_isvisible(x) && !canvas_istoplevel(x)) {
!         if (!x->owner) error("can't open a non-subcanvas");
!         else SET(havewindow,1);
      }
  }
--- 653,658 ----
  static void canvas_menu_open(t_canvas *x) {
      if (canvas_isvisible(x) && !canvas_istoplevel(x)) {
!         if (!x->owner) {error("can't open a non-subcanvas"); return;}
!         SET(havewindow,1);
      }
  }
***************
*** 701,705 ****
  		obj_disconnect(t.from, t.outlet, t.to, t.inlet);
  }
- 
  void canvas_deletelinesfor(t_canvas *x, t_text *text) {
      canvas_wires_each(oc,t,x)
--- 693,696 ----
***************
*** 1978,1997 ****
  
  void canvas_add(t_canvas *x, t_gobj *y) {
-     //canvas_add_debug(x,y);
      gobj_setcanvas(y,x);
      y->g_next = 0;
      y->dix->index = x->next_o_index++;
      if (!x->list) x->list = y; else {
! 	//if (x->next_add<0) {
! 		t_gobj *y2;
!         	for (y2 = x->list; y2->g_next; y2=y2->g_next) {}
! 	        y2->g_next = y;
! 	//} else {
! 	//	int i=0;
! 	//	t_gobj *y2;
!         //	for (y2 = x->list; y2->g_next; y2=y2->g_next, i++) if (i==x->next_add) break;
! 	//	y->g_next = y2->g_next;
! 	//	y2->g_next = y;
! 	//}
      }
      gobj_changed(x,"children");
--- 1969,1979 ----
  
  void canvas_add(t_canvas *x, t_gobj *y) {
      gobj_setcanvas(y,x);
      y->g_next = 0;
      y->dix->index = x->next_o_index++;
      if (!x->list) x->list = y; else {
! 	t_gobj *y2;
! 	for (y2 = x->list; y2->g_next; y2=y2->g_next) {}
!         y2->g_next = y;
      }
      gobj_changed(x,"children");
***************
*** 2005,2010 ****
      bool chkdsp = !!zgetfn(y,gensym("dsp"));
      int drawcommand = class_isdrawcommand(y->_class);
!     /* if we're a drawing command, erase all scalars now, before deleting
!        it; we'll redraw them once it's deleted below. */
      if (drawcommand) canvas_redrawallfortemplate(template_findbyname(canvas_makebindsym(canvas_getcanvas(x)->name)), 2);
      canvas_deletelinesfor(x,(t_text *)y);
--- 1987,1991 ----
      bool chkdsp = !!zgetfn(y,gensym("dsp"));
      int drawcommand = class_isdrawcommand(y->_class);
!     /* if we're a drawing command, erase all scalars now, before deleting it; we'll redraw them once it's deleted below. */
      if (drawcommand) canvas_redrawallfortemplate(template_findbyname(canvas_makebindsym(canvas_getcanvas(x)->name)), 2);
      canvas_deletelinesfor(x,(t_text *)y);
***************
*** 6658,6666 ****
  }
  
! void canvas_notice(t_gobj *x, struct _gobj *origin, int argc, t_atom *argv) {
  	t_canvas *self = (t_canvas *)x;
  	gobj_changed3(self,origin,argc,argv);
  }
  
  /* [declare] and canvas_open come from 0.40 */
  /* ------------------------------- declare ------------------------ */
--- 6639,6655 ----
  }
  
! void canvas_notice(t_gobj *x, t_gobj *origin, int argc, t_atom *argv) {
  	t_canvas *self = (t_canvas *)x;
  	gobj_changed3(self,origin,argc,argv);
  }
  
+ void gobj_onsubscribe(t_gobj *x, t_gobj *observer) {gobj_changed(x,0);}
+ 
+ void canvas_onsubscribe(t_gobj *x, t_gobj *observer) {
+ 	t_canvas *self = (t_canvas *)x;
+ 	gobj_onsubscribe(x,observer);
+ 	canvas_each(y,self) y->_class->onsubscribe(y,observer);
+ }
+ 
  /* [declare] and canvas_open come from 0.40 */
  /* ------------------------------- declare ------------------------ */
***************
*** 6800,6803 ****
--- 6789,6793 ----
      class_addcreator2("table",table_new,"SF");
      class_addmethod2(c,canvas_close,"close","F");
+     class_addmethod2(c,canvas_redraw,"redraw","");
      class_addmethod2(c,canvas_find_parent,"findparent","");
      class_addmethod2(c,canvas_arraydialog,"arraydialog","sfff");
***************
*** 6826,6829 ****
--- 6816,6820 ----
      class_addmethod2(pd_canvasmaker._class,canvas_with_reply,"with_reply","*");
      class_setnotice(c, canvas_notice);
+     class_setonsubscribe(c, canvas_onsubscribe);
  }
  





More information about the Pd-cvs mailing list