From 0f736f551c30b7689b72b10d1a21ceca58657f23 Mon Sep 17 00:00:00 2001
From: Clifford Wolf <clifford@clifford.at>
Date: Fri, 13 Jul 2018 16:15:15 +0200
Subject: Fix iCE40 wire gfx decals

Signed-off-by: Clifford Wolf <clifford@clifford.at>
---
 ice40/gfx.cc | 103 ++++++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 78 insertions(+), 25 deletions(-)

diff --git a/ice40/gfx.cc b/ice40/gfx.cc
index f4941750..19aaed13 100644
--- a/ice40/gfx.cc
+++ b/ice40/gfx.cc
@@ -31,17 +31,31 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
 
     if (id >= TILE_WIRE_SP4_H_L_36 && id <= TILE_WIRE_SP4_H_L_47) {
         int idx = (id - TILE_WIRE_SP4_H_L_36) + 48;
-        float y1 = y + 1.0 - (0.03 + 0.0025 * (60 - idx));
 
-        el.x1 = x + 0.0;
-        el.x2 = x + 0.9;
+        float y1 = y + 1.0 - (0.03 + 0.0025 * (60 - (idx ^ 1)));
+        float y2 = y + 1.0 - (0.03 + 0.0025 * (60 - idx));
+
+        el.x1 = x;
+        el.x2 = x + 0.01;
         el.y1 = y1;
         el.y2 = y1;
         g.push_back(el);
 
+        el.x1 = x + 0.01;
+        el.x2 = x + 0.02;
+        el.y1 = y1;
+        el.y2 = y2;
+        g.push_back(el);
+
+        el.x1 = x + 0.02;
+        el.x2 = x + 0.9;
+        el.y1 = y2;
+        el.y2 = y2;
+        g.push_back(el);
+
         el.x1 = x + main_swbox_x1 + 0.0025 * (idx + 35);
         el.x2 = el.x1;
-        el.y1 = y1;
+        el.y1 = y2;
         el.y2 = y + main_swbox_y2;
         g.push_back(el);
     }
@@ -91,17 +105,30 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP4_V_T_36 && id <= TILE_WIRE_SP4_V_T_47) {
         int idx = (id - TILE_WIRE_SP4_V_T_36) + 48;
 
-        float x1 = x + 0.03 + 0.0025 * (60 - idx);
+        float x1 = x + 0.03 + 0.0025 * (60 - (idx ^ 1));
+        float x2 = x + 0.03 + 0.0025 * (60 - idx);
 
-        el.y1 = y + 1.0;
-        el.y2 = y + 0.1;
+        el.y1 = y + 1.00;
+        el.y2 = y + 0.99;
         el.x1 = x1;
         el.x2 = x1;
         g.push_back(el);
 
+        el.y1 = y + 0.99;
+        el.y2 = y + 0.98;
+        el.x1 = x1;
+        el.x2 = x2;
+        g.push_back(el);
+
+        el.y1 = y + 0.98;
+        el.y2 = y + 0.10;
+        el.x1 = x2;
+        el.x2 = x2;
+        g.push_back(el);
+
         el.y1 = y + 1.0 - (0.03 + 0.0025 * (270 - idx));
         el.y2 = el.y1;
-        el.x1 = x1;
+        el.x1 = x2;
         el.x2 = x + main_swbox_x1;
         g.push_back(el);
     }
@@ -109,9 +136,9 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP4_V_B_0 && id <= TILE_WIRE_SP4_V_B_47) {
         int idx = id - TILE_WIRE_SP4_V_B_0;
 
-        float x1 = x + 0.03 + 0.0025 * (60 - (idx ^ 1));
-        float x2 = x + 0.03 + 0.0025 * (60 - idx);
-        float x3 = x + 0.03 + 0.0025 * (60 - idx - 12);
+        float x1 = x + 0.03 + 0.0025 * (60 - idx);
+        float x2 = x + 0.03 + 0.0025 * (60 - (idx ^ 1));
+        float x3 = x + 0.03 + 0.0025 * (60 - (idx ^ 1) - 12);
 
         if (idx >= 12) {
             el.y1 = y + 1.00;
@@ -139,13 +166,13 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
         el.x2 = x3;
         g.push_back(el);
 
-        el.y1 = y + 1.0 - (0.03 + 0.0025 * (145 - idx));
+        el.y1 = y + 1.0 - (0.03 + 0.0025 * (145 - (idx ^ 1)));
         el.y2 = el.y1;
         el.x1 = x;
         el.x2 = x2;
         g.push_back(el);
 
-        el.y1 = y + 1.0 - (0.03 + 0.0025 * (270 - idx));
+        el.y1 = y + 1.0 - (0.03 + 0.0025 * (270 - (idx ^ 1)));
         el.y2 = el.y1;
         el.x1 = x2;
         el.x2 = x + main_swbox_x1;
@@ -157,17 +184,30 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP12_H_L_22 && id <= TILE_WIRE_SP12_H_L_23) {
         int idx = (id - TILE_WIRE_SP12_H_L_22) + 24;
 
-        float y1 = y + 1.0 - (0.03 + 0.0025 * (90 - idx));
+        float y1 = y + 1.0 - (0.03 + 0.0025 * (90 - (idx ^ 1)));
+        float y2 = y + 1.0 - (0.03 + 0.0025 * (90 - idx));
 
-        el.x1 = x + 0.0;
-        el.x2 = x + 0.98333;
+        el.x1 = x;
+        el.x2 = x + 0.01;
         el.y1 = y1;
         el.y2 = y1;
         g.push_back(el);
 
+        el.x1 = x + 0.01;
+        el.x2 = x + 0.02;
+        el.y1 = y1;
+        el.y2 = y2;
+        g.push_back(el);
+
+        el.x1 = x + 0.02;
+        el.x2 = x + 0.98333;
+        el.y1 = y2;
+        el.y2 = y2;
+        g.push_back(el);
+
         el.x1 = x + main_swbox_x1 + 0.0025 * (idx + 5);
         el.x2 = el.x1;
-        el.y1 = y1;
+        el.y1 = y2;
         el.y2 = y + main_swbox_y2;
         g.push_back(el);
     }
@@ -175,9 +215,9 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP12_H_R_0 && id <= TILE_WIRE_SP12_H_R_23) {
         int idx = id - TILE_WIRE_SP12_H_R_0;
 
-        float y1 = y + 1.0 - (0.03 + 0.0025 * (90 - (idx ^ 1)));
-        float y2 = y + 1.0 - (0.03 + 0.0025 * (90 - idx));
-        float y3 = y + 1.0 - (0.03 + 0.0025 * (90 - idx - 2));
+        float y1 = y + 1.0 - (0.03 + 0.0025 * (90 - idx));
+        float y2 = y + 1.0 - (0.03 + 0.0025 * (90 - (idx ^ 1)));
+        float y3 = y + 1.0 - (0.03 + 0.0025 * (90 - (idx ^ 1) - 2));
 
         if (idx >= 2) {
             el.x1 = x;
@@ -205,7 +245,7 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
         el.y2 = y3;
         g.push_back(el);
 
-        el.x1 = x + main_swbox_x1 + 0.0025 * (idx + 5);
+        el.x1 = x + main_swbox_x1 + 0.0025 * ((idx ^ 1) + 5);
         el.x2 = el.x1;
         el.y1 = y2;
         el.y2 = y + main_swbox_y2;
@@ -217,7 +257,7 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP4_R_V_B_0 && id <= TILE_WIRE_SP4_R_V_B_47) {
         int idx = id - TILE_WIRE_SP4_R_V_B_0;
 
-        float y1 = y + 1.0 - (0.03 + 0.0025 * (145 - idx));
+        float y1 = y + 1.0 - (0.03 + 0.0025 * (145 - (idx ^ 1)));
 
         el.y1 = y1;
         el.y2 = y1;
@@ -231,17 +271,30 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, GfxTileWireId id,
     if (id >= TILE_WIRE_SP12_V_T_22 && id <= TILE_WIRE_SP12_V_T_23) {
         int idx = (id - TILE_WIRE_SP12_V_T_22) + 24;
 
-        float x1 = x + 0.03 + 0.0025 * (90 - idx);
+        float x1 = x + 0.03 + 0.0025 * (90 - (idx ^ 1));
+        float x2 = x + 0.03 + 0.0025 * (90 - idx);
 
         el.y1 = y + 1.00;
-        el.y2 = y + 0.01667;
+        el.y2 = y + 0.99;
         el.x1 = x1;
         el.x2 = x1;
         g.push_back(el);
 
+        el.y1 = y + 0.99;
+        el.y2 = y + 0.98;
+        el.x1 = x1;
+        el.x2 = x2;
+        g.push_back(el);
+
+        el.y1 = y + 0.98;
+        el.y2 = y + 0.01667;
+        el.x1 = x2;
+        el.x2 = x2;
+        g.push_back(el);
+
         el.y1 = y + 1.0 - (0.03 + 0.0025 * (300 - idx));
         el.y2 = el.y1;
-        el.x1 = x1;
+        el.x1 = x2;
         el.x2 = x + main_swbox_x1;
         g.push_back(el);
     }
-- 
cgit v1.2.3