diff --git a/static/canvas.html b/static/canvas.html index 5a36a46..3296512 100644 --- a/static/canvas.html +++ b/static/canvas.html @@ -18,16 +18,15 @@
+
+ +
- - -
-
- +
diff --git a/static/canvas.js b/static/canvas.js index 706bb94..19a5807 100644 --- a/static/canvas.js +++ b/static/canvas.js @@ -3,12 +3,18 @@ const ctx = canvas.getContext("2d"); const canvasSize = 500; const dataSize = 1000; -const gridCount = 10; let zoom = 1.0; -const centerPixel = getPixelSize() / 2; + +function getGridCount() { + return canvasSize / zoom; +} + +function getCenterPixel() { + return getPixelSize() / 2; +} function getPixelSize() { - return canvasSize / gridCount * zoom; + return canvasSize / getGridCount() * zoom; } canvas.width = canvasSize; @@ -20,18 +26,16 @@ function drawGrid() { } ctx.strokeStyle = '#000'; // Set grid line color ctx.lineWidth = 1; // Set grid line width - // Draw horizontal lines - for (let i = 0; i <= gridCount; i++) { + for (let i = 0; i <= getGridCount(); i++) { let y = i * getPixelSize(); ctx.beginPath(); ctx.moveTo(0, y); // Start the line at the left edge (x = 0) ctx.lineTo(canvasSize, y); // Draw to the right edge (x = canvasSize) ctx.stroke(); } - // Draw vertical lines - for (let i = 0; i <= gridCount; i++) { + for (let i = 0; i <= getGridCount(); i++) { let x = i * getPixelSize(); ctx.beginPath(); ctx.moveTo(x, 0); // Start the line at the top edge (y = 0) @@ -51,15 +55,15 @@ class Point { // Convert canvas position to data position canvasToData() { return new Point( - Math.round(this.x / canvasSize * gridCount), - Math.round(this.y / canvasSize * gridCount) + Math.round(this.x / canvasSize * getGridCount()), + Math.round(this.y / canvasSize * getGridCount()) ); } // Convert data position to canvas position dataToCanvas() { return new Point( - this.x / gridCount * canvasSize, - this.y / gridCount * canvasSize + this.x / getGridCount() * canvasSize, + this.y / getGridCount() * canvasSize ); } // Convert to array index @@ -87,14 +91,35 @@ class Point { } } -function draw(point) { +function draw(point, color) { point = point.canvasToData().dataToCanvas() + console.log(point.x + " " + point.y); + ctx.fillStyle = color; ctx.fillRect(point.x, point.y, getPixelSize(), getPixelSize()); } canvas.addEventListener("mousedown", (e) => { - let x = e.clientX - canvas.getBoundingClientRect().left - centerPixel; - let y = e.clientY - canvas.getBoundingClientRect().top - centerPixel; + let x = e.clientX - canvas.getBoundingClientRect().left - getCenterPixel(); + let y = e.clientY - canvas.getBoundingClientRect().top - getCenterPixel(); + let color = document.getElementById("stroke").value; let point = new Point(x, y) - draw(point); + draw(point, color); +}); + +document.getElementById("zoomIn").addEventListener("click", () => { + if (zoom < 100.0){ + zoom += 1.0; + } + console.log(zoom); + ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas + drawGrid(); // Redraw the grid with updated zoom +}); + +document.getElementById("zoomOut").addEventListener("click", () => { + if (zoom > 1.0){ + zoom -= 1.0; + } + console.log(zoom); + ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas + drawGrid(); // Redraw the grid with updated zoom });