diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/parentposition.c | 98 |
2 files changed, 99 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile index dc3f0db..dc816c0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,7 +3,7 @@ # path to pd ## change this according to your setup! -PDROOT?=../../pd +PDROOT?=../../../../pd #PDROOT=/home/zmoelnig/src/pd/ # here we find the sources of pd (and evtl. the pd.lib) diff --git a/src/parentposition.c b/src/parentposition.c new file mode 100644 index 0000000..d55d8e5 --- /dev/null +++ b/src/parentposition.c @@ -0,0 +1,98 @@ + +/****************************************************** + * + * parentposition - implementation file + * + * copyleft (c) IOhannes m zmölnig + * + * 2007:forum::für::umläute:2007 + * + * institute of electronic music and acoustics (iem) + * + ****************************************************** + * + * license: GNU General Public License v.2 + * + ******************************************************/ + + +/* + * this object provides a way to get the position of the containing abstraction + * within the parent-patch + */ + +#include "m_pd.h" + +#include "g_canvas.h" +#include "m_imp.h" + +/* ------------------------- parentposition ---------------------------- */ + +static t_class *parentposition_class; + +typedef struct _parentposition +{ + t_object x_obj; + t_canvas *x_canvas; + + t_outlet*xoutlet, *youtlet; +} t_parentposition; + +static void parentposition_bang(t_parentposition *x) +{ + t_canvas*c=x->x_canvas; + t_canvas*c0=0; + + int x1=0, y1=0, width=0, height=0; + t_atom alist[2]; + + if(!c) return; + + + x1=c->gl_obj.te_xpix; + y1=c->gl_obj.te_ypix; + + + c0=c->gl_owner; + if(c0!=0) { + width= (int)(c0->gl_screenx2 - c0->gl_screenx1); + height=(int)(c0->gl_screeny2 - c0->gl_screeny1); + } + + SETFLOAT(alist, (t_float)width); + SETFLOAT(alist+1, (t_float)height); + outlet_list(x->youtlet, 0, 2, alist); + + // outlet_float(x->youtlet, y1); + SETFLOAT(alist, (t_float)x1); + SETFLOAT(alist+1, (t_float)y1); + outlet_list(x->xoutlet, 0, 2, alist); + +} + +static void parentposition_free(t_parentposition *x) +{ + outlet_free(x->xoutlet); + outlet_free(x->youtlet); +} + +static void *parentposition_new(void) +{ + t_parentposition *x = (t_parentposition *)pd_new(parentposition_class); + t_glist *glist=(t_glist *)canvas_getcurrent(); + t_canvas *canvas=(t_canvas*)glist_getcanvas(glist); + + x->x_canvas = canvas; + + x->xoutlet=outlet_new(&x->x_obj, &s_list); + x->youtlet=outlet_new(&x->x_obj, &s_list); + + return (x); +} + +void parentposition_setup(void) +{ + parentposition_class = class_new(gensym("parentposition"), (t_newmethod)parentposition_new, + (t_method)parentposition_free, sizeof(t_parentposition), 0, 0); + class_addbang(parentposition_class, (t_method)parentposition_bang); +} |