Revision: 10664 http://pure-data.svn.sourceforge.net/pure-data/?rev=10664&view=rev Author: zmoelnig Date: 2009-01-28 15:40:00 +0000 (Wed, 28 Jan 2009)
Log Message: ----------- an object that can delete itself (or it's parent)
Added Paths: ----------- trunk/externals/iem/iemguts/src/canvasdelete.c
Added: trunk/externals/iem/iemguts/src/canvasdelete.c =================================================================== --- trunk/externals/iem/iemguts/src/canvasdelete.c (rev 0) +++ trunk/externals/iem/iemguts/src/canvasdelete.c 2009-01-28 15:40:00 UTC (rev 10664) @@ -0,0 +1,97 @@ + +/****************************************************** + * + * canvasdelete - implementation file + * + * copyleft (c) IOhannes m zm\xF6lnig + * + * 2007:forum::f\xFCr::uml\xE4ute:2007 + * + * institute of electronic music and acoustics (iem) + * + ****************************************************** + * + * license: GNU General Public License v.2 + * + ******************************************************/ + + +/* + * this object deletes itself (or the specified parent canvas) when banged + */ + +#include "m_pd.h" + +#include "g_canvas.h" +#include "m_imp.h" + +/* ------------------------- canvasdelete ---------------------------- */ + +static t_class *canvasdelete_class; + +typedef struct _canvasdelete +{ + t_object x_obj; + + t_glist*x_glist; + t_gobj *x_gobj; + + t_clock *x_clock; +} t_canvasdelete; +static void canvasdelete_doit(t_canvasdelete *x) +{ + clock_free(x->x_clock); + x->x_clock=NULL; + + glist_delete(x->x_glist, x->x_gobj); + +} + +static void canvasdelete_bang(t_canvasdelete *x) +{ + int x1=0, y1=0, width=0, height=0; + t_atom alist[2]; + + if(NULL==x->x_glist || NULL==x->x_gobj)return; + + x->x_clock=clock_new(x, (t_method)canvasdelete_doit); + clock_delay(x->x_clock, 0); +} + +static void *canvasdelete_new(t_floatarg f) +{ + t_canvasdelete *x = (t_canvasdelete *)pd_new(canvasdelete_class); + t_glist *glist=(t_glist *)canvas_getcurrent(); + t_canvas *canvas=(t_canvas*)glist_getcanvas(glist); + t_gobj*obj=(t_gobj*)x; + int depth=(int)f; + + if(depth<0)depth=0; + + while(depth && canvas) { + obj=(t_gobj*)canvas; + canvas=canvas->gl_owner; + depth--; + } + + x->x_glist = canvas; + x->x_gobj=obj; + + x->x_clock=NULL; + + return (x); +} + +static void canvasdelete_free(t_canvasdelete*x) +{ + +} + +void canvasdelete_setup(void) +{ + canvasdelete_class = class_new(gensym("canvasdelete"), + (t_newmethod)canvasdelete_new, (t_method)canvasdelete_free, + sizeof(t_canvasdelete), 0, + A_DEFFLOAT, 0); + class_addbang(canvasdelete_class, (t_method)canvasdelete_bang); +}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.