diff --git a/src/app/page.tsx b/src/app/page.tsx index fcad6c9..f2af498 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,7 +2,7 @@ import React, { useState, useRef, ChangeEvent, DragEvent, useEffect, useMemo, useCallback } from 'react'; import Script from 'next/script'; -import ColorPalette from '../components/ColorPalette'; + // 导入像素化工具和类型 import { PixelationMode, @@ -79,19 +79,16 @@ const fullBeadPalette: PaletteColor[] = Object.entries(mardToHexMapping) }) .filter((color): color is PaletteColor => color !== null); -// ++ 添加透明键定义 ++ -const TRANSPARENT_KEY = 'ERASE'; - -// ++ 添加透明色数据 ++ -const transparentColorData: MappedPixel = { key: TRANSPARENT_KEY, color: '#FFFFFF', isExternal: true }; - // ++ Add definition for background color keys ++ // 1. 导入新组件 import PixelatedPreviewCanvas from '../components/PixelatedPreviewCanvas'; import GridTooltip from '../components/GridTooltip'; import CustomPaletteEditor from '../components/CustomPaletteEditor'; +import FloatingColorPalette from '../components/FloatingColorPalette'; +import FloatingToolbar from '../components/FloatingToolbar'; import { loadPaletteSelections, savePaletteSelections, presetToSelections, PaletteSelections } from '../utils/localStorageUtils'; +import { TRANSPARENT_KEY, transparentColorData } from '../utils/pixelEditingUtils'; // 1. 导入新的 DonationModal 组件 import DonationModal from '../components/DonationModal'; @@ -161,6 +158,9 @@ export default function Home() { // 新增:组件挂载状态 const [isMounted, setIsMounted] = useState(false); + // 新增:悬浮调色盘状态 + const [isFloatingPaletteOpen, setIsFloatingPaletteOpen] = useState(true); + const originalCanvasRef = useRef(null); const pixelatedCanvasRef = useRef(null); const fileInputRef = useRef(null); @@ -1810,78 +1810,28 @@ export default function Home() {
- {/* ++ RENDER Button/Palette ONLY in manual mode above canvas ++ */} + {/* ++ 手动编辑模式提示信息 ++ */} {isManualColoringMode && mappedPixelData && gridDimensions && ( - // Apply dark mode styles to manual mode container -
- {/* Finish Manual Coloring Button (already has distinct colors, maybe keep as is) */} - - {/* Color Palette (only in manual mode) */} -
-
- {/* Apply dark mode styles to the info box */} -
-
- {/* Icon color */} - - - - {/* Text color implicitly handled by parent */} - 选择颜色/橡皮擦/一键擦除,点击画布格子上色 -
- {/* Separator color */} - | -
- {/* Icon color */} - - - - {/* Text color implicitly handled by parent */} - 为避免误触,推荐使用电脑 -
- {/* Separator color */} - | -
- {/* Icon color */} - - - - {/* Text color implicitly handled by parent */} - Ctrl/Cmd+滚轮缩放 -
+
+
+
+
+ + + + 使用右上角悬浮调色盘进行上色操作 +
+ | +
+ + + + Ctrl/Cmd+滚轮缩放
- {/* ColorPalette component will need internal dark mode styles */} -
- )} {/* ++ End of RENDER Button/Palette ++ */} + )} {/* Canvas Preview Container */} {/* Apply dark mode styles */} @@ -2109,6 +2059,45 @@ export default function Home() { + {/* 悬浮工具栏 */} + setIsFloatingPaletteOpen(!isFloatingPaletteOpen)} + onExitManualMode={() => { + setIsManualColoringMode(false); + setSelectedColor(null); + setTooltipData(null); + setIsEraseMode(false); + setColorReplaceState({ + isActive: false, + step: 'select-source' + }); + setHighlightColorKey(null); + }} + /> + + {/* 悬浮调色盘 */} + {isManualColoringMode && ( + setIsFloatingPaletteOpen(!isFloatingPaletteOpen)} + /> + )} + {/* Apply dark mode styles to the Footer */}