From cf03e484e93421ab4b73848ceb4f05f3e47ae642 Mon Sep 17 00:00:00 2001 From: Owais Jamil Date: Tue, 23 Dec 2025 10:13:14 -0600 Subject: [PATCH] feat: color picking for pen --- .../web/src/lib/canvas/canvas-store.svelte.ts | 10 +++- .../src/lib/components/BrushPopover.svelte | 50 ++++++++++++++++--- apps/web/src/lib/components/Toolbar.svelte | 7 ++- apps/web/src/lib/status.ts | 25 +++++++--- .../src/lib/tests/BrushPopover.svelte.test.ts | 24 +++++++-- apps/web/src/lib/tests/Canvas.history.test.ts | 9 +++- .../web/src/lib/tests/Canvas.keyboard.test.ts | 9 +++- apps/web/src/lib/tests/Canvas.svelte.test.ts | 9 +++- packages/core/src/tools/pen.ts | 12 +++-- packages/core/tests/pen-tool.test.ts | 25 ++++++++++ 10 files changed, 148 insertions(+), 32 deletions(-) diff --git a/apps/web/src/lib/canvas/canvas-store.svelte.ts b/apps/web/src/lib/canvas/canvas-store.svelte.ts index a73df5c..e7bb202 100644 --- a/apps/web/src/lib/canvas/canvas-store.svelte.ts +++ b/apps/web/src/lib/canvas/canvas-store.svelte.ts @@ -123,7 +123,15 @@ export function createCanvasController(bindings: CanvasControllerBindings) { const lineTool = new LineTool(); const arrowTool = new ArrowTool(); const textTool = new TextTool(); - const penTool = new PenTool(() => brushStore.get()); + const getPenBrushConfig = () => { + const { color: _color, ...config } = brushStore.get(); + return config; + }; + const getPenStrokeStyle = () => { + const brush = brushStore.get(); + return { color: brush.color, opacity: 1 }; + }; + const penTool = new PenTool(getPenBrushConfig, getPenStrokeStyle); const tools = createToolMap([selectTool, rectTool, ellipseTool, lineTool, arrowTool, textTool, penTool]); const textEditor = new TextEditorController(store, getViewport, refreshCursor); diff --git a/apps/web/src/lib/components/BrushPopover.svelte b/apps/web/src/lib/components/BrushPopover.svelte index efe126b..5c55a53 100644 --- a/apps/web/src/lib/components/BrushPopover.svelte +++ b/apps/web/src/lib/components/BrushPopover.svelte @@ -1,9 +1,9 @@ @@ -181,6 +192,20 @@ aria-label="Brush streamline" /> +
+ + +
+