feat: hold shift with magic wand tool to add to existing selection
This commit is contained in:
parent
2f8772769d
commit
1b379d80cc
1 changed files with 12 additions and 0 deletions
|
|
@ -43,6 +43,7 @@ function Canvas() {
|
||||||
const dragStartCoordsRef = useRef<Position>();
|
const dragStartCoordsRef = useRef<Position>();
|
||||||
|
|
||||||
const holdingAltRef = useRef(false);
|
const holdingAltRef = useRef(false);
|
||||||
|
const holdingShiftRef = useRef(false);
|
||||||
const oldToolRef = useRef<Tool>();
|
const oldToolRef = useRef<Tool>();
|
||||||
const selectionCoordsRef = useRef<CoordinateArray>(selectionCoords);
|
const selectionCoordsRef = useRef<CoordinateArray>(selectionCoords);
|
||||||
|
|
||||||
|
|
@ -339,6 +340,11 @@ function Canvas() {
|
||||||
if (holdingAltRef.current) {
|
if (holdingAltRef.current) {
|
||||||
// If holding alt, remove new magic wand selection
|
// If holding alt, remove new magic wand selection
|
||||||
return prev.filter(([x, y]) => !result.some(([x2, y2]) => x2 === x && y2 === y));
|
return prev.filter(([x, y]) => !result.some(([x2, y2]) => x2 === x && y2 === y));
|
||||||
|
} else if (holdingShiftRef.current) {
|
||||||
|
// If holding shift, add magic wand selection to existing selection
|
||||||
|
const existing = new Set(prev.map(([x, y]) => `${x},${y}`));
|
||||||
|
const newCoords = result.filter(([x, y]) => !existing.has(`${x},${y}`));
|
||||||
|
return [...prev, ...newCoords];
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not holding alt or shift, replace the existing selection with the magic wand selection
|
// If not holding alt or shift, replace the existing selection with the magic wand selection
|
||||||
|
|
@ -371,6 +377,9 @@ function Canvas() {
|
||||||
setTool("hand");
|
setTool("hand");
|
||||||
setCssCursor("grabbing");
|
setCssCursor("grabbing");
|
||||||
break;
|
break;
|
||||||
|
case "Shift":
|
||||||
|
holdingShiftRef.current = true;
|
||||||
|
break;
|
||||||
case "Alt":
|
case "Alt":
|
||||||
holdingAltRef.current = true;
|
holdingAltRef.current = true;
|
||||||
if (tool === "zoom") setCssCursor("zoom-out");
|
if (tool === "zoom") setCssCursor("zoom-out");
|
||||||
|
|
@ -417,6 +426,9 @@ function Canvas() {
|
||||||
setCssCursor("grab");
|
setCssCursor("grab");
|
||||||
setTool(oldToolRef.current);
|
setTool(oldToolRef.current);
|
||||||
break;
|
break;
|
||||||
|
case "Shift":
|
||||||
|
holdingShiftRef.current = false;
|
||||||
|
break;
|
||||||
case "Alt":
|
case "Alt":
|
||||||
holdingAltRef.current = false;
|
holdingAltRef.current = false;
|
||||||
setCssCursor("zoom-in");
|
setCssCursor("zoom-in");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue