From 7abd5d9a84ae99253816eeea46e94e0466498615 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sun, 3 Nov 2024 00:22:38 +0100 Subject: [PATCH] painter now uses the color table of the tag instead of hardcoded black/red/white --- ESP32_AP-Flasher/data/www/index.html.gz | Bin 6396 -> 6485 bytes ESP32_AP-Flasher/data/www/main.js.gz | Bin 15606 -> 15631 bytes ESP32_AP-Flasher/data/www/painter.js.gz | Bin 2996 -> 3188 bytes ESP32_AP-Flasher/wwwroot/main.js | 4 +- ESP32_AP-Flasher/wwwroot/painter.js | 82 ++++++++++++++---------- 5 files changed, 50 insertions(+), 36 deletions(-) diff --git a/ESP32_AP-Flasher/data/www/index.html.gz b/ESP32_AP-Flasher/data/www/index.html.gz index 37514c7d4877baed5ab0349ab7fcb56c1587ab50..1a2a528c74720742f25b965e051a7ea98adffd5d 100644 GIT binary patch literal 6485 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 v5~_2{qCE!n*9bW6Ctr2c;Z`Asa|zFq(TPmPWT literal 6396 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 tzI~{*&0e(GKUUrliyHg}b&eEDJyAqW7{z+S0 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 { - color = 'black'; - linewidth = 3; - cursor = 'url("data:image/svg+xml;utf8,") 2 2, auto'; - blackButton.classList.add('active'); - redButton.classList.remove('active'); - whiteButton.classList.remove('active'); - }); - blackButton.classList.add('active'); + console.log(tagtype.colortable); + const rgbToCSSColor = (rgbArray) => `rgb(${rgbArray[0]}, ${rgbArray[1]}, ${rgbArray[2]})`; - const redButton = document.createElement('button'); - redButton.innerHTML = '﹏🖌'; - redButton.style.color = 'red'; - redButton.addEventListener('click', () => { - color = 'red'; - linewidth = 3; - cursor = 'url("data:image/svg+xml;utf8,") 2 2, auto'; - blackButton.classList.remove('active'); - redButton.classList.add('active'); - whiteButton.classList.remove('active'); + let activeButton = null; + + tagtype.colortable.forEach((thiscolor, index) => { + if (thiscolor[0] === 255 && thiscolor[1] === 255 && thiscolor[2] === 255) return; + + const colorButton = document.createElement('button'); + colorButton.innerHTML = '﹏🖌'; + colorButton.style.color = rgbToCSSColor(thiscolor); + colorButton.classList.add('colorbutton'); + + colorButton.addEventListener('click', () => { + color = rgbToCSSColor(thiscolor); + linewidth = 3; + cursor = 'url("data:image/svg+xml;utf8,") 2 2, auto'; + + if (activeButton) activeButton.classList.remove('active'); + colorButton.classList.add('active'); + activeButton = colorButton; + }); + + if (!activeButton) { + colorButton.classList.add('active'); + activeButton = colorButton; + color = rgbToCSSColor(thiscolor); + } + + $("#buttonbar").appendChild(colorButton); }); const whiteButton = document.createElement('button'); @@ -78,9 +85,9 @@ function startPainter(mac, width, height) { color = 'white'; linewidth = 20; cursor = 'url("data:image/svg+xml;utf8,") 10 10, auto'; - blackButton.classList.remove('active'); - redButton.classList.remove('active'); + if (activeButton) activeButton.classList.remove('active'); whiteButton.classList.add('active'); + activeButton = whiteButton; }); const clearButton = document.createElement('button'); @@ -110,8 +117,6 @@ function startPainter(mac, width, height) { $('#configbox').close(); }); - $("#buttonbar").appendChild(blackButton); - $("#buttonbar").appendChild(redButton); $("#buttonbar").appendChild(whiteButton); $("#buttonbar").appendChild(txtButton); $("#buttonbar").appendChild(clearButton); @@ -259,12 +264,17 @@ function startPainter(mac, width, height) { isAddingText = true; //cursor = 'move'; - blackButton.innerHTML = 'aA' - redButton.innerHTML = 'aA' + //blackButton.innerHTML = 'aA' + //redButton.innerHTML = 'aA' + const colorButtons = document.querySelectorAll('.colorbutton'); + colorButtons.forEach(button => { + button.innerHTML = 'aA'; + }); if (color=='white') { - whiteButton.classList.remove('active'); - blackButton.classList.add('active'); - color='black'; + //whiteButton.classList.remove('active'); + //blackButton.classList.add('active'); + //color='black'; + document.querySelector('.colorbutton').click(); } } @@ -283,8 +293,12 @@ function startPainter(mac, width, height) { showCursor = false; if (apply) drawText(input.value, textX, textY); txtButton.classList.remove('active'); - blackButton.innerHTML = '﹏🖌' - redButton.innerHTML = '﹏🖌' + //blackButton.innerHTML = '﹏🖌' + //redButton.innerHTML = '﹏🖌' + const colorButtons = document.querySelectorAll('.colorbutton'); + colorButtons.forEach(button => { + button.innerHTML = '﹏🖌'; + }); } function drawText(text, x, y) {