From 09d97f260c13edf794bf6fcd4b42392979223801 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 29 Oct 2015 19:03:56 -0400
Subject: [PATCH] align straight signal cords with pixel grid, and use an
 offset when updating control cords

---
 pd/nw/pdgui.js | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 0966edc20..0897bc38e 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -1266,10 +1266,16 @@ function gui_atom_drawborder(cid,tag,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12) {
 
 // draw a patch cord
 function gui_canvas_line(cid,tag,type,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10) {
-    var d_array = ["M", p1 + 0.5, p2 + 0.5,
-                   "Q", p3 + 0.5, p4 + 0.5, p5 + 0.5, p6 + 0.5,
-                   "Q", p7 + 0.5, p8 + 0.5 ,p9 + 0.5, p10 + 0.5];
     var svg = get_item(cid, "patchsvg");
+    // xoff is for making sure straight lines are crisp.  An SVG stroke
+    // straddles the coordinate, with 1/2 the width on each side.
+    // Control cords are 1 px wide, which requires a 0.5 x-offset to align
+    // the stroke to the pixel grid.
+    // Signal cords are 2 px wide = 1px on each side-- no need for x-offset.
+    var xoff = type === 'signal' ? 0 : 0.5;
+    var d_array = ["M", p1 + xoff, p2 + xoff,
+                   "Q", p3 + xoff, p4 + xoff, p5 + xoff, p6 + xoff,
+                   "Q", p7 + xoff, p8 + xoff, p9 + xoff, p10 + xoff];
     var path = create_item(cid, "path", {
         d: d_array.join(" "),
         fill: "none",
@@ -1311,10 +1317,12 @@ function gui_canvas_delete_line(cid, tag) {
 function gui_canvas_updateline(cid,tag,x1,y1,x2,y2,yoff) {
     var halfx = parseInt((x2 - x1)/2);
     var halfy = parseInt((y2 - y1)/2);
-    var d_array = ["M",x1,y1,
-                  "Q",x1,y1+yoff,x1+halfx,y1+halfy,
-                  "Q",x2,y2-yoff,x2,y2];
     var cord = get_item(cid, tag);
+    // see comment in gui_canvas_line about xoff
+    var xoff= cord.classList.contains("signal") ? 0: 0.5;
+    var d_array = ["M",x1+xoff,y1+xoff,
+                   "Q",x1+xoff,y1+yoff+xoff,x1+halfx+xoff,y1+halfy+xoff,
+                   "Q",x2+xoff,y2-yoff+xoff,x2+xoff,y2+xoff];
     configure_item(cord, { d: d_array.join(" ") });
 }
 
-- 
GitLab