From d62cb1f54e461e8ff5c7e9dc71f04b60710e3aea Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Tue, 31 May 2016 22:57:19 -0400 Subject: [PATCH] more work porting envgen -- only thing that remains is drawing text --- externals/ggee/gui/w_envgen.h | 137 ++++++++++++++++++++-------------- pd/nw/pdgui.js | 35 ++++++++- 2 files changed, 114 insertions(+), 58 deletions(-) diff --git a/externals/ggee/gui/w_envgen.h b/externals/ggee/gui/w_envgen.h index e79ad2f4c..1d9ed4bbc 100644 --- a/externals/ggee/gui/w_envgen.h +++ b/externals/ggee/gui/w_envgen.h @@ -158,38 +158,50 @@ static int envgen_next_doodle(t_envgen *x, struct _glist *glist, static void envgen_create_doodles(t_envgen *x, t_glist *glist) { - float xscale,yscale; - int xpos,ypos; - int i; - char guistr[255]; - - xscale = x->w.width/x->duration[x->last_state]; - yscale = x->w.height; + float xscale,yscale; + int xpos,ypos; + int i; + char guistr[255]; + + 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); - for (i=0;i<=x->last_state;i++) { - sprintf(guistr,".x%x.c create oval %d %d %d %d -tags %xD%d",(unsigned int)glist_getcanvas(glist), - (int) (xpos+(x->duration[i] * xscale) - 2), - (int) (ypos - x->finalvalues[i]*yscale - 2), - (int) (xpos+(x->duration[i] * xscale)+2), - (int) (ypos - x->finalvalues[i]*yscale + 2), - (unsigned int)x,i); - - if (i == x->w.grabbed) strcat(guistr," -fill red\n"); - else strcat(guistr,"\n"); - sys_vgui("%s",guistr); - } - x->w.numdoodles = i; + xpos = text_xpix(&x->x_obj,glist); + 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", + // (unsigned int)glist_getcanvas(glist), + // (int) (xpos+(x->duration[i] * xscale) - 2), + // (int) (ypos - x->finalvalues[i]*yscale - 2), + // (int) (xpos+(x->duration[i] * xscale)+2), + // (int) (ypos - x->finalvalues[i]*yscale + 2), + // (unsigned int)x,i); + + //if (i == x->w.grabbed) + // strcat(guistr," -fill red\n"); + //else + // strcat(guistr,"\n"); + //sys_vgui("%s",guistr); + gui_vmess("gui_envgen_draw_doodle", "xxii", + glist_getcanvas(glist), + x, + (int)(x->duration[i] * xscale), + (int)(x->w.height - x->finalvalues[i] * yscale)); + } + x->w.numdoodles = i; } static void envgen_delete_doodles(t_envgen *x, t_glist *glist) { - int i; - for (i=0;i<=x->w.numdoodles;i++) { - sys_vgui(".x%x.c delete %xD%d\n",glist_getcanvas(glist),x,i); - } + int i; + //for (i = 0; i <= x->w.numdoodles; i++) + //{ + //sys_vgui(".x%x.c delete %xD%d\n",glist_getcanvas(glist),x,i); + //} + gui_vmess("gui_envgen_erase_doodles", "xx", + glist_getcanvas(glist), x); } static void envgen_update_doodles(t_envgen *x, t_glist *glist) @@ -299,27 +311,37 @@ static void envgen_update(t_envgen *x, t_glist *glist) int xpos = text_xpix(&x->x_obj,glist); int ypos = text_ypix(&x->x_obj,glist); - sys_vgui(".x%x.c coords %xS \ -%d %d %d %d\n", - glist_getcanvas(glist), x, - xpos - BORDER, ypos -BORDER, - xpos + x->w.width+2*BORDER, ypos + x->w.height+2*BORDER); - + //sys_vgui(".x%x.c coords %xS %d %d %d %d\n", + // glist_getcanvas(glist), x, + // xpos - BORDER, ypos -BORDER, + // xpos + x->w.width+2*BORDER, ypos + x->w.height+2*BORDER); - xscale = x->w.width/x->duration[x->last_state]; - yscale = x->w.height; + gui_start_vmess("gui_envgen_coords", "xxii", + glist_getcanvas(glist), + x, + xpos, + ypos); + + 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); + //sprintf(buf,".x%x.c coords %pP",(unsigned int)glist_getcanvas(glist),x); - for (i=0;i<=x->last_state;i++) { - sprintf(num," %d %d ",(int)(xpos + x->duration[i]*xscale), - (int) (ypos + x->w.height - x->finalvalues[i]*yscale)); - strcat(buf,num); - } - strcat(buf,"\n"); - sys_vgui("%s",buf); - envgen_update_doodles(x,glist); - draw_inlets(x, glist, 0,1,2); + gui_start_array(); + for (i = 0; i <= x->last_state; i++) + { + //sprintf(num," %d %d ",(int)(xpos + x->duration[i]*xscale), + // (int) (ypos + x->w.height - x->finalvalues[i]*yscale)); + // strcat(buf,num); + gui_i((int)(x->duration[i] * xscale)); + gui_i((int)(x->w.height - x->finalvalues[i] * yscale)); + } + //strcat(buf,"\n"); + //sys_vgui("%s",buf); + gui_end_array(); + gui_end_vmess(); + envgen_update_doodles(x,glist); + draw_inlets(x, glist, 0,1,2); } @@ -336,20 +358,21 @@ void envgen_drawme(t_envgen *x, t_glist *glist, int firsttime) -void envgen_erase(t_envgen* x,t_glist* glist) +void envgen_erase(t_envgen* x, t_glist* glist) { - int n; - sys_vgui(".x%x.c delete %xS\n", - glist_getcanvas(glist), x); - - sys_vgui(".x%x.c delete %pP\n", - glist_getcanvas(glist), x); - - - sys_vgui(".x%x.c delete %xi0\n",glist_getcanvas(glist),x); - sys_vgui(".x%x.c delete %xo0\n",glist_getcanvas(glist),x); - sys_vgui(".x%x.c delete %xo1\n",glist_getcanvas(glist),x); - envgen_delete_doodles(x,glist); + int n; + //sys_vgui(".x%x.c delete %xS\n", + // glist_getcanvas(glist), x); + + //sys_vgui(".x%x.c delete %pP\n", + // glist_getcanvas(glist), x); + + //sys_vgui(".x%x.c delete %xi0\n",glist_getcanvas(glist),x); + //sys_vgui(".x%x.c delete %xo0\n",glist_getcanvas(glist),x); + //sys_vgui(".x%x.c delete %xo1\n",glist_getcanvas(glist),x); + gui_vmess("gui_gobj_erase", "xx", + glist_getcanvas(glist), x); + //envgen_delete_doodles(x, glist); } diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js index 4da793634..67b848a2b 100644 --- a/pd/nw/pdgui.js +++ b/pd/nw/pdgui.js @@ -3163,13 +3163,46 @@ function gui_envgen_draw_bg(cid, tag, bg_color, w, h, points_array) { pline = create_item(cid, "polyline", { stroke: "black", fill: "none", - transform: "translate(1, 1)", + transform: "translate(2, 2)", points: points_array.join(" ") }); g.appendChild(bg); g.appendChild(pline); } +function gui_envgen_draw_doodle(cid, tag, cx, cy) { + var g = get_gobj(cid, tag), + d; + + d = create_item(cid, "circle", { + r: "2", + cx: cx + 2, + cy: cy + 2 + }); + + g.appendChild(d); +} + +function gui_envgen_erase_doodles(cid, tag) { + var g = get_gobj(cid, tag), + elem_array = g.querySelectorAll("circle"), + i; + if (elem_array.length > 0) { + for (i = 0; i < elem_array.length; i++) { + elem_array[i].parentNode.removeChild(elem_array[i]); + } + } +} + +function gui_envgen_coords(cid, tag, x, y, points_array) { + var g = get_gobj(cid, tag), + polyline = g.querySelector("polyline"); + elem_move(g, x, y); + configure_item(polyline, { + points: points_array.join(" ") + }); +} + exports.add_popup = add_popup; // Kludge to get popup coords to fit the browser's zoom level -- GitLab