Spaces:
Runtime error
Runtime error
| export function createNotebook(canvas) { | |
| const context = canvas.getContext("2d"); | |
| let drawing = false; | |
| let used = false; | |
| let lastPoint = null; | |
| function clear() { | |
| used = false; | |
| context.fillStyle = "#fffdf4"; | |
| context.fillRect(0, 0, canvas.width, canvas.height); | |
| context.strokeStyle = "#c9d9df"; | |
| context.lineWidth = 2; | |
| for (let y = 42; y < canvas.height; y += 42) { | |
| context.beginPath(); | |
| context.moveTo(0, y); | |
| context.lineTo(canvas.width, y); | |
| context.stroke(); | |
| } | |
| context.strokeStyle = "#e87b72"; | |
| context.beginPath(); | |
| context.moveTo(70, 0); | |
| context.lineTo(70, canvas.height); | |
| context.stroke(); | |
| } | |
| function point(event) { | |
| const rect = canvas.getBoundingClientRect(); | |
| return { | |
| x: ((event.clientX - rect.left) / rect.width) * canvas.width, | |
| y: ((event.clientY - rect.top) / rect.height) * canvas.height, | |
| }; | |
| } | |
| canvas.addEventListener("pointerdown", (event) => { | |
| drawing = true; | |
| used = true; | |
| lastPoint = point(event); | |
| canvas.setPointerCapture?.(event.pointerId); | |
| }); | |
| canvas.addEventListener("pointermove", (event) => { | |
| if (!drawing || !lastPoint) return; | |
| const next = point(event); | |
| context.strokeStyle = "#17202a"; | |
| context.lineWidth = 12; | |
| context.lineCap = "round"; | |
| context.lineJoin = "round"; | |
| context.beginPath(); | |
| context.moveTo(lastPoint.x, lastPoint.y); | |
| context.lineTo(next.x, next.y); | |
| context.stroke(); | |
| lastPoint = next; | |
| }); | |
| const stop = () => { drawing = false; lastPoint = null; }; | |
| canvas.addEventListener("pointerup", stop); | |
| canvas.addEventListener("pointercancel", stop); | |
| clear(); | |
| return { | |
| clear, | |
| toDataUrlIfUsed: () => (used ? canvas.toDataURL("image/png") : null), | |
| }; | |
| } | |