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