| @@ -68,11 +68,18 @@ export default () => { | |||||
| const activeLayer = layers.find (l => l.id === activeLayerId) | const activeLayer = layers.find (l => l.id === activeLayerId) | ||||
| const handleMouseDown = (ev: Konva.KonvaEventObject<MouseEvent | TouchEvent>) => { | const handleMouseDown = (ev: Konva.KonvaEventObject<MouseEvent | TouchEvent>) => { | ||||
| const pos = ev.target.getStage ()?.getPointerPosition () | |||||
| if (!(pos) || !(activeLayer)) | |||||
| if (!(activeLayer)) | |||||
| return | return | ||||
| drawingRef.current = true | drawingRef.current = true | ||||
| updateActiveLayerHistory ([...activeLayer.history, activeLayer.lines]) | |||||
| updateActiveLayerFuture ([]) | |||||
| const pos = ev.target.getStage ()?.getPointerPosition () | |||||
| if (!(pos)) | |||||
| return | |||||
| const lines: Line[] = [ | const lines: Line[] = [ | ||||
| ...activeLayer.lines, | ...activeLayer.lines, | ||||
| { mode, | { mode, | ||||
| @@ -106,20 +113,20 @@ export default () => { | |||||
| if (!(activeLayer) || activeLayer.lines.length === 0) | if (!(activeLayer) || activeLayer.lines.length === 0) | ||||
| return | return | ||||
| const prev = activeLayer.lines.slice (0, -1) | |||||
| const popped = activeLayer.lines[activeLayer.lines.length - 1] | |||||
| updateActiveLayerHistory ([...activeLayer.history, activeLayer.lines]) | |||||
| updateActiveLayerFuture ([popped, ...activeLayer.future]) | |||||
| const prev = activeLayer.history[activeLayer.history.length - 1] | |||||
| updateActiveLayerFuture ([...activeLayer.future, activeLayer.lines]) | |||||
| updateActiveLayerLines (prev) | updateActiveLayerLines (prev) | ||||
| updateActiveLayerHistory (activeLayer.history.slice (0, -1)) | |||||
| } | } | ||||
| const handleRedo = () => { | const handleRedo = () => { | ||||
| if (!(activeLayer) || activeLayer.future.length === 0) | if (!(activeLayer) || activeLayer.future.length === 0) | ||||
| return | return | ||||
| const [redoStroke, ...rest] = activeLayer.future | |||||
| updateActiveLayerLines ([...activeLayer.lines, redoStroke]) | |||||
| updateActiveLayerFuture (rest) | |||||
| const next = activeLayer.future[activeLayer.future.length - 1] | |||||
| updateActiveLayerHistory ([...activeLayer.history, activeLayer.lines]) | |||||
| updateActiveLayerLines (next) | |||||
| updateActiveLayerFuture (activeLayer.future.slice (0, -1)) | |||||
| } | } | ||||
| const handleImportImage: ChangeEventHandler<HTMLInputElement> = ev => { | const handleImportImage: ChangeEventHandler<HTMLInputElement> = ev => { | ||||