feat: Allow binding only via linear element ends (#7946)
Arrows now only bind to new shapes if their start or end point is dragged close to them. Arrows previously bound to shapes remain bound on move and drag if at the end of the drag/move the points remain in the original shapes' binding area. --------- Signed-off-by: Mark Tolmacs <mark@lazycat.hu> Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com> Co-authored-by: Sammy Lee <sammy.joe.lee@gmail.com>
This commit is contained in:
co-authored by
dwelle
Sammy Lee
parent
f79fb9aae2
commit
d9bbf1eda6
@@ -4014,12 +4014,18 @@ describe("history", () => {
|
||||
|
||||
const arrowId = h.elements[2].id;
|
||||
|
||||
// create binding
|
||||
// create start binding
|
||||
mouse.downAt(0, 0);
|
||||
mouse.moveTo(0, 1);
|
||||
mouse.moveTo(0, 0);
|
||||
mouse.up();
|
||||
|
||||
// create end binding
|
||||
mouse.downAt(100, 0);
|
||||
mouse.moveTo(100, 1);
|
||||
mouse.moveTo(100, 0);
|
||||
mouse.up();
|
||||
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
@@ -4044,9 +4050,10 @@ describe("history", () => {
|
||||
}),
|
||||
]);
|
||||
|
||||
Keyboard.undo();
|
||||
Keyboard.undo(); // undo start binding
|
||||
Keyboard.undo(); // undo end binding
|
||||
expect(API.getUndoStack().length).toBe(2);
|
||||
expect(API.getRedoStack().length).toBe(1);
|
||||
expect(API.getRedoStack().length).toBe(2);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
@@ -4081,7 +4088,8 @@ describe("history", () => {
|
||||
|
||||
runTwice(() => {
|
||||
Keyboard.redo();
|
||||
expect(API.getUndoStack().length).toBe(3);
|
||||
Keyboard.redo();
|
||||
expect(API.getUndoStack().length).toBe(4);
|
||||
expect(API.getRedoStack().length).toBe(0);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
@@ -4107,9 +4115,10 @@ describe("history", () => {
|
||||
}),
|
||||
]);
|
||||
|
||||
Keyboard.undo();
|
||||
Keyboard.undo();
|
||||
expect(API.getUndoStack().length).toBe(2);
|
||||
expect(API.getRedoStack().length).toBe(1);
|
||||
expect(API.getRedoStack().length).toBe(2);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
@@ -4135,11 +4144,16 @@ describe("history", () => {
|
||||
|
||||
const arrowId = h.elements[2].id;
|
||||
|
||||
// create binding
|
||||
// create start binding
|
||||
mouse.downAt(0, 0);
|
||||
mouse.moveTo(0, 1);
|
||||
mouse.upAt(0, 0);
|
||||
|
||||
// create end binding
|
||||
mouse.downAt(100, 0);
|
||||
mouse.moveTo(100, 1);
|
||||
mouse.upAt(100, 0);
|
||||
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
@@ -4164,9 +4178,10 @@ describe("history", () => {
|
||||
}),
|
||||
]);
|
||||
|
||||
Keyboard.undo();
|
||||
Keyboard.undo();
|
||||
expect(API.getUndoStack().length).toBe(2);
|
||||
expect(API.getRedoStack().length).toBe(1);
|
||||
expect(API.getRedoStack().length).toBe(2);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
@@ -4202,7 +4217,8 @@ describe("history", () => {
|
||||
|
||||
runTwice(() => {
|
||||
Keyboard.redo();
|
||||
expect(API.getUndoStack().length).toBe(3);
|
||||
Keyboard.redo();
|
||||
expect(API.getUndoStack().length).toBe(4);
|
||||
expect(API.getRedoStack().length).toBe(0);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
@@ -4233,9 +4249,10 @@ describe("history", () => {
|
||||
}),
|
||||
]);
|
||||
|
||||
Keyboard.undo();
|
||||
Keyboard.undo();
|
||||
expect(API.getUndoStack().length).toBe(2);
|
||||
expect(API.getRedoStack().length).toBe(1);
|
||||
expect(API.getRedoStack().length).toBe(2);
|
||||
expect(h.elements).toEqual([
|
||||
expect.objectContaining({
|
||||
id: rect1.id,
|
||||
|
||||
Reference in New Issue
Block a user