static void exciter_draw_move(t_exciter *x, t_glist *glist) { t_canvas *canvas=glist_getcanvas(glist); t_int polyray = ( x->x_height / x->x_nbevents) / 2; t_int ei, gi; SYS_VGUI7(".x%lx.c coords %xLINE %d %d %d %d \n", canvas, x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_width, text_ypix(&x->x_obj, glist)+x->x_height ); SYS_VGUI5(".x%lx.c coords %xLOWERCAPTION %d %d\n", canvas, x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) + x->x_height + 10 ); SYS_VGUI5(".x%lx.c coords %xHIGHERCAPTION %d %d\n", canvas, x, text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height + 10); SYS_VGUI7(".x%lx.c coords %xIN %d %d %d %d\n", canvas, x, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) - 2, text_xpix(&x->x_obj, glist) + 5, text_ypix(&x->x_obj, glist) ); if ( x->x_nbevents > 1 ) { for ( ei=0; ei<x->x_nbevents; ei++ ) { SYS_VGUI8(".x%lx.c coords %xOUT%d %d %d %d %d\n", canvas, x, ei, text_xpix(&x->x_obj, glist) + ( ei * (x->x_width - 5) )/ (x->x_nbevents-1), text_ypix(&x->x_obj, glist) + x->x_height, text_xpix(&x->x_obj, glist) + ( ei * (x->x_width - 5) )/ (x->x_nbevents-1) + 5, text_ypix(&x->x_obj, glist) + x->x_height + 2 ); } } else { SYS_VGUI8(".x%lx.c coords %xOUT%d %d %d %d %d\n", canvas, x, 0, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) + x->x_height, text_xpix(&x->x_obj, glist) + 5, text_ypix(&x->x_obj, glist) + x->x_height + 2 ); } for ( ei=0; ei<x->x_nbevents; ei++ ) { for ( gi=0; gi<(x->x_width/EXCITER_PIXEL_GRAIN); gi++ ) { SYS_VGUI13(".x%lx.c coords %xEVENT%.4d%.4d %d %d %d %d %d %d %d %d\n", canvas, x, gi, ei, text_xpix(&x->x_obj, glist) + gi*EXCITER_PIXEL_GRAIN, text_ypix(&x->x_obj, glist) + x->x_height - (ei+1)*x->x_height/x->x_nbevents + 2*polyray, text_xpix(&x->x_obj, glist) + gi*EXCITER_PIXEL_GRAIN + polyray, text_ypix(&x->x_obj, glist) + x->x_height - (ei+1)*x->x_height/x->x_nbevents + polyray, text_xpix(&x->x_obj, glist) + gi*EXCITER_PIXEL_GRAIN + 2*polyray, text_ypix(&x->x_obj, glist) + x->x_height - (ei+1)*x->x_height/x->x_nbevents, text_xpix(&x->x_obj, glist) + gi*EXCITER_PIXEL_GRAIN + polyray, text_ypix(&x->x_obj, glist) + x->x_height - (ei+1)*x->x_height/x->x_nbevents - polyray ); } } canvas_fixlinesfor( canvas, (t_text*)x ); }
static void scrolllist_update(t_scrolllist *x, t_glist *glist) { t_canvas *canvas=glist_getcanvas(glist); t_int i; // just in case we got confused if ( x->x_firstseen < 0 ) x->x_firstseen=0; if ( x->x_lastseen > x->x_capacity-1 ) x->x_lastseen=x->x_capacity-1; // display the content of text items for ( i=x->x_firstseen; i<=x->x_lastseen; i++ ) { // display the entry if displayable if ( ( (i-x->x_firstseen)*x->x_charheight < x->x_height ) && ( x->x_items[i] != NULL ) ) { SYS_VGUI11(".x%x.c create text %d %d -fill %s -activefill %s -width %d -text \"%s\" -anchor w -font %s -tags %xITEM%d\n", canvas, text_xpix(&x->x_obj, glist)+5, text_ypix(&x->x_obj, glist)+5+(i-x->x_firstseen)*x->x_charheight, x->x_fgcolor, x->x_secolor, x->x_width, x->x_items[i], x->x_font, x, i ); } if ( ( x->x_itemselected >= x->x_firstseen ) && ( x->x_itemselected <= x->x_lastseen ) ) { SYS_VGUI5(".x%x.c itemconfigure %xITEM%d -fill %s\n", canvas, x, x->x_itemselected, x->x_secolor); } } }
static void scrolllist_seek(t_scrolllist *x, t_floatarg fseeked) { t_int iout=0; t_canvas *canvas=glist_getcanvas(x->x_glist); if ( fseeked < 0 ) { post( "scrolllist : wrong searched file : %f", fseeked ); return; } if ( x->x_nitems == 0 ) return; iout = (t_int)fseeked % (x->x_nitems); SYS_VGUI5(".x%x.c itemconfigure %xITEM%d -fill %s\n", canvas, x, x->x_itemselected, x->x_fgcolor); x->x_itemselected = iout; SYS_VGUI5(".x%x.c itemconfigure %xITEM%d -fill %s\n", canvas, x, x->x_itemselected, x->x_secolor); scrolllist_output_current(x); }
static int scrolllist_click(t_gobj *z, struct _glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit) { t_scrolllist* x = (t_scrolllist *)z; t_canvas *canvas=glist_getcanvas(x->x_glist); t_int xoffset; if (doit) { // deselect previously selected item SYS_VGUI5(".x%x.c itemconfigure %xITEM%d -fill %s\n", canvas, x, x->x_itemselected, x->x_fgcolor); x->x_itemselected = x->x_firstseen + (ypix-text_ypix(&x->x_obj, glist))/x->x_charheight; SYS_VGUI5(".x%x.c itemconfigure %xITEM%d -fill %s\n", canvas, x, x->x_itemselected, x->x_secolor); // post( "scrolllist : selected item : %d", x->x_itemselected ); if ( x->x_items && ( x->x_itemselected < x->x_nitems ) ) { xoffset=(xpix-text_xpix(&x->x_obj, glist)); if ( xoffset <= (t_int)( x->x_width*4/5 ) ) { scrolllist_output_current(x); scrolllist_erase( x, x->x_glist ); scrolllist_update( x, glist ); } else { x->x_itemselected=-1; } } x->x_glist = glist; glist_grab( glist, &x->x_obj.te_g, (t_glistmotionfn)scrolllist_motion, NULL, xpix, ypix ); } return (1); }
static void exciter_draw_new(t_exciter *x, t_glist *glist) { t_canvas *canvas=glist_getcanvas(glist); t_int ei; SYS_VGUI7(".x%lx.c create rectangle %d %d %d %d -outline #000000 -fill #902181 -tags %xLINE\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist), text_xpix(&x->x_obj, glist)+x->x_width, text_ypix(&x->x_obj, glist)+x->x_height, x); SYS_VGUI5(".x%lx.c create text %d %d -font -*-courier-bold--normal--10-* -text \"0 s\" -tags %xLOWERCAPTION\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) + x->x_height + 10, x ); SYS_VGUI6(".x%lx.c create text %d %d -font -*-courier-bold--normal--10-* -text \"%.2f s\" -tags %xHIGHERCAPTION\n", canvas, text_xpix(&x->x_obj, glist) + x->x_width, text_ypix(&x->x_obj, glist) + x->x_height + 10, x->x_width/EXCITER_PIXEL_GRAIN*x->x_timegrain , x); SYS_VGUI7(".x%lx.c create rectangle %d %d %d %d -outline #000000 -fill #000000 -tags %xIN\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) - 2, text_xpix(&x->x_obj, glist) + 5, text_ypix(&x->x_obj, glist) , x); if ( x->x_nbevents > 1 ) { for ( ei=0; ei<x->x_nbevents; ei++ ) { SYS_VGUI8(".x%lx.c create rectangle %d %d %d %d -outline #000000 -fill #000000 -tags %xOUT%d\n", canvas, text_xpix(&x->x_obj, glist) + ( ei * (x->x_width - 5) )/ (x->x_nbevents-1), text_ypix(&x->x_obj, glist) + x->x_height, text_xpix(&x->x_obj, glist) + ( ei * (x->x_width - 5) )/ (x->x_nbevents-1) + 5, text_ypix(&x->x_obj, glist) + x->x_height + 2, x, ei); } } else { SYS_VGUI8(".x%lx.c create rectangle %d %d %d %d -outline #000000 -fill #000000 -tags %xOUT%d\n", canvas, text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist) + x->x_height, text_xpix(&x->x_obj, glist) + 5, text_ypix(&x->x_obj, glist) + x->x_height + 2, x, 0); } canvas_fixlinesfor( canvas, (t_text*)x ); }
static t_int *exciter_perform(t_int *w) { t_int ei, gi; t_int gstart, gend; t_exciter* x = (t_exciter*)(w[1]); struct timeval tv; struct timezone tz; long long looptime = 0L; double preltime = x->x_reltime; t_canvas *canvas=glist_getcanvas(x->x_glist); if ( x->x_started ) { // get current time in ms gettimeofday( &tv, &tz ); looptime = tv.tv_sec*1000 + tv.tv_usec/1000; if ( x->x_plooptime == 0L ) { x->x_plooptime = looptime; } x->x_reltime += ( looptime - x->x_plooptime ); if ( x->x_reltime > x->x_looplength ) { if ( x->x_loop ) { // post( "exciter : restarting loop" ); x->x_reltime = 0; preltime = 0; x->x_gindex = -1; } else { // post( "exciter : end of the loop" ); x->x_reltime = 0; x->x_started = 0; } } gstart = preltime/(x->x_timegrain*1000); gend = x->x_reltime/(x->x_timegrain*1000); // prevent overflow due to long long precision if ( gstart > x->x_width/EXCITER_PIXEL_GRAIN-1 ) gstart = x->x_width/EXCITER_PIXEL_GRAIN-1; if ( gstart < 0 ) gstart = 0; if ( gend > x->x_width/EXCITER_PIXEL_GRAIN-1 ) gend = x->x_width/EXCITER_PIXEL_GRAIN-1 ; if ( gend < 0 ) gend = 0; if ( gstart > x->x_gindex ) { // post( "exciter : focus slice : (%d,%d)", gstart, gend ); for ( gi=x->x_gindex+1; gi<=gend; gi++ ) { for ( ei=0; ei<x->x_nbevents; ei++ ) { if ( *(x->x_sbangs+ei*(x->x_width/EXCITER_PIXEL_GRAIN)+gi ) == 1 ) { outlet_bang( x->x_bangs[ ei ] ); SYS_VGUI5(".x%lx.c itemconfigure %xEVENT%.4d%.4d -fill #00FF00\n", canvas, x, gi, ei); } } } // unfocus previous events if ( gstart >= x->x_width/EXCITER_PIXEL_GRAIN - 1) gstart = x->x_width/EXCITER_PIXEL_GRAIN; // not too proud of this one // post( "exciter : unfocus slice : (%d,%d)", x->x_gindex, gstart-1 ); for ( gi=x->x_gindex; gi<gstart; gi++ ) { for ( ei=0; ei<x->x_nbevents; ei++ ) { if ( *(x->x_sbangs+ei*(x->x_width/EXCITER_PIXEL_GRAIN)+gi ) == 1 ) { SYS_VGUI5(".x%lx.c itemconfigure %xEVENT%.4d%.4d -fill #FFFFFF\n", canvas, x, gi, ei); } } } x->x_gindex = gend; } } x->x_plooptime = looptime; return (w+2); }
/* delete an event */ static void exciter_delete_gem(t_exciter *x, t_glist *glist, t_int ix, t_int iy) { t_canvas *canvas=glist_getcanvas(glist); SYS_VGUI5(".x%lx.c delete %xEVENT%.4d%.4d\n", canvas, x, ix, iy ); }