[PD-cvs] SF.net SVN: pure-data:[10664] trunk/externals/iem/iemguts/src/canvasdelete. c

zmoelnig at users.sourceforge.net zmoelnig at users.sourceforge.net
Wed Jan 28 16:40:00 CET 2009


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.




More information about the Pd-cvs mailing list