From 25197e663c117aa223c904f1e18584eb28790ba8 Mon Sep 17 00:00:00 2001 From: Xavier <xavier@c-est-simple.com> Date: Fri, 20 Oct 2017 22:54:50 +0200 Subject: [PATCH] Removed some debug stuff Still issues to investigate when designing big icons Added screen shot --- resources/IconTool.png | Bin 0 -> 19556 bytes resources/glyph2font.html | 41 ++++++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 resources/IconTool.png diff --git a/resources/IconTool.png b/resources/IconTool.png new file mode 100644 index 0000000000000000000000000000000000000000..42ffc617c766c24c85165b2696853b7098a1cdb4 GIT binary patch literal 19556 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 literal 0 HcmV?d00001 diff --git a/resources/glyph2font.html b/resources/glyph2font.html index b1d63d2..8f02cf2 100644 --- a/resources/glyph2font.html +++ b/resources/glyph2font.html @@ -52,8 +52,8 @@ <body> <div id="form"> <span>Font array name:</span> <input placeholder="Font array name" type="text" id="name" value="My_Font"/><br/> - <span>Height:</span> <input placeholder="Font height" type="number" id="height" value="13" max="64"/><br/> <span>Width:</span> <input placeholder="Font width" type="number" id="width" value="10"/><br/> + <span>Height:</span> <input placeholder="Font height" type="number" id="height" value="13" max="64"/><br/> <span>First char code:</span> <input placeholder="First char code" type="number" id="code" value="1" min="1"/><br/> <br/> <button id="create">Create</button> @@ -73,11 +73,13 @@ // 100% vanilla ECS6, no framework or library was injured for this project. // This page allows drawing icons in grids and generating the map with the format required by // library for OLED SD1306 screen: https://github.com/squix78/esp8266-oled-ssd1306 + // TODO: - // Implement data parsing to edit existing font + // Implement data parsing to edit existing font: from char array data to pixels matrix // Implement methods to move glyphs, symetrical input, ... // Implement char insertion, non displayable char, ... - + // Submit PR to original project. + let font; class Font { constructor(height, width, code) { @@ -96,9 +98,18 @@ let header = charContainer.appendChild(document.createElement("th")); header.setAttribute("colspan", this.width-1); header.textContent = `Character ${this.currentCharCode}`; - let removeCharHeader = charContainer.appendChild(document.createElement("th")); - removeCharHeader.setAttribute("action", "remove"); - removeCharHeader.textContent = "x"; + let deletePixels = charContainer.appendChild(document.createElement("th")); + deletePixels.setAttribute("action", "remove"); + deletePixels.textContent = "x"; + deletePixels.addEventListener('click', function() { + let result = confirm("Delete the pixels ?"); + if(result) { + let pixels = charContainer.getElementsByTagName('td'); + for(let p = 0; p < pixels.length; p++) { + pixels[p].className = ''; + } + } + }); for(let r = 0; r < this.height; r++) { let rowContainer = charContainer.appendChild(document.createElement("tr")); for(let c = 0; c < this.width; c++) { @@ -112,6 +123,8 @@ pixel.className = pixel.className == 'on' ? '': 'on'; } + // Read from the <td> css class the pixels that need to be on + // generates the jump table and font data generate() { document.getElementById('header').textContent = ''; document.getElementById('jump').textContent = ''; @@ -123,20 +136,22 @@ let charAddr = 0; output('jump', ' // Jump table:'); output('data', ' // Data:'); + // Browse each character for(let ch = 0; ch < charCount; ch++) { let charBytes = []; let charBits = []; let charWidth = 1; // always add one row of off pixels to the right ? let rows = chars[ch].getElementsByTagName('tr'); - + // Browse each column for(let col = 0; col < this.width ; col++) { var bits = ""; // using string because js uses 32b ints when performing bit operations - //for(let r = 0; r < rows.length; r++) { + // Browse each row starting from the bottom one, going up, and accumulate pixels in + // a string: this rotates the glyph for(let r = rows.length-1; r >=0 ; r--) { let pixelState = rows[r].children[col].className; bits += (pixelState == 'on' ? '1': '0'); } - // Need to complete missing bits to have an odd number of bytes + // Need to complete missing bits to have a sizeof byte multiple number of bits for(let b = 0; b < bits2add; b++) { bits += '0'; } @@ -144,8 +159,7 @@ for(let b = 0 ; b < bits.length/16; b+=16) { let word = parseInt(bits.substring(b, b+15), 2); charBytes.push(getLsB(word)); - charBytes.push(getMsB(word)); - + charBytes.push(getMsB(word)); } } // Remove bytes with value 0 at the end of the array. @@ -154,20 +168,17 @@ } output('data', ` ${charBytes.join(',')},`); + // TODO: last param width is not the best value. Need to compute the actual occupied width output('jump', ` ${getMsB(charAddr)}, ${getLsB(charAddr)}, ${toHexString(charBytes.length)}, ${toHexString(this.width)}, `); charAddr += charBytes.length; } output('data', '};'); - - output('header', `const char ${name}[] PROGMEM = {`); output('header', ` ${toHexString(this.width)}, // Width: ${this.width}`); output('header', ` ${toHexString(this.height)}, // Height: ${this.height}`); output('header', ` ${toHexString(this.firstCharCode)}, // First char: ${this.firstCharCode}`); output('header', ` ${toHexString(charCount)}, // Number of chars: ${charCount}`); - - } } -- GitLab