From 76f25790c16b861ffc04460932a71242932d89cf Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Fri, 6 Mar 2015 15:33:29 -0500
Subject: [PATCH] nlet highlighting and filtering multiple msgs to pd window

---
 pd/nw/pdcanvas.css  |  21 ++++++-
 pd/nw/pdgui.js      |  91 +++++++++++++++++++++++------
 pd/nw/todo.txt      |   2 +
 pd/src/g_all_guis.c |  10 ++--
 pd/src/g_canvas.c   |   1 +
 pd/src/g_editor.c   | 135 ++++++++++++++++++++++++++------------------
 pd/src/g_rtext.c    |   8 ++-
 pd/src/g_text.c     |  56 ++++++++++--------
 8 files changed, 216 insertions(+), 108 deletions(-)

diff --git a/pd/nw/pdcanvas.css b/pd/nw/pdcanvas.css
index 88baa317e..7cabc5c0a 100644
--- a/pd/nw/pdcanvas.css
+++ b/pd/nw/pdcanvas.css
@@ -38,11 +38,26 @@ text {
     stroke-dasharray: 3 2;
 }
 
-.xlet {
-    stroke: black;
+.xlet_control {
+    stroke: red;
     fill: gray;
     stroke-width: 1;
-    shape-rendering: optimizeSpeed;
+}
+
+.xlet_signal {
+    stroke: green;
+    fill: green;
+    stroke-width: 1;
+}
+
+.xlet_iemgui {
+    stroke: black;
+    fill: black;
+    stroke-width: 1;
+}
+
+.xlet_selected {
+    stroke: purple !important;
 }
 
 //.xlet:hover {
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index bb11d3e94..3ea35b362 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -157,18 +157,30 @@ function set_audioapi(val) {
     pd_whichapi = val;
 }
 
+var last_string = "";
+var last_child = {};
+var duplicate = 0;
+
 function gui_post(string, color) {
-    if (color === undefined) { color = "black" };
-    var myp = pd_window.document.getElementById('p1');
-    var text;
-    var span = pd_window.document.createElement("span");
-    span.style.color = color;
-    var text = pd_window.document.createTextNode(string + "\n"); 
-    span.appendChild(text);
-    myp.appendChild(span);
-    var printout = pd_window.document.getElementById("bottom");
-    printout.scrollTop = printout.scrollHeight;
-//    printout.scrollTo(0, pd_window.document.body.scrollHeight);
+    if (last_string === string) {
+        last_child.textContent = "[" + (duplicate + 2) + "] " + last_string;
+        duplicate++;
+    } else {
+        if (color === undefined) { color = "black" };
+        var myp = pd_window.document.getElementById('p1');
+        var text;
+        var span = pd_window.document.createElement("span");
+        span.style.color = color;
+        var text = pd_window.document.createTextNode(string + "\n"); 
+        span.appendChild(text);
+        myp.appendChild(span);
+        var printout = pd_window.document.getElementById("bottom");
+        printout.scrollTop = printout.scrollHeight;
+
+        last_string = string;
+        last_child = span;
+        duplicate = 0;
+    }
 }
 
 exports.gui_post = gui_post;
@@ -1857,16 +1869,30 @@ function gui_text_drawborder(cid, tag, isbroken, x1, y1, x2, y2) {
     g.appendChild(rect);
 }
 
-function gui_canvas_drawio(cid, parenttag, tag, x1, y1, x2, y2, basex, basey) {
-    var g = get_gobj(cid, parenttag);
-    // probably need to add an id for xlets below
+function gui_canvas_drawio(cid, parenttag, tag, x1, y1, x2, y2, basex, basey, type, i, is_signal, is_iemgui) {
+    var xlet_class, xlet_id, g = get_gobj(cid, parenttag);
+    if (is_iemgui) {
+        xlet_class = 'xlet_iemgui';
+        // We have an inconsistency here.  We're setting the tag using
+        // string concatenation below, but the "tag" for iemguis arrives
+        // to us pre-concatenated.  We need to remove that formatting in c, and
+        // in general try to simplify tag creation on the c side as much
+        // as possible.
+        xlet_id = tag;
+    } else if (is_signal) {
+        xlet_class = 'xlet_signal';
+        xlet_id = tag + type + i;
+    } else {
+        xlet_class = 'xlet_control';
+        xlet_id = tag + type + i;
+    }
     var rect = create_item(cid, 'rect', {
         width: x2 - x1,
         height: y2 - y1,
         x: x1 - basex,
         y: y1 - basey,
-        id: tag,
-        class: 'xlet'
+        id: xlet_id,
+        class: xlet_class,
     });
     g.appendChild(rect);
     gui_post("the tag for this XLET is " + tag);
@@ -1878,6 +1904,32 @@ function gui_eraseio(cid, tag) {
     xlet.parentNode.removeChild(xlet);
 }
 
+function gui_configure_io(cid, tag, is_iemgui, is_signal, width) {
+    var xlet = get_item(cid, tag);
+    configure_item(xlet, {
+        'stroke-width': width,
+//        fill: 'red'
+//        fill: filter ? 'orange' : (is_signal ? 'red' : 'green')
+    });
+    if (is_iemgui) {
+        xlet.classList.add('xlet_iemgui');
+    } else if (is_signal) {
+        xlet.classList.add('xlet_signal');
+    } else {
+        xlet.classList.add('xlet_control');
+    }
+    // remove xlet_selected tag
+    xlet.classList.remove('xlet_selected');
+    // iemgui: black
+    // sig: red
+    // control: green
+}
+
+function gui_highlight_io(cid, tag) {
+    var xlet = get_item(cid, tag);
+    xlet.classList.add('xlet_selected');
+}
+
 function gui_message_drawborder(cid,tag,width,height) {
     var g = get_gobj(cid, tag);
     var p_array = [0,0,
@@ -1992,8 +2044,11 @@ function gui_text_new(canvasname, myname, type, isselected, x, y, text, font) {
         // at the top-right corner of the text's bbox.  SVG uses the baseline.
         // There's probably a programmatic way to do this, but for now-- fudge factors
         // based on the DejaVu Sans Mono font. :)
-        x: 1,
-        y: 13,
+        x: x,
+        y: y + 10,
+        // Turns out we can't do 'hanging' baseline
+        // because it's borked when scaled. Bummer...
+        // 'dominant-baseline': 'hanging',
         'shape-rendering': 'optimizeSpeed',
         'font-size': font + 'px',
         id: myname + 'text'
diff --git a/pd/nw/todo.txt b/pd/nw/todo.txt
index 2889f2202..b1b5f57b1 100644
--- a/pd/nw/todo.txt
+++ b/pd/nw/todo.txt
@@ -102,3 +102,5 @@ Everything else:
 * in pdproperties.html, use an object to store all the prop/value pairs that
   got sent.  That way we don't have to use all those awful tricks to
   conditionally fill the slots
+* fix font shits (can't use 'hanging' base-line dominant because it doesn't
+  scale correctly)
diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index c7b739462..a8020eda2 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -1048,9 +1048,10 @@ void iemgui_draw_io(t_iemgui *x, int old_sr_flags)
         char tagbuf[MAXPDSTRING];
         sprintf(parenttagbuf, "x%lx", (long unsigned int)x);
         sprintf(tagbuf, "%so%d", iem_get_tag(canvas, x), i);
-        gui_vmess("gui_canvas_drawio", "sssiiiiii", canvas_string(canvas),
+        gui_vmess("gui_canvas_drawio", "sssiiiiiisiii", canvas_string(canvas),
             parenttagbuf, tagbuf,
-            x1+i*k, y2-1, x1+i*k + IOWIDTH, y2, x1, y1);
+            x1+i*k, y2-1, x1+i*k + IOWIDTH, y2, x1, y1, "o", i,
+            0, 1);
     }
     if(!a && b)
         for (i=0; i<n; i++)
@@ -1080,9 +1081,10 @@ void iemgui_draw_io(t_iemgui *x, int old_sr_flags)
         char tagbuf[MAXPDSTRING];
         sprintf(parenttagbuf, "x%lx", (long unsigned int)x);
         sprintf(tagbuf, "%si%d", iem_get_tag(canvas, x), i);
-        gui_vmess("gui_canvas_drawio", "sssiiiiii", canvas_string(canvas),
+        gui_vmess("gui_canvas_drawio", "sssiiiiiisiii", canvas_string(canvas),
             parenttagbuf, tagbuf,
-            x1+i*k, y1, x1+i*k + IOWIDTH, y1+1, x1, y1);
+            x1+i*k, y1, x1+i*k + IOWIDTH, y1+1, x1, y1, "i", i,
+            0, 1);
     }
     if(!a && b)
         for (i=0; i<n; i++)
diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 10a16bc1e..778bb9ec4 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -248,6 +248,7 @@ void canvas_makefilename(t_canvas *x, char *file, char *result, int resultsize)
     //fprintf(stderr,"resulting file = <%s>\n", result);          
 }
 
+// Generic tag format to use for the gui
 char *canvas_string(t_canvas *x)
 {
     static char s[MAXPDSTRING];
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 0bacbb29b..b9e6c8deb 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -142,15 +142,23 @@ static void tooltip_erase (t_canvas *x) {
 }
 
 static void canvas_nlet_conf (t_canvas *x, int type) {
-    int filter = type=='o' ? last_outlet_filter : last_inlet_filter;
+    int isiemgui = type=='o' ? last_outlet_filter : last_inlet_filter;
     int issignal = type=='o' ? outlet_issignal : inlet_issignal;
-    sys_vgui(".x%x.c itemconfigure %s -stroke %s -fill %s -strokewidth 1\n", x,
-      type=='o' ? x->gl_editor->canvas_cnct_outlet_tag : x->gl_editor->canvas_cnct_inlet_tag,
-      (filter ? "$pd_colors(iemgui_nlet)" : 
-        (issignal ? "$pd_colors(signal_cord)" : "$pd_colors(control_cord)")),
-        (issignal ? "$pd_colors(signal_nlet)" : "$pd_colors(control_nlet)"));
+    //sys_vgui(".x%x.c itemconfigure %s -stroke %s -fill %s -strokewidth 1\n", x,
+    //  type=='o' ? x->gl_editor->canvas_cnct_outlet_tag : x->gl_editor->canvas_cnct_inlet_tag,
+    //  (isiemgui ? "$pd_colors(iemgui_nlet)" : 
+    //    (issignal ? "$pd_colors(signal_cord)" : "$pd_colors(control_cord)")),
+    //    (issignal ? "$pd_colors(signal_nlet)" : "$pd_colors(control_nlet)"));
+
+    /* this is rather confusing, but the canvas_cnct_[xlet]_tag already
+       includes the type and index concatenated to the end. */
+    gui_vmess("gui_configure_io", "ssiii",
+        canvas_string(x), type == 'o' ? x->gl_editor->canvas_cnct_outlet_tag :
+            x->gl_editor->canvas_cnct_inlet_tag,
+        isiemgui, issignal, 1);
 }
 
+/* this doesn't seem to be used anywhere */
 /*static void canvas_nlet_conf2 (t_canvas *x, int cond) { // because of one exception...
     int issignal = inlet_issignal;
     sys_vgui(".x%x.c itemconfigure %s -stroke %s -fill %s -strokewidth 1\n", x,
@@ -3304,7 +3312,8 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                         x->gl_editor->e_onmotion = MA_CONNECT;
                         x->gl_editor->e_xwas = xpos;
                         x->gl_editor->e_ywas = ypos;
-                        sys_vgui(
+                        //sys_vgui(
+
                             /*".x%lx.c create polyline %d %d %d %d "
                               "-stroke %s -strokewidth %s -tags x\n",
                             x, xpos, ypos, xpos, ypos,
@@ -3314,21 +3323,22 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                             (issignal ?
                                 "$pd_colors(signal_cord_width)" :
                                 "$pd_colors(control_cord_width)"));*/
+
                             // bezier is too slow for the time being
-                            ".x%lx.c create path "
-                            "\"M %d %d Q %d %d %d %d Q %d %d %d %d\" "
-                            "-stroke %s -strokewidth %s "
-                            "-tags {x all_cords %s}\n",
-                        x, xpos, ypos,
-                        xpos, ypos, xpos, ypos,
-                        xpos, ypos, xpos, ypos,
-                        (issignal ?
-                            "$pd_colors(signal_cord)" :
-                            "$pd_colors(control_cord)"),
-                        (issignal ?
-                            "$pd_colors(signal_cord_width)" :
-                            "$pd_colors(control_cord_width)"),
-                        (issignal ? "signal" : "control"));
+                        //    ".x%lx.c create path "
+                        //    "\"M %d %d Q %d %d %d %d Q %d %d %d %d\" "
+                        //    "-stroke %s -strokewidth %s "
+                        //    "-tags {x all_cords %s}\n",
+                        //x, xpos, ypos,
+                        //xpos, ypos, xpos, ypos,
+                        //xpos, ypos, xpos, ypos,
+                        //(issignal ?
+                        //    "$pd_colors(signal_cord)" :
+                        //    "$pd_colors(control_cord)"),
+                        //(issignal ?
+                        //    "$pd_colors(signal_cord_width)" :
+                        //    "$pd_colors(control_cord_width)"),
+                        //(issignal ? "signal" : "control"));
                         gui_vmess("gui_canvas_line", "ssiiiiiiiiii",
                             canvas_string(x), "newcord",
                             xpos, ypos, xpos, ypos, xpos, ypos, xpos, ypos, xpos, ypos);
@@ -3347,11 +3357,16 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                                     (t_text *)&ob->ob_g);
                             sprintf(x->gl_editor->canvas_cnct_outlet_tag, 
                                 "%so%d", rtext_gettag(yr), closest);
-                            sys_vgui(".x%x.c itemconfigure %s "
-                                     "-stroke $select_nlet_color "
-                                     "-strokewidth $highlight_width\n",
-                                     x,
-                                     x->gl_editor->canvas_cnct_outlet_tag);
+                            //sys_vgui(".x%x.c itemconfigure %s "
+                            //         "-stroke $select_nlet_color "
+                            //         "-strokewidth $highlight_width\n",
+                            //         x,
+                            //         x->gl_editor->canvas_cnct_outlet_tag);
+
+                            gui_vmess("gui_highlight_io", "ss",
+                                canvas_string(x),
+                                x->gl_editor->canvas_cnct_outlet_tag);
+
                             //sys_vgui(".x%x.c raise %s\n",
                             //         x,
                             //         x->gl_editor->canvas_cnct_outlet_tag);
@@ -3405,9 +3420,14 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                             gobj_filter_highlight_behavior((t_text *)&ob->ob_g);
                         sprintf(x->gl_editor->canvas_cnct_inlet_tag, 
                             "%si%d", rtext_gettag(yr), closest);
-                        sys_vgui(".x%x.c itemconfigure %s "
-                                 "-strokewidth $highlight_width\n",
-                            x, x->gl_editor->canvas_cnct_inlet_tag);
+                        //sys_vgui(".x%x.c itemconfigure %s "
+                        //         "-strokewidth $highlight_width\n",
+                        //    x, x->gl_editor->canvas_cnct_inlet_tag);
+
+                        gui_vmess("gui_highlight_io", "ss",
+                            canvas_string(x),
+                            x->gl_editor->canvas_cnct_inlet_tag);
+
                         //sys_vgui(".x%x.c raise %s\n",
                         //         x,
                         //         x->gl_editor->canvas_cnct_inlet_tag);
@@ -3630,9 +3650,9 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
             //buf->u_redo = (t_undo_sel *)canvas_undo_set_selection(x);
             //canvas_undo_add(x, 11, "selection", buf);
         }
-        sys_vgui(".x%lx.c create prect %d %d %d %d -tags x "
-                 "-stroke $pd_colors(selection_rectangle)\n",
-            x, xpos, ypos, xpos, ypos);
+        //sys_vgui(".x%lx.c create prect %d %d %d %d -tags x "
+        //         "-stroke $pd_colors(selection_rectangle)\n",
+        //    x, xpos, ypos, xpos, ypos);
         gui_vmess("gui_create_selection_rectangle", "siiii", canvas_string(x),
             xpos, ypos, xpos, ypos);
         x->gl_editor->e_xwas = xpos;
@@ -3762,16 +3782,16 @@ void canvas_drawconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
             "$pd_colors(control_cord_width)"), 
         tag);*/
     //bezier curves FTW
-    sys_vgui(".x%lx.c create path \"M %d %d Q %d %d %d %d Q %d %d %d %d\" "
-             "-stroke %s -strokewidth %s -tags {l%lx all_cords %s}\n",
-        x, lx1, ly1,
-        lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
-        lx2, ly2 - yoff, lx2, ly2,
-        (issignal ? "$pd_colors(signal_cord)" : "$pd_colors(control_cord)"),
-        (issignal ?
-            "$pd_colors(signal_cord_width)" :
-            "$pd_colors(control_cord_width)"), 
-        tag, (issignal ? "signal" : "control"));
+    //sys_vgui(".x%lx.c create path \"M %d %d Q %d %d %d %d Q %d %d %d %d\" "
+    //         "-stroke %s -strokewidth %s -tags {l%lx all_cords %s}\n",
+    //    x, lx1, ly1,
+    //    lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
+    //    lx2, ly2 - yoff, lx2, ly2,
+    //    (issignal ? "$pd_colors(signal_cord)" : "$pd_colors(control_cord)"),
+    //    (issignal ?
+    //        "$pd_colors(signal_cord_width)" :
+    //        "$pd_colors(control_cord_width)"), 
+    //    tag, (issignal ? "signal" : "control"));
     sprintf(tagbuf, "l%lx", (long unsigned int)tag);
     gui_vmess("gui_canvas_line", "ssiiiiiiiiii",
         canvas_string(x), tagbuf, lx1, ly1, lx1, ly1 + yoff,
@@ -3813,11 +3833,11 @@ void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
             //sys_vgui(".x%lx.c coords l%lx %d %d %d %d\n",
             //    x, tag, lx1, ly1, lx2, ly2);
             //bezier curves FTW
-            sys_vgui(".x%lx.c coords l%lx "
-                     "\"M %d %d Q %d %d %d %d Q %d %d %d %d\"\n",
-                x, tag, lx1, ly1,
-                lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
-                lx2, ly2 - yoff, lx2, ly2);
+            //sys_vgui(".x%lx.c coords l%lx "
+            //         "\"M %d %d Q %d %d %d %d Q %d %d %d %d\"\n",
+            //    x, tag, lx1, ly1,
+            //    lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
+            //    lx2, ly2 - yoff, lx2, ly2);
             sprintf(cord_tag, "l%lx", (long unsigned int)tag);
             gui_vmess("gui_canvas_updateline", "ssiiiii", canvas_string(x), cord_tag,
                 lx1, ly1, lx2, ly2, yoff);
@@ -3828,10 +3848,10 @@ void canvas_updateconnection(t_canvas *x, int lx1, int ly1, int lx2, int ly2,
         {
             //sys_vgui(".x%lx.c coords x %d %d %d %d\n", x, lx1, ly1, lx2, ly2);
             //bezier curves FTW
-            sys_vgui(".x%lx.c coords x \"M %d %d Q %d %d %d %d Q %d %d %d %d\"\n",
-                x, lx1, ly1,
-                lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
-                lx2, ly2 - yoff, lx2, ly2);
+            //sys_vgui(".x%lx.c coords x \"M %d %d Q %d %d %d %d Q %d %d %d %d\"\n",
+            //    x, lx1, ly1,
+            //    lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy,
+            //    lx2, ly2 - yoff, lx2, ly2);
             gui_vmess("gui_canvas_updateline", "ssiiiii", canvas_string(x), "newcord",
                 lx1, ly1, lx2, ly2, yoff);
 //                lx1, ly1, lx1, ly1 + yoff, lx1 + halfx, ly1 + halfy, lx2, ly2 - yoff,
@@ -4497,10 +4517,15 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
                             "%si%d",
                             rtext_gettag(y),
                             closest2);
-                    sys_vgui(".x%x.c itemconfigure %s "
-                             "-stroke $select_nlet_color "
-                             "-strokewidth $highlight_width\n",
-                        x, x->gl_editor->canvas_cnct_inlet_tag);
+                    //sys_vgui(".x%x.c itemconfigure %s "
+                    //         "-stroke $select_nlet_color "
+                    //         "-strokewidth $highlight_width\n",
+                    //    x, x->gl_editor->canvas_cnct_inlet_tag);
+
+                    gui_vmess("gui_highlight_io", "ss",
+                        canvas_string(x),
+                        x->gl_editor->canvas_cnct_inlet_tag);
+
                     //sys_vgui(".x%x.c raise %s\n",
                     //         x,
                     //         x->gl_editor->canvas_cnct_inlet_tag);
diff --git a/pd/src/g_rtext.c b/pd/src/g_rtext.c
index 961e07918..76b0fea02 100644
--- a/pd/src/g_rtext.c
+++ b/pd/src/g_rtext.c
@@ -362,11 +362,13 @@ static void rtext_senditup(t_rtext *x, int action, int *widthp, int *heightp,
                 dispx + LMARGIN, dispy + TMARGIN,
                 outchars_b, tempbuf, sys_hostfontsize(font),
                 (glist_isselected(x->x_glist, ((t_gobj*)x->x_text)) ? "$pd_colors(selection)" : "$pd_colors(text)"));
-            gui_vmess("gui_text_new", "sssiffsi",
+            gui_vmess("gui_text_new", "sssiiisi",
                 canvas_string(canvas), x->x_tag, rtext_gettype(x)->s_name,
                 glist_isselected(x->x_glist, ((t_gobj*)x->x_text)),
-                dispx + LMARGIN,
-                dispy + TMARGIN,
+                LMARGIN,
+                TMARGIN,
+//                dispx + LMARGIN,
+//                dispy + TMARGIN,
                 tempbuf,
                 sys_hostfontsize(font));
                
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index 51ab8316f..c19bbd42a 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -1898,19 +1898,24 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
         {
             //fprintf(stderr,"glist_drawiofor o firsttime\n");
             issignal = obj_issignaloutlet(ob,i);
-            sys_vgui(".x%lx.c create prect %d %d %d %d \
-                      -fill %s -stroke %s -tags {%so%d %lx outlet %s %s}\n",
-                glist_getcanvas(glist), onset, y2 - 2, onset + IOWIDTH, y2,
-                (issignal ? "$pd_colors(signal_nlet)" :
-                   "$pd_colors(control_nlet)"),
-                (issignal ? "$pd_colors(signal_cord)" :
-                    "$pd_colors(control_cord)"),
-                tag, i, tag,
-                (issignal ? "signal" : "control"),
-                (selected ? "selected" : ""));
-            gui_vmess("gui_canvas_drawio", "sssiiiiii",
+            //sys_vgui(".x%lx.c create prect %d %d %d %d \
+            //          -fill %s -stroke %s -tags {%so%d %lx outlet %s %s}\n",
+            //    glist_getcanvas(glist), onset, y2 - 2, onset + IOWIDTH, y2,
+            //    (issignal ? "$pd_colors(signal_nlet)" :
+            //       "$pd_colors(control_nlet)"),
+            //    (issignal ? "$pd_colors(signal_cord)" :
+            //        "$pd_colors(control_cord)"),
+            //    tag, i, tag,
+            //    (issignal ? "signal" : "control"),
+            //    (selected ? "selected" : ""));
+
+/* need to send issignal and is_iemgui here... */
+
+
+            gui_vmess("gui_canvas_drawio", "sssiiiiiisiii",
                 canvas_string(glist_getcanvas(glist)), rtext_gettag(y), tag,
-                onset, y2 - 2, onset + IOWIDTH, y2, x1, y1);
+                onset, y2 - 2, onset + IOWIDTH, y2, x1, y1, "o", i,
+                issignal, 0);
         }
         else
         {
@@ -1936,20 +1941,21 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
         {
             //fprintf(stderr,"glist_drawiofor i firsttime\n");
             issignal = obj_issignalinlet(ob,i);
-            sys_vgui(".x%lx.c create prect %d %d %d %d \
-                      -fill %s -stroke %s -tags {%si%d %lx inlet %s %s}\n",
-                glist_getcanvas(glist), onset, y1,
-                onset + IOWIDTH, y1 + EXTRAPIX,
-                (issignal ? "$pd_colors(signal_nlet)" :
-                    "$pd_colors(control_nlet)"),
-                (issignal ? "$pd_colors(signal_cord)" :
-                    "$pd_colors(control_cord)"),
-                tag, i, tag,
-                (issignal ? "signal" : "control"),
-                (selected ? "selected" : ""));
-            gui_vmess("gui_canvas_drawio", "sssiiiiii",
+            //sys_vgui(".x%lx.c create prect %d %d %d %d \
+            //          -fill %s -stroke %s -tags {%si%d %lx inlet %s %s}\n",
+            //    glist_getcanvas(glist), onset, y1,
+            //    onset + IOWIDTH, y1 + EXTRAPIX,
+            //    (issignal ? "$pd_colors(signal_nlet)" :
+            //        "$pd_colors(control_nlet)"),
+            //    (issignal ? "$pd_colors(signal_cord)" :
+            //        "$pd_colors(control_cord)"),
+            //    tag, i, tag,
+            //    (issignal ? "signal" : "control"),
+            //    (selected ? "selected" : ""));
+            gui_vmess("gui_canvas_drawio", "sssiiiiiisiii",
                 canvas_string(glist_getcanvas(glist)), rtext_gettag(y), tag,
-                onset, y1, onset + IOWIDTH, y1 + EXTRAPIX, x1, y1);
+                onset, y1, onset + IOWIDTH, y1 + EXTRAPIX, x1, y1, "i", i,
+                issignal, 0);
         }
         else
         {
-- 
GitLab