Refactoring and removing old code

master
Martin Boonk 2022-03-13 17:36:43 +01:00
parent c047cfda6d
commit 09dabad760
2 changed files with 45 additions and 97 deletions

View File

@ -102,7 +102,7 @@ function isChangedMultistate(element){
return element.lastDrawnValue != getMultistate(element.Value); return element.lastDrawnValue != getMultistate(element.Value);
} }
function drawNumber(graphics, resources, element, offset){ function drawNumber(graphics, resources, element){
startPerfLog("drawNumber"); startPerfLog("drawNumber");
var number = getValue(element.Value); var number = getValue(element.Value);
var spacing = element.Spacing ? element.Spacing : 0; var spacing = element.Spacing ? element.Spacing : 0;
@ -113,12 +113,9 @@ function drawNumber(graphics, resources, element, offset){
var numberOfDigits = element.Digits; var numberOfDigits = element.Digits;
//print("drawNumber: ", number, element, offset); //print("drawNumber: ", number, element);
if (number) number = number.toFixed(0); if (number) number = number.toFixed(0);
//var numberOffset = updateOffset(element, offset);
var numberOffset = offset;
var isNegative; var isNegative;
var digits; var digits;
if (number == undefined){ if (number == undefined){
@ -189,9 +186,9 @@ function drawNumber(graphics, resources, element, offset){
if (isNegative && minusImage){ if (isNegative && minusImage){
//print("Draw minus at", currentX); //print("Draw minus at", currentX);
if (imageIndexMinus){ if (imageIndexMinus){
drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, numberOffset, element, "" + (0 + imageIndexMinus)); drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, element, "" + (0 + imageIndexMinus));
} else { } else {
drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, numberOffset, element, "minus"); drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, element, "minus");
} }
currentX += minusImage.width + spacing; currentX += minusImage.width + spacing;
} }
@ -204,26 +201,21 @@ function drawNumber(graphics, resources, element, offset){
currentDigit = 0; currentDigit = 0;
} }
//print("Digit " + currentDigit + " " + currentX); //print("Digit " + currentDigit + " " + currentX);
drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, numberOffset, element, currentDigit + imageIndex); drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, element, currentDigit + imageIndex);
currentX += firstImage.width + spacing; currentX += firstImage.width + spacing;
} }
if (imageIndexUnit){ if (imageIndexUnit){
//print("Draw unit at", currentX); //print("Draw unit at", currentX);
drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, numberOffset, element, "" + (0 + imageIndexUnit)); drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, element, "" + (0 + imageIndexUnit));
} else if (element.Unit){ } else if (element.Unit){
drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, numberOffset, element, getMultistate(element.Unit,"unknown")); drawElement(graphics, resources, {X:currentX,Y:firstDigitY}, element, getMultistate(element.Unit,"unknown"));
} }
element.lastDrawnValue = number; element.lastDrawnValue = number;
endPerfLog("drawNumber"); endPerfLog("drawNumber");
} }
function setColors(graphics, properties){ function drawElement(graphics, resources, pos, element, lastElem){
if (properties.fg) graphics.setColor(properties.fg);
if (properties.bg) graphics.setBgColor(properties.bg);
}
function drawElement(graphics, resources, pos, offset, element, lastElem){
startPerfLog("drawElement"); startPerfLog("drawElement");
var cacheKey = "_"+(lastElem?lastElem:"nole"); var cacheKey = "_"+(lastElem?lastElem:"nole");
if (!element.cachedImage) element.cachedImage={}; if (!element.cachedImage) element.cachedImage={};
@ -247,24 +239,21 @@ function drawElement(graphics, resources, pos, offset, element, lastElem){
//print("cache ",typeof element.cachedImage[cacheKey], element.ImagePath, lastElem); //print("cache ",typeof element.cachedImage[cacheKey], element.ImagePath, lastElem);
if(element.cachedImage[cacheKey]){ if(element.cachedImage[cacheKey]){
//print("drawElement ",pos, offset, path, lastElem); //print("drawElement ",pos, path, lastElem);
//print("drawElement offset", offset, pos.X, pos.Y); //print("resource ", resource,pos, path, lastElem);
//print("resource ", resource,pos, offset, path, lastElem); //print("drawImage from drawElement", image, pos);
var imageOffset = updateColors(pos, offset);
setColors(graphics, imageOffset);
//print("drawImage from drawElement", image, pos, offset);
var options={}; var options={};
if (pos.RotationValue){ if (element.RotationValue){
options.rotate = radians(pos); options.rotate = radians(element);
} }
if (pos.Scale){ if (element.Scale){
options.scale = pos.ScaleValue; options.scale = element.ScaleValue;
} }
//print("options", options); //print("options", options);
//print("Memory before drawing", process.memory(false)); //print("Memory before drawing", process.memory(false));
startPerfLog("drawElement_g.drawImage"); startPerfLog("drawElement_g.drawImage");
try{ try{
graphics.drawImage(element.cachedImage[cacheKey] ,(imageOffset.X ? imageOffset.X : 0) + (pos.X ? pos.X : 0),(imageOffset.Y ? imageOffset.Y :0) + (pos.Y ? pos.Y : 0), options);} catch (e) { graphics.drawImage(element.cachedImage[cacheKey] ,(pos.X ? pos.X : 0), (pos.Y ? pos.Y : 0), options);} catch (e) {
//print("Error", e, element.cachedImage[cacheKey]); //print("Error", e, element.cachedImage[cacheKey]);
} }
endPerfLog("drawElement_g.drawImage"); endPerfLog("drawElement_g.drawImage");
@ -289,53 +278,46 @@ function getMultistate(name, defaultValue){
return undefined; return undefined;
} }
function drawScale(graphics, resources, scale, offset){ function drawScale(graphics, resources, scale){
startPerfLog("drawScale"); startPerfLog("drawScale");
//print("drawScale", scale, offset); //print("drawScale", scale);
var segments = scale.Segments; var segments = scale.Segments;
var imageIndex = scale.ImageIndex !== undefined ? scale.ImageIndex : 0; var imageIndex = scale.ImageIndex !== undefined ? scale.ImageIndex : 0;
var value = scaledown(scale.Value, scale.MinValue, scale.MaxValue); var value = scaledown(scale.Value, scale.MinValue, scale.MaxValue);
//print("Value is ", value, "(", maxValue, ",", minValue, ")"); //print("Value is ", value, "(", maxValue, ",", minValue, ")");
var scaleOffset = updateOffset(scale, offset);
var segmentsToDraw = Math.ceil(value * segments.length); var segmentsToDraw = Math.ceil(value * segments.length);
for (var i = 0; i < segmentsToDraw; i++){ for (var i = 0; i < segmentsToDraw; i++){
drawElement(graphics, resources, segments[i], scaleOffset, scale, imageIndex + i); drawElement(graphics, resources, segments[i], scale, imageIndex + i);
} }
scale.lastDrawnValue = segmentsToDraw; scale.lastDrawnValue = segmentsToDraw;
endPerfLog("drawScale"); endPerfLog("drawScale");
} }
function drawDigit(graphics, resources, element, offset, digit){ function drawImage(graphics, resources, image, name){
drawElement(graphics, resources, element, offset, element, digit);
}
function drawImage(graphics, resources, image, offset, name){
startPerfLog("drawImage"); startPerfLog("drawImage");
var imageOffset = updateColors(image, offset); //print("drawImage", image.X, image.Y, name);
//print("drawImage", image, offset, name);
if (image.Value && image.Steps){ if (image.Value && image.Steps){
var steps = Math.floor(scaledown(image.Value, image.MinValue, image.MaxValue) * (image.Steps - 1)); var steps = Math.floor(scaledown(image.Value, image.MinValue, image.MaxValue) * (image.Steps - 1));
//print("Step", steps, "of", image.Steps); //print("Step", steps, "of", image.Steps);
drawElement(graphics, resources, image, imageOffset, image, "" + steps); drawElement(graphics, resources, image, image, "" + steps);
} else if (image.ImageIndex !== undefined) { } else if (image.ImageIndex !== undefined) {
drawElement(graphics, resources, image, imageOffset, image, image.ImageIndex); drawElement(graphics, resources, image, image, image.ImageIndex);
} else { } else {
drawElement(graphics, resources, image, imageOffset, image, name ? "" + name: undefined); drawElement(graphics, resources, image, image, name ? "" + name: undefined);
} }
endPerfLog("drawImage"); endPerfLog("drawImage");
} }
function drawCodedImage(graphics, resources, image, offset){ function drawCodedImage(graphics, resources, image){
startPerfLog("drawCodedImage"); startPerfLog("drawCodedImage");
var code = getValue(image.Value); var code = getValue(image.Value);
//print("drawCodedImage", image, offset, code); //print("drawCodedImage", image, code);
if (image.ImagePath) { if (image.ImagePath) {
var factor = 1; var factor = 1;
@ -350,10 +332,10 @@ function drawCodedImage(graphics, resources, image, offset){
} }
if (code / factor > 1){ if (code / factor > 1){
//print("found match"); //print("found match");
drawImage(graphics, resources, image, offset, currentCode); drawImage(graphics, resources, image, currentCode);
} else { } else {
//print("fallback"); //print("fallback");
drawImage(graphics, resources, image, offset, "fallback"); drawImage(graphics, resources, image, "fallback");
} }
} }
image.lastDrawnValue = code; image.lastDrawnValue = code;
@ -390,27 +372,6 @@ function getWeatherTemperature(){
return result; return result;
} }
function updateOffset(element, offset){
startPerfLog("updateOffset");
var newOffset = { X: offset.X ? offset.X : 0, Y: offset.Y ? offset.Y : 0 };
if (element && element.X) newOffset.X += element.X;
if (element && element.Y) newOffset.Y += element.Y;
newOffset = updateColors(element, newOffset);
//print("Updated offset from ", offset, "to", newOffset);
endPerfLog("updateOffset");
return newOffset;
}
function updateColors(element, offset){
var newOffset = { X: offset.X ? offset.X : 0, Y: offset.Y ? offset.Y : 0 };
if (element){
newOffset.fg = element.ForegroundColor ? element.ForegroundColor: offset.fg;
newOffset.bg = element.BackgroundColor ? element.BackgroundColor: offset.bg;
}
//print("Updated offset from ", offset, "to", newOffset);
return newOffset;
}
function scaledown(value, min, max){ function scaledown(value, min, max){
//print("scaledown", value, min, max); //print("scaledown", value, min, max);
var scaled = E.clip(getValue(value),getValue(min,0),getValue(max,1)); var scaled = E.clip(getValue(value),getValue(min,0),getValue(max,1));
@ -427,20 +388,17 @@ function radians(rotation){
return value; return value;
} }
function drawPoly(graphics, resources, element, offset){ function drawPoly(graphics, resources, element){
startPerfLog("drawPoly"); startPerfLog("drawPoly");
var vertices = []; var vertices = [];
var primitiveOffset = offset.clone();
if (element.X) primitiveOffset.X += element.X;
if (element.Y) primitiveOffset.Y += element.Y;
startPerfLog("drawPoly_transform"); startPerfLog("drawPoly_transform");
for (var c of element.Vertices){ for (var c of element.Vertices){
vertices.push(c.X); vertices.push(c.X);
vertices.push(c.Y); vertices.push(c.Y);
} }
var transform = { x: primitiveOffset.X, var transform = { x: element.X ? element.X : 0,
y: primitiveOffset.Y y: element.Y ? element.Y : 0
}; };
if (element.RotationValue){ if (element.RotationValue){
transform.rotate = radians(element); transform.rotate = radians(element);
@ -461,26 +419,23 @@ function drawPoly(graphics, resources, element, offset){
startPerfLog("drawPoly_g.drawPoly"); startPerfLog("drawPoly_g.drawPoly");
graphics.drawPoly(vertices,true); graphics.drawPoly(vertices,true);
endPerfLog("drawPoly_g.drawPoly"); endPerfLog("drawPoly_g.drawPoly");
endPerfLog("drawPoly"); endPerfLog("drawPoly");
} }
function drawRect(graphics, resources, element, offset){ function drawRect(graphics, resources, element){
startPerfLog("drawRect"); startPerfLog("drawRect");
var vertices = []; var vertices = [];
var primitiveOffset = offset.clone();
if (element.X) primitiveOffset.X += element.X;
if (element.Y) primitiveOffset.Y += element.Y;
if (element.ForegroundColor) graphics.setColor(element.ForegroundColor); if (element.ForegroundColor) graphics.setColor(element.ForegroundColor);
if (element.Filled){ if (element.Filled){
startPerfLog("drawRect_g.fillRect"); startPerfLog("drawRect_g.fillRect");
graphics.fillRect(primitiveOffset.X, primitiveOffset.Y, primitiveOffset.X + element.Width, primitiveOffset.Y + element.Height); graphics.fillRect(element.X, element.Y, element.X + element.Width, element.Y + element.Height);
endPerfLog("drawRect_g.fillRect"); endPerfLog("drawRect_g.fillRect");
} else { } else {
startPerfLog("drawRect_g.fillRect"); startPerfLog("drawRect_g.fillRect");
graphics.drawRect(primitiveOffset.X, primitiveOffset.Y, primitiveOffset.X + element.Width, primitiveOffset.Y + element.Height); graphics.drawRect(element.X, element.Y, element.X + element.Width, element.Y + element.Height);
endPerfLog("drawRect_g.fillRect"); endPerfLog("drawRect_g.fillRect");
} }
endPerfLog("drawRect"); endPerfLog("drawRect");
@ -537,12 +492,12 @@ multistates.WeatherTemperatureNegative = () => { return getWeatherTemperature().
multistates.WeatherTemperatureUnit = () => { return getWeatherTemperature().unit; }; multistates.WeatherTemperatureUnit = () => { return getWeatherTemperature().unit; };
multistates.StepsGoal = () => { return (numbers.Steps() >= stepsgoal) ? "on": "off"; }; multistates.StepsGoal = () => { return (numbers.Steps() >= stepsgoal) ? "on": "off"; };
function drawMultiState(graphics, resources, element, offset){ function drawMultiState(graphics, resources, element){
startPerfLog("drawMultiState"); startPerfLog("drawMultiState");
//print("drawMultiState", element, offset); //print("drawMultiState", element);
var value = multistates[element.Value](); var value = multistates[element.Value]();
//print("drawImage from drawMultiState", element, offset, value); //print("drawImage from drawMultiState", element, value);
drawImage(graphics, resources, element, offset, value); drawImage(graphics, resources, element, value);
element.lastDrawnValue = value; element.lastDrawnValue = value;
endPerfLog("drawMultiState"); endPerfLog("drawMultiState");
} }
@ -550,9 +505,6 @@ function drawMultiState(graphics, resources, element, offset){
var pulse,alt,temp,press; var pulse,alt,temp,press;
var zeroOffset={X:0,Y:0};
var requestedDraws = 0; var requestedDraws = 0;
var isDrawing = false; var isDrawing = false;
@ -599,9 +551,9 @@ function initialDraw(resources, face){
requestedDraws = 0; requestedDraws = 0;
setTimeout(()=>{initialDraw(resources, face);}, 10); setTimeout(()=>{initialDraw(resources, face);}, 10);
} }
} else { } //else {
print("queued draw"); //print("queued draw");
} //}
} }
function handleHrm(e){ function handleHrm(e){

View File

@ -595,7 +595,6 @@
var c = elements[i].value; var c = elements[i].value;
console.log("Check element", c); console.log("Check element", c);
var name = c.Layer; var name = c.Layer;
if (c.type == "Standalone") name = "standalone" + counter++;
var plane = wrapInTimeouts ? 1 : 0; var plane = wrapInTimeouts ? 1 : 0;
if (typeof c.Plane == "number"){ if (typeof c.Plane == "number"){
plane = c.Plane; plane = c.Plane;
@ -624,9 +623,6 @@
if (plane != 0) code += "if (!p" + plane + ") p" + plane + " = Graphics.createArrayBuffer(g.getWidth(),g.getHeight(),16,{msb:true});\n"; if (plane != 0) code += "if (!p" + plane + ") p" + plane + " = Graphics.createArrayBuffer(g.getWidth(),g.getHeight(),16,{msb:true});\n";
code += "p" + plane + ".setBgColor(g.theme.bg);\n";
code += "p" + plane + ".setColor(g.theme.fg);\n";
if (properties.Redraw && properties.Redraw.Clear){ if (properties.Redraw && properties.Redraw.Clear){
if (wrapInTimeouts && plane != 0){ if (wrapInTimeouts && plane != 0){
code += "p = p.then(()=>delay(0)).then(()=>{\n"; code += "p = p.then(()=>delay(0)).then(()=>{\n";
@ -728,10 +724,10 @@
} }
if (addDebug()) code += 'print("Element condition is ' + condition + '");' + "\n"; if (addDebug()) code += 'print("Element condition is ' + condition + '");' + "\n";
code += (condition.length > 0 ? "if (" + condition + "){\n" : "");
code += "" + colorsetting; code += "" + colorsetting;
code += (condition.length > 0 ? "if (" + condition + "){\n" : "");
if (addDebug()) code += 'print("Drawing element ' + elementIndex + ' with type ' + c.type + ' on plane ' + planeName + '");' + "\n"; if (addDebug()) code += 'print("Drawing element ' + elementIndex + ' with type ' + c.type + ' on plane ' + planeName + '");' + "\n";
code += "draw" + c.type + "(" + planeName + ", wr, wf.Collapsed[" + elementIndex + "].value, {X:0,Y:0});\n"; code += "draw" + c.type + "(" + planeName + ", wr, wf.Collapsed[" + elementIndex + "].value);\n";
code += (condition.length > 0 ? "}\n" : ""); code += (condition.length > 0 ? "}\n" : "");
} }