Remove checkRedraw

pull/1916/head
Martin Boonk 2022-03-01 21:37:33 +01:00
parent 841f098f2a
commit 10884bbbc2
1 changed files with 124 additions and 143 deletions

View File

@ -102,108 +102,106 @@ function drawNumber(element, offset){
//print("drawNumber: ", number, element, offset);
if (number) number = number.toFixed(0);
if (checkRedraw(element,number)){
//var numberOffset = updateOffset(element, offset);
var numberOffset = offset;
//var numberOffset = updateOffset(element, offset);
var numberOffset = offset;
var isNegative;
var digits;
if (number == undefined){
isNegative = true;
digits = [];
numberOfDigits = 0;
} else {
isNegative = number < 0;
if (isNegative) number *= -1;
digits = splitNumberToDigits(number);
}
//print("digits: ", digits);
if (!numberOfDigits) numberOfDigits = digits.length;
var firstDigitX = element.X;
var firstDigitY = element.Y;
var imageIndex = element.ImageIndex ? element.ImageIndex : 0;
var firstImage;
if (imageIndex){
firstImage = getByPath(resources, [], "" + (0 + imageIndex));
} else {
firstImage = getByPath(resources, element.ImagePath, 0);
}
var minusImage;
if (imageIndexMinus){
minusImage = getByPath(resources, [], "" + (0 + imageIndexMinus));
} else {
minusImage = getByPath(resources, element.ImagePath, "minus");
}
var unitImage;
//print("Get image for unit", imageIndexUnit);
if (imageIndexUnit !== undefined){
unitImage = getByPath(resources, [], "" + (0 + imageIndexUnit));
//print("Unit image is", unitImage);
} else if (element.Unit){
unitImage = getByPath(resources, element.ImagePath, getMultistate(element.Unit, "unknown"));
}
var numberWidth = (numberOfDigits * firstImage.width) + (Math.max((numberOfDigits - 1),0) * spacing);
if (isNegative && minusImage){
//print("Adding to width", minusImage);
numberWidth += minusImage.width + spacing;
}
if (unitImage){
//print("Adding to width", unitImage);
numberWidth += unitImage.width + spacing;
}
//print("numberWidth:", numberWidth);
if (element.Alignment == "Center") {
firstDigitX = Math.round(element.X - (numberWidth/2)) + 1;
firstDigitY = Math.round(element.Y - (firstImage.height/2)) + 1;
} else if (element.Alignment == "BottomRight"){
firstDigitX = element.X - numberWidth + 1;
firstDigitY = element.Y - firstImage.height + 1;
} else if (element.Alignment == "TopRight") {
firstDigitX = element.X - numberWidth + 1;
firstDigitY = element.Y;
} else if (element.Alignment == "BottomLeft") {
firstDigitX = element.X;
firstDigitY = element.Y - firstImage.height + 1;
}
var currentX = firstDigitX;
if (isNegative && minusImage){
//print("Draw minus at", currentX);
if (imageIndexMinus){
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "" + (0 + imageIndexMinus));
} else {
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "minus");
}
currentX += minusImage.width + spacing;
}
for (var d = 0; d < numberOfDigits; d++){
var currentDigit;
var difference = numberOfDigits - digits.length;
if (d >= difference){
currentDigit = digits[d-difference];
} else {
currentDigit = 0;
}
//print("Digit " + currentDigit + " " + currentX);
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, currentDigit + imageIndex);
currentX += firstImage.width + spacing;
}
if (imageIndexUnit){
//print("Draw unit at", currentX);
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "" + (0 + imageIndexUnit));
} else if (element.Unit){
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, getMultistate(element.Unit,"unknown"));
}
element.lastDrawnValue = number;
endPerfLog("drawNumber");
var isNegative;
var digits;
if (number == undefined){
isNegative = true;
digits = [];
numberOfDigits = 0;
} else {
isNegative = number < 0;
if (isNegative) number *= -1;
digits = splitNumberToDigits(number);
}
//print("digits: ", digits);
if (!numberOfDigits) numberOfDigits = digits.length;
var firstDigitX = element.X;
var firstDigitY = element.Y;
var imageIndex = element.ImageIndex ? element.ImageIndex : 0;
var firstImage;
if (imageIndex){
firstImage = getByPath(resources, [], "" + (0 + imageIndex));
} else {
firstImage = getByPath(resources, element.ImagePath, 0);
}
var minusImage;
if (imageIndexMinus){
minusImage = getByPath(resources, [], "" + (0 + imageIndexMinus));
} else {
minusImage = getByPath(resources, element.ImagePath, "minus");
}
var unitImage;
//print("Get image for unit", imageIndexUnit);
if (imageIndexUnit !== undefined){
unitImage = getByPath(resources, [], "" + (0 + imageIndexUnit));
//print("Unit image is", unitImage);
} else if (element.Unit){
unitImage = getByPath(resources, element.ImagePath, getMultistate(element.Unit, "unknown"));
}
var numberWidth = (numberOfDigits * firstImage.width) + (Math.max((numberOfDigits - 1),0) * spacing);
if (isNegative && minusImage){
//print("Adding to width", minusImage);
numberWidth += minusImage.width + spacing;
}
if (unitImage){
//print("Adding to width", unitImage);
numberWidth += unitImage.width + spacing;
}
//print("numberWidth:", numberWidth);
if (element.Alignment == "Center") {
firstDigitX = Math.round(element.X - (numberWidth/2)) + 1;
firstDigitY = Math.round(element.Y - (firstImage.height/2)) + 1;
} else if (element.Alignment == "BottomRight"){
firstDigitX = element.X - numberWidth + 1;
firstDigitY = element.Y - firstImage.height + 1;
} else if (element.Alignment == "TopRight") {
firstDigitX = element.X - numberWidth + 1;
firstDigitY = element.Y;
} else if (element.Alignment == "BottomLeft") {
firstDigitX = element.X;
firstDigitY = element.Y - firstImage.height + 1;
}
var currentX = firstDigitX;
if (isNegative && minusImage){
//print("Draw minus at", currentX);
if (imageIndexMinus){
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "" + (0 + imageIndexMinus));
} else {
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "minus");
}
currentX += minusImage.width + spacing;
}
for (var d = 0; d < numberOfDigits; d++){
var currentDigit;
var difference = numberOfDigits - digits.length;
if (d >= difference){
currentDigit = digits[d-difference];
} else {
currentDigit = 0;
}
//print("Digit " + currentDigit + " " + currentX);
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, currentDigit + imageIndex);
currentX += firstImage.width + spacing;
}
if (imageIndexUnit){
//print("Draw unit at", currentX);
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, "" + (0 + imageIndexUnit));
} else if (element.Unit){
drawElement({X:currentX,Y:firstDigitY}, numberOffset, element.ImagePath, getMultistate(element.Unit,"unknown"));
}
element.lastDrawnValue = number;
endPerfLog("drawNumber");
}
function setColors(properties){
@ -245,19 +243,6 @@ function drawElement(pos, offset, path, lastElem){
endPerfLog("drawElement");
}
function checkRedraw(element, newValue){
var redrawConfig = element.Redraw ? element.Redraw : defaultRedraw;
switch(redrawConfig){
case "Change":
return !element.lastDrawnValue || element.lastDrawnValue != newValue;
case "Never":
return false;
case "Always":
default:
return true;
}
}
function getValue(value, defaultValue){
if (typeof value == "string"){
return numbers[value]();
@ -289,12 +274,11 @@ function drawScale(scale, offset){
var segmentsToDraw = Math.ceil(value * segments.length);
if (checkRedraw(scale, segmentsToDraw)){
for (var i = 0; i < segmentsToDraw; i++){
drawElement(segments[i], scaleOffset, scale.ImagePath, imageIndex + i);
}
scale.lastDrawnValue = segmentsToDraw;
for (var i = 0; i < segmentsToDraw; i++){
drawElement(segments[i], scaleOffset, scale.ImagePath, imageIndex + i);
}
scale.lastDrawnValue = segmentsToDraw;
endPerfLog("drawScale");
}
@ -324,28 +308,27 @@ function drawCodedImage(image, offset){
var code = getValue(image.Value);
//print("drawCodedImage", image, offset, code);
if (checkRedraw(image, code)){
if (image.ImagePath) {
var factor = 1;
var currentCode = code;
while (code / factor > 1){
currentCode = Math.floor(currentCode/factor)*factor;
//print("currentCode", currentCode);
if (getByPath(resources, image.ImagePath, currentCode)){
break;
}
factor *= 10;
}
if (code / factor > 1){
//print("found match");
drawImage(image, offset, currentCode);
} else {
//print("fallback");
drawImage(image, offset, "fallback");
if (image.ImagePath) {
var factor = 1;
var currentCode = code;
while (code / factor > 1){
currentCode = Math.floor(currentCode/factor)*factor;
//print("currentCode", currentCode);
if (getByPath(resources, image.ImagePath, currentCode)){
break;
}
factor *= 10;
}
if (code / factor > 1){
//print("found match");
drawImage(image, offset, currentCode);
} else {
//print("fallback");
drawImage(image, offset, "fallback");
}
image.lastDrawnValue = code;
}
image.lastDrawnValue = code;
startPerfLog("drawCodedImage");
}
@ -508,11 +491,9 @@ function drawMultiState(element, offset){
startPerfLog("drawMultiState");
//print("drawMultiState", element, offset);
var value = multistates[element.Value]();
if (checkRedraw(element, value)){
//print("drawImage from drawMultiState", element, offset, value);
drawImage(element, offset, value);
element.lastDrawnValue = value;
}
//print("drawImage from drawMultiState", element, offset, value);
drawImage(element, offset, value);
element.lastDrawnValue = value;
endPerfLog("drawMultiState");
}