From 9def12cad90dbe341a99fa7a3026911df2e2b6f5 Mon Sep 17 00:00:00 2001 From: sfja Date: Wed, 10 Jun 2026 02:54:59 +0200 Subject: [PATCH] refactor to use new events --- editor/src/Canvas.tsx | 12 +- editor/src/Toolbar.tsx | 22 +-- editor/src/editor/Cx.ts | 80 ++++----- editor/src/editor/Editor.ts | 47 +---- editor/src/editor/Mouse.ts | 19 +- editor/src/editor/V2.ts | 4 + editor/src/editor/events.ts | 3 +- editor/src/editor/states.ts | 348 +++++++++++++++++++++++------------- 8 files changed, 279 insertions(+), 256 deletions(-) diff --git a/editor/src/Canvas.tsx b/editor/src/Canvas.tsx index 5fe1a3d..698ac13 100644 --- a/editor/src/Canvas.tsx +++ b/editor/src/Canvas.tsx @@ -27,30 +27,30 @@ function Canvas({ editor, canvasRef, width, height }: Props): ReactElement { tabIndex={0} onMouseDown={(ev) => { const pos = v2(ev.nativeEvent.offsetX, ev.nativeEvent.offsetY); - editor.mouseDown(pos); + editor.events.send({ tag: "MouseDown", pos }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} onMouseUp={(ev) => { const pos = v2(ev.nativeEvent.offsetX, ev.nativeEvent.offsetY); - editor.mouseUp(pos); + editor.events.send({ tag: "MouseUp", pos }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} onMouseMove={(ev) => { const deltaPos = v2(ev.movementX, ev.movementY); const pos = v2(ev.nativeEvent.offsetX, ev.nativeEvent.offsetY); - editor.mouseMove(deltaPos, pos); + editor.events.send({ tag: "MouseMove", pos, deltaPos }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} onMouseLeave={(ev) => { - editor.mouseLeave(); + editor.events.send({ tag: "MouseLeave" }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} onKeyDown={(ev) => { - editor.keyDown(ev.key); + editor.events.send({ tag: "KeyDown", key: ev.key }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} onKeyUp={(ev) => { - editor.keyUp(ev.key); + editor.events.send({ tag: "KeyUp", key: ev.key }); editor.renderIfNeeded(ev.target as HTMLCanvasElement); }} /> diff --git a/editor/src/Toolbar.tsx b/editor/src/Toolbar.tsx index 3930f9a..02b97c3 100644 --- a/editor/src/Toolbar.tsx +++ b/editor/src/Toolbar.tsx @@ -3,28 +3,24 @@ import type { Editor } from "./editor/Editor"; type Props = { editor: Editor; canvasRef: RefObject }; -function useUpdate(): [number, () => void] { - const [value, setValue] = useState(0); - return [value, () => setValue(value + 1)] as const; -} - function Toolbar({ editor, canvasRef }: Props): ReactElement { - const [uid, update] = useUpdate(); + const [selectedTool, setSelectedTool] = useState("select"); - useEffect(() => { - const handle = editor.addUpdateAction(() => update()); - return () => editor.removeUpdateAction(handle); - }); + useEffect(() => + editor.events.subscribe(["ShowSelectedTool"], (ev) => { + setSelectedTool(ev.tool); + }), + ); return ( <>
{editor.tools().map((tool, key) => (