js-draw 0.18.2 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -0
- package/dist/cjs/src/Color4.d.ts +8 -0
- package/dist/cjs/src/Color4.js +67 -0
- package/dist/cjs/src/Editor.d.ts +2 -2
- package/dist/cjs/src/Editor.js +2 -2
- package/dist/cjs/src/SVGLoader.js +8 -5
- package/dist/cjs/src/components/AbstractComponent.d.ts +2 -2
- package/dist/cjs/src/components/AbstractComponent.js +3 -3
- package/dist/cjs/src/components/ImageBackground.js +1 -1
- package/dist/cjs/src/components/RestylableComponent.d.ts +21 -2
- package/dist/cjs/src/components/Stroke.d.ts +35 -0
- package/dist/cjs/src/components/Stroke.js +36 -2
- package/dist/cjs/src/components/TextComponent.d.ts +26 -4
- package/dist/cjs/src/components/TextComponent.js +22 -0
- package/dist/cjs/src/components/lib.d.ts +3 -2
- package/dist/cjs/src/lib.d.ts +30 -0
- package/dist/cjs/src/lib.js +30 -0
- package/dist/cjs/src/rendering/RenderingStyle.d.ts +4 -4
- package/dist/cjs/src/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/cjs/src/rendering/lib.d.ts +2 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
- package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
- package/dist/cjs/src/toolbar/IconProvider.d.ts +2 -2
- package/dist/cjs/src/toolbar/localization.js +1 -1
- package/dist/cjs/src/toolbar/widgets/BaseWidget.js +1 -1
- package/dist/cjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/cjs/src/tools/SoundUITool.js +164 -0
- package/dist/cjs/src/tools/TextTool.d.ts +2 -2
- package/dist/cjs/src/tools/ToolController.js +6 -1
- package/dist/cjs/src/tools/lib.d.ts +1 -0
- package/dist/cjs/src/tools/lib.js +3 -1
- package/dist/cjs/src/tools/localization.d.ts +3 -0
- package/dist/cjs/src/tools/localization.js +3 -0
- package/dist/mjs/src/Color4.d.ts +8 -0
- package/dist/mjs/src/Color4.mjs +64 -0
- package/dist/mjs/src/Editor.d.ts +2 -2
- package/dist/mjs/src/Editor.mjs +2 -2
- package/dist/mjs/src/SVGLoader.mjs +8 -5
- package/dist/mjs/src/components/AbstractComponent.d.ts +2 -2
- package/dist/mjs/src/components/AbstractComponent.mjs +3 -3
- package/dist/mjs/src/components/ImageBackground.mjs +1 -1
- package/dist/mjs/src/components/RestylableComponent.d.ts +21 -2
- package/dist/mjs/src/components/Stroke.d.ts +35 -0
- package/dist/mjs/src/components/Stroke.mjs +36 -2
- package/dist/mjs/src/components/TextComponent.d.ts +26 -4
- package/dist/mjs/src/components/TextComponent.mjs +22 -0
- package/dist/mjs/src/components/lib.d.ts +3 -2
- package/dist/mjs/src/lib.d.ts +30 -0
- package/dist/mjs/src/lib.mjs +30 -0
- package/dist/mjs/src/rendering/RenderingStyle.d.ts +4 -4
- package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +10 -10
- package/dist/mjs/src/rendering/lib.d.ts +2 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +2 -2
- package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +2 -2
- package/dist/mjs/src/toolbar/IconProvider.d.ts +2 -2
- package/dist/mjs/src/toolbar/localization.mjs +1 -1
- package/dist/mjs/src/toolbar/widgets/BaseWidget.mjs +1 -1
- package/dist/mjs/src/tools/SoundUITool.d.ts +24 -0
- package/dist/mjs/src/tools/SoundUITool.mjs +158 -0
- package/dist/mjs/src/tools/TextTool.d.ts +2 -2
- package/dist/mjs/src/tools/ToolController.mjs +6 -1
- package/dist/mjs/src/tools/lib.d.ts +1 -0
- package/dist/mjs/src/tools/lib.mjs +1 -0
- package/dist/mjs/src/tools/localization.d.ts +3 -0
- package/dist/mjs/src/tools/localization.mjs +3 -0
- package/package.json +6 -4
- package/src/Editor.css +2 -2
- package/src/tools/SoundUITool.css +15 -0
- package/src/tools/tools.css +4 -0
- package/src/Color4.test.ts +0 -40
- package/src/Color4.ts +0 -236
- package/src/Editor.loadFrom.test.ts +0 -24
- package/src/Editor.toSVG.test.ts +0 -111
- package/src/Editor.ts +0 -1122
- package/src/EditorImage.test.ts +0 -120
- package/src/EditorImage.ts +0 -603
- package/src/EventDispatcher.test.ts +0 -123
- package/src/EventDispatcher.ts +0 -71
- package/src/Pointer.ts +0 -127
- package/src/SVGLoader.test.ts +0 -114
- package/src/SVGLoader.ts +0 -511
- package/src/UndoRedoHistory.test.ts +0 -33
- package/src/UndoRedoHistory.ts +0 -102
- package/src/Viewport.ts +0 -319
- package/src/bundle/bundled.ts +0 -7
- package/src/commands/Command.ts +0 -45
- package/src/commands/Duplicate.ts +0 -48
- package/src/commands/Erase.ts +0 -74
- package/src/commands/SerializableCommand.ts +0 -49
- package/src/commands/UnresolvedCommand.ts +0 -37
- package/src/commands/invertCommand.ts +0 -51
- package/src/commands/lib.ts +0 -16
- package/src/commands/localization.ts +0 -47
- package/src/commands/uniteCommands.test.ts +0 -23
- package/src/commands/uniteCommands.ts +0 -135
- package/src/components/AbstractComponent.transformBy.test.ts +0 -22
- package/src/components/AbstractComponent.ts +0 -364
- package/src/components/ImageBackground.test.ts +0 -35
- package/src/components/ImageBackground.ts +0 -176
- package/src/components/ImageComponent.ts +0 -171
- package/src/components/RestylableComponent.ts +0 -142
- package/src/components/SVGGlobalAttributesObject.ts +0 -81
- package/src/components/Stroke.test.ts +0 -139
- package/src/components/Stroke.ts +0 -245
- package/src/components/TextComponent.test.ts +0 -99
- package/src/components/TextComponent.ts +0 -315
- package/src/components/UnknownSVGObject.test.ts +0 -10
- package/src/components/UnknownSVGObject.ts +0 -60
- package/src/components/builders/ArrowBuilder.ts +0 -107
- package/src/components/builders/FreehandLineBuilder.ts +0 -212
- package/src/components/builders/LineBuilder.ts +0 -77
- package/src/components/builders/PressureSensitiveFreehandLineBuilder.ts +0 -454
- package/src/components/builders/RectangleBuilder.ts +0 -74
- package/src/components/builders/types.ts +0 -15
- package/src/components/lib.ts +0 -25
- package/src/components/localization.ts +0 -22
- package/src/components/util/StrokeSmoother.ts +0 -293
- package/src/components/util/describeComponentList.ts +0 -18
- package/src/lib.ts +0 -37
- package/src/localization.ts +0 -34
- package/src/localizations/de.ts +0 -98
- package/src/localizations/en.ts +0 -8
- package/src/localizations/es.ts +0 -74
- package/src/localizations/getLocalizationTable.test.ts +0 -27
- package/src/localizations/getLocalizationTable.ts +0 -55
- package/src/math/LineSegment2.test.ts +0 -99
- package/src/math/LineSegment2.ts +0 -160
- package/src/math/Mat33.test.ts +0 -244
- package/src/math/Mat33.ts +0 -437
- package/src/math/Path.fromString.test.ts +0 -223
- package/src/math/Path.test.ts +0 -198
- package/src/math/Path.toString.test.ts +0 -77
- package/src/math/Path.ts +0 -790
- package/src/math/Rect2.test.ts +0 -204
- package/src/math/Rect2.ts +0 -315
- package/src/math/Triangle.ts +0 -29
- package/src/math/Vec2.test.ts +0 -30
- package/src/math/Vec2.ts +0 -18
- package/src/math/Vec3.test.ts +0 -44
- package/src/math/Vec3.ts +0 -218
- package/src/math/lib.ts +0 -15
- package/src/math/rounding.test.ts +0 -65
- package/src/math/rounding.ts +0 -156
- package/src/rendering/Display.ts +0 -249
- package/src/rendering/RenderingStyle.test.ts +0 -68
- package/src/rendering/RenderingStyle.ts +0 -55
- package/src/rendering/TextRenderingStyle.ts +0 -45
- package/src/rendering/caching/CacheRecord.test.ts +0 -49
- package/src/rendering/caching/CacheRecord.ts +0 -77
- package/src/rendering/caching/CacheRecordManager.ts +0 -71
- package/src/rendering/caching/RenderingCache.test.ts +0 -44
- package/src/rendering/caching/RenderingCache.ts +0 -66
- package/src/rendering/caching/RenderingCacheNode.ts +0 -405
- package/src/rendering/caching/testUtils.ts +0 -35
- package/src/rendering/caching/types.ts +0 -34
- package/src/rendering/lib.ts +0 -6
- package/src/rendering/localization.ts +0 -20
- package/src/rendering/renderers/AbstractRenderer.ts +0 -222
- package/src/rendering/renderers/CanvasRenderer.ts +0 -296
- package/src/rendering/renderers/DummyRenderer.test.ts +0 -42
- package/src/rendering/renderers/DummyRenderer.ts +0 -136
- package/src/rendering/renderers/SVGRenderer.ts +0 -354
- package/src/rendering/renderers/TextOnlyRenderer.ts +0 -70
- package/src/testing/beforeEachFile.ts +0 -8
- package/src/testing/createEditor.ts +0 -11
- package/src/testing/global.d.ts +0 -17
- package/src/testing/lib.ts +0 -3
- package/src/testing/loadExpectExtensions.ts +0 -25
- package/src/testing/sendPenEvent.ts +0 -31
- package/src/testing/sendTouchEvent.ts +0 -78
- package/src/toolbar/HTMLToolbar.ts +0 -492
- package/src/toolbar/IconProvider.ts +0 -736
- package/src/toolbar/lib.ts +0 -4
- package/src/toolbar/localization.ts +0 -106
- package/src/toolbar/makeColorInput.ts +0 -145
- package/src/toolbar/types.ts +0 -5
- package/src/toolbar/widgets/ActionButtonWidget.ts +0 -39
- package/src/toolbar/widgets/BaseToolWidget.ts +0 -56
- package/src/toolbar/widgets/BaseWidget.ts +0 -377
- package/src/toolbar/widgets/DocumentPropertiesWidget.ts +0 -167
- package/src/toolbar/widgets/EraserToolWidget.ts +0 -85
- package/src/toolbar/widgets/HandToolWidget.ts +0 -250
- package/src/toolbar/widgets/InsertImageWidget.ts +0 -223
- package/src/toolbar/widgets/OverflowWidget.ts +0 -92
- package/src/toolbar/widgets/PenToolWidget.ts +0 -288
- package/src/toolbar/widgets/SelectionToolWidget.ts +0 -190
- package/src/toolbar/widgets/TextToolWidget.ts +0 -145
- package/src/toolbar/widgets/lib.ts +0 -13
- package/src/tools/BaseTool.ts +0 -76
- package/src/tools/Eraser.test.ts +0 -103
- package/src/tools/Eraser.ts +0 -139
- package/src/tools/FindTool.ts +0 -152
- package/src/tools/PanZoom.test.ts +0 -310
- package/src/tools/PanZoom.ts +0 -520
- package/src/tools/PasteHandler.ts +0 -95
- package/src/tools/Pen.test.ts +0 -194
- package/src/tools/Pen.ts +0 -226
- package/src/tools/PipetteTool.ts +0 -55
- package/src/tools/SelectionTool/SelectAllShortcutHandler.ts +0 -28
- package/src/tools/SelectionTool/Selection.ts +0 -607
- package/src/tools/SelectionTool/SelectionHandle.ts +0 -108
- package/src/tools/SelectionTool/SelectionTool.test.ts +0 -261
- package/src/tools/SelectionTool/SelectionTool.ts +0 -480
- package/src/tools/SelectionTool/TransformMode.ts +0 -114
- package/src/tools/SelectionTool/types.ts +0 -11
- package/src/tools/TextTool.ts +0 -326
- package/src/tools/ToolController.ts +0 -178
- package/src/tools/ToolEnabledGroup.ts +0 -14
- package/src/tools/ToolSwitcherShortcut.ts +0 -39
- package/src/tools/ToolbarShortcutHandler.ts +0 -34
- package/src/tools/UndoRedoShortcut.test.ts +0 -56
- package/src/tools/UndoRedoShortcut.ts +0 -25
- package/src/tools/lib.ts +0 -21
- package/src/tools/localization.ts +0 -66
- package/src/types.ts +0 -234
- package/src/util/assertions.ts +0 -55
- package/src/util/fileToBase64.ts +0 -18
- package/src/util/untilNextAnimationFrame.ts +0 -9
- package/src/util/waitForTimeout.ts +0 -9
@@ -1,261 +0,0 @@
|
|
1
|
-
import Color4 from '../../Color4';
|
2
|
-
import Stroke from '../../components/Stroke';
|
3
|
-
import Editor from '../../Editor';
|
4
|
-
import EditorImage from '../../EditorImage';
|
5
|
-
import Path from '../../math/Path';
|
6
|
-
import { Vec2 } from '../../math/Vec2';
|
7
|
-
import { InputEvtType } from '../../types';
|
8
|
-
import Selection from './Selection';
|
9
|
-
import SelectionTool from './SelectionTool';
|
10
|
-
import createEditor from '../../testing/createEditor';
|
11
|
-
import Pointer from '../../Pointer';
|
12
|
-
import { Rect2 } from '../../lib';
|
13
|
-
import sendPenEvent from '../../testing/sendPenEvent';
|
14
|
-
|
15
|
-
const getSelectionTool = (editor: Editor): SelectionTool => {
|
16
|
-
return editor.toolController.getMatchingTools(SelectionTool)[0];
|
17
|
-
};
|
18
|
-
|
19
|
-
const createSquareStroke = (size: number = 1) => {
|
20
|
-
const testStroke = new Stroke([
|
21
|
-
// A filled square
|
22
|
-
Path.fromString(`M0,0 L${size},0 L${size},${size} L0,${size} Z`).toRenderable({ fill: Color4.blue }),
|
23
|
-
]);
|
24
|
-
const addTestStrokeCommand = EditorImage.addElement(testStroke);
|
25
|
-
|
26
|
-
return { testStroke, addTestStrokeCommand };
|
27
|
-
};
|
28
|
-
|
29
|
-
const createEditorWithSingleObjectSelection = (objectSize: number = 50) => {
|
30
|
-
const { testStroke, addTestStrokeCommand } = createSquareStroke(objectSize);
|
31
|
-
const editor = createEditor();
|
32
|
-
editor.dispatch(addTestStrokeCommand);
|
33
|
-
|
34
|
-
// Select the object
|
35
|
-
const selectionTool = getSelectionTool(editor);
|
36
|
-
selectionTool.setEnabled(true);
|
37
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
38
|
-
sendPenEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(10, 10));
|
39
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(5, 5));
|
40
|
-
|
41
|
-
return { editor, testStroke, selectionTool };
|
42
|
-
};
|
43
|
-
|
44
|
-
const dragSelection = (editor: Editor, selection: Selection, startPt: Vec2, endPt: Vec2) => {
|
45
|
-
const backgroundElem = selection.getBackgroundElem();
|
46
|
-
|
47
|
-
selection.onDragStart(Pointer.ofCanvasPoint(startPt, true, editor.viewport), backgroundElem);
|
48
|
-
jest.advanceTimersByTime(100);
|
49
|
-
|
50
|
-
selection.onDragUpdate(Pointer.ofCanvasPoint(endPt, true, editor.viewport));
|
51
|
-
jest.advanceTimersByTime(100);
|
52
|
-
|
53
|
-
selection.onDragEnd();
|
54
|
-
};
|
55
|
-
|
56
|
-
describe('SelectionTool', () => {
|
57
|
-
it('selection should shrink/grow to bounding box of selected objects', () => {
|
58
|
-
const { addTestStrokeCommand } = createSquareStroke();
|
59
|
-
|
60
|
-
const editor = createEditor();
|
61
|
-
editor.dispatch(addTestStrokeCommand);
|
62
|
-
|
63
|
-
const selectionTool = getSelectionTool(editor);
|
64
|
-
selectionTool.setEnabled(true);
|
65
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
66
|
-
sendPenEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(0.1, 0.1));
|
67
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(0.1, 0.1));
|
68
|
-
|
69
|
-
// Should surround the selected object (which has bbox = (0, 0, 1, 1))
|
70
|
-
// with extra space.
|
71
|
-
const paddingSize = selectionTool.getSelection()!.getMinCanvasSize();
|
72
|
-
expect(selectionTool.getSelection()!.region).toMatchObject({
|
73
|
-
x: -paddingSize / 2,
|
74
|
-
y: -paddingSize / 2,
|
75
|
-
w: paddingSize + 1,
|
76
|
-
h: paddingSize + 1,
|
77
|
-
});
|
78
|
-
});
|
79
|
-
|
80
|
-
it('sending keyboard events to the selected region should move selected items', () => {
|
81
|
-
const { editor, selectionTool, testStroke } = createEditorWithSingleObjectSelection(50);
|
82
|
-
const selection = selectionTool.getSelection();
|
83
|
-
expect(selection).not.toBeNull();
|
84
|
-
|
85
|
-
// Drag the object
|
86
|
-
// (d => move right (d is from WASD controls.))
|
87
|
-
editor.sendKeyboardEvent(InputEvtType.KeyPressEvent, 'd');
|
88
|
-
editor.sendKeyboardEvent(InputEvtType.KeyPressEvent, 'd');
|
89
|
-
editor.sendKeyboardEvent(InputEvtType.KeyUpEvent, 'd');
|
90
|
-
|
91
|
-
expect(testStroke.getBBox().topLeft.x).toBeGreaterThan(5);
|
92
|
-
|
93
|
-
editor.history.undo();
|
94
|
-
|
95
|
-
expect(testStroke.getBBox().topLeft).toMatchObject({
|
96
|
-
x: 0,
|
97
|
-
y: 0,
|
98
|
-
});
|
99
|
-
});
|
100
|
-
|
101
|
-
it('moving the selection with a keyboard should move the view to keep the selection in view', () => {
|
102
|
-
const { editor, selectionTool } = createEditorWithSingleObjectSelection(50);
|
103
|
-
|
104
|
-
const selection = selectionTool.getSelection();
|
105
|
-
if (selection === null) {
|
106
|
-
// Throw to allow TypeScript's non-null checker to understand that selection
|
107
|
-
// must be non-null after this.
|
108
|
-
throw new Error('Selection should be non-null.');
|
109
|
-
}
|
110
|
-
|
111
|
-
editor.sendKeyboardEvent(InputEvtType.KeyPressEvent, 'a');
|
112
|
-
editor.sendKeyboardEvent(InputEvtType.KeyUpEvent, 'a');
|
113
|
-
expect(editor.viewport.visibleRect.containsPoint(selection.region.center)).toBe(true);
|
114
|
-
});
|
115
|
-
|
116
|
-
it('shift+click should expand an existing selection', () => {
|
117
|
-
const { addTestStrokeCommand: stroke1Command } = createSquareStroke(50);
|
118
|
-
const { addTestStrokeCommand: stroke2Command } = createSquareStroke(500);
|
119
|
-
|
120
|
-
const editor = createEditor();
|
121
|
-
editor.dispatch(stroke1Command);
|
122
|
-
editor.dispatch(stroke2Command);
|
123
|
-
|
124
|
-
// Select the first stroke
|
125
|
-
const selectionTool = getSelectionTool(editor);
|
126
|
-
selectionTool.setEnabled(true);
|
127
|
-
|
128
|
-
// Select the smaller rectangle
|
129
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(40, 40));
|
130
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(100, 100));
|
131
|
-
|
132
|
-
expect(selectionTool.getSelectedObjects()).toHaveLength(1);
|
133
|
-
|
134
|
-
// Shift key down.
|
135
|
-
editor.sendKeyboardEvent(InputEvtType.KeyPressEvent, 'Shift');
|
136
|
-
|
137
|
-
// Select the larger stroke.
|
138
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(200, 200));
|
139
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(600, 600));
|
140
|
-
|
141
|
-
expect(selectionTool.getSelectedObjects()).toHaveLength(2);
|
142
|
-
|
143
|
-
editor.sendKeyboardEvent(InputEvtType.KeyUpEvent, 'Shift');
|
144
|
-
|
145
|
-
// Select the larger stroke without shift pressed
|
146
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(200, 200));
|
147
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(600, 600));
|
148
|
-
expect(selectionTool.getSelectedObjects()).toHaveLength(1);
|
149
|
-
|
150
|
-
// Select nothing
|
151
|
-
sendPenEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(200, 200));
|
152
|
-
sendPenEvent(editor, InputEvtType.PointerUpEvt, Vec2.of(201, 201));
|
153
|
-
expect(selectionTool.getSelectedObjects()).toHaveLength(0);
|
154
|
-
});
|
155
|
-
|
156
|
-
it('should remove the selection from the document while dragging', () => {
|
157
|
-
const { editor, selectionTool } = createEditorWithSingleObjectSelection(50);
|
158
|
-
|
159
|
-
const selection = selectionTool.getSelection()!;
|
160
|
-
const backgroundElem = selection.getBackgroundElem();
|
161
|
-
selection.onDragStart(Pointer.ofCanvasPoint(Vec2.of(0, 0), true, editor.viewport), backgroundElem);
|
162
|
-
jest.advanceTimersByTime(100);
|
163
|
-
selection.onDragUpdate(Pointer.ofCanvasPoint(Vec2.of(20, 0), true, editor.viewport));
|
164
|
-
jest.advanceTimersByTime(100);
|
165
|
-
|
166
|
-
// Expect the selection to not be in the image while dragging
|
167
|
-
expect(editor.image.getAllElements()).toHaveLength(0);
|
168
|
-
|
169
|
-
selection.onDragEnd();
|
170
|
-
|
171
|
-
expect(editor.image.getAllElements()).toHaveLength(1);
|
172
|
-
});
|
173
|
-
|
174
|
-
it('should drag objects horizontally', () => {
|
175
|
-
const { editor, selectionTool, testStroke } = createEditorWithSingleObjectSelection(50);
|
176
|
-
|
177
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
178
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.of(0, 0));
|
179
|
-
|
180
|
-
const selection = selectionTool.getSelection()!;
|
181
|
-
dragSelection(editor, selection, Vec2.of(0, 0), Vec2.of(10, 0));
|
182
|
-
|
183
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
184
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.of(10, 0));
|
185
|
-
});
|
186
|
-
|
187
|
-
it('should round changes in objects positions when dragging', () => {
|
188
|
-
const { editor, selectionTool, testStroke } = createEditorWithSingleObjectSelection(50);
|
189
|
-
|
190
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
191
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.of(0, 0));
|
192
|
-
|
193
|
-
const selection = selectionTool.getSelection()!;
|
194
|
-
dragSelection(editor, selection, Vec2.of(0, 0), Vec2.of(9.999, 0));
|
195
|
-
|
196
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
197
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.of(10, 0));
|
198
|
-
});
|
199
|
-
|
200
|
-
it('dragCancel should return a selection to its original position', () => {
|
201
|
-
const { editor, selectionTool, testStroke } = createEditorWithSingleObjectSelection(150);
|
202
|
-
|
203
|
-
const selection = selectionTool.getSelection()!;
|
204
|
-
const dragBackground = selection.getBackgroundElem();
|
205
|
-
|
206
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.zero);
|
207
|
-
|
208
|
-
selection.onDragStart(Pointer.ofCanvasPoint(Vec2.of(10, 0), true, editor.viewport), dragBackground);
|
209
|
-
jest.advanceTimersByTime(100);
|
210
|
-
selection.onDragUpdate(Pointer.ofCanvasPoint(Vec2.of(200, 10), true, editor.viewport));
|
211
|
-
jest.advanceTimersByTime(100);
|
212
|
-
selection.onDragCancel();
|
213
|
-
|
214
|
-
expect(testStroke.getBBox().topLeft).objEq(Vec2.zero);
|
215
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
216
|
-
});
|
217
|
-
|
218
|
-
it('duplicateSelectedObjects should duplicate a selection while dragging', async () => {
|
219
|
-
const { editor, selectionTool, testStroke } = createEditorWithSingleObjectSelection(150);
|
220
|
-
|
221
|
-
const selection = selectionTool.getSelection()!;
|
222
|
-
const dragBackground = selection.getBackgroundElem();
|
223
|
-
|
224
|
-
selection.onDragStart(Pointer.ofCanvasPoint(Vec2.of(0, 0), true, editor.viewport), dragBackground);
|
225
|
-
jest.advanceTimersByTime(100);
|
226
|
-
selection.onDragUpdate(Pointer.ofCanvasPoint(Vec2.of(20, 0), true, editor.viewport));
|
227
|
-
|
228
|
-
// The selection should not be in the document while dragging
|
229
|
-
expect(editor.image.findParent(testStroke)).toBeNull();
|
230
|
-
|
231
|
-
await editor.dispatch(await selection.duplicateSelectedObjects());
|
232
|
-
jest.advanceTimersByTime(100);
|
233
|
-
|
234
|
-
// The duplicate stroke should be added to the document, but the original should not.
|
235
|
-
expect(editor.image.findParent(testStroke)).toBeNull();
|
236
|
-
|
237
|
-
const allObjectsInImage = editor.image.getAllElements();
|
238
|
-
expect(allObjectsInImage).toHaveLength(1);
|
239
|
-
|
240
|
-
const duplicateObject = allObjectsInImage[0];
|
241
|
-
|
242
|
-
// The duplicate stroke should be translated
|
243
|
-
expect(duplicateObject.getBBox()).objEq(new Rect2(20, 0, 150, 150));
|
244
|
-
|
245
|
-
// The duplicate stroke should be selected.
|
246
|
-
expect(selection.getSelectedObjects()).toHaveLength(1);
|
247
|
-
|
248
|
-
// The test stroke should not be added to the document
|
249
|
-
// (esp if we continue dragging)
|
250
|
-
selection.onDragUpdate(Pointer.ofCanvasPoint(Vec2.of(30, 10), true, editor.viewport));
|
251
|
-
jest.advanceTimersByTime(100);
|
252
|
-
|
253
|
-
expect(editor.image.findParent(testStroke)).toBeNull();
|
254
|
-
|
255
|
-
// The test stroke should be translated when we finish dragging.
|
256
|
-
selection.onDragEnd();
|
257
|
-
|
258
|
-
expect(editor.image.findParent(testStroke)).not.toBeNull();
|
259
|
-
expect(testStroke.getBBox()).objEq(new Rect2(30, 10, 150, 150));
|
260
|
-
});
|
261
|
-
});
|