mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Allow to drag THEN press alt to duplicate (#1373)
* fix typo * duplicate elements when alt is pressed on pointer move * document use case Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
parent
5ca763cdbb
commit
f3ef93e9ce
5 changed files with 68 additions and 50 deletions
|
@ -6,16 +6,16 @@ Object {
|
|||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"height": 50,
|
||||
"id": "id1",
|
||||
"id": "id2",
|
||||
"isDeleted": false,
|
||||
"opacity": 100,
|
||||
"roughness": 1,
|
||||
"seed": 453191,
|
||||
"seed": 2019559783,
|
||||
"strokeColor": "#000000",
|
||||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 2,
|
||||
"versionNonce": 1278240551,
|
||||
"version": 4,
|
||||
"versionNonce": 1150084233,
|
||||
"width": 30,
|
||||
"x": 30,
|
||||
"y": 20,
|
||||
|
@ -36,11 +36,11 @@ Object {
|
|||
"strokeColor": "#000000",
|
||||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 3,
|
||||
"versionNonce": 2019559783,
|
||||
"version": 5,
|
||||
"versionNonce": 1014066025,
|
||||
"width": 30,
|
||||
"x": 0,
|
||||
"y": 40,
|
||||
"x": -10,
|
||||
"y": 60,
|
||||
}
|
||||
`;
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ Object {
|
|||
"scrolledOutside": false,
|
||||
"selectedElementIds": Object {
|
||||
"id0": true,
|
||||
"id2": true,
|
||||
"id1": true,
|
||||
},
|
||||
"selectionElement": null,
|
||||
"shouldCacheIgnoreZoom": false,
|
||||
|
@ -51,16 +51,16 @@ Object {
|
|||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"height": 10,
|
||||
"id": "id1",
|
||||
"id": "id2",
|
||||
"isDeleted": false,
|
||||
"opacity": 100,
|
||||
"roughness": 1,
|
||||
"seed": 453191,
|
||||
"seed": 2019559783,
|
||||
"strokeColor": "#000000",
|
||||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 2,
|
||||
"versionNonce": 1278240551,
|
||||
"version": 4,
|
||||
"versionNonce": 1150084233,
|
||||
"width": 10,
|
||||
"x": 10,
|
||||
"y": 10,
|
||||
|
@ -82,7 +82,7 @@ Object {
|
|||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 3,
|
||||
"versionNonce": 2019559783,
|
||||
"versionNonce": 401146281,
|
||||
"width": 10,
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
|
@ -147,7 +147,7 @@ Object {
|
|||
"name": "Untitled-201933152653",
|
||||
"selectedElementIds": Object {
|
||||
"id0": true,
|
||||
"id2": true,
|
||||
"id1": true,
|
||||
},
|
||||
"viewBackgroundColor": "#ffffff",
|
||||
},
|
||||
|
@ -157,16 +157,16 @@ Object {
|
|||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"height": 10,
|
||||
"id": "id1",
|
||||
"id": "id2",
|
||||
"isDeleted": false,
|
||||
"opacity": 100,
|
||||
"roughness": 1,
|
||||
"seed": 453191,
|
||||
"seed": 2019559783,
|
||||
"strokeColor": "#000000",
|
||||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 3,
|
||||
"versionNonce": 1278240551,
|
||||
"version": 5,
|
||||
"versionNonce": 1150084233,
|
||||
"width": 10,
|
||||
"x": 10,
|
||||
"y": 10,
|
||||
|
@ -185,7 +185,7 @@ Object {
|
|||
"strokeWidth": 1,
|
||||
"type": "rectangle",
|
||||
"version": 4,
|
||||
"versionNonce": 2019559783,
|
||||
"versionNonce": 401146281,
|
||||
"width": 10,
|
||||
"x": 20,
|
||||
"y": 20,
|
||||
|
|
|
@ -74,17 +74,22 @@ describe("duplicate element on move when ALT is clicked", () => {
|
|||
renderScene.mockClear();
|
||||
}
|
||||
|
||||
fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20, altKey: true });
|
||||
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40 });
|
||||
fireEvent.pointerDown(canvas, { clientX: 50, clientY: 20 });
|
||||
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40, altKey: true });
|
||||
|
||||
// firing another pointerMove event with alt key pressed should NOT trigger
|
||||
// another duplication
|
||||
fireEvent.pointerMove(canvas, { clientX: 20, clientY: 40, altKey: true });
|
||||
fireEvent.pointerMove(canvas, { clientX: 10, clientY: 60 });
|
||||
fireEvent.pointerUp(canvas);
|
||||
|
||||
expect(renderScene).toHaveBeenCalledTimes(3);
|
||||
expect(renderScene).toHaveBeenCalledTimes(5);
|
||||
expect(h.state.selectionElement).toBeNull();
|
||||
expect(h.elements.length).toEqual(2);
|
||||
|
||||
// previous element should stay intact
|
||||
expect([h.elements[0].x, h.elements[0].y]).toEqual([30, 20]);
|
||||
expect([h.elements[1].x, h.elements[1].y]).toEqual([0, 40]);
|
||||
expect([h.elements[1].x, h.elements[1].y]).toEqual([-10, 60]);
|
||||
|
||||
h.elements.forEach((element) => expect(element).toMatchSnapshot());
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue