feat: edit menu - cut and clear selection

This commit is contained in:
trafficlunar 2025-01-17 22:04:34 +00:00
parent 5b8a859f60
commit feb82f2b17
4 changed files with 54 additions and 3 deletions

View file

@ -30,7 +30,8 @@ function Canvas() {
const { settings } = useContext(SettingsContext);
const { missingTexture, solidTextures } = useContext(TexturesContext);
const { isDark } = useContext(ThemeContext);
const { tool, radius, selectedBlock, cssCursor, setTool, setSelectedBlock, setCssCursor } = useContext(ToolContext);
const { tool, radius, selectedBlock, selectionBoxBounds, cssCursor, setTool, setSelectedBlock, setSelectionBoxBounds, setCssCursor } =
useContext(ToolContext);
const textures = useTextures(version);
const stageContainerRef = useRef<HTMLDivElement>(null);
@ -42,7 +43,6 @@ function Canvas() {
const [holdingAlt, setHoldingAlt] = useState(false);
const [oldTool, setOldTool] = useState<Tool>("hand");
const [selectionBoxBounds, setSelectionBoxBounds] = useState<BoundingBox>({ minX: 0, minY: 0, maxX: 0, maxY: 0 });
const selectionBoxBoundsRef = useRef<BoundingBox>();
const visibleArea = useMemo(() => {

View file

@ -0,0 +1,33 @@
import { useContext } from "react";
import { CanvasContext } from "@/context/Canvas";
import { ToolContext } from "@/context/Tool";
import { MenubarContent, MenubarItem, MenubarMenu, MenubarSeparator, MenubarTrigger } from "@/components/ui/menubar";
function EditMenu() {
const { setBlocks } = useContext(CanvasContext);
const { selectionBoxBounds, setSelectionBoxBounds } = useContext(ToolContext);
const cut = () => {
setBlocks((prev) =>
prev.filter(
(b) => !(b.x >= selectionBoxBounds.minX && b.x < selectionBoxBounds.maxX && b.y >= selectionBoxBounds.minY && b.y < selectionBoxBounds.maxY)
)
);
};
return (
<MenubarMenu>
<MenubarTrigger>Edit</MenubarTrigger>
<MenubarContent>
<MenubarItem onClick={cut}>Cut</MenubarItem>
<MenubarSeparator />
<MenubarItem onClick={() => setSelectionBoxBounds({ minX: 0, minY: 0, maxX: 0, maxY: 0 })}>Clear Selection</MenubarItem>
</MenubarContent>
</MenubarMenu>
);
}
export default EditMenu;

View file

@ -7,6 +7,7 @@ import { ThemeContext } from "@/context/Theme";
import { Menubar as UIMenubar } from "@/components/ui/menubar";
import FileMenu from "./FileMenu";
import EditMenu from "./EditMenu";
import ViewMenu from "./ViewMenu";
import MoreMenu from "./MoreMenu";
@ -24,6 +25,7 @@ function Menubar() {
</Link>
<FileMenu />
<EditMenu />
<ViewMenu />
<MoreMenu />