From f472f0361617d77cd24cce45dd9258d5c17c06da Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Sat, 18 Apr 2020 18:54:13 +1000 Subject: [PATCH] Removed twojs as I wasnt really using it anyway --- package.json | 1 - src/components/MapDrawing.js | 90 +++++++++++++++++------------------- yarn.lock | 5 -- 3 files changed, 43 insertions(+), 53 deletions(-) diff --git a/package.json b/package.json index b2917e3..5ad9479 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "simplebar-react": "^2.1.0", "socket.io-client": "^2.3.0", "theme-ui": "^0.3.1", - "two.js": "^0.7.0-stable.1", "webrtc-adapter": "^7.5.1" }, "scripts": { diff --git a/src/components/MapDrawing.js b/src/components/MapDrawing.js index cf0c066..bab7ec7 100644 --- a/src/components/MapDrawing.js +++ b/src/components/MapDrawing.js @@ -1,30 +1,10 @@ -import React, { useRef, useEffect } from "react"; -import Two from "two.js"; +import React, { useRef, useEffect, useState } from "react"; function MapDrawing({ width, height }) { - const twoRef = useRef(new Two({ type: Two.Types.canvas })); + const canvasRef = useRef(); const containerRef = useRef(); - useEffect(() => { - const two = twoRef.current; - const container = containerRef.current; - if (two && container) { - two.width = width; - two.height = height; - two.update(); - // Force the canvas to be 100% after update - const canvas = container.firstChild; - if (canvas) { - canvas.style.width = "100%"; - canvas.style.height = "100%"; - } - } - }, [width, height]); - - useEffect(() => { - const two = twoRef.current; - two.appendTo(containerRef.current); - }, []); + const [shapes, setShapes] = useState([]); function getMousePosition(event) { const container = containerRef.current; @@ -32,42 +12,51 @@ function MapDrawing({ width, height }) { const containerRect = container.getBoundingClientRect(); const x = (event.clientX - containerRect.x) / containerRect.width; const y = (event.clientY - containerRect.y) / containerRect.height; - let v = new Two.Vector(x * width, y * height); - v.position = new Two.Vector().copy(v); - return v; + return { x: x * width, y: y * height }; } } - const mouseDownRef = useRef(false); - const shapeRef = useRef(); + const [isMouseDown, setIsMouseDown] = useState(false); function handleMouseDown(event) { - const two = twoRef.current; - if (two) { - mouseDownRef.current = true; - let position = getMousePosition(event); - let shape = two.makePath([position], false); - shape.fill = "#333"; - shape.stroke = "#333"; - shape.linewidth = 5; - shape.vertices[0].addSelf(shape.translation); - shape.translation.clear(); - shapeRef.current = shape; - } + setIsMouseDown(true); + const position = getMousePosition(event); + setShapes((prevShapes) => [...prevShapes, { points: [position] }]); } function handleMouseMove(event) { - const shape = shapeRef.current; - const two = twoRef.current; - if (mouseDownRef.current && shape && two) { - shape.vertices.push(getMousePosition(event)); - two.render(); + if (isMouseDown) { + const position = getMousePosition(event); + setShapes((prevShapes) => { + const currentShape = prevShapes.slice(-1)[0]; + const otherShapes = prevShapes.slice(0, -1); + return [...otherShapes, { points: [...currentShape.points, position] }]; + }); } } function handleMouseUp(event) { - mouseDownRef.current = false; + setIsMouseDown(false); } + useEffect(() => { + const canvas = canvasRef.current; + if (canvas) { + const context = canvas.getContext("2d"); + + context.clearRect(0, 0, width, height); + for (let shape of shapes) { + context.beginPath(); + context.moveTo(shape.points[0].x, shape.points[0].y); + for (let point of shape.points.slice(1)) { + context.lineTo(point.x, point.y); + } + context.closePath(); + context.stroke(); + context.fill(); + } + } + }, [shapes, width, height]); + return (
+ > + +
); } diff --git a/yarn.lock b/yarn.lock index b48d33b..39e614d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10770,11 +10770,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -two.js@^0.7.0-stable.1: - version "0.7.0-stable.1" - resolved "https://registry.yarnpkg.com/two.js/-/two.js-0.7.0-stable.1.tgz#4999070a566c3ab1b2ba980134d0d786b46ce2db" - integrity sha512-4QULPtstGEyGbhMvVvCGxgm85Un6CMYqFYafw7hNan9LdqoYZqMnxsaj8pkfBT4zpRfqB98aZjGrWYoCBqKtXA== - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"