feat: allow inner-drag-selecting with cmd/ctrl (#3603)

* feat: allow inner-drag-selecting with cmd/ctrl

* don't use  cursor when pressing cmd/ctrl

* ensure we reset deselected groups

* add tests

* add docs

* couple fixes around group selection
This commit is contained in:
David Luzar
2021-05-20 22:28:34 +02:00
committed by GitHub
parent f4e10c93e1
commit 6d40039f08
6 changed files with 228 additions and 20 deletions

View File

@ -57,6 +57,7 @@ export class API {
width = 100,
height = width,
isDeleted = false,
groupIds = [],
...rest
}: {
type: T;
@ -66,6 +67,7 @@ export class API {
width?: number;
id?: string;
isDeleted?: boolean;
groupIds?: string[];
// generic element props
strokeColor?: ExcalidrawGenericElement["strokeColor"];
backgroundColor?: ExcalidrawGenericElement["backgroundColor"];
@ -152,6 +154,9 @@ export class API {
if (isDeleted) {
element.isDeleted = isDeleted;
}
if (groupIds) {
element.groupIds = groupIds;
}
return element as any;
};

View File

@ -122,6 +122,9 @@ export class Pointer {
};
}
// incremental (moving by deltas)
// ---------------------------------------------------------------------------
move(dx: number, dy: number) {
if (dx !== 0 || dy !== 0) {
this.clientX += dx;
@ -150,6 +153,39 @@ export class Pointer {
fireEvent.doubleClick(GlobalTestState.canvas, this.getEvent());
}
// absolute coords
// ---------------------------------------------------------------------------
moveTo(x: number, y: number) {
this.clientX = x;
this.clientY = y;
fireEvent.pointerMove(GlobalTestState.canvas, this.getEvent());
}
downAt(x = this.clientX, y = this.clientY) {
this.clientX = x;
this.clientY = y;
fireEvent.pointerDown(GlobalTestState.canvas, this.getEvent());
}
upAt(x = this.clientX, y = this.clientY) {
this.clientX = x;
this.clientY = y;
fireEvent.pointerUp(GlobalTestState.canvas, this.getEvent());
}
clickAt(x: number, y: number) {
this.downAt(x, y);
this.upAt();
}
doubleClickAt(x: number, y: number) {
this.moveTo(x, y);
fireEvent.doubleClick(GlobalTestState.canvas, this.getEvent());
}
// ---------------------------------------------------------------------------
select(
/** if multiple elements supplied, they're shift-selected */
elements: ExcalidrawElement | ExcalidrawElement[],