From 440f778bf364017ac7eaf60a39f0893eb2256a37 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 8 Mar 2026 01:55:53 +0800 Subject: [PATCH] polish realtime canvas controls --- components/canvas/RealtimeCanvasDialog.tsx | 38 +++++++++++++++++----- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/components/canvas/RealtimeCanvasDialog.tsx b/components/canvas/RealtimeCanvasDialog.tsx index 7f30eb1b7..45f820f53 100644 --- a/components/canvas/RealtimeCanvasDialog.tsx +++ b/components/canvas/RealtimeCanvasDialog.tsx @@ -26,6 +26,7 @@ import { Eraser, Layers3, Loader2, + MousePointer2, Paintbrush, Plus, Square, @@ -69,6 +70,7 @@ type RealtimeConfig = { }; type RealtimeStatus = "idle" | "connecting" | "live" | "error"; +type RealtimeBrushMode = "select" | "brush" | "eraser" | "rect" | "circle" | "line"; type ImageLayer = { id: string; @@ -160,7 +162,7 @@ const defaultRealtimeConfig: RealtimeConfig = { }, }; -function isShapeMode(mode: "brush" | "eraser" | "rect" | "circle" | "line") { +function isShapeMode(mode: RealtimeBrushMode) { return mode === "rect" || mode === "circle" || mode === "line"; } @@ -685,10 +687,10 @@ export function RealtimeCanvasDialog({ const [config, setConfig] = useState(defaultRealtimeConfig); const [status, setStatus] = useState("idle"); - const [statusMessage, setStatusMessage] = useState("等待连接"); + const [, setStatusMessage] = useState("等待连接"); const [prompt, setPrompt] = useState(FALLBACK_PROMPT); const [previewUrl, setPreviewUrl] = useState(""); - const [brushMode, setBrushMode] = useState<"brush" | "eraser" | "rect" | "circle" | "line">("brush"); + const [brushMode, setBrushMode] = useState("brush"); const [brushColor, setBrushColor] = useState(DEFAULT_BRUSH_COLOR); const [canvasBackground, setCanvasBackground] = useState(canvasBackgroundRef.current); const [imageLayers, setImageLayers] = useState([]); @@ -1734,6 +1736,12 @@ export function RealtimeCanvasDialog({ event.currentTarget.setPointerCapture(event.pointerId); return; } + if (brushMode === "select") { + setSelectedLayerId(DRAW_LAYER_ID); + lastPointRef.current = null; + shapeStartPointRef.current = null; + return; + } if (isShapeMode(brushMode)) { shapeStartPointRef.current = point; clearPreviewCanvas(); @@ -2347,6 +2355,21 @@ export function RealtimeCanvasDialog({
+