- commit
- 0d849fef93ddbcd5bab7514aaebbfddc8320084b
- parent
- e8e559888cf3564deb2a64be6da3229e0dd3e205
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-02-13 06:29
still more
Diffstat
| M | index.html | 2 | +- |
| R | frame.js -> js/frame.js | 0 | |
| R | paint.js -> js/index.js | 96 | +++++++++++++++++++++++++++++++------------------------------ |
| R | loader.js -> js/loader.js | 0 | |
| R | utils.js -> js/utils.js | 0 | |
| R | view.js -> js/view.js | 7 | +++++++ |
6 files changed, 57 insertions, 48 deletions
diff --git a/index.html b/index.html
@@ -11,6 +11,6 @@ 11 11 </div> 12 12 <canvas></canvas> 13 13 <form class="palette"></form>14 -1 <script src="paint.js" type="module"></script>-1 14 <script src="js/index.js" type="module"></script> 15 15 </body> 16 16 </html>
diff --git a/frame.js b/js/frame.js
diff --git a/paint.js b/js/index.js
@@ -14,42 +14,38 @@ var pencil = 0; 14 14 var speed_x = 0; 15 15 var speed_y = 0; 16 1617 -1 input.addEventListener('change', () => {18 -1 // FIXME: configurable size19 -1 loadImage(input, 80).then(image => {20 -1 frame.setImage(image);21 -122 -1 palette.innerHTML = '';23 -1 for (var i = 0; i < image.colors.length; i++) {24 -1 var label = document.createElement('label');25 -1 var radio = document.createElement('input');26 -1 radio.type = 'radio';27 -1 radio.name = 'pencil';28 -1 radio.value = i;29 -1 var span = document.createElement('span');30 -1 span.textContent = i;31 -1 label.append(radio);32 -1 label.append(span);33 -1 span.style.color = image.contrasts[i];34 -1 span.style.backgroundColor = image.colors[i];35 -1 palette.append(label);36 -1 radio.addEventListener('change', event => {37 -1 pencil = parseInt(event.target.value, 10);38 -1 });39 -1 }40 -1 setPencil(0);41 -1 view.refreshSize();42 -143 -1 view.zoom = view.canvas.height / frame.canvas.height * 0.8;44 -1 view.dx = (view.canvas.width - frame.canvas.width * view.zoom) / 2;45 -1 view.dy = (view.canvas.height - frame.canvas.height * view.zoom) / 2;46 -147 -1 speed_x = 0;48 -1 speed_y = 0;-1 17 var setupPalette = function(image) { -1 18 palette.innerHTML = ''; -1 19 for (var i = 0; i < image.colors.length; i++) { -1 20 var radio = document.createElement('input'); -1 21 radio.type = 'radio'; -1 22 radio.name = 'pencil'; -1 23 radio.value = i; -1 24 radio.addEventListener('change', event => { -1 25 pencil = parseInt(event.target.value, 10); -1 26 }); -1 27 -1 28 var span = document.createElement('span'); -1 29 span.textContent = i; -1 30 span.style.color = image.contrasts[i]; -1 31 span.style.backgroundColor = image.colors[i]; -1 32 -1 33 var label = document.createElement('label'); -1 34 label.append(radio); -1 35 label.append(span); -1 36 -1 37 palette.append(label); -1 38 } -1 39 view.refreshSize(); -1 40 }; 49 4150 -1 view.render();51 -1 });52 -1 });-1 42 var setPencil = function(color) { -1 43 if (color >= 0 && color < palette.pencil.length) { -1 44 pencil = color; -1 45 palette.pencil.value = pencil; -1 46 palette.querySelector(':checked').parentElement.scrollIntoView(); -1 47 } -1 48 }; 53 49 54 50 var applySpeed = utils.throttle(function() { 55 51 view.dx += speed_x; @@ -62,6 +58,20 @@ var applySpeed = utils.throttle(function() { 62 58 } 63 59 }, 'animation'); 64 60 -1 61 input.addEventListener('change', () => { -1 62 // FIXME: configurable size -1 63 loadImage(input, 80).then(image => { -1 64 setupPalette(image); -1 65 setPencil(0); -1 66 -1 67 frame.setImage(image); -1 68 view.reset(); -1 69 -1 70 speed_x = 0; -1 71 speed_y = 0; -1 72 }); -1 73 }); -1 74 65 75 window.addEventListener('resize', () => view.refreshSize()); 66 76 67 77 canvas.addEventListener('wheel', event => { @@ -69,14 +79,6 @@ canvas.addEventListener('wheel', event => { 69 79 view.render(); 70 80 }); 71 8172 -1 var setPencil = function(color) {73 -1 if (color >= 0 && color < palette.pencil.length) {74 -1 pencil = color;75 -1 palette.pencil.value = pencil;76 -1 palette.querySelector(':checked').parentElement.scrollIntoView();77 -1 }78 -1 };79 -180 82 window.addEventListener('keydown', event => { 81 83 // FIXME: kinetic movement; 82 84 var step = 10; @@ -104,14 +106,14 @@ var last_click = null; 104 106 105 107 var onClick = function(event) { 106 108 if (event.buttons & 1) {107 -1 var [frame_x, frame_y] = view.toFrameXY(event.offsetX, event.offsetY);-1 109 var [x, y] = view.toFrameXY(event.offsetX, event.offsetY); 108 110 109 111 if (last_click) {110 -1 frame.drawLine(last_click.x, last_click.y, frame_x, frame_y, pencil);-1 112 frame.drawLine(last_click.x, last_click.y, x, y, pencil); 111 113 } else {112 -1 frame.setPixel(frame_x, frame_y, pencil);-1 114 frame.setPixel(x, y, pencil); 113 115 }114 -1 last_click = {x: frame_x, y: frame_y};-1 116 last_click = {x: x, y: y}; 115 117 116 118 view.render(); 117 119 } else {
diff --git a/loader.js b/js/loader.js
diff --git a/utils.js b/js/utils.js
diff --git a/view.js b/js/view.js
@@ -22,6 +22,13 @@ export class View {
22 22 this.render();
23 23 }
24 24
-1 25 reset() {
-1 26 this.zoom = this.canvas.height / this.frame.canvas.height * 0.8;
-1 27 this.dx = (this.canvas.width - this.frame.canvas.width * this.zoom) / 2;
-1 28 this.dy = (this.canvas.height - this.frame.canvas.height * this.zoom) / 2;
-1 29 this.render();
-1 30 }
-1 31
25 32 toFrameXY(x, y) {
26 33 var frame_x = (x - this.dx) / this.zoom / this.frame.pxsize;
27 34 var frame_y = (y - this.dy) / this.zoom / this.frame.pxsize;