diff --git a/components/canvas/RealtimeCanvasDialog.tsx b/components/canvas/RealtimeCanvasDialog.tsx index 579579af1..c8824ea11 100644 --- a/components/canvas/RealtimeCanvasDialog.tsx +++ b/components/canvas/RealtimeCanvasDialog.tsx @@ -13,7 +13,6 @@ import { Save, Send, Slash, - SlidersHorizontal, Sparkles, Square, Undo2, @@ -776,6 +775,8 @@ export function RealtimeCanvasDialog({ const [projectPanelOpen, setProjectPanelOpen] = useState(false); const [saveProjectDialogOpen, setSaveProjectDialogOpen] = useState(false); const [pendingProjectName, setPendingProjectName] = useState(""); + const [brushPopoverOpen, setBrushPopoverOpen] = useState(false); + const [eraserPopoverOpen, setEraserPopoverOpen] = useState(false); const [isDragImportActive, setIsDragImportActive] = useState(false); const [adaptiveThrottleMs, setAdaptiveThrottleMs] = useState( defaultRealtimeConfig.transport.throttleInterval @@ -2664,10 +2665,45 @@ export function RealtimeCanvasDialog({ onOpenChange(false); }, [onOpenChange, standalone]); + const closeBrushSettingPopovers = useCallback(() => { + setBrushPopoverOpen(false); + setEraserPopoverOpen(false); + }, []); + + const activateSelectMode = useCallback(() => { + setSelectedLayerId(DRAW_LAYER_ID); + setBrushMode("select"); + closeBrushSettingPopovers(); + }, [closeBrushSettingPopovers]); + + const activateBrushMode = useCallback(() => { + setSelectedLayerId(DRAW_LAYER_ID); + setBrushMode("brush"); + setEraserPopoverOpen(false); + setBrushPopoverOpen(true); + }, []); + + const activateEraserMode = useCallback(() => { + setSelectedLayerId(DRAW_LAYER_ID); + setBrushMode("eraser"); + setBrushPopoverOpen(false); + setEraserPopoverOpen(true); + }, []); + + const activateShapeMode = useCallback( + (mode: Extract) => { + setSelectedLayerId(DRAW_LAYER_ID); + setBrushMode(mode); + closeBrushSettingPopovers(); + }, + [closeBrushSettingPopovers] + ); + const startBlankProject = useCallback(() => { setPrompt(""); setPreviewUrl(""); setProjectPanelOpen(false); + closeBrushSettingPopovers(); setSelectedLayerId(DRAW_LAYER_ID); drawingHasContentRef.current = false; hasLoadedInitialImageRef.current = true; @@ -2677,12 +2713,12 @@ export function RealtimeCanvasDialog({ dirtyRegionRef.current = null; setStatus("idle"); setStatusMessage("新建空白项目"); - }, [clearPreviewCanvas, resetCanvas]); + }, [clearPreviewCanvas, closeBrushSettingPopovers, resetCanvas]); const compactToolButtonClass = "h-9 w-9 rounded-[16px] text-muted-foreground transition hover:bg-accent hover:text-foreground"; const compactToolButtonActiveClass = - "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground"; + "bg-black text-white hover:bg-black hover:text-white"; const currentModeLabel = brushMode === "select" ? "鼠标" @@ -2840,11 +2876,11 @@ export function RealtimeCanvasDialog({ ) : ( savedProjects.map((project) => (
-
-
+
+
{project.coverImageUrl || project.previewUrl ? ( {project.name} )}
-
-
+
+
{project.name}
+
+ + +
-
- - -
)) )} @@ -3133,10 +3169,7 @@ export function RealtimeCanvasDialog({ compactToolButtonClass, brushMode === "select" && compactToolButtonActiveClass )} - onClick={() => { - setSelectedLayerId(DRAW_LAYER_ID); - setBrushMode("select"); - }} + onClick={activateSelectMode} size="icon" type="button" variant="ghost" @@ -3152,144 +3185,20 @@ export function RealtimeCanvasDialog({ - - - - -
画笔
-
- 在画布上自由绘制 -
-
-
- - - - - -
橡皮
-
- 擦除当前草图笔触 -
-
-
- - + - - - -
- 形状工具 -
-
- - - -
-
-
- -
形状
-
- 矩形、圆形与直线 -
-
-
- - - - - - @@ -3331,7 +3240,7 @@ export function RealtimeCanvasDialog({ max={50} min={2} onValueChange={([val]) => setBrushSize(val)} - rangeClassName="bg-primary" + rangeClassName="bg-black" step={1} thumbClassName="h-5 w-5 border border-border bg-background shadow-sm" trackClassName="h-2.5 bg-muted shadow-inner" @@ -3342,9 +3251,124 @@ export function RealtimeCanvasDialog({ -
画笔设置
+
画笔
- 调整颜色和粗细 + 点击后直接调整颜色和粗细 +
+
+
+ + + + + + + + +
+
+ 橡皮粗细 + + {brushSize} + +
+ setBrushSize(val)} + rangeClassName="bg-black" + step={1} + thumbClassName="h-5 w-5 border border-border bg-background shadow-sm" + trackClassName="h-2.5 bg-muted shadow-inner" + value={[brushSize]} + /> +
+
+
+ +
橡皮
+
+ 点击后直接调整橡皮粗细 +
+
+
+ + + + + + + + +
+ 形状工具 +
+
+ + + +
+
+
+ +
形状
+
+ 矩形、圆形与直线