From 30d73c0688d02e3564a11ce71dc0cc051ac1c822 Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Wed, 1 Jun 2016 19:55:20 -0400 Subject: [PATCH] port envgen text display, change tabs to spaces, remove trailing spaces, and reformat brackets --- externals/ggee/gui/w_envgen.h | 395 +++++++++++++++++----------------- pd/nw/pdgui.js | 60 +++++- 2 files changed, 251 insertions(+), 204 deletions(-) diff --git a/externals/ggee/gui/w_envgen.h b/externals/ggee/gui/w_envgen.h index 1d9ed4bbc..29a732c01 100644 --- a/externals/ggee/gui/w_envgen.h +++ b/externals/ggee/gui/w_envgen.h @@ -44,7 +44,7 @@ static void draw_inlets(t_envgen *x, t_glist *glist, int firsttime, int nin, int 0, 0); } - else + else { //sys_vgui(".x%x.c coords %xo%d %d %d %d %d\n", // glist_getcanvas(glist), x, i, @@ -89,85 +89,87 @@ static void draw_inlets(t_envgen *x, t_glist *glist, int firsttime, int nin, int } } - - static int envgen_next_doodle(t_envgen *x, struct _glist *glist, int xpos,int ypos) { - int ret = -1; - float xscale,yscale; - int dxpos,dypos; - float minval = 100000.0; - float tval; - int i; - int insertpos = -1; - - if (xpos > text_xpix(&x->x_obj,glist) + x->w.width) - xpos = text_xpix(&x->x_obj,glist) + x->w.width; - - xscale = x->w.width/x->duration[x->last_state]; - yscale = x->w.height; - - dxpos = text_xpix(&x->x_obj,glist);/* + BORDER */; - dypos = text_ypix(&x->x_obj,glist) + BORDER; - - for (i=0;i<=x->last_state;i++) { - float dx2 = (dxpos + (x->duration[i] * xscale)) - xpos; - float dy2 = (dypos + yscale - (x->finalvalues[i] * yscale)) - ypos; - - dx2*=dx2; - dy2*=dy2; - tval = sqrt(dx2+dy2); - - if (tval <= minval) { - minval = tval; - insertpos = i; - } - } - - /* decide if we want to make a new one */ - if (minval > /*5*/ 8 && insertpos >= 0 && !x->x_freeze) { - - while (((dxpos + (x->duration[insertpos] * xscale)) - xpos) < 0) - insertpos++; - while (((dxpos + (x->duration[insertpos-1] * xscale)) - xpos) > 0) - insertpos--; - - if (x->last_state+1 >= x->args) - envgen_resize(x,x->args+1); - - for (i=x->last_state;i>=insertpos;i--) { - x->duration[i+1] = x->duration[i]; - x->finalvalues[i+1] = x->finalvalues[i]; - } - x->duration[insertpos] = (float)(xpos-dxpos)/x->w.width*x->duration[x->last_state++]; - x->w.pointerx = xpos; - x->w.pointery = ypos; - } - else { - x->w.pointerx = text_xpix(&x->x_obj,glist) + x->duration[insertpos]*x->w.width/x->duration[x->last_state]; - - - x->w.pointery = text_ypix(&x->x_obj,glist) + - (1.f - x->finalvalues[insertpos])*x->w.height; - } - - x->w.grabbed = insertpos; - return insertpos; + int ret = -1; + float xscale,yscale; + int dxpos,dypos; + float minval = 100000.0; + float tval; + int i; + int insertpos = -1; + + if (xpos > text_xpix(&x->x_obj,glist) + x->w.width) + xpos = text_xpix(&x->x_obj,glist) + x->w.width; + + xscale = x->w.width/x->duration[x->last_state]; + yscale = x->w.height; + + dxpos = text_xpix(&x->x_obj,glist);/* + BORDER */; + dypos = text_ypix(&x->x_obj,glist) + BORDER; + + for (i = 0; i <= x->last_state; i++) + { + float dx2 = (dxpos + (x->duration[i] * xscale)) - xpos; + float dy2 = (dypos + yscale - (x->finalvalues[i] * yscale)) - ypos; + + dx2*=dx2; + dy2*=dy2; + tval = sqrt(dx2+dy2); + + if (tval <= minval) + { + minval = tval; + insertpos = i; + } + } + + /* decide if we want to make a new one */ + if (minval > /*5*/ 8 && insertpos >= 0 && !x->x_freeze) + { + + while (((dxpos + (x->duration[insertpos] * xscale)) - xpos) < 0) + insertpos++; + while (((dxpos + (x->duration[insertpos-1] * xscale)) - xpos) > 0) + insertpos--; + + if (x->last_state+1 >= x->args) + envgen_resize(x,x->args+1); + + for (i=x->last_state;i>=insertpos;i--) + { + x->duration[i+1] = x->duration[i]; + x->finalvalues[i+1] = x->finalvalues[i]; + } + x->duration[insertpos] = (float)(xpos-dxpos)/x->w.width*x->duration[x->last_state++]; + x->w.pointerx = xpos; + x->w.pointery = ypos; + } + else + { + x->w.pointerx = text_xpix(&x->x_obj,glist) + x->duration[insertpos]*x->w.width/x->duration[x->last_state]; + + x->w.pointery = text_ypix(&x->x_obj,glist) + + (1.f - x->finalvalues[insertpos])*x->w.height; + } + + x->w.grabbed = insertpos; + return insertpos; } static void envgen_create_doodles(t_envgen *x, t_glist *glist) { - float xscale,yscale; - int xpos,ypos; + float xscale, yscale; + int xpos, ypos; int i; char guistr[255]; - xscale = x->w.width/x->duration[x->last_state]; + xscale = x->w.width / x->duration[x->last_state]; yscale = x->w.height; - + xpos = text_xpix(&x->x_obj,glist); - ypos = (int) (text_ypix(&x->x_obj,glist) + x->w.height); + ypos = (int)(text_ypix(&x->x_obj,glist) + x->w.height); for (i = 0; i <= x->last_state; i++) { //sprintf(guistr, ".x%x.c create oval %d %d %d %d -tags %xD%d", @@ -180,7 +182,7 @@ static void envgen_create_doodles(t_envgen *x, t_glist *glist) //if (i == x->w.grabbed) // strcat(guistr," -fill red\n"); - //else + //else // strcat(guistr,"\n"); //sys_vgui("%s",guistr); gui_vmess("gui_envgen_draw_doodle", "xxii", @@ -206,46 +208,48 @@ static void envgen_delete_doodles(t_envgen *x, t_glist *glist) static void envgen_update_doodles(t_envgen *x, t_glist *glist) { - - envgen_delete_doodles(x,glist); -/* LATER only create new doodles if necessary */ - envgen_create_doodles(x, glist); + envgen_delete_doodles(x,glist); + /* LATER only create new doodles if necessary */ + envgen_create_doodles(x, glist); } - static void envgen_delnum(t_envgen *x) { - sys_vgui(".x%x.c delete %xT\n",glist_getcanvas(x->w.glist),x); + //sys_vgui(".x%x.c delete %xT\n",glist_getcanvas(x->w.glist),x); + gui_vmess("gui_envgen_erase_text", "xx", + glist_getcanvas(x->w.glist), x); } - -static void envgen_shownum(t_envgen *x,t_glist* glist) +static void envgen_shownum(t_envgen *x, t_glist* glist) { - float xscale,yscale; - int xpos,ypos; - int i= x->w.grabbed; - - xscale = x->w.width/x->duration[x->last_state]; - yscale = x->w.height; - - xpos = text_xpix(&x->x_obj,glist); - ypos = (int) (text_ypix(&x->x_obj,glist) + x->w.height); - - envgen_delnum(x); - - sys_vgui(".x%x.c create text %d %d -text %fx%f -tags %xT\n", - (unsigned int)glist_getcanvas(x->w.glist), - - (int) (xpos+(x->duration[i] * xscale) + 12), - (int) (ypos - x->finalvalues[i]*yscale - 2), - - x->finalvalues[i]*(x->max-x->min), - x->duration[i], - (unsigned int)x); - clock_delay(x->w.numclock,700); -} + float xscale, yscale; + int xpos, ypos; + int i = x->w.grabbed; + xscale = x->w.width / x->duration[x->last_state]; + yscale = x->w.height; + + xpos = text_xpix(&x->x_obj, glist); + ypos = (int) (text_ypix(&x->x_obj,glist) + x->w.height); + envgen_delnum(x); + + //sys_vgui(".x%x.c create text %d %d -text %fx%f -tags %xT\n", + // (unsigned int)glist_getcanvas(x->w.glist), + // (int) (xpos+(x->duration[i] * xscale) + 12), + // (int) (ypos - x->finalvalues[i]*yscale - 2), + // x->finalvalues[i]*(x->max-x->min), + // x->duration[i], + // (unsigned int)x); + gui_vmess("gui_envgen_text", "xxiiff", + glist_getcanvas(x->w.glist), + x, + (int)(x->duration[i] * xscale) + 12, + (int)(x->w.height - x->finalvalues[i] * yscale - 2), + x->finalvalues[i] * (x->max - x->min), + x->duration[i]); + clock_delay(x->w.numclock,700); +} static void envgen_create(t_envgen *x, t_glist *glist) { @@ -257,14 +261,14 @@ static void envgen_create(t_envgen *x, t_glist *glist) xpos = text_xpix(&x->x_obj, glist); ypos = (int)text_ypix(&x->x_obj, glist); - x->w.numclock = clock_new(x, (t_method)envgen_delnum); + x->w.numclock = clock_new(x, (t_method)envgen_delnum); gui_vmess("gui_gobj_new", "xxsiii", glist_getcanvas(glist), x, "obj", xpos, - ypos); + ypos); //sys_vgui(".x%x.c create rectangle " // "%d %d %d %d -tags %xS -fill "BACKGROUNDCOLOR"\n", @@ -315,16 +319,16 @@ static void envgen_update(t_envgen *x, t_glist *glist) // glist_getcanvas(glist), x, // xpos - BORDER, ypos -BORDER, // xpos + x->w.width+2*BORDER, ypos + x->w.height+2*BORDER); - + gui_start_vmess("gui_envgen_coords", "xxii", glist_getcanvas(glist), x, - xpos, - ypos); + x->w.width + 2 * BORDER, + x->w.height + 2 * BORDER); xscale = x->w.width/x->duration[x->last_state]; yscale = x->w.height; - + //sprintf(buf,".x%x.c coords %pP",(unsigned int)glist_getcanvas(glist),x); gui_start_array(); @@ -348,16 +352,12 @@ static void envgen_update(t_envgen *x, t_glist *glist) void envgen_drawme(t_envgen *x, t_glist *glist, int firsttime) { + if (firsttime) envgen_create(x,glist); + else envgen_update(x,glist); - if (firsttime) envgen_create(x,glist); - else envgen_update(x,glist); - - draw_inlets(x, glist, firsttime, 1,2); + draw_inlets(x, glist, firsttime, 1,2); } - - - void envgen_erase(t_envgen* x, t_glist* glist) { int n; @@ -374,20 +374,17 @@ void envgen_erase(t_envgen* x, t_glist* glist) glist_getcanvas(glist), x); //envgen_delete_doodles(x, glist); } - - /* ------------------------ envgen widgetbehaviour----------------------------- */ - static void envgen_getrect(t_gobj *z, t_glist *owner, int *xp1, int *yp1, int *xp2, int *yp2) { int width, height; t_envgen* s = (t_envgen*)z; - width = s->w.width + 2*BORDER; - height = s->w.height + 2*BORDER; + width = s->w.width + 2 * BORDER; + height = s->w.height + 2 * BORDER; //*xp1 = text_xpix(&s->x_obj,owner)-BORDER; //*yp1 = text_ypix(&s->x_obj,owner)-BORDER; *xp1 = text_xpix(&s->x_obj,owner); @@ -396,8 +393,7 @@ static void envgen_getrect(t_gobj *z, t_glist *owner, *yp2 = text_ypix(&s->x_obj,owner) + height + 4; } -static void envgen_displace(t_gobj *z, t_glist *glist, - int dx, int dy) +static void envgen_displace(t_gobj *z, t_glist *glist, int dx, int dy) { t_envgen *x = (t_envgen *)z; x->x_obj.te_xpix += dx; @@ -409,9 +405,11 @@ static void envgen_displace(t_gobj *z, t_glist *glist, static void envgen_select(t_gobj *z, t_glist *glist, int state) { - t_envgen *x = (t_envgen *)z; - sys_vgui(".x%x.c itemconfigure %xS -fill %s\n", glist, - x, (state? "blue" : BACKGROUNDCOLOR)); + t_envgen *x = (t_envgen *)z; + //sys_vgui(".x%x.c itemconfigure %xS -fill %s\n", glist, + // x, (state? "blue" : BACKGROUNDCOLOR)); + gui_vmess("gui_envgen_select", "xxi", + glist_getcanvas(glist), x, state); } @@ -428,14 +426,13 @@ static void envgen_delete(t_gobj *z, t_glist *glist) canvas_deletelinesfor(glist, x); } - static void envgen_vis(t_gobj *z, t_glist *glist, int vis) { t_envgen* s = (t_envgen*)z; if (vis) - envgen_drawme(s, glist, 1); + envgen_drawme(s, glist, 1); else - envgen_erase(s,glist); + envgen_erase(s,glist); } /* can we use the normal text save function ?? */ @@ -444,7 +441,7 @@ static void envgen_save(t_gobj *z, t_binbuf *b) { t_envgen *x = (t_envgen *)z; binbuf_addv(b, "ssiisiiffss", gensym("#X"), gensym("obj"), - (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix, + (t_int)x->x_obj.te_xpix, (t_int)x->x_obj.te_ypix, atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)), x->w.width,x->w.height,x->max,x->min,x->r_sym,x->s_sym); binbuf_addv(b, ";"); @@ -454,93 +451,89 @@ static void envgen_save(t_gobj *z, t_binbuf *b) static void envgen_followpointer(t_envgen* x,t_glist* glist) { - float dur; - float xscale = x->duration[x->last_state]/x->w.width; - - if ((x->w.grabbed > 0) && (x->w.grabbed < x->last_state)) { - - dur = (x->w.pointerx - text_xpix(&x->x_obj,glist))*xscale; - if (dur < x->duration[x->w.grabbed-1]) - dur = x->duration[x->w.grabbed-1]; - if (dur > x->duration[x->w.grabbed+1]) - dur = x->duration[x->w.grabbed+1]; - - x->duration[x->w.grabbed] = dur; - } - - - x->finalvalues[x->w.grabbed] = 1.0f - (x->w.pointery - (float)text_ypix(&x->x_obj,glist))/(float)x->w.height; - if (x->finalvalues[x->w.grabbed] < 0.0) - x->finalvalues[x->w.grabbed]= 0.0; - else if (x->finalvalues[x->w.grabbed] > 1.0) - x->finalvalues[x->w.grabbed]= 1.0; + float dur; + float xscale = x->duration[x->last_state]/x->w.width; + if ((x->w.grabbed > 0) && (x->w.grabbed < x->last_state)) + { + dur = (x->w.pointerx - text_xpix(&x->x_obj,glist))*xscale; + if (dur < x->duration[x->w.grabbed-1]) + dur = x->duration[x->w.grabbed-1]; + if (dur > x->duration[x->w.grabbed+1]) + dur = x->duration[x->w.grabbed+1]; + x->duration[x->w.grabbed] = dur; + } + x->finalvalues[x->w.grabbed] = 1.0f - (x->w.pointery - (float)text_ypix(&x->x_obj,glist)) / (float)x->w.height; + if (x->finalvalues[x->w.grabbed] < 0.0) + x->finalvalues[x->w.grabbed]= 0.0; + else if (x->finalvalues[x->w.grabbed] > 1.0) + x->finalvalues[x->w.grabbed]= 1.0; } - void envgen_motion(t_envgen *x, t_floatarg dx, t_floatarg dy) { - if (x->w.shift) { - x->w.pointerx+=dx/1000.f; - x->w.pointery+=dy/1000.f; - } - else - { - x->w.pointerx+=dx; - x->w.pointery+=dy; - } - if (!x->resizing) - envgen_followpointer(x,x->w.glist); - else { - x->w.width+=dx; - x->w.height+=dy; - } - envgen_shownum(x,x->w.glist); - envgen_update(x,x->w.glist); + if (x->w.shift) { + x->w.pointerx += dx / 1000.f; + x->w.pointery += dy / 1000.f; + } + else + { + x->w.pointerx += dx; + x->w.pointery += dy; + } + if (!x->resizing) + envgen_followpointer(x, x->w.glist); + else + { + x->w.width += dx; + x->w.height += dy; + } + envgen_shownum(x, x->w.glist); + envgen_update(x, x->w.glist); } void envgen_key(t_envgen *x, t_floatarg f) { - if (f == 8.0 && x->w.grabbed < x->last_state && x->w.grabbed > 0) { - int i; - - for (i=x->w.grabbed;i<=x->last_state;i++) { - x->duration[i] = x->duration[i+1]; - x->finalvalues[i] = x->finalvalues[i+1]; - } - - x->last_state--; - x->w.grabbed--; - envgen_update(x,x->w.glist); - } + if (f == 8.0 && x->w.grabbed < x->last_state && x->w.grabbed > 0) + { + int i; + for (i = x->w.grabbed; i <= x->last_state; i++) + { + x->duration[i] = x->duration[i+1]; + x->finalvalues[i] = x->finalvalues[i+1]; + } + x->last_state--; + x->w.grabbed--; + envgen_update(x,x->w.glist); + } } - static int envgen_newclick(t_envgen *x, struct _glist *glist, int xpos, int ypos, int shift, int alt, int dbl, int doit) { /* check if user wants to resize */ - float wxpos = text_xpix(&x->x_obj,glist); - float wypos = (int) (text_ypix(&x->x_obj,glist) + x->w.height); - - if (doit){ - envgen_next_doodle(x,glist,xpos,ypos); - - glist_grab(x->w.glist, &x->x_obj.te_g, (t_glistmotionfn) envgen_motion, - (t_glistkeyfn) envgen_key, xpos, ypos); - - x->resizing = 0; - if (x->resizeable && (xpos > wxpos + x->w.width) && - (ypos > wypos)) { - x->resizing = 1; - return (0); - } - - x->w.shift = shift; - envgen_followpointer(x,glist); - envgen_shownum(x,glist); - envgen_update(x,glist); - } - return (1); -} + float wxpos = text_xpix(&x->x_obj, glist); + float wypos = (int) (text_ypix(&x->x_obj,glist) + x->w.height); + + if (doit) + { + envgen_next_doodle(x, glist, xpos, ypos); + + glist_grab(x->w.glist, &x->x_obj.te_g, (t_glistmotionfn) envgen_motion, + (t_glistkeyfn) envgen_key, xpos, ypos); + x->resizing = 0; + if (x->resizeable && (xpos > wxpos + x->w.width) && + (ypos > wypos)) + { + x->resizing = 1; + return (0); + } + + x->w.shift = shift; + envgen_followpointer(x, glist); + envgen_shownum(x, glist); + envgen_update(x, glist); + } + return (1); +} diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js index 67b848a2b..306a0f1e2 100644 --- a/pd/nw/pdgui.js +++ b/pd/nw/pdgui.js @@ -3151,7 +3151,7 @@ function add_popup(cid, popup) { // envgen function gui_envgen_draw_bg(cid, tag, bg_color, w, h, points_array) { var g = get_gobj(cid, tag), - bg, pline; + bg, border, pline; bg = create_item(cid, "rect", { width: w, height: h, @@ -3160,6 +3160,17 @@ function gui_envgen_draw_bg(cid, tag, bg_color, w, h, points_array) { "stroke-width": "2", transform: "translate(0.5, 0.5)" }); + // draw an extra path so we can give envgen + // a border class without affecting the + // background color of envgen + border = create_item(cid, "path", { + "stroke-width": 1, + d: ["M", 0, 0, w+1, 0, + "M", w+1, 0, w+1, h+1, + "M", w+1, h+1, 0, h+1, + "M", 0, h+1, 0, 0].join(" "), + "class": "border", + }); pline = create_item(cid, "polyline", { stroke: "black", fill: "none", @@ -3167,6 +3178,7 @@ function gui_envgen_draw_bg(cid, tag, bg_color, w, h, points_array) { points: points_array.join(" ") }); g.appendChild(bg); + g.appendChild(border); g.appendChild(pline); } @@ -3194,15 +3206,57 @@ function gui_envgen_erase_doodles(cid, tag) { } } -function gui_envgen_coords(cid, tag, x, y, points_array) { +function gui_envgen_coords(cid, tag, w, h, points_array) { var g = get_gobj(cid, tag), + bg = g.querySelector("rect"), + border = g.querySelector(".border"), polyline = g.querySelector("polyline"); - elem_move(g, x, y); + configure_item(bg, { + width: w, + height: h + }); + configure_item(border, { + d: ["M", 0, 0, w+1, 0, + "M", w+1, 0, w+1, h+1, + "M", w+1, h+1, 0, h+1, + "M", 0, h+1, 0, 0].join(" ") + }); configure_item(polyline, { points: points_array.join(" ") }); } +function gui_envgen_text(cid, tag, x, y, value, duration) { + var g = get_gobj(cid, tag), + svg_text; + svg_text = create_item(cid, "text", { + transform: "translate(" + x + ")", + y: y, + "font-size": "12px" + }); + text_to_tspans(cid, svg_text, value + "x" + duration); + g.appendChild(svg_text); +} + +function gui_envgen_erase_text(cid, tag) { + var g = get_gobj(cid, tag), + svg_text = g.querySelector("text"); + // Pd preemptively erases the text, so we must check + // for existence here + if (svg_text) { + svg_text.parentNode.removeChild(svg_text); + } +} + +function gui_envgen_select(cid, tag, state) { + var g = get_gobj(cid, tag); + if (state !== 0) { + g.classList.add("selected"); + } else { + g.classList.remove("selected"); + } +} + exports.add_popup = add_popup; // Kludge to get popup coords to fit the browser's zoom level -- GitLab