aboutsummaryrefslogtreecommitdiffstats
path: root/ecp5
diff options
context:
space:
mode:
Diffstat (limited to 'ecp5')
-rw-r--r--ecp5/gfx.cc177
1 files changed, 108 insertions, 69 deletions
diff --git a/ecp5/gfx.cc b/ecp5/gfx.cc
index 5adf591d..e78d7c5a 100644
--- a/ecp5/gfx.cc
+++ b/ecp5/gfx.cc
@@ -77,8 +77,16 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, int w, int h, IdS
el.style = style;
el.x1 = x + switchbox_x2 - 0.0017f*16 + 0.0017f * (tilewire - TILE_WIRE_V01N0001);
el.x2 = el.x1;
- el.y1 = y + switchbox_y1 + 1;
- el.y2 = y + switchbox_y2;
+ if (y==h-2)
+ el.y1 = y + 1.1;
+ else
+ el.y1 = y + switchbox_y1 + 1;
+
+ if (y==0)
+ el.y2 = y + 0.9;
+ else
+ el.y2 = y + switchbox_y2;
+
g.push_back(el);
}
}
@@ -88,8 +96,14 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, int w, int h, IdS
GraphicElement el;
el.type = GraphicElement::TYPE_LINE;
el.style = style;
- el.x1 = x + switchbox_x1;
- el.x2 = x + switchbox_x2 - 1;
+ if (x==w-1)
+ el.x1 = x + 0.1;
+ else
+ el.x1 = x + switchbox_x1;
+ if (x==1)
+ el.x2 = x - 0.1;
+ else
+ el.x2 = x + switchbox_x2 - 1;
el.y1 = y + switchbox_y1 + 0.0017f*16 - 0.0017f * (tilewire - TILE_WIRE_H01E0001);
el.y2 = el.y1;
g.push_back(el);
@@ -129,143 +143,168 @@ void gfxTileWire(std::vector<GraphicElement> &g, int x, int y, int w, int h, IdS
g.push_back(el);
}
- if (wire_type == id_WIRE_TYPE_H02) {
+ if (wire_type == id_WIRE_TYPE_H02) {
GraphicElement el;
el.type = GraphicElement::TYPE_LINE;
el.style = style;
- el.x1 = x + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
+ if (x==0)
+ el.x1 = 0.9;
+ else
+ el.x1 = x + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
el.x2 = el.x1;
el.y1 = y + switchbox_y1;
el.y2 = y + switchbox_y1 - 0.0017f*(20 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
- g.push_back(el);
-
- int x1 = x + 1;
- if (x1> w - 1) x1 = w - 1;
+ if (x!=0 && x!=w-1) g.push_back(el);
- el.x2 = x1 + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
+ if (x==w-2)
+ el.x2 = x + 1 + 0.1;
+ else
+ el.x2 = x + 1 + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
el.y1 = el.y2;
- g.push_back(el);
+ if (x!=w-1) g.push_back(el);
el.x1 = el.x2;
el.y1 = y + switchbox_y1;
- g.push_back(el);
+ if (x!=w-1 && x!=w-2) g.push_back(el);
- int x2 = x - 1;
- if (x2<0) x2 = 0;
-
- el.x1 = x + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
- el.x2 = x2 + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
+ if (x==w-1)
+ el.x1 = x + 0.1;
+ else
+ el.x1 = x + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
+ if (x==1)
+ el.x2 = x - 1 + 0.9;
+ else
+ el.x2 = x - 1 + switchbox_x1 + 0.0017f*(16 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
el.y2 = y + switchbox_y1 - 0.0017f*(20 + (tilewire - TILE_WIRE_H02W0701)+ 20 *(x%3));
el.y1 = el.y2;
- g.push_back(el);
+ if (x!=0) g.push_back(el);
el.x1 = el.x2;
el.y1 = y + switchbox_y1;
- g.push_back(el);
+ if (x!=0 && x!=1) g.push_back(el);
}
- if (wire_type == id_WIRE_TYPE_V02) {
+ if (wire_type == id_WIRE_TYPE_V02) {
GraphicElement el;
el.type = GraphicElement::TYPE_LINE;
el.style = style;
- el.y1 = y + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
+ if (y==0)
+ el.y1 = 0.9;
+ else
+ el.y1 = y + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
el.y2 = el.y1;
el.x1 = x + switchbox_x1;
el.x2 = x + switchbox_x1 - 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
- g.push_back(el);
+ if (y!=0 && y!=h-1) g.push_back(el);
- int y1 = y + 1;
- if (y1> h - 1) y1 = h - 1;
-
- el.y2 = y1 + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
+ if (y==h-2)
+ el.y2 = y + 1 + 0.1;
+ else
+ el.y2 = y + 1 + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
el.x1 = el.x2;
- g.push_back(el);
+ if (y!=h-1) g.push_back(el);
el.y1 = el.y2;
el.x1 = x + switchbox_x1;
- g.push_back(el);
-
- int y2 = y - 1;
- if (y2<0) y2 = 0;
+ if (y!=h-1 && y!=h-2) g.push_back(el);
- el.y1 = y + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
- el.y2 = y2 + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
+ if (y==h-1)
+ el.y1 = y + 0.1;
+ else
+ el.y1 = y + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
+ if (y==1)
+ el.y2 = y - 1 + 0.9;
+ else
+ el.y2 = y - 1 + switchbox_y1 + 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
el.x2 = x + switchbox_x1 - 0.0017f*(20 + (tilewire - TILE_WIRE_V02N0701)+ 20 *(y%3));
el.x1 = el.x2;
- g.push_back(el);
+ if (y!=0) g.push_back(el);
el.y1 = el.y2;
el.x1 = x + switchbox_x1;
- g.push_back(el);
- }
+ if (y!=0 && y!=1) g.push_back(el);
+ }
+
if (wire_type == id_WIRE_TYPE_H06) {
GraphicElement el;
el.type = GraphicElement::TYPE_LINE;
el.style = style;
- el.x1 = x + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
+ if (x==0)
+ el.x1 = 0.9;
+ else
+ el.x1 = x + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
el.x2 = el.x1;
el.y1 = y + switchbox_y1;
el.y2 = y + switchbox_y1 - 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
- g.push_back(el);
+ if (x!=0 && x!=w-1) g.push_back(el);
- int x1 = x + 3;
- if (x1> w - 1) x1 = w - 1;
-
- el.x2 = x1 + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
+ if (x==w-2 || x==w-3 || x==w-4)
+ el.x2 = w - 1 + 0.1;
+ else
+ el.x2 = x + 3 + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
el.y1 = el.y2;
- g.push_back(el);
+ if (x!=w-1) g.push_back(el);
el.x1 = el.x2;
el.y1 = y + switchbox_y1;
- g.push_back(el);
-
- int x2 = x - 3;
- if (x2<0) x2 = 0;
+ if (x!=w-1 && x!=w-2 && x!=w-3 && x!=w-4) g.push_back(el);
- el.x1 = x + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
- el.x2 = x2 + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
+ if (x==w-1)
+ el.x1 = x + 0.1;
+ else
+ el.x1 = x + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
+ if (x==1 || x==2 || x==3)
+ el.x2 = 0.9;
+ else
+ el.x2 = x - 3 + switchbox_x1 + 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
el.y2 = y + switchbox_y1 - 0.0017f*(96 + (tilewire - TILE_WIRE_H06W0303)+ 10 *(x%9));
el.y1 = el.y2;
- g.push_back(el);
+ if (x!=0) g.push_back(el);
el.x1 = el.x2;
el.y1 = y + switchbox_y1;
- g.push_back(el);
- }
+ if (x!=0 && x!=1 && x!=2 && x!=3) g.push_back(el);
+ }
if (wire_type == id_WIRE_TYPE_V06) {
GraphicElement el;
el.type = GraphicElement::TYPE_LINE;
el.style = style;
- el.y1 = y + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
+ if (y==0)
+ el.y1 = 0.9;
+ else
+ el.y1 = y + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
el.y2 = el.y1;
el.x1 = x + switchbox_x1;
el.x2 = x + switchbox_x1 - 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
- g.push_back(el);
+ if (y!=0 && y!=h-1) g.push_back(el);
- int y1 = y + 3;
- if (y1> h - 1) y1 = h - 1;
-
- el.y2 = y1 + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
+ if (y==h-2 || y==h-3 || y==h-4)
+ el.y2 = h - 1 + 0.1;
+ else
+ el.y2 = y + 3 + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
el.x1 = el.x2;
- g.push_back(el);
+ if (y!=h-1) g.push_back(el);
el.y1 = el.y2;
el.x1 = x + switchbox_x1;
- g.push_back(el);
-
- int y2 = y - 3;
- if (y2<0) y2 = 0;
+ if (y!=h-1 && y!=h-2 && y!=h-3 && y!=h-4) g.push_back(el);
- el.y1 = y + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
- el.y2 = y2 + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
+ if (y==h-1)
+ el.y1 = y + 0.1;
+ else
+ el.y1 = y + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
+ if (y==1 || y==2 || y==3)
+ el.y2 = 0.9;
+ else
+ el.y2 = y - 3 + switchbox_y1 + 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
el.x2 = x + switchbox_x1 - 0.0017f*(96 + (tilewire - TILE_WIRE_V06N0303)+ 10 *(y%9));
el.x1 = el.x2;
- g.push_back(el);
+ if (y!=0) g.push_back(el);
el.y1 = el.y2;
el.x1 = x + switchbox_x1;
- g.push_back(el);
- }
+ if (y!=0 && y!=1 && y!=2 && y!=3) g.push_back(el);
+ }
if (wire_type == id_WIRE_TYPE_NONE) {
if (tilewire >= TILE_WIRE_NBOUNCE && tilewire <=TILE_WIRE_SBOUNCE)
{