From 4f8c7c28f8ece71d15ed28ae30f253725f1efa39 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sat, 20 Oct 2012 18:32:25 +0000 Subject: update code format to pd-style: astyle --style=ansi --align-pointer=name *.c svn path=/trunk/externals/moonlib/; revision=16427 --- gamme.c | 567 +++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 289 insertions(+), 278 deletions(-) (limited to 'gamme.c') diff --git a/gamme.c b/gamme.c index 81583c3..3df8d52 100644 --- a/gamme.c +++ b/gamme.c @@ -1,5 +1,5 @@ /* -Copyright (C) 2002 Antoine Rousseau +Copyright (C) 2002 Antoine Rousseau This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -13,7 +13,7 @@ Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include @@ -53,13 +53,13 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA static t_class *gamme_class; static char *NoteNames[]= - { "C","C#","D","D#","E","F","F#","G","G#","A","A#","B" }; +{ "C","C#","D","D#","E","F","F#","G","G#","A","A#","B" }; static char NoteColPos[]= - { 1,-1,2,-2,3,4,-4,5,-5,6,-6,7 }; -static char Whites[]={0,2,4,5,7,9,11}; -static char Blacks[]={1,3,6,8,10}; -static char BlacksWhites[]={1,3,6,8,10,0,2,4,5,7,9,11}; -static char WhitesBlacks[]={0,2,4,5,7,9,11,1,3,6,8,10}; +{ 1,-1,2,-2,3,4,-4,5,-5,6,-6,7 }; +static char Whites[]= {0,2,4,5,7,9,11}; +static char Blacks[]= {1,3,6,8,10}; +static char BlacksWhites[]= {1,3,6,8,10,0,2,4,5,7,9,11}; +static char WhitesBlacks[]= {0,2,4,5,7,9,11,1,3,6,8,10}; #define ISWHITE(x) (NoteColPos[x]>0) #define ISBLACK(x) (!ISWHITE(x)) @@ -69,15 +69,15 @@ static char WhitesBlacks[]={0,2,4,5,7,9,11,1,3,6,8,10}; typedef struct _gamme { - t_object x_obj; - t_outlet *x_out_n; /*gives the number of selected notes when change occurs*/ - t_outlet *x_out_note; /*gives the number and new value of the changed notes when change occurs*/ - t_glist * x_glist; - int x_width; - int x_height; - char x_n; - char x_notes[12]; - char x_on_notes[12]; + t_object x_obj; + t_outlet *x_out_n; /*gives the number of selected notes when change occurs*/ + t_outlet *x_out_note; /*gives the number and new value of the changed notes when change occurs*/ + t_glist *x_glist; + int x_width; + int x_height; + char x_n; + char x_notes[12]; + char x_on_notes[12]; } t_gamme; /* widget helper functions */ @@ -89,157 +89,165 @@ typedef struct _gamme #define BLACKH 0.6 static void note_get_rel_rect(int x, float *xp1, float *yp1, float *xp2, float *yp2) { - int cp=NoteColPos[x]; - - *xp1=(abs(cp)-1)*(NOTEWIDTH+INTERSPACE) + (cp<0)*BLACK1st; - *xp2=*xp1+NOTEWIDTH; - - *yp1=0; - *yp2=cp<0?BLACKH:1; + int cp=NoteColPos[x]; + + *xp1=(abs(cp)-1)*(NOTEWIDTH+INTERSPACE) + (cp<0)*BLACK1st; + *xp2=*xp1+NOTEWIDTH; + + *yp1=0; + *yp2=cp<0?BLACKH:1; } static int get_touched_note(float x, float y) { - int i,j; - float xp1,xp2,yp1,yp2; - - for(j=0;j<12;j++) { - i=BlacksWhites[j]; - note_get_rel_rect(i,&xp1,&yp1,&xp2,&yp2); - if((x>=xp1)&&(x<=xp2)&&(y>=yp1)&&(y<=yp2)) - return i; - } - /*post("gamme::get_touched_note note not found: x=%f y=%f",x,y);*/ - return -1; + int i,j; + float xp1,xp2,yp1,yp2; + + for(j=0; j<12; j++) + { + i=BlacksWhites[j]; + note_get_rel_rect(i,&xp1,&yp1,&xp2,&yp2); + if((x>=xp1)&&(x<=xp2)&&(y>=yp1)&&(y<=yp2)) + return i; + } + /*post("gamme::get_touched_note note not found: x=%f y=%f",x,y);*/ + return -1; } static void draw_inlets(t_gamme *x, t_glist *glist, int firsttime, int nin, int nout) { - int n = nout; - int nplus, i; + int n = nout; + int nplus, i; int xpos=text_xpix(&x->x_obj, glist); int ypos=text_ypix(&x->x_obj, glist); - nplus = (n == 1 ? 1 : n-1); - for (i = 0; i < n; i++) - { - int onset = xpos + (x->x_width - IOWIDTH) * i / nplus; - if (firsttime) - sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %xo%d\n", - glist_getcanvas(glist), - onset, ypos + x->x_height - 1, - onset + IOWIDTH, ypos + x->x_height, - x, i); - else - sys_vgui(".x%lx.c coords %xo%d %d %d %d %d\n", - glist_getcanvas(glist), x, i, - onset, ypos + x->x_height - 1, - onset + IOWIDTH, ypos + x->x_height); - } - n = nin; - nplus = (n == 1 ? 1 : n-1); - for (i = 0; i < n; i++) - { - int onset = xpos + (x->x_width - IOWIDTH) * i / nplus; - if (firsttime) - sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %xi%d\n", - glist_getcanvas(glist), - onset, ypos, - onset + IOWIDTH, ypos + 1, - x, i); - else - sys_vgui(".x%lx.c coords %xi%d %d %d %d %d\n", - glist_getcanvas(glist), x, i, - onset, ypos, - onset + IOWIDTH, ypos + 1); - - } + nplus = (n == 1 ? 1 : n-1); + for (i = 0; i < n; i++) + { + int onset = xpos + (x->x_width - IOWIDTH) * i / nplus; + if (firsttime) + sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %xo%d\n", + glist_getcanvas(glist), + onset, ypos + x->x_height - 1, + onset + IOWIDTH, ypos + x->x_height, + x, i); + else + sys_vgui(".x%lx.c coords %xo%d %d %d %d %d\n", + glist_getcanvas(glist), x, i, + onset, ypos + x->x_height - 1, + onset + IOWIDTH, ypos + x->x_height); + } + n = nin; + nplus = (n == 1 ? 1 : n-1); + for (i = 0; i < n; i++) + { + int onset = xpos + (x->x_width - IOWIDTH) * i / nplus; + if (firsttime) + sys_vgui(".x%lx.c create rectangle %d %d %d %d -tags %xi%d\n", + glist_getcanvas(glist), + onset, ypos, + onset + IOWIDTH, ypos + 1, + x, i); + else + sys_vgui(".x%lx.c coords %xi%d %d %d %d %d\n", + glist_getcanvas(glist), x, i, + onset, ypos, + onset + IOWIDTH, ypos + 1); + + } } void gamme_drawme(t_gamme *x, t_glist *glist, int firsttime) { - int i,j; - float x1,y1,x2,y2; - int xi1,yi1,xi2,yi2; - char *color; + int i,j; + float x1,y1,x2,y2; + int xi1,yi1,xi2,yi2; + char *color; int xpos=text_xpix(&x->x_obj, glist); int ypos=text_ypix(&x->x_obj, glist); - - if (firsttime) { - sys_vgui(".x%lx.c create rectangle \ + + if (firsttime) + { + sys_vgui(".x%lx.c create rectangle \ %d %d %d %d -tags %xS "BACKGROUND"\n", - glist_getcanvas(glist), - xpos, ypos, - xpos + x->x_width, ypos + x->x_height, - x); - - } - else { - sys_vgui(".x%lx.c coords %xS \ + glist_getcanvas(glist), + xpos, ypos, + xpos + x->x_width, ypos + x->x_height, + x); + + } + else + { + sys_vgui(".x%lx.c coords %xS \ %d %d %d %d\n", - glist_getcanvas(glist), x, - xpos, ypos, - xpos + x->x_width, ypos + x->x_height); - } - - for(j=0;j<12;j++){ - i=WhitesBlacks[j]; - note_get_rel_rect(i,&x1,&y1,&x2,&y2); - xi1=xpos + x->x_width*x1; - xi2=xpos + x->x_width*x2; - yi1=ypos + x->x_height*y1; - yi2=ypos + x->x_height*y2; - - if (firsttime) { - color=x->x_notes[i]? (ISWHITE(i)?SELWHITECOLOR:SELBLACKCOLOR): - (ISWHITE(i)?WHITECOLOR:BLACKCOLOR); - sys_vgui(".x%lx.c create rectangle \ + glist_getcanvas(glist), x, + xpos, ypos, + xpos + x->x_width, ypos + x->x_height); + } + + for(j=0; j<12; j++) + { + i=WhitesBlacks[j]; + note_get_rel_rect(i,&x1,&y1,&x2,&y2); + xi1=xpos + x->x_width*x1; + xi2=xpos + x->x_width*x2; + yi1=ypos + x->x_height*y1; + yi2=ypos + x->x_height*y2; + + if (firsttime) + { + color=x->x_notes[i]? (ISWHITE(i)?SELWHITECOLOR:SELBLACKCOLOR): + (ISWHITE(i)?WHITECOLOR:BLACKCOLOR); + sys_vgui(".x%lx.c create rectangle \ %d %d %d %d -tags %x%s -fill %s\n", - glist_getcanvas(glist),xi1,yi1,xi2,yi2, - x,NoteNames[i],color); - } - else { - sys_vgui(".x%lx.c coords %x%s \ + glist_getcanvas(glist),xi1,yi1,xi2,yi2, + x,NoteNames[i],color); + } + else + { + sys_vgui(".x%lx.c coords %x%s \ %d %d %d %d\n", - glist_getcanvas(glist),x,NoteNames[i],xi1,yi1,xi2,yi2); - } - } - - draw_inlets(x, glist, firsttime, 1,3); + glist_getcanvas(glist),x,NoteNames[i],xi1,yi1,xi2,yi2); + } + } + + draw_inlets(x, glist, firsttime, 1,3); } -void gamme_erase(t_gamme* x,t_glist* glist) +void gamme_erase(t_gamme *x,t_glist *glist) { - int n; + int n; t_canvas *canvas=glist_getcanvas(glist); - sys_vgui(".x%lx.c delete %xS\n",canvas, x); + sys_vgui(".x%lx.c delete %xS\n",canvas, x); - for(n=0;n<12;n++) - sys_vgui(".x%lx.c delete %x%s\n",canvas,x,NoteNames[n]); + for(n=0; n<12; n++) + sys_vgui(".x%lx.c delete %x%s\n",canvas,x,NoteNames[n]); - n = 1; - while (n--) { - sys_vgui(".x%lx.c delete %xi%d\n",canvas,x,n); - } - n = 3; - while (n--) { - sys_vgui(".x%lx.c delete %xo%d\n",canvas,x,n); - } + n = 1; + while (n--) + { + sys_vgui(".x%lx.c delete %xi%d\n",canvas,x,n); + } + n = 3; + while (n--) + { + sys_vgui(".x%lx.c delete %xo%d\n",canvas,x,n); + } } - + /* ------------------------ gamme widgetbehaviour----------------------------- */ static void gamme_getrect(t_gobj *z, t_glist *glist, - int *xp1, int *yp1, int *xp2, int *yp2) + int *xp1, int *yp1, int *xp2, int *yp2) { t_gamme *x = (t_gamme *)z; int width, height; - t_gamme* s = (t_gamme*)z; + t_gamme *s = (t_gamme *)z; width = s->x_width; @@ -251,28 +259,28 @@ static void gamme_getrect(t_gobj *z, t_glist *glist, } static void gamme_displace(t_gobj *z, t_glist *glist, - int dx, int dy) + int dx, int dy) { t_gamme *x = (t_gamme *)z; x->x_obj.te_xpos += dx; x->x_obj.te_ypos += dy; gamme_drawme(x, glist, 0); - canvas_fixlinesfor(glist,(t_text*) x); + canvas_fixlinesfor(glist,(t_text *) x); } static void gamme_select(t_gobj *z, t_glist *glist, int state) { - t_gamme *x = (t_gamme *)z; - sys_vgui(".x%lx.c itemconfigure %xS -fill %s\n", glist, - x, (state? "blue" : BACKGROUNDCOLOR)); + t_gamme *x = (t_gamme *)z; + sys_vgui(".x%lx.c itemconfigure %xS -fill %s\n", glist, + x, (state? "blue" : BACKGROUNDCOLOR)); } static void gamme_activate(t_gobj *z, t_glist *glist, int state) { -/* t_text *x = (t_text *)z; - t_rtext *y = glist_findrtext(glist, x); - if (z->g_pd != gatom_class) rtext_activate(y, state);*/ + /* t_text *x = (t_text *)z; + t_rtext *y = glist_findrtext(glist, x); + if (z->g_pd != gatom_class) rtext_activate(y, state);*/ } static void gamme_delete(t_gobj *z, t_glist *glist) @@ -281,14 +289,14 @@ static void gamme_delete(t_gobj *z, t_glist *glist) canvas_deletelinesfor(glist, x); } - + static void gamme_vis(t_gobj *z, t_glist *glist, int vis) { - t_gamme* s = (t_gamme*)z; + t_gamme *s = (t_gamme *)z; if (vis) - gamme_drawme(s, glist, 1); + gamme_drawme(s, glist, 1); else - gamme_erase(s,glist); + gamme_erase(s,glist); } /* can we use the normal text save function ?? */ @@ -296,34 +304,34 @@ static void gamme_vis(t_gobj *z, t_glist *glist, int vis) static void gamme_save(t_gobj *z, t_binbuf *b) { t_gamme *x = (t_gamme *)z; - char *c=x->x_notes; - + char *c=x->x_notes; + binbuf_addv(b, "ssiisiiiiiiiiiiiiii", gensym("#X"),gensym("obj"), - (t_int)x->x_obj.te_xpos, (t_int)x->x_obj.te_ypos, - atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)), - x->x_width,x->x_height, - c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11]); + (t_int)x->x_obj.te_xpos, (t_int)x->x_obj.te_ypos, + atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)), + x->x_width,x->x_height, + c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],c[8],c[9],c[10],c[11]); binbuf_addv(b, ";"); } void gamme_getn(t_gamme *x) { - outlet_float(x->x_out_n,x->x_n); + outlet_float(x->x_out_n,x->x_n); } void gamme_out_changed(t_gamme *x,int note) { - t_atom ats[2]; - SETFLOAT(&ats[0],note); - SETFLOAT(&ats[1],x->x_notes[note]); + t_atom ats[2]; + SETFLOAT(&ats[0],note); + SETFLOAT(&ats[1],x->x_notes[note]); - outlet_list(x->x_out_note,0,2,ats); + outlet_list(x->x_out_note,0,2,ats); } inline float my_mod(float x,int n) { - float y=fmod(x,n); - return y<0?y+n:y; + float y=fmod(x,n); + return y<0?y+n:y; } #define my_div(x,y) (floor(x/y)) @@ -331,136 +339,138 @@ inline float my_mod(float x,int n) void gamme_set(t_gamme *x,t_floatarg note,t_floatarg on) { - unsigned int i,notei=tonotei(note),changed=0; - char *color; + unsigned int i,notei=tonotei(note),changed=0; + char *color; t_canvas *canvas=glist_getcanvas(x->x_glist); - - - if(x->x_notes[notei]!=on) changed=1; - if(on<0) x->x_notes[notei]=!(x->x_notes[notei]); - else x->x_notes[notei]=on; - if(changed) gamme_out_changed(x,notei); - - color=x->x_notes[notei]?(ISWHITE(notei)?SELWHITECOLOR:SELBLACKCOLOR): - (ISWHITE(notei)?WHITECOLOR:BLACKCOLOR); - - if(glist_isvisible(x->x_glist)) - sys_vgui(".x%lx.c itemconfigure %x%s -fill %s\n", canvas, - x, NoteNames[notei],color); - - x->x_n=0; - for(i=0;i<12;i++) if(x->x_notes[i]) x->x_on_notes[(int)(x->x_n++)]=i; - gamme_getn(x); + + + if(x->x_notes[notei]!=on) changed=1; + if(on<0) x->x_notes[notei]=!(x->x_notes[notei]); + else x->x_notes[notei]=on; + if(changed) gamme_out_changed(x,notei); + + color=x->x_notes[notei]?(ISWHITE(notei)?SELWHITECOLOR:SELBLACKCOLOR): + (ISWHITE(notei)?WHITECOLOR:BLACKCOLOR); + + if(glist_isvisible(x->x_glist)) + sys_vgui(".x%lx.c itemconfigure %x%s -fill %s\n", canvas, + x, NoteNames[notei],color); + + x->x_n=0; + for(i=0; i<12; i++) if(x->x_notes[i]) x->x_on_notes[(int)(x->x_n++)]=i; + gamme_getn(x); } #define getnote(n) \ (my_div(n,(int)x->x_n)*12+x->x_on_notes[(int)my_mod(n,x->x_n)]) void gamme_get(t_gamme *x,t_floatarg ref_octave,t_floatarg note) { - int no0,no1,ni0,ni1,n0,n1,n; - float xn,xx,nn; + int no0,no1,ni0,ni1,n0,n1,n; + float xn,xx,nn; - if(!x->x_n) return; - no0=floor(note); - no1=ceil(note); - xx=note-no0; + if(!x->x_n) return; + no0=floor(note); + no1=ceil(note); + xx=note-no0; - nn=getnote((float)no0)*(1-xx)+getnote((float)(no0+1))*xx+ref_octave*12; - n=getnote((float)no0)+ref_octave*12; - outlet_float(x->x_obj.ob_outlet,nn); + nn=getnote((float)no0)*(1-xx)+getnote((float)(no0+1))*xx+ref_octave*12; + n=getnote((float)no0)+ref_octave*12; + outlet_float(x->x_obj.ob_outlet,nn); } static void gamme_click(t_gamme *x, t_floatarg xpos, t_floatarg ypos, - t_floatarg shift, t_floatarg ctrl, t_floatarg alt) + t_floatarg shift, t_floatarg ctrl, t_floatarg alt) { - int note; + int note; int x0=text_xpix(&x->x_obj, x->x_glist); int y0=text_ypix(&x->x_obj, x->x_glist); - - note=get_touched_note( - (xpos-x0)/x->x_width, - (ypos-y0)/x->x_height); - - if(note>=0) gamme_set(x,note,!x->x_notes[note]); + + note=get_touched_note( + (xpos-x0)/x->x_width, + (ypos-y0)/x->x_height); + + if(note>=0) gamme_set(x,note,!x->x_notes[note]); } static int gamme_newclick(t_gobj *z, struct _glist *glist, - int xpix, int ypix, int shift, int alt, int dbl, int doit) + int xpix, int ypix, int shift, int alt, int dbl, int doit) { - t_gamme* x = (t_gamme *)z; + t_gamme *x = (t_gamme *)z; if(doit) { - gamme_click( x, (t_floatarg)xpix, (t_floatarg)ypix, (t_floatarg)shift, - 0, (t_floatarg)alt); + gamme_click( x, (t_floatarg)xpix, (t_floatarg)ypix, (t_floatarg)shift, + 0, (t_floatarg)alt); } return (1); } void gamme_float(t_gamme *x,t_floatarg f) { - unsigned int notei=tonotei(f); + unsigned int notei=tonotei(f); - /*post("notei=%d",notei);*/ - if(x->x_notes[notei]) - outlet_float(x->x_obj.ob_outlet,f); + /*post("notei=%d",notei);*/ + if(x->x_notes[notei]) + outlet_float(x->x_obj.ob_outlet,f); } void gamme_round(t_gamme *x,t_floatarg f,t_floatarg round) { - unsigned int notei=tonotei(f); - int imin=floor(f),imax=ceil(f); - float norm; - - if(!x->x_n) return; - - while(!x->x_notes[(int)my_mod((imin),12U)]) imin--; - while(!x->x_notes[(int)my_mod((imax),12U)]) imax++; - - /*post("min: %d max: %d",imin,imax);*/ - - if((imin!=imax)&&round) { - round*=round; - norm=(f-imin)/(imax-imin)*2-1; - norm=norm/sqrt(1+round*norm*norm)*sqrt(1+round)/2+.5; - f=norm*(imax-imin)+imin; - } - outlet_float(x->x_obj.ob_outlet,f); + unsigned int notei=tonotei(f); + int imin=floor(f),imax=ceil(f); + float norm; + + if(!x->x_n) return; + + while(!x->x_notes[(int)my_mod((imin),12U)]) imin--; + while(!x->x_notes[(int)my_mod((imax),12U)]) imax++; + + /*post("min: %d max: %d",imin,imax);*/ + + if((imin!=imax)&&round) + { + round*=round; + norm=(f-imin)/(imax-imin)*2-1; + norm=norm/sqrt(1+round*norm*norm)*sqrt(1+round)/2+.5; + f=norm*(imax-imin)+imin; + } + outlet_float(x->x_obj.ob_outlet,f); } void gamme_setall(t_gamme *x,t_symbol *s, int argc, t_atom *argv) { - int i=0,err=0; - - if(argc==12) - { - for(i=0;i<12;i++) err+=!IS_A_FLOAT(argv,i); - if(!err) for(i=0;i<12;i++) gamme_set(x,i,atom_getfloat(&argv[i])); - } + int i=0,err=0; + + if(argc==12) + { + for(i=0; i<12; i++) err+=!IS_A_FLOAT(argv,i); + if(!err) for(i=0; i<12; i++) gamme_set(x,i,atom_getfloat(&argv[i])); + } } void gamme_getall(t_gamme *x) { - int i=0; + int i=0; - for(i=0;i<12;i++) gamme_out_changed(x,i); - gamme_getn(x); + for(i=0; i<12; i++) gamme_out_changed(x,i); + gamme_getn(x); } extern int sys_noloadbang; static void gamme_loadbang(t_gamme *x) { - int i; - - if(sys_noloadbang) return; - for(i=0;i<12;i++) gamme_out_changed(x,i); - gamme_getn(x); + int i; + + if(sys_noloadbang) return; + for(i=0; i<12; i++) gamme_out_changed(x,i); + gamme_getn(x); } -void gamme_size(t_gamme* x,t_floatarg w,t_floatarg h) { - x->x_width = w; - x->x_height = h; - gamme_drawme(x, x->x_glist, 0); +void gamme_size(t_gamme *x,t_floatarg w,t_floatarg h) +{ + x->x_width = w; + x->x_height = h; + gamme_drawme(x, x->x_glist, 0); } t_widgetbehavior gamme_widgetbehavior; @@ -474,73 +484,74 @@ static void gamme_setwidget(void) gamme_widgetbehavior.w_deletefn = gamme_delete; gamme_widgetbehavior.w_visfn = gamme_vis; gamme_widgetbehavior.w_clickfn = gamme_newclick; - //gamme_widgetbehavior.w_propertiesfn = NULL; + //gamme_widgetbehavior.w_propertiesfn = NULL; //gamme_widgetbehavior.w_savefn = gamme_save; } static void *gamme_new(t_symbol *s, int argc, t_atom *argv) { - int i=0,err=0; - - t_gamme *x = (t_gamme *)pd_new(gamme_class); - - x->x_glist = (t_glist*) canvas_getcurrent(); - x->x_width = DEFAULTWIDTH; - x->x_height = DEFAULTHEIGHT; - outlet_new(&x->x_obj, &s_float); - x->x_out_n=outlet_new(&x->x_obj, &s_float); - x->x_out_note=outlet_new(&x->x_obj, &s_float); - - x->x_n=0; - for(i=0;i<12;i++) x->x_notes[i]=0; - for(i=0;i<12;i++) x->x_on_notes[i]=0; - - if((argc>1)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)) - { - if(atom_getfloat(&argv[0])) x->x_width = atom_getfloat(&argv[0]); - if(atom_getfloat(&argv[1])) x->x_height = atom_getfloat(&argv[1]); - - if(argc==14) - { - for(i=0;i<12;i++) err+=(!IS_A_FLOAT(argv,i+2)); - if(!err) { - for(i=0;i<12;i++) if(x->x_notes[i]=atom_getfloat(&argv[i+2])) - x->x_on_notes[(int)(x->x_n++)]=i; - /*gamme_set(x,i,atom_getfloat(&argv[i+2]));gamme_getn(x);*/ - } - else post("gamme_new : error in creation arguments"); - } - /*if(argc==14) gamme_setall(x,s,argc-2,&argv[2]);*/ - } - - return (x); + int i=0,err=0; + + t_gamme *x = (t_gamme *)pd_new(gamme_class); + + x->x_glist = (t_glist *) canvas_getcurrent(); + x->x_width = DEFAULTWIDTH; + x->x_height = DEFAULTHEIGHT; + outlet_new(&x->x_obj, &s_float); + x->x_out_n=outlet_new(&x->x_obj, &s_float); + x->x_out_note=outlet_new(&x->x_obj, &s_float); + + x->x_n=0; + for(i=0; i<12; i++) x->x_notes[i]=0; + for(i=0; i<12; i++) x->x_on_notes[i]=0; + + if((argc>1)&&IS_A_FLOAT(argv,0)&&IS_A_FLOAT(argv,1)) + { + if(atom_getfloat(&argv[0])) x->x_width = atom_getfloat(&argv[0]); + if(atom_getfloat(&argv[1])) x->x_height = atom_getfloat(&argv[1]); + + if(argc==14) + { + for(i=0; i<12; i++) err+=(!IS_A_FLOAT(argv,i+2)); + if(!err) + { + for(i=0; i<12; i++) if(x->x_notes[i]=atom_getfloat(&argv[i+2])) + x->x_on_notes[(int)(x->x_n++)]=i; + /*gamme_set(x,i,atom_getfloat(&argv[i+2]));gamme_getn(x);*/ + } + else post("gamme_new : error in creation arguments"); + } + /*if(argc==14) gamme_setall(x,s,argc-2,&argv[2]);*/ + } + + return (x); } void gamme_setup(void) { - gamme_class = class_new(gensym("gamme"), (t_newmethod)gamme_new, 0, - sizeof(t_gamme),0, A_GIMME,0); + gamme_class = class_new(gensym("gamme"), (t_newmethod)gamme_new, 0, + sizeof(t_gamme),0, A_GIMME,0); class_addfloat(gamme_class,gamme_float); class_addmethod(gamme_class, (t_method)gamme_click, gensym("click"), - A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); + A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0); class_addmethod(gamme_class, (t_method)gamme_size, gensym("size"), - A_FLOAT, A_FLOAT, 0); + A_FLOAT, A_FLOAT, 0); class_addmethod(gamme_class, (t_method)gamme_set, gensym("set"), - A_FLOAT, A_FLOAT, 0); + A_FLOAT, A_FLOAT, 0); class_addmethod(gamme_class, (t_method)gamme_get, gensym("get"), - A_FLOAT, A_FLOAT, 0); + A_FLOAT, A_FLOAT, 0); class_addmethod(gamme_class, (t_method)gamme_round, gensym("round"), - A_FLOAT, A_FLOAT, 0); + A_FLOAT, A_FLOAT, 0); class_addmethod(gamme_class, (t_method)gamme_setall, gensym("setall"), - A_GIMME, 0); + A_GIMME, 0); class_addmethod(gamme_class, (t_method)gamme_getall, gensym("getall"), 0); -- cgit v1.2.1