From a9ca6c49bc79bcf615d5161a18180824e8e20be6 Mon Sep 17 00:00:00 2001 From: William Barnes Date: Fri, 29 Apr 2022 01:00:28 -0400 Subject: [PATCH] Improvements to Draw, set fgColor default after graphics call. --- qb.js | 111 +++++++++++++++++++++++++++++------------------- qb2js.js | 1 + tools/qb2js.bas | 1 + 3 files changed, 70 insertions(+), 43 deletions(-) diff --git a/qb.js b/qb.js index 1caf120..edcd6a8 100644 --- a/qb.js +++ b/qb.js @@ -657,76 +657,77 @@ var QB = new function() { this.sub_Draw = function(t) { - var u; + var u = t.toString(); + u = u.replace(" ",""); + u = u.replace("=",""); + u = u.toUpperCase(); + u = u.split(""); - u = t.replace("=","").toUpperCase(); - u = u.split(" ").join("").split(""); - - var d; + var ch; var elem; var flag; - d = u[0]; - if (!isNaN(String(d) * 1)) { + ch = u[0]; + if (!isNaN(String(ch) * 1)) { flag = 0; // number - } else if ((d >= 'A' && d <= 'Z') || (d >= 'a' && d <= 'z')) { + } else if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) { flag = 1; // letter } else { flag = -1; // symbol } - elem = d; + elem = ch; var v = [[]]; v.shift(); for (var i=1; i= 'A' && d <= 'Z') || (d >= 'a' && d <= 'z')) { + } else if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) { v.push([elem,flag]); - elem = d; + elem = ch; flag = 1; } else { - if (flag == -1) { - elem += d; - } else { - v.push([elem,flag]); - elem = d; - flag = -1; - } + v.push([elem,flag]); + elem = ch; + flag = -1; } } v.push([elem,flag]); - var cursS = 4; - var cursA = -Math.PI/2; var tok; var tok1; var tok2; - var cursReturn = false; - var cursSkipdraw = false; + var cursS = 4; + var cursA = -Math.PI/2; + var cursX; + var cursY; var cursX0; var cursY0; var cursXt; var cursYt; + var cursReturn = false; + var cursSkipdraw = false; var dx; var dy; var dlen; + var multiplier; + var color; var tmp = [[]]; - var fac; + + var lines = [["U",0],["E",Math.PI/4],["R",Math.PI/2],["F",Math.PI*(3/4)],["D",Math.PI],["G",Math.PI*(5/4)],["L",Math.PI*(3/2)],["H",Math.PI*(7/4)]]; var screen = _images[_activeImage]; var ctx = screen.ctx; - var cursX = screen.lastX; - var cursY = screen.lastY; - ctx.strokeStyle = _fgColor.rgba(); + cursX = screen.lastX; + cursY = screen.lastY; - var lines = [["U",0],["E",Math.PI/4],["R",Math.PI/2],["F",Math.PI*(3/4)],["D",Math.PI],["G",Math.PI*(5/4)],["L",Math.PI*(3/2)],["H",Math.PI*(7/4)]]; + ctx.strokeStyle = _fgColor.rgba(); while (v.length) { tok = v.shift(); @@ -738,7 +739,9 @@ var QB = new function() { tmp = v[0]; if (tmp[1] == 0) { tok1 = v.shift(); - ctx.strokeStyle = _color(Math.floor(tok1[0])).rgba(); + color = Math.floor(tok1[0]); + ctx.strokeStyle = _color(color).rgba(); + _fgColor = _color(color); } } @@ -796,20 +799,20 @@ var QB = new function() { if (tmp[1] == -1) { tok1 = v.shift(); if (tok1[0] == "+") { - fac = 1; + multiplier = 1; } else if (tok1[0] == "-") { - fac = -1; + multiplier = -1; } if (v.length) { tmp = v[0]; if (tmp[1] == 0) { tok2 = v.shift(); - cursX = cursX + fac * tok2[0]; + cursXt = cursX + multiplier * tok2[0]; } } } else if (tmp[1] == 0) { tok1 = v.shift(); - cursX = tok1[0]; + cursXt = tok1[0]; } } if (v.length) { @@ -821,23 +824,33 @@ var QB = new function() { if (tmp[1] == -1) { tok1 = v.shift(); if (tok1[0] == "+") { - fac = 1; + multiplier = 1; } else if (tok1[0] == "-") { - fac = -1; + multiplier = -1; } if (v.length) { tmp = v[0]; if (tmp[1] == 0) { tok2 = v.shift(); - cursX = cursY + fac * tok2[0]; + cursYt = cursY + multiplier * tok2[0]; } } } else if (tmp[1] == 0) { tok1 = v.shift(); - cursY = tok1[0]; + cursYt = tok1[0]; } } } + if (cursSkipdraw == false) { + ctx.beginPath(); + ctx.moveTo(cursX, cursY); + ctx.lineTo(cursXt, cursYt); + ctx.stroke(); + } else { + cursSkipdraw = false; + } + cursX = cursXt; + cursY = cursYt; } } else if (tok[0] == "P") { @@ -862,7 +875,7 @@ var QB = new function() { } } - } else { // "UERFDGLH" + } else { for (i=0 ; i