Basic drawing
This commit is contained in:
parent
fbcac3646d
commit
c79c0a84b3
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,3 +4,5 @@
|
|||||||
*.sass.map
|
*.sass.map
|
||||||
*.scss.map
|
*.scss.map
|
||||||
|
|
||||||
|
test/
|
||||||
|
dprint.json
|
||||||
|
|||||||
91
app.js
Normal file
91
app.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
const canvas = document.getElementById("canvas");
|
||||||
|
const ctx = canvas.getContext("2d");
|
||||||
|
|
||||||
|
const widthInput = document.getElementById("width");
|
||||||
|
const heightInput = document.getElementById("height");
|
||||||
|
const resizeButton = document.getElementById("resize");
|
||||||
|
|
||||||
|
const colorInput = document.getElementById("color");
|
||||||
|
const brushInput = document.getElementById("brush");
|
||||||
|
|
||||||
|
let color = colorInput.value;
|
||||||
|
let size = Number(brushInput.value);
|
||||||
|
let painting = false;
|
||||||
|
|
||||||
|
function resize() {
|
||||||
|
canvas.width = Number(widthInput.value);
|
||||||
|
canvas.height = Number(heightInput.value);
|
||||||
|
|
||||||
|
ctx.fillStyle = "#ffffff";
|
||||||
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
function wrap(value, size) {
|
||||||
|
return ((value % size) + size) % size;
|
||||||
|
}
|
||||||
|
|
||||||
|
function paint(x, y) {
|
||||||
|
x = wrap(x, canvas.width);
|
||||||
|
y = wrap(y, canvas.height);
|
||||||
|
|
||||||
|
const radius = size / 2;
|
||||||
|
|
||||||
|
ctx.fillStyle = color;
|
||||||
|
|
||||||
|
for (const dx of [-canvas.width, 0, canvas.width]) {
|
||||||
|
for (const dy of [-canvas.height, 0, canvas.height]) {
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(x + dx, y + dy, radius, 0, Math.PI * 2);
|
||||||
|
ctx.fill();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function pointerPosition(event) {
|
||||||
|
const rect = canvas.getBoundingClientRect();
|
||||||
|
|
||||||
|
return {
|
||||||
|
x: (event.clientX - rect.left) * canvas.width / rect.width,
|
||||||
|
y: (event.clientY - rect.top) * canvas.height / rect.height,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas.addEventListener("pointerdown", event => {
|
||||||
|
painting = true;
|
||||||
|
canvas.setPointerCapture(event.pointerId);
|
||||||
|
|
||||||
|
const { x, y } = pointerPosition(event);
|
||||||
|
paint(x, y);
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.addEventListener("pointermove", event => {
|
||||||
|
if (!painting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const { x, y } = pointerPosition(event);
|
||||||
|
paint(x, y);
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.addEventListener("pointerup", event => {
|
||||||
|
painting = false;
|
||||||
|
canvas.releasePointerCapture(event.pointerId);
|
||||||
|
});
|
||||||
|
|
||||||
|
canvas.addEventListener("pointercancel", () => {
|
||||||
|
painting = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
colorInput.addEventListener("input", () => {
|
||||||
|
color = colorInput.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
brushInput.addEventListener("input", () => {
|
||||||
|
if (brushInput.value < 1)
|
||||||
|
brushInput.value = 1;
|
||||||
|
|
||||||
|
size = Number(brushInput.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
resizeButton.addEventListener("click", resize);
|
||||||
|
|
||||||
|
resize();
|
||||||
40
index.html
Normal file
40
index.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Tile Painter</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
Width
|
||||||
|
<input id="width" type="number" value="512" min="1">
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<label>
|
||||||
|
Height
|
||||||
|
<input id="height" type="number" value="512" min="1">
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<button id="resize">Resize</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
Color
|
||||||
|
<input id="color" type="color" value="#000000">
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<label>
|
||||||
|
Brush
|
||||||
|
<input id="brush" type="number" min="1" value="32">
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<canvas id="canvas"></canvas>
|
||||||
|
|
||||||
|
<script src="app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
x
Reference in New Issue
Block a user