refactor: move cssCursor from context to canvas component

This commit is contained in:
trafficlunar 2025-01-29 21:04:07 +00:00
parent 8dd7fa684e
commit fd8f4aaca1
2 changed files with 16 additions and 17 deletions

View file

@ -38,7 +38,7 @@ function Canvas() {
const { settings } = useContext(SettingsContext);
const { missingTexture } = useContext(TexturesContext);
const { isDark } = useContext(ThemeContext);
const { tool, radius, selectedBlock, cssCursor, setTool, setSelectedBlock, setCssCursor } = useContext(ToolContext);
const { tool, radius, selectedBlock, setTool, setSelectedBlock } = useContext(ToolContext);
const textures = useTextures(version);
const blockData = useBlockData(version);
@ -53,6 +53,7 @@ function Canvas() {
const holdingAltRef = useRef(false);
const holdingShiftRef = useRef(false);
const oldToolRef = useRef<Tool>();
const [cssCursor, setCssCursor] = useState("crosshair");
const visibleArea = useMemo(() => {
const blockSize = 16 * scale;
@ -487,6 +488,18 @@ function Canvas() {
[setCssCursor, setTool]
);
// Tool cursor handler
useEffect(() => {
const cursorMapping: Partial<Record<Tool, string>> = {
hand: "grab",
move: "move",
zoom: "zoom-in",
};
setCssCursor(cursorMapping[tool] || "crosshair");
}, [tool]);
// Resize canvas handler
useEffect(() => {
const container = stageContainerRef.current;
if (!container) return;
@ -505,6 +518,7 @@ function Canvas() {
return () => resizeObserver.disconnect();
}, [stageContainerRef, setStageSize]);
// Window events handler
useEffect(() => {
window.addEventListener("keydown", onKeyDown);
window.addEventListener("keyup", onKeyUp);

View file

@ -1,14 +1,12 @@
import { createContext, ReactNode, useEffect, useState } from "react";
import { createContext, ReactNode, useState } from "react";
interface Context {
tool: Tool;
radius: number;
selectedBlock: string;
cssCursor: string;
setTool: React.Dispatch<React.SetStateAction<Tool>>;
setRadius: React.Dispatch<React.SetStateAction<number>>;
setSelectedBlock: React.Dispatch<React.SetStateAction<string>>;
setCssCursor: React.Dispatch<React.SetStateAction<string>>;
}
interface Props {
@ -21,17 +19,6 @@ export const ToolProvider = ({ children }: Props) => {
const [tool, setTool] = useState<Tool>("hand");
const [radius, setRadius] = useState(1);
const [selectedBlock, setSelectedBlock] = useState("stone");
const [cssCursor, setCssCursor] = useState("crosshair");
useEffect(() => {
const cursorMapping: Partial<Record<Tool, string>> = {
hand: "grab",
move: "move",
zoom: "zoom-in",
};
setCssCursor(cursorMapping[tool] || "crosshair");
}, [tool]);
return (
<ToolContext.Provider
@ -39,11 +26,9 @@ export const ToolProvider = ({ children }: Props) => {
tool,
radius,
selectedBlock,
cssCursor,
setTool,
setRadius,
setSelectedBlock,
setCssCursor,
}}
>
{children}