Text Available

This commit is contained in:
brausjonas
2023-07-06 23:47:37 +02:00
parent 8a5a825385
commit f9441c69b4
+38 -1
View File
@@ -15,6 +15,7 @@ let eraserColor = "rgb(255, 255, 255)"
let lastStrokeWidthPencil = 5, lastStrokeWidthEraser = 5, lastStrokeWidthRect = 5, lastStrokeWidthCircle = 5, lastStrokeWidthLine = 5 let lastStrokeWidthPencil = 5, lastStrokeWidthEraser = 5, lastStrokeWidthRect = 5, lastStrokeWidthCircle = 5, lastStrokeWidthLine = 5
let formAnchor = null; let formAnchor = null;
let textInput
export default function App() { export default function App() {
@@ -24,6 +25,7 @@ export default function App() {
clearScreen("rgb(255, 255, 255)") clearScreen("rgb(255, 255, 255)")
downLink = document.createElement("a") downLink = document.createElement("a")
downLink.className = "no-display" downLink.className = "no-display"
textInput = document.getElementById("textInput")
let hintCanvas = document.getElementById("hintCanvas") let hintCanvas = document.getElementById("hintCanvas")
hintContext = hintCanvas.getContext("2d") hintContext = hintCanvas.getContext("2d")
@@ -61,6 +63,9 @@ export default function App() {
const [colorValue, setColorValue] = useState("#000000") const [colorValue, setColorValue] = useState("#000000")
const [menuBarShown, setMenuBarShown] = useState(true) const [menuBarShown, setMenuBarShown] = useState(true)
const [selectedTool, setSelectedTool] = useState("pencil") const [selectedTool, setSelectedTool] = useState("pencil")
const [textInputX, setTextInputX] = useState(0)
const [textInputY, setTextInputY] = useState(0)
const [showTextInput, setShowTextInput] = useState(false)
class Position { class Position {
constructor(x, y) { constructor(x, y) {
@@ -77,6 +82,8 @@ export default function App() {
function handleMouseDownCanvas(e) { function handleMouseDownCanvas(e) {
mouseDownCanvas = true mouseDownCanvas = true
hintContext.clearRect(0, 0, 5000, 3000)
setShowTextInput(false)
context.fillStyle = selectedTool !== "eraser" ? colorValue : eraserColor context.fillStyle = selectedTool !== "eraser" ? colorValue : eraserColor
if (selectedTool === "pencil" || selectedTool === "eraser") { if (selectedTool === "pencil" || selectedTool === "eraser") {
context.beginPath() context.beginPath()
@@ -85,10 +92,21 @@ export default function App() {
lastMouse = Date.now() lastMouse = Date.now()
lastPositions.push(new Position(e.pageX, e.pageY)) lastPositions.push(new Position(e.pageX, e.pageY))
} else if (selectedTool === "rect" || selectedTool === "circle" || selectedTool === "selector" || selectedTool === "line") { } else {
formAnchor = new Position(e.pageX, e.pageY) formAnchor = new Position(e.pageX, e.pageY)
} }
if(selectedTool === "text") {
mouseDownCanvas = false
setTextInputX(e.pageX)
setTextInputY(e.pageY)
setShowTextInput(true)
hintContext.beginPath()
hintContext.fillStyle = "black"
hintContext.arc(e.pageX, e.pageY, 5, 0, 2*Math.PI, false)
hintContext.fill()
}
} }
function handleMouseUpCanvas(e) { function handleMouseUpCanvas(e) {
@@ -234,6 +252,25 @@ export default function App() {
> >
</canvas> </canvas>
<input autoFocus={true} id={"textInput"} type={"text"} style={{
display: (showTextInput ? "block" : "none"),
position: "absolute",
top: textInputY,
left: textInputX,
fontSize: 25,
fontFamily: "serif"
}} onKeyDown={e => {
if(e.key === "Enter") {
mouseDownCanvas = false
context.font = "25px serif"
context.textAlign = "center"
context.fillText(textInput.value, formAnchor.x, formAnchor.y)
textInput.value = ""
setShowTextInput(false)
hintContext.clearRect(0, 0, 5000, 3000)
}
}}/>
<div id="menubar" style={{ <div id="menubar" style={{
position: "fixed", position: "fixed",
backgroundColor: "white", backgroundColor: "white",