tldraw
Version:
A tiny little drawing editor.
76 lines (75 loc) • 1.99 kB
JavaScript
import {
StateNode
} from "@tldraw/editor";
class Pointing extends StateNode {
static id = "pointing";
onEnter() {
const zoomLevel = this.editor.getZoomLevel();
const currentPageShapesSorted = this.editor.getCurrentPageRenderingShapesSorted();
const {
inputs: { currentPagePoint }
} = this.editor;
const erasing = /* @__PURE__ */ new Set();
const initialSize = erasing.size;
for (let n = currentPageShapesSorted.length, i = n - 1; i >= 0; i--) {
const shape = currentPageShapesSorted[i];
if (this.editor.isShapeOrAncestorLocked(shape) || this.editor.isShapeOfType(shape, "group")) {
continue;
}
if (this.editor.isPointInShape(shape, currentPagePoint, {
hitInside: false,
margin: this.editor.options.hitTestMargin / zoomLevel
})) {
const hitShape = this.editor.getOutermostSelectableShape(shape);
if (this.editor.isShapeOfType(hitShape, "frame") && erasing.size > initialSize) {
break;
}
erasing.add(hitShape.id);
}
}
this.editor.setErasingShapes([...erasing]);
}
onLongPress(info) {
this.startErasing(info);
}
onExit(_info, to) {
if (to !== "erasing") {
this.editor.setErasingShapes([]);
}
}
onPointerMove(info) {
if (this.editor.inputs.isDragging) {
this.startErasing(info);
}
}
onPointerUp() {
this.complete();
}
onCancel() {
this.cancel();
}
onComplete() {
this.complete();
}
onInterrupt() {
this.cancel();
}
startErasing(info) {
this.parent.transition("erasing", info);
}
complete() {
const erasingShapeIds = this.editor.getErasingShapeIds();
if (erasingShapeIds.length) {
this.editor.markHistoryStoppingPoint("erase end");
this.editor.deleteShapes(erasingShapeIds);
}
this.parent.transition("idle");
}
cancel() {
this.parent.transition("idle");
}
}
export {
Pointing
};
//# sourceMappingURL=Pointing.mjs.map