From 9f0114f71e5e9ac39e0d69f596540be145b81fa7 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Wed, 1 Jun 2016 20:42:28 -0400
Subject: [PATCH] move xlets when resizing object, clean up selection logic

---
 externals/ggee/gui/envgen.c   |  1 +
 externals/ggee/gui/w_envgen.h | 29 +++++++++++++++++++++++++----
 pd/nw/pdgui.js                | 13 ++++++-------
 3 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/externals/ggee/gui/envgen.c b/externals/ggee/gui/envgen.c
index f1826e9eb..ab95281ae 100644
--- a/externals/ggee/gui/envgen.c
+++ b/externals/ggee/gui/envgen.c
@@ -358,6 +358,7 @@ void envgen_setup(void)
     class_addmethod(envgen_class,(t_method)envgen_release,gensym("release"),A_NULL);
     envgen_widgetbehavior.w_getrectfn =   envgen_getrect;
     envgen_widgetbehavior.w_displacefn =    envgen_displace;
+    envgen_widgetbehavior.w_displacefnwtag = envgen_displace_withtag;
     envgen_widgetbehavior.w_selectfn = envgen_select;
     envgen_widgetbehavior.w_activatefn =   envgen_activate;
     envgen_widgetbehavior.w_deletefn =   envgen_delete;
diff --git a/externals/ggee/gui/w_envgen.h b/externals/ggee/gui/w_envgen.h
index 29a732c01..b457ed96c 100644
--- a/externals/ggee/gui/w_envgen.h
+++ b/externals/ggee/gui/w_envgen.h
@@ -50,6 +50,15 @@ static void draw_inlets(t_envgen *x, t_glist *glist, int firsttime, int nin, int
             //    glist_getcanvas(glist), x, i,
             //    onset, ypos + x->w.height - 1 + 2*BORDER,
             //    onset + IOWIDTH, ypos + x->w.height + 2*BORDER);
+            gui_vmess("gui_envgen_move_xlet", "xxsiiiii",
+                glist_getcanvas(glist),
+                x,
+                "o",
+                i,
+                onset,
+                ypos + x->w.height - 1 + 2 * BORDER,
+                xpos,
+                ypos);
         }
     }
     n = nin;
@@ -395,12 +404,20 @@ static void envgen_getrect(t_gobj *z, t_glist *owner,
 
 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;
     x->x_obj.te_ypix += dy;
 
-    envgen_drawme(x, glist, 0);
-    canvas_fixlinesfor(glist,(t_text*) x);
+    //envgen_drawme(x, glist, 0);
+    //canvas_fixlinesfor(glist,(t_text*) x);
+}
+
+static void envgen_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy)
+{
+    t_envgen *x = (t_envgen *)z;
+    x->x_obj.te_xpix += dx;
+    x->x_obj.te_ypix += dy;
 }
 
 static void envgen_select(t_gobj *z, t_glist *glist, int state)
@@ -408,8 +425,12 @@ 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));
-    gui_vmess("gui_envgen_select", "xxi",
-        glist_getcanvas(glist), x, state);
+    if (state)
+        gui_vmess("gui_gobj_select", "xx",
+            glist_getcanvas(glist), x);
+    else
+        gui_vmess("gui_gobj_deselect", "xx",
+            glist_getcanvas(glist), x);
 }
 
 
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 306a0f1e2..fccad4ea6 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -3248,13 +3248,12 @@ function gui_envgen_erase_text(cid, tag) {
     }
 }
 
-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");
-    }
+function gui_envgen_move_xlet(cid, tag, type, i, x, y, basex, basey) {
+    var xlet = get_item(cid, tag + type + i);
+    configure_item(xlet, {
+        x: x - basex,
+        y: y - basey
+    });
 }
 
 exports.add_popup = add_popup;
-- 
GitLab