js-draw 1.20.3 → 1.21.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. package/LICENSE +1 -1
  2. package/dist/Editor.css +136 -26
  3. package/dist/bundle.js +2 -2
  4. package/dist/bundledStyles.js +1 -1
  5. package/dist/cjs/Editor.d.ts +27 -6
  6. package/dist/cjs/Editor.js +30 -8
  7. package/dist/cjs/SVGLoader/SVGLoader.js +2 -2
  8. package/dist/cjs/Viewport.d.ts +2 -2
  9. package/dist/cjs/commands/Command.d.ts +5 -0
  10. package/dist/cjs/commands/Command.js +5 -0
  11. package/dist/cjs/commands/SerializableCommand.d.ts +7 -0
  12. package/dist/cjs/commands/SerializableCommand.js +9 -0
  13. package/dist/cjs/dialogs/makeAboutDialog.d.ts +1 -1
  14. package/dist/cjs/dialogs/makeAboutDialog.js +10 -25
  15. package/dist/cjs/dialogs/makeMessageDialog.d.ts +11 -0
  16. package/dist/cjs/dialogs/makeMessageDialog.js +56 -0
  17. package/dist/cjs/image/EditorImage.d.ts +15 -1
  18. package/dist/cjs/image/EditorImage.js +15 -5
  19. package/dist/cjs/inputEvents.d.ts +10 -2
  20. package/dist/cjs/inputEvents.js +1 -0
  21. package/dist/cjs/localizations/es.js +3 -0
  22. package/dist/cjs/rendering/Display.d.ts +1 -0
  23. package/dist/cjs/rendering/Display.js +1 -0
  24. package/dist/cjs/rendering/TextRenderingStyle.d.ts +7 -6
  25. package/dist/cjs/rendering/TextRenderingStyle.js +1 -0
  26. package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +12 -3
  27. package/dist/cjs/rendering/renderers/CanvasRenderer.js +15 -2
  28. package/dist/cjs/rendering/renderers/DummyRenderer.d.ts +1 -1
  29. package/dist/cjs/testing/firstElementAncestorOfNode.d.ts +1 -1
  30. package/dist/cjs/testing/firstElementAncestorOfNode.js +1 -1
  31. package/dist/cjs/testing/sendPenEvent.d.ts +2 -2
  32. package/dist/cjs/testing/sendTouchEvent.d.ts +2 -2
  33. package/dist/cjs/toolbar/AbstractToolbar.d.ts +6 -1
  34. package/dist/cjs/toolbar/AbstractToolbar.js +6 -1
  35. package/dist/cjs/toolbar/IconProvider.d.ts +1 -1
  36. package/dist/cjs/toolbar/IconProvider.js +6 -1
  37. package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +8 -0
  38. package/dist/cjs/toolbar/widgets/BaseWidget.js +8 -0
  39. package/dist/cjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  40. package/dist/cjs/toolbar/widgets/HandToolWidget.js +1 -0
  41. package/dist/cjs/toolbar/widgets/InsertImageWidget/ImageWrapper.d.ts +1 -1
  42. package/dist/cjs/toolbar/widgets/PenToolWidget.d.ts +6 -0
  43. package/dist/cjs/toolbar/widgets/PenToolWidget.js +5 -0
  44. package/dist/cjs/types.d.ts +5 -0
  45. package/dist/cjs/types.js +1 -0
  46. package/dist/cjs/util/ClipboardHandler.d.ts +9 -1
  47. package/dist/cjs/util/ClipboardHandler.js +82 -24
  48. package/dist/cjs/version.js +1 -1
  49. package/dist/mjs/Editor.d.ts +27 -6
  50. package/dist/mjs/Editor.mjs +31 -9
  51. package/dist/mjs/SVGLoader/SVGLoader.mjs +2 -2
  52. package/dist/mjs/Viewport.d.ts +2 -2
  53. package/dist/mjs/commands/Command.d.ts +5 -0
  54. package/dist/mjs/commands/Command.mjs +5 -0
  55. package/dist/mjs/commands/SerializableCommand.d.ts +7 -0
  56. package/dist/mjs/commands/SerializableCommand.mjs +9 -0
  57. package/dist/mjs/dialogs/makeAboutDialog.d.ts +1 -1
  58. package/dist/mjs/dialogs/makeAboutDialog.mjs +7 -25
  59. package/dist/mjs/dialogs/makeMessageDialog.d.ts +11 -0
  60. package/dist/mjs/dialogs/makeMessageDialog.mjs +51 -0
  61. package/dist/mjs/image/EditorImage.d.ts +15 -1
  62. package/dist/mjs/image/EditorImage.mjs +15 -5
  63. package/dist/mjs/inputEvents.d.ts +10 -2
  64. package/dist/mjs/inputEvents.mjs +1 -0
  65. package/dist/mjs/localizations/es.mjs +3 -0
  66. package/dist/mjs/rendering/Display.d.ts +1 -0
  67. package/dist/mjs/rendering/Display.mjs +1 -0
  68. package/dist/mjs/rendering/TextRenderingStyle.d.ts +7 -6
  69. package/dist/mjs/rendering/TextRenderingStyle.mjs +1 -0
  70. package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +12 -3
  71. package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +15 -2
  72. package/dist/mjs/rendering/renderers/DummyRenderer.d.ts +1 -1
  73. package/dist/mjs/testing/firstElementAncestorOfNode.d.ts +1 -1
  74. package/dist/mjs/testing/firstElementAncestorOfNode.mjs +1 -1
  75. package/dist/mjs/testing/sendPenEvent.d.ts +2 -2
  76. package/dist/mjs/testing/sendTouchEvent.d.ts +2 -2
  77. package/dist/mjs/toolbar/AbstractToolbar.d.ts +6 -1
  78. package/dist/mjs/toolbar/AbstractToolbar.mjs +6 -1
  79. package/dist/mjs/toolbar/IconProvider.d.ts +1 -1
  80. package/dist/mjs/toolbar/IconProvider.mjs +6 -1
  81. package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +8 -0
  82. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +8 -0
  83. package/dist/mjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
  84. package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +1 -0
  85. package/dist/mjs/toolbar/widgets/InsertImageWidget/ImageWrapper.d.ts +1 -1
  86. package/dist/mjs/toolbar/widgets/PenToolWidget.d.ts +6 -0
  87. package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +5 -0
  88. package/dist/mjs/types.d.ts +5 -0
  89. package/dist/mjs/types.mjs +1 -0
  90. package/dist/mjs/util/ClipboardHandler.d.ts +9 -1
  91. package/dist/mjs/util/ClipboardHandler.mjs +82 -24
  92. package/dist/mjs/version.mjs +1 -1
  93. package/package.json +8 -9
  94. package/src/dialogs/dialogs.scss +9 -21
  95. package/src/dialogs/makeAboutDialog.scss +13 -33
  96. package/src/dialogs/makeMessageDialog.scss +46 -0
  97. package/dist/cjs/tools/BaseTool.d.ts +0 -60
  98. package/dist/cjs/tools/BaseTool.js +0 -174
  99. package/dist/cjs/tools/Eraser.d.ts +0 -56
  100. package/dist/cjs/tools/Eraser.js +0 -295
  101. package/dist/cjs/tools/Eraser.test.d.ts +0 -1
  102. package/dist/cjs/tools/FindTool.d.ts +0 -21
  103. package/dist/cjs/tools/FindTool.js +0 -137
  104. package/dist/cjs/tools/FindTool.test.d.ts +0 -1
  105. package/dist/cjs/tools/InputFilter/FunctionMapper.d.ts +0 -12
  106. package/dist/cjs/tools/InputFilter/FunctionMapper.js +0 -21
  107. package/dist/cjs/tools/InputFilter/InputMapper.d.ts +0 -23
  108. package/dist/cjs/tools/InputFilter/InputMapper.js +0 -38
  109. package/dist/cjs/tools/InputFilter/InputPipeline.d.ts +0 -15
  110. package/dist/cjs/tools/InputFilter/InputPipeline.js +0 -54
  111. package/dist/cjs/tools/InputFilter/InputPipeline.test.d.ts +0 -1
  112. package/dist/cjs/tools/InputFilter/InputStabilizer.d.ts +0 -29
  113. package/dist/cjs/tools/InputFilter/InputStabilizer.js +0 -181
  114. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.d.ts +0 -21
  115. package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +0 -84
  116. package/dist/cjs/tools/PanZoom.d.ts +0 -119
  117. package/dist/cjs/tools/PanZoom.js +0 -508
  118. package/dist/cjs/tools/PanZoom.test.d.ts +0 -1
  119. package/dist/cjs/tools/PasteHandler.d.ts +0 -23
  120. package/dist/cjs/tools/PasteHandler.js +0 -109
  121. package/dist/cjs/tools/Pen.d.ts +0 -53
  122. package/dist/cjs/tools/Pen.js +0 -318
  123. package/dist/cjs/tools/Pen.test.d.ts +0 -1
  124. package/dist/cjs/tools/PipetteTool.d.ts +0 -28
  125. package/dist/cjs/tools/PipetteTool.js +0 -69
  126. package/dist/cjs/tools/ScrollbarTool.d.ts +0 -18
  127. package/dist/cjs/tools/ScrollbarTool.js +0 -85
  128. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -9
  129. package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.js +0 -32
  130. package/dist/cjs/tools/SelectionTool/Selection.d.ts +0 -71
  131. package/dist/cjs/tools/SelectionTool/Selection.js +0 -620
  132. package/dist/cjs/tools/SelectionTool/SelectionHandle.d.ts +0 -62
  133. package/dist/cjs/tools/SelectionTool/SelectionHandle.js +0 -141
  134. package/dist/cjs/tools/SelectionTool/SelectionTool.d.ts +0 -40
  135. package/dist/cjs/tools/SelectionTool/SelectionTool.js +0 -494
  136. package/dist/cjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +0 -1
  137. package/dist/cjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
  138. package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.d.ts +0 -23
  139. package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.js +0 -83
  140. package/dist/cjs/tools/SelectionTool/TransformMode.d.ts +0 -42
  141. package/dist/cjs/tools/SelectionTool/TransformMode.js +0 -155
  142. package/dist/cjs/tools/SelectionTool/types.d.ts +0 -28
  143. package/dist/cjs/tools/SelectionTool/types.js +0 -14
  144. package/dist/cjs/tools/SoundUITool.d.ts +0 -26
  145. package/dist/cjs/tools/SoundUITool.js +0 -171
  146. package/dist/cjs/tools/TextTool.d.ts +0 -36
  147. package/dist/cjs/tools/TextTool.js +0 -285
  148. package/dist/cjs/tools/TextTool.test.d.ts +0 -1
  149. package/dist/cjs/tools/ToolController.d.ts +0 -73
  150. package/dist/cjs/tools/ToolController.js +0 -304
  151. package/dist/cjs/tools/ToolController.test.d.ts +0 -1
  152. package/dist/cjs/tools/ToolEnabledGroup.d.ts +0 -6
  153. package/dist/cjs/tools/ToolEnabledGroup.js +0 -13
  154. package/dist/cjs/tools/ToolSwitcherShortcut.d.ts +0 -16
  155. package/dist/cjs/tools/ToolSwitcherShortcut.js +0 -40
  156. package/dist/cjs/tools/ToolbarShortcutHandler.d.ts +0 -12
  157. package/dist/cjs/tools/ToolbarShortcutHandler.js +0 -34
  158. package/dist/cjs/tools/UndoRedoShortcut.d.ts +0 -8
  159. package/dist/cjs/tools/UndoRedoShortcut.js +0 -27
  160. package/dist/cjs/tools/UndoRedoShortcut.test.d.ts +0 -1
  161. package/dist/cjs/tools/keybindings.d.ts +0 -18
  162. package/dist/cjs/tools/keybindings.js +0 -49
  163. package/dist/cjs/tools/lib.d.ts +0 -14
  164. package/dist/cjs/tools/lib.js +0 -36
  165. package/dist/cjs/tools/localization.d.ts +0 -34
  166. package/dist/cjs/tools/localization.js +0 -36
  167. package/dist/cjs/tools/util/StationaryPenDetector.d.ts +0 -22
  168. package/dist/cjs/tools/util/StationaryPenDetector.js +0 -95
  169. package/dist/mjs/tools/BaseTool.d.ts +0 -60
  170. package/dist/mjs/tools/BaseTool.mjs +0 -172
  171. package/dist/mjs/tools/Eraser.d.ts +0 -56
  172. package/dist/mjs/tools/Eraser.mjs +0 -288
  173. package/dist/mjs/tools/Eraser.test.d.ts +0 -1
  174. package/dist/mjs/tools/FindTool.d.ts +0 -21
  175. package/dist/mjs/tools/FindTool.mjs +0 -131
  176. package/dist/mjs/tools/FindTool.test.d.ts +0 -1
  177. package/dist/mjs/tools/InputFilter/FunctionMapper.d.ts +0 -12
  178. package/dist/mjs/tools/InputFilter/FunctionMapper.mjs +0 -15
  179. package/dist/mjs/tools/InputFilter/InputMapper.d.ts +0 -23
  180. package/dist/mjs/tools/InputFilter/InputMapper.mjs +0 -36
  181. package/dist/mjs/tools/InputFilter/InputPipeline.d.ts +0 -15
  182. package/dist/mjs/tools/InputFilter/InputPipeline.mjs +0 -49
  183. package/dist/mjs/tools/InputFilter/InputPipeline.test.d.ts +0 -1
  184. package/dist/mjs/tools/InputFilter/InputStabilizer.d.ts +0 -29
  185. package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +0 -175
  186. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.d.ts +0 -21
  187. package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +0 -78
  188. package/dist/mjs/tools/PanZoom.d.ts +0 -119
  189. package/dist/mjs/tools/PanZoom.mjs +0 -501
  190. package/dist/mjs/tools/PanZoom.test.d.ts +0 -1
  191. package/dist/mjs/tools/PasteHandler.d.ts +0 -23
  192. package/dist/mjs/tools/PasteHandler.mjs +0 -103
  193. package/dist/mjs/tools/Pen.d.ts +0 -53
  194. package/dist/mjs/tools/Pen.mjs +0 -312
  195. package/dist/mjs/tools/Pen.test.d.ts +0 -1
  196. package/dist/mjs/tools/PipetteTool.d.ts +0 -28
  197. package/dist/mjs/tools/PipetteTool.mjs +0 -63
  198. package/dist/mjs/tools/ScrollbarTool.d.ts +0 -18
  199. package/dist/mjs/tools/ScrollbarTool.mjs +0 -79
  200. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -9
  201. package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.mjs +0 -26
  202. package/dist/mjs/tools/SelectionTool/Selection.d.ts +0 -71
  203. package/dist/mjs/tools/SelectionTool/Selection.mjs +0 -592
  204. package/dist/mjs/tools/SelectionTool/SelectionHandle.d.ts +0 -62
  205. package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +0 -137
  206. package/dist/mjs/tools/SelectionTool/SelectionTool.d.ts +0 -40
  207. package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +0 -488
  208. package/dist/mjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +0 -1
  209. package/dist/mjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
  210. package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.d.ts +0 -23
  211. package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.mjs +0 -77
  212. package/dist/mjs/tools/SelectionTool/TransformMode.d.ts +0 -42
  213. package/dist/mjs/tools/SelectionTool/TransformMode.mjs +0 -146
  214. package/dist/mjs/tools/SelectionTool/types.d.ts +0 -28
  215. package/dist/mjs/tools/SelectionTool/types.mjs +0 -11
  216. package/dist/mjs/tools/SoundUITool.d.ts +0 -26
  217. package/dist/mjs/tools/SoundUITool.mjs +0 -165
  218. package/dist/mjs/tools/TextTool.d.ts +0 -36
  219. package/dist/mjs/tools/TextTool.mjs +0 -279
  220. package/dist/mjs/tools/TextTool.test.d.ts +0 -1
  221. package/dist/mjs/tools/ToolController.d.ts +0 -73
  222. package/dist/mjs/tools/ToolController.mjs +0 -275
  223. package/dist/mjs/tools/ToolController.test.d.ts +0 -1
  224. package/dist/mjs/tools/ToolEnabledGroup.d.ts +0 -6
  225. package/dist/mjs/tools/ToolEnabledGroup.mjs +0 -10
  226. package/dist/mjs/tools/ToolSwitcherShortcut.d.ts +0 -16
  227. package/dist/mjs/tools/ToolSwitcherShortcut.mjs +0 -34
  228. package/dist/mjs/tools/ToolbarShortcutHandler.d.ts +0 -12
  229. package/dist/mjs/tools/ToolbarShortcutHandler.mjs +0 -28
  230. package/dist/mjs/tools/UndoRedoShortcut.d.ts +0 -8
  231. package/dist/mjs/tools/UndoRedoShortcut.mjs +0 -21
  232. package/dist/mjs/tools/UndoRedoShortcut.test.d.ts +0 -1
  233. package/dist/mjs/tools/keybindings.d.ts +0 -18
  234. package/dist/mjs/tools/keybindings.mjs +0 -43
  235. package/dist/mjs/tools/lib.d.ts +0 -14
  236. package/dist/mjs/tools/lib.mjs +0 -14
  237. package/dist/mjs/tools/localization.d.ts +0 -34
  238. package/dist/mjs/tools/localization.mjs +0 -33
  239. package/dist/mjs/tools/util/StationaryPenDetector.d.ts +0 -22
  240. package/dist/mjs/tools/util/StationaryPenDetector.mjs +0 -92
  241. package/src/tools/FindTool.css +0 -7
  242. package/src/tools/ScrollbarTool.scss +0 -57
  243. package/src/tools/SelectionTool/SelectionTool.scss +0 -137
  244. package/src/tools/SoundUITool.scss +0 -22
  245. package/src/tools/tools.scss +0 -5
@@ -1,181 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const inputEvents_1 = require("../../inputEvents");
7
- const InputMapper_1 = __importDefault(require("./InputMapper"));
8
- const math_1 = require("@js-draw/math");
9
- const untilNextAnimationFrame_1 = __importDefault(require("../../util/untilNextAnimationFrame"));
10
- var StabilizerType;
11
- (function (StabilizerType) {
12
- StabilizerType[StabilizerType["IntertialStabilizer"] = 0] = "IntertialStabilizer";
13
- })(StabilizerType || (StabilizerType = {}));
14
- const defaultOptions = {
15
- kind: StabilizerType.IntertialStabilizer,
16
- mass: 0.4, // kg
17
- springConstant: 100.0, // N/m
18
- frictionCoefficient: 0.28,
19
- maxPointDist: 10, // screen units
20
- inertiaFraction: 0.75,
21
- minSimilarityToFinalize: 0.0,
22
- velocityDecayFactor: 0.1,
23
- };
24
- // Stabilizes input for a single cursor
25
- class StylusInputStabilizer {
26
- constructor(
27
- // The initial starting point of the pointer.
28
- start,
29
- // Emits a pointer motion event, returns true if the event was handled.
30
- updatePointer, options) {
31
- this.updatePointer = updatePointer;
32
- this.options = options;
33
- this.runLoop = true;
34
- this.lastUpdateTime = 0;
35
- this.velocity = math_1.Vec2.zero;
36
- this.strokePoint = start;
37
- this.targetPoint = start;
38
- this.targetInterval = 10; // ms
39
- void this.loop();
40
- }
41
- async loop() {
42
- this.lastUpdateTime = performance.now();
43
- while (this.runLoop) {
44
- this.update(false);
45
- await (0, untilNextAnimationFrame_1.default)();
46
- }
47
- }
48
- setTarget(point) {
49
- this.targetPoint = point;
50
- }
51
- getNextVelocity(deltaTimeMs) {
52
- const toTarget = this.targetPoint.minus(this.strokePoint);
53
- const springForce = toTarget.times(this.options.springConstant);
54
- const gravityAccel = 10;
55
- const normalForceMagnitude = this.options.mass * gravityAccel;
56
- const frictionForce = this.velocity.normalizedOrZero().times(-this.options.frictionCoefficient * normalForceMagnitude);
57
- const acceleration = (springForce.plus(frictionForce)).times(1 / this.options.mass);
58
- const decayFactor = this.options.velocityDecayFactor;
59
- const springVelocity = this.velocity.times(1 - decayFactor).plus(acceleration.times(deltaTimeMs / 1000));
60
- // An alternate velocity that goes directly towards the target.
61
- const toTargetVelocity = toTarget.normalizedOrZero().times(springVelocity.length());
62
- return toTargetVelocity.lerp(springVelocity, this.options.inertiaFraction);
63
- }
64
- update(force) {
65
- const nowTime = performance.now();
66
- const deltaTime = nowTime - this.lastUpdateTime;
67
- const reachedTarget = this.strokePoint.eq(this.targetPoint);
68
- if (deltaTime > this.targetInterval || force) {
69
- if (!reachedTarget) {
70
- let velocity;
71
- let deltaX;
72
- let parts = 1;
73
- do {
74
- velocity = this.getNextVelocity(deltaTime / parts);
75
- deltaX = velocity.times(deltaTime / 1000);
76
- parts++;
77
- } while (deltaX.magnitude() > this.options.maxPointDist && parts < 10);
78
- for (let i = 0; i < parts; i++) {
79
- this.velocity = this.getNextVelocity(deltaTime / parts);
80
- deltaX = this.velocity.times(deltaTime / 1000);
81
- this.strokePoint = this.strokePoint.plus(deltaX);
82
- // Allows the last updatePointer to be returned.
83
- if (i < parts - 1) {
84
- this.updatePointer(this.strokePoint, nowTime);
85
- }
86
- }
87
- }
88
- // Even if we have reached the target, ensure that lastUpdateTime is updated
89
- // (prevent large deltaTime).
90
- this.lastUpdateTime = nowTime;
91
- if (force || !reachedTarget) {
92
- return this.updatePointer(this.strokePoint, nowTime);
93
- }
94
- }
95
- return false;
96
- }
97
- /** Finalizes the current stroke. */
98
- finish() {
99
- this.runLoop = false;
100
- const toTarget = this.targetPoint.minus(this.strokePoint);
101
- if (this.velocity.dot(toTarget) > this.options.minSimilarityToFinalize) {
102
- // Connect the stroke to its end point
103
- this.updatePointer(this.targetPoint, performance.now());
104
- }
105
- }
106
- cancel() {
107
- this.runLoop = false;
108
- }
109
- }
110
- class InputStabilizer extends InputMapper_1.default {
111
- constructor(viewport, options = defaultOptions) {
112
- super();
113
- this.viewport = viewport;
114
- this.options = options;
115
- this.stabilizer = null;
116
- this.lastPointerEvent = null;
117
- }
118
- mapPointerEvent(event) {
119
- // Don't store the last pointer event for use with pressure/button data --
120
- // this information can be very different for a pointerup event.
121
- if ((0, inputEvents_1.isPointerEvt)(event) && event.kind !== inputEvents_1.InputEvtType.PointerUpEvt) {
122
- this.lastPointerEvent = event;
123
- }
124
- // Only apply smoothing if there is a single pointer.
125
- if (event.kind === inputEvents_1.InputEvtType.GestureCancelEvt || event.allPointers.length > 1 || this.stabilizer === null) {
126
- return this.emit(event);
127
- }
128
- this.stabilizer.setTarget(event.current.screenPos);
129
- if (event.kind === inputEvents_1.InputEvtType.PointerMoveEvt) {
130
- return this.stabilizer.update(true);
131
- }
132
- else if (event.kind === inputEvents_1.InputEvtType.PointerUpEvt) {
133
- this.stabilizer.finish();
134
- return this.emit(event);
135
- }
136
- else {
137
- return this.emit(event);
138
- }
139
- }
140
- // Assumes that there is exactly one pointer that is currently down.
141
- emitPointerMove(screenPoint, timeStamp) {
142
- if (!this.lastPointerEvent) {
143
- return false;
144
- }
145
- const pointer = this.lastPointerEvent.current
146
- .withScreenPosition(screenPoint, this.viewport)
147
- .withTimestamp(timeStamp);
148
- const event = {
149
- kind: inputEvents_1.InputEvtType.PointerMoveEvt,
150
- current: pointer,
151
- allPointers: [pointer],
152
- };
153
- const handled = this.emit(event);
154
- return handled;
155
- }
156
- onEvent(event) {
157
- if ((0, inputEvents_1.isPointerEvt)(event) || event.kind === inputEvents_1.InputEvtType.GestureCancelEvt) {
158
- if (event.kind === inputEvents_1.InputEvtType.PointerDownEvt) {
159
- if (this.stabilizer === null) {
160
- this.stabilizer = new StylusInputStabilizer(event.current.screenPos, (screenPoint, timeStamp) => this.emitPointerMove(screenPoint, timeStamp), this.options);
161
- }
162
- else if (event.allPointers.length > 1) {
163
- // Do not attempt to stabilize multiple pointers.
164
- this.stabilizer.cancel();
165
- this.stabilizer = null;
166
- }
167
- }
168
- const handled = this.mapPointerEvent(event);
169
- if (event.kind === inputEvents_1.InputEvtType.PointerUpEvt || event.kind === inputEvents_1.InputEvtType.GestureCancelEvt) {
170
- this.stabilizer?.cancel();
171
- this.stabilizer = null;
172
- }
173
- return handled;
174
- }
175
- return this.emit(event);
176
- }
177
- static fromEditor(editor) {
178
- return new InputStabilizer(editor.viewport);
179
- }
180
- }
181
- exports.default = InputStabilizer;
@@ -1,21 +0,0 @@
1
- import { InputEvt } from '../../inputEvents';
2
- import InputMapper from './InputMapper';
3
- import KeyboardShortcutManager from '../../shortcuts/KeyboardShortcutManager';
4
- import Viewport from '../../Viewport';
5
- import Editor from '../../Editor';
6
- /**
7
- * Provides keyboard shortcuts that provide some amount of control over
8
- * drawing (e.g. snap to grid, plane lock).
9
- */
10
- export default class StrokeKeyboardControl extends InputMapper {
11
- private shortcuts;
12
- private viewport;
13
- private snapToGridEnabled;
14
- private angleLockEnabled;
15
- private startPointCanvas;
16
- constructor(shortcuts: KeyboardShortcutManager, viewport: Viewport);
17
- private xyAxesSnap;
18
- private mapPointerEvent;
19
- onEvent(event: InputEvt): boolean;
20
- static fromEditor(editor: Editor): StrokeKeyboardControl;
21
- }
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const inputEvents_1 = require("../../inputEvents");
7
- const InputMapper_1 = __importDefault(require("./InputMapper"));
8
- const keybindings_1 = require("../keybindings");
9
- /**
10
- * Provides keyboard shortcuts that provide some amount of control over
11
- * drawing (e.g. snap to grid, plane lock).
12
- */
13
- class StrokeKeyboardControl extends InputMapper_1.default {
14
- constructor(shortcuts, viewport) {
15
- super();
16
- this.shortcuts = shortcuts;
17
- this.viewport = viewport;
18
- this.snapToGridEnabled = false;
19
- this.angleLockEnabled = false;
20
- // The point at which the last pointerDown event happened (or null if
21
- // no such event has occurred).
22
- this.startPointCanvas = null;
23
- }
24
- // Snap the given pointer to the nearer of the x/y axes.
25
- xyAxesSnap(pointer) {
26
- if (!this.startPointCanvas) {
27
- return pointer;
28
- }
29
- // Convert this.startPointCanvas here because the viewport might change
30
- // while drawing a stroke.
31
- const screenPos = this.viewport.canvasToScreen(this.startPointCanvas);
32
- return pointer.lockedToXYAxesScreen(screenPos, this.viewport);
33
- }
34
- mapPointerEvent(event) {
35
- const mapPointer = (pointer) => {
36
- // Only map if there's exactly one pointer.
37
- if (event.allPointers.length > 1) {
38
- return pointer;
39
- }
40
- if (this.snapToGridEnabled) {
41
- return pointer.snappedToGrid(this.viewport);
42
- }
43
- if (this.angleLockEnabled && this.startPointCanvas) {
44
- return this.xyAxesSnap(pointer);
45
- }
46
- return pointer;
47
- };
48
- return {
49
- kind: event.kind,
50
- current: mapPointer(event.current),
51
- allPointers: event.allPointers.map(mapPointer),
52
- };
53
- }
54
- onEvent(event) {
55
- const shortcuts = this.shortcuts;
56
- if (event.kind === inputEvents_1.InputEvtType.PointerDownEvt || event.kind === inputEvents_1.InputEvtType.PointerMoveEvt || event.kind === inputEvents_1.InputEvtType.PointerUpEvt) {
57
- if (event.kind === inputEvents_1.InputEvtType.PointerDownEvt) {
58
- this.startPointCanvas = event.current.canvasPos;
59
- }
60
- event = this.mapPointerEvent(event);
61
- }
62
- let handled = this.emit(event);
63
- if ( // Always check keyUpEvents (in case we handled the corresponding keyDown event)
64
- event.kind === inputEvents_1.InputEvtType.KeyUpEvent
65
- // Only handle key press events if another tool isn't handling it. We don't want
66
- // snap to grid/angle lock to conflict with selection/another tool's shortcuts.
67
- || (!handled && event.kind === inputEvents_1.InputEvtType.KeyPressEvent)) {
68
- const isKeyPress = event.kind === inputEvents_1.InputEvtType.KeyPressEvent;
69
- if (shortcuts.matchesShortcut(keybindings_1.snapToGridKeyboardShortcutId, event)) {
70
- this.snapToGridEnabled = isKeyPress;
71
- handled = true;
72
- }
73
- if (shortcuts.matchesShortcut(keybindings_1.lineLockKeyboardShortcutId, event)) {
74
- this.angleLockEnabled = isKeyPress;
75
- handled = true;
76
- }
77
- }
78
- return handled;
79
- }
80
- static fromEditor(editor) {
81
- return new StrokeKeyboardControl(editor.shortcuts, editor.viewport);
82
- }
83
- }
84
- exports.default = StrokeKeyboardControl;
@@ -1,119 +0,0 @@
1
- import { Editor } from '../Editor';
2
- import { Point2 } from '@js-draw/math';
3
- import Pointer from '../Pointer';
4
- import { KeyPressEvent, PointerEvt, WheelEvt } from '../inputEvents';
5
- import BaseTool from './BaseTool';
6
- interface PinchData {
7
- canvasCenter: Point2;
8
- screenCenter: Point2;
9
- angle: number;
10
- dist: number;
11
- }
12
- export declare enum PanZoomMode {
13
- /** Touch gestures with a single pointer. Ignores non-touch gestures. */
14
- OneFingerTouchGestures = 1,
15
- /** Touch gestures with exactly two pointers. Ignores non-touch gestures. */
16
- TwoFingerTouchGestures = 2,
17
- RightClickDrags = 4,
18
- /** Single-pointer gestures of *any* type (including touch). */
19
- SinglePointerGestures = 8,
20
- /** Keyboard navigation (e.g. LeftArrow to move left). */
21
- Keyboard = 16,
22
- /** If provided, prevents **this** tool from rotating the viewport (other tools may still do so). */
23
- RotationLocked = 32
24
- }
25
- /**
26
- * This tool moves the viewport in response to touchpad, touchscreen, mouse, and keyboard events.
27
- *
28
- * Which events are handled, and which are skipped, are determined by the tool's `mode`. For example,
29
- * a `PanZoom` tool with `mode = PanZoomMode.TwoFingerTouchGestures|PanZoomMode.RightClickDrags` would
30
- * respond to right-click drag events and two-finger touch gestures.
31
- *
32
- * @see {@link setModeEnabled}
33
- */
34
- export default class PanZoom extends BaseTool {
35
- private editor;
36
- private mode;
37
- private transform;
38
- private readonly initialRotationSnapAngle;
39
- private readonly afterRotationStartSnapAngle;
40
- private readonly pinchZoomStartThreshold;
41
- private startTouchDist;
42
- private lastTouchDist;
43
- private lastScreenCenter;
44
- private lastTimestamp;
45
- private lastPointerDownTimestamp;
46
- private initialTouchAngle;
47
- private initialViewportRotation;
48
- private initialViewportScale;
49
- private isScaling;
50
- private isRotating;
51
- private inertialScroller;
52
- private velocity;
53
- constructor(editor: Editor, mode: PanZoomMode, description: string);
54
- canReceiveInputInReadOnlyEditor(): boolean;
55
- computePinchData(p1: Pointer, p2: Pointer): PinchData;
56
- private allPointersAreOfType;
57
- onPointerDown({ allPointers: pointers, current: currentPointer }: PointerEvt): boolean;
58
- private updateVelocity;
59
- private getCenterDelta;
60
- private toSnappedRotationDelta;
61
- /**
62
- * Given a scale update, `scaleFactor`, returns a new scale factor snapped
63
- * to a power of two (if within some tolerance of that scale).
64
- */
65
- private toSnappedScaleFactor;
66
- private handleTwoFingerMove;
67
- private handleOneFingerMove;
68
- onPointerMove({ allPointers }: PointerEvt): void;
69
- onPointerUp(event: PointerEvt): void;
70
- onGestureCancel(): void;
71
- private updateTransform;
72
- onWheel({ delta, screenPos }: WheelEvt): boolean;
73
- onKeyPress(event: KeyPressEvent): boolean;
74
- private isRotationLocked;
75
- /**
76
- * Changes the types of gestures used by this pan/zoom tool.
77
- *
78
- * @see {@link PanZoomMode} {@link setMode}
79
- *
80
- * @example
81
- * ```ts,runnable
82
- * import { Editor, PanZoomTool, PanZoomMode } from 'js-draw';
83
- *
84
- * const editor = new Editor(document.body);
85
- *
86
- * // By default, there are multiple PanZoom tools that handle different events.
87
- * // This gets all PanZoomTools.
88
- * const panZoomToolList = editor.toolController.getMatchingTools(PanZoomTool);
89
- *
90
- * // The first PanZoomTool is the highest priority -- by default,
91
- * // this tool is responsible for handling multi-finger touch gestures.
92
- * //
93
- * // Lower-priority PanZoomTools handle one-finger touch gestures and
94
- * // key-presses.
95
- * const panZoomTool = panZoomToolList[0];
96
- *
97
- * // Lock rotation for multi-finger touch gestures.
98
- * panZoomTool.setModeEnabled(PanZoomMode.RotationLocked, true);
99
- * ```
100
- */
101
- setModeEnabled(mode: PanZoomMode, enabled: boolean): void;
102
- /**
103
- * Sets all modes for this tool using a bitmask.
104
- *
105
- * @see {@link setModeEnabled}
106
- *
107
- * @example
108
- * ```ts
109
- * tool.setMode(PanZoomMode.RotationLocked|PanZoomMode.TwoFingerTouchGestures);
110
- * ```
111
- */
112
- setMode(mode: PanZoomMode): void;
113
- /**
114
- * Returns a bitmask indicating the currently-enabled modes.
115
- * @see {@link setModeEnabled}
116
- */
117
- getMode(): PanZoomMode;
118
- }
119
- export {};