mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Another half of actionFinalize on arrow endpoint drag
This commit is contained in:
parent
64fa1c6948
commit
e51e72c676
2 changed files with 25 additions and 9 deletions
|
@ -17,6 +17,12 @@ import { isPathALoop } from "@excalidraw/element/shapes";
|
||||||
|
|
||||||
import { isInvisiblySmallElement } from "@excalidraw/element/sizeHelpers";
|
import { isInvisiblySmallElement } from "@excalidraw/element/sizeHelpers";
|
||||||
|
|
||||||
|
import type {
|
||||||
|
ExcalidrawElement,
|
||||||
|
ExcalidrawLinearElement,
|
||||||
|
NonDeleted,
|
||||||
|
} from "@excalidraw/element/types";
|
||||||
|
|
||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
import { resetCursor } from "../cursor";
|
import { resetCursor } from "../cursor";
|
||||||
import { done } from "../components/icons";
|
import { done } from "../components/icons";
|
||||||
|
@ -84,13 +90,22 @@ export const actionFinalize = register({
|
||||||
focusContainer();
|
focusContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
const element = appState.multiElement
|
let element: NonDeleted<ExcalidrawElement> | null = null;
|
||||||
? appState.multiElement
|
if (appState.multiElement) {
|
||||||
: appState.newElement?.type === "freedraw"
|
element = appState.multiElement;
|
||||||
? appState.newElement
|
} else if (
|
||||||
: isBindingElement(appState.newElement)
|
appState.newElement?.type === "freedraw" ||
|
||||||
? appState.newElement
|
isBindingElement(appState.newElement)
|
||||||
: null;
|
) {
|
||||||
|
element = appState.newElement;
|
||||||
|
} else if (Object.keys(appState.selectedElementIds).length === 1) {
|
||||||
|
const candidate = elementsMap.get(
|
||||||
|
Object.keys(appState.selectedElementIds)[0],
|
||||||
|
) as NonDeleted<ExcalidrawLinearElement> | undefined;
|
||||||
|
if (candidate) {
|
||||||
|
element = candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (element) {
|
if (element) {
|
||||||
// pen and mouse have hover
|
// pen and mouse have hover
|
||||||
|
@ -112,7 +127,7 @@ export const actionFinalize = register({
|
||||||
|
|
||||||
if (isInvisiblySmallElement(element)) {
|
if (isInvisiblySmallElement(element)) {
|
||||||
// TODO: #7348 in theory this gets recorded by the store, so the invisible elements could be restored by the undo/redo, which might be not what we would want
|
// TODO: #7348 in theory this gets recorded by the store, so the invisible elements could be restored by the undo/redo, which might be not what we would want
|
||||||
newElements = newElements.filter((el) => el.id !== element.id);
|
newElements = newElements.filter((el) => el.id !== element!.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the multi point line closes the loop,
|
// If the multi point line closes the loop,
|
||||||
|
|
|
@ -91,9 +91,10 @@ export function isPoint(p: unknown): p is LocalPoint | GlobalPoint {
|
||||||
export function pointsEqual<Point extends GlobalPoint | LocalPoint>(
|
export function pointsEqual<Point extends GlobalPoint | LocalPoint>(
|
||||||
a: Point,
|
a: Point,
|
||||||
b: Point,
|
b: Point,
|
||||||
|
threshold: number = PRECISION,
|
||||||
): boolean {
|
): boolean {
|
||||||
const abs = Math.abs;
|
const abs = Math.abs;
|
||||||
return abs(a[0] - b[0]) < PRECISION && abs(a[1] - b[1]) < PRECISION;
|
return abs(a[0] - b[0]) < threshold && abs(a[1] - b[1]) < threshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue