js-draw 0.17.3 → 0.18.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/.github/workflows/firebase-hosting-merge.yml +2 -0
- package/.github/workflows/firebase-hosting-pull-request.yml +2 -0
- package/.github/workflows/github-pages.yml +2 -0
- package/CHANGELOG.md +10 -1
- package/README.md +17 -8
- package/build_tools/postDist.ts +71 -0
- package/dist/bundle.js +9 -1
- package/dist/cjs/build_tools/BundledFile.js +163 -0
- package/dist/cjs/build_tools/buildTranslationTemplate.js +119 -0
- package/dist/cjs/build_tools/bundle.js +10 -0
- package/dist/cjs/build_tools/postDist.js +72 -0
- package/dist/{src → cjs/src}/Color4.d.ts +1 -0
- package/dist/cjs/src/Color4.js +197 -0
- package/dist/{src → cjs/src}/Editor.d.ts +57 -1
- package/dist/cjs/src/Editor.js +904 -0
- package/dist/{src → cjs/src}/EditorImage.d.ts +4 -2
- package/dist/cjs/src/EditorImage.js +486 -0
- package/dist/cjs/src/EventDispatcher.js +57 -0
- package/dist/cjs/src/Pointer.js +84 -0
- package/dist/{src → cjs/src}/SVGLoader.d.ts +4 -0
- package/dist/cjs/src/SVGLoader.js +472 -0
- package/dist/cjs/src/UndoRedoHistory.js +93 -0
- package/dist/cjs/src/Viewport.js +264 -0
- package/dist/cjs/src/bundle/bundled.js +24 -0
- package/dist/cjs/src/commands/Command.js +34 -0
- package/dist/cjs/src/commands/Duplicate.js +39 -0
- package/dist/cjs/src/commands/Erase.js +63 -0
- package/dist/cjs/src/commands/SerializableCommand.js +42 -0
- package/dist/cjs/src/commands/UnresolvedCommand.js +28 -0
- package/dist/cjs/src/commands/invertCommand.js +49 -0
- package/dist/cjs/src/commands/lib.js +18 -0
- package/dist/cjs/src/commands/localization.js +24 -0
- package/dist/cjs/src/commands/uniteCommands.js +121 -0
- package/dist/cjs/src/components/AbstractComponent.js +258 -0
- package/dist/cjs/src/components/ImageBackground.js +146 -0
- package/dist/cjs/src/components/ImageComponent.js +152 -0
- package/dist/cjs/src/components/RestylableComponent.js +88 -0
- package/dist/cjs/src/components/SVGGlobalAttributesObject.js +65 -0
- package/dist/cjs/src/components/Stroke.js +191 -0
- package/dist/cjs/src/components/TextComponent.js +258 -0
- package/dist/cjs/src/components/UnknownSVGObject.js +50 -0
- package/dist/cjs/src/components/builders/ArrowBuilder.js +117 -0
- package/dist/cjs/src/components/builders/FreehandLineBuilder.js +173 -0
- package/dist/cjs/src/components/builders/LineBuilder.js +89 -0
- package/dist/cjs/src/components/builders/PressureSensitiveFreehandLineBuilder.js +347 -0
- package/dist/cjs/src/components/builders/RectangleBuilder.js +59 -0
- package/dist/cjs/src/components/builders/types.js +2 -0
- package/dist/cjs/src/components/lib.js +43 -0
- package/dist/cjs/src/components/localization.js +13 -0
- package/dist/cjs/src/components/util/StrokeSmoother.js +217 -0
- package/dist/cjs/src/components/util/describeComponentList.js +16 -0
- package/dist/{src → cjs/src}/lib.d.ts +2 -1
- package/dist/cjs/src/lib.js +63 -0
- package/dist/cjs/src/localization.js +13 -0
- package/dist/cjs/src/localizations/de.js +6 -0
- package/dist/cjs/src/localizations/en.js +6 -0
- package/dist/cjs/src/localizations/es.js +20 -0
- package/dist/cjs/src/localizations/getLocalizationTable.js +50 -0
- package/dist/cjs/src/math/LineSegment2.js +131 -0
- package/dist/cjs/src/math/Mat33.js +332 -0
- package/dist/cjs/src/math/Path.js +655 -0
- package/dist/cjs/src/math/Rect2.js +234 -0
- package/dist/cjs/src/math/Triangle.js +22 -0
- package/dist/cjs/src/math/Vec2.js +19 -0
- package/dist/cjs/src/math/Vec3.js +177 -0
- package/dist/cjs/src/math/lib.js +18 -0
- package/dist/cjs/src/math/rounding.js +135 -0
- package/dist/cjs/src/rendering/Display.js +214 -0
- package/dist/cjs/src/rendering/RenderingStyle.js +48 -0
- package/dist/cjs/src/rendering/TextRenderingStyle.js +29 -0
- package/dist/cjs/src/rendering/caching/CacheRecord.js +61 -0
- package/dist/cjs/src/rendering/caching/CacheRecordManager.js +50 -0
- package/dist/cjs/src/rendering/caching/RenderingCache.js +51 -0
- package/dist/cjs/src/rendering/caching/RenderingCacheNode.js +326 -0
- package/dist/cjs/src/rendering/caching/testUtils.js +27 -0
- package/dist/cjs/src/rendering/caching/types.js +2 -0
- package/dist/{src → cjs/src}/rendering/lib.d.ts +2 -0
- package/dist/cjs/src/rendering/lib.js +16 -0
- package/dist/cjs/src/rendering/localization.js +12 -0
- package/dist/cjs/src/rendering/renderers/AbstractRenderer.js +170 -0
- package/dist/{src → cjs/src}/rendering/renderers/CanvasRenderer.d.ts +25 -0
- package/dist/cjs/src/rendering/renderers/CanvasRenderer.js +236 -0
- package/dist/cjs/src/rendering/renderers/DummyRenderer.js +112 -0
- package/dist/{src → cjs/src}/rendering/renderers/SVGRenderer.d.ts +15 -0
- package/dist/cjs/src/rendering/renderers/SVGRenderer.js +311 -0
- package/dist/cjs/src/rendering/renderers/TextOnlyRenderer.js +63 -0
- package/dist/cjs/src/testing/beforeEachFile.js +12 -0
- package/dist/cjs/src/testing/createEditor.js +14 -0
- package/dist/cjs/src/testing/lib.d.ts +2 -0
- package/dist/cjs/src/testing/lib.js +10 -0
- package/dist/cjs/src/testing/loadExpectExtensions.js +28 -0
- package/dist/cjs/src/testing/sendPenEvent.d.ts +12 -0
- package/dist/cjs/src/testing/sendPenEvent.js +24 -0
- package/dist/cjs/src/testing/sendTouchEvent.d.ts +42 -0
- package/dist/cjs/src/testing/sendTouchEvent.js +87 -0
- package/dist/cjs/src/toolbar/HTMLToolbar.js +383 -0
- package/dist/cjs/src/toolbar/IconProvider.js +660 -0
- package/dist/cjs/src/toolbar/lib.js +24 -0
- package/dist/cjs/src/toolbar/localization.js +51 -0
- package/dist/cjs/src/toolbar/makeColorInput.js +120 -0
- package/dist/cjs/src/toolbar/types.js +2 -0
- package/dist/cjs/src/toolbar/widgets/ActionButtonWidget.js +31 -0
- package/dist/cjs/src/toolbar/widgets/BaseToolWidget.js +50 -0
- package/dist/cjs/src/toolbar/widgets/BaseWidget.js +313 -0
- package/dist/cjs/src/toolbar/widgets/DocumentPropertiesWidget.js +126 -0
- package/dist/cjs/src/toolbar/widgets/EraserToolWidget.js +63 -0
- package/dist/cjs/src/toolbar/widgets/HandToolWidget.js +201 -0
- package/dist/cjs/src/toolbar/widgets/InsertImageWidget.js +176 -0
- package/dist/cjs/src/toolbar/widgets/OverflowWidget.js +77 -0
- package/dist/cjs/src/toolbar/widgets/PenToolWidget.js +226 -0
- package/dist/cjs/src/toolbar/widgets/SelectionToolWidget.js +153 -0
- package/dist/cjs/src/toolbar/widgets/TextToolWidget.js +115 -0
- package/dist/cjs/src/toolbar/widgets/lib.js +26 -0
- package/dist/cjs/src/tools/BaseTool.js +66 -0
- package/dist/cjs/src/tools/Eraser.js +112 -0
- package/dist/cjs/src/tools/FindTool.js +121 -0
- package/dist/cjs/src/tools/PanZoom.js +421 -0
- package/dist/cjs/src/tools/PasteHandler.js +99 -0
- package/dist/cjs/src/tools/Pen.js +179 -0
- package/dist/cjs/src/tools/PipetteTool.js +45 -0
- package/dist/cjs/src/tools/SelectionTool/SelectAllShortcutHandler.js +28 -0
- package/dist/cjs/src/tools/SelectionTool/Selection.js +488 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionHandle.js +85 -0
- package/dist/cjs/src/tools/SelectionTool/SelectionTool.js +405 -0
- package/dist/cjs/src/tools/SelectionTool/TransformMode.js +107 -0
- package/dist/cjs/src/tools/SelectionTool/types.js +14 -0
- package/dist/cjs/src/tools/TextTool.js +262 -0
- package/dist/cjs/src/tools/ToolController.js +187 -0
- package/dist/cjs/src/tools/ToolEnabledGroup.js +14 -0
- package/dist/cjs/src/tools/ToolSwitcherShortcut.js +38 -0
- package/dist/cjs/src/tools/ToolbarShortcutHandler.js +29 -0
- package/dist/cjs/src/tools/UndoRedoShortcut.js +28 -0
- package/dist/cjs/src/tools/lib.js +36 -0
- package/dist/cjs/src/tools/localization.js +30 -0
- package/dist/cjs/src/types.js +38 -0
- package/dist/cjs/src/util/assertions.js +51 -0
- package/dist/cjs/src/util/fileToBase64.js +15 -0
- package/dist/cjs/src/util/untilNextAnimationFrame.js +9 -0
- package/dist/cjs/src/util/waitForTimeout.js +9 -0
- package/dist/mjs/build_tools/BundledFile.d.ts +13 -0
- package/dist/{build_tools/buildTranslationTemplate.js → mjs/build_tools/buildTranslationTemplate.mjs} +1 -1
- package/dist/{build_tools/bundle.js → mjs/build_tools/bundle.mjs} +1 -1
- package/dist/mjs/build_tools/postDist.d.ts +1 -0
- package/dist/mjs/build_tools/postDist.mjs +67 -0
- package/dist/mjs/src/Color4.d.ts +61 -0
- package/dist/{src/Color4.js → mjs/src/Color4.mjs} +1 -0
- package/dist/mjs/src/Editor.d.ts +308 -0
- package/dist/{src/Editor.js → mjs/src/Editor.mjs} +86 -49
- package/dist/mjs/src/EditorImage.d.ts +97 -0
- package/dist/{src/EditorImage.js → mjs/src/EditorImage.mjs} +12 -10
- package/dist/mjs/src/EventDispatcher.d.ts +30 -0
- package/dist/mjs/src/Pointer.d.ts +24 -0
- package/dist/{src/Pointer.js → mjs/src/Pointer.mjs} +1 -1
- package/dist/mjs/src/SVGLoader.d.ts +48 -0
- package/dist/{src/SVGLoader.js → mjs/src/SVGLoader.mjs} +15 -11
- package/dist/mjs/src/UndoRedoHistory.d.ts +19 -0
- package/dist/{src/UndoRedoHistory.js → mjs/src/UndoRedoHistory.mjs} +1 -1
- package/dist/mjs/src/Viewport.d.ts +71 -0
- package/dist/{src/Viewport.js → mjs/src/Viewport.mjs} +5 -5
- package/dist/mjs/src/bundle/bundled.d.ts +4 -0
- package/dist/{src/bundle/bundled.js → mjs/src/bundle/bundled.mjs} +2 -2
- package/dist/mjs/src/commands/Command.d.ts +16 -0
- package/dist/mjs/src/commands/Duplicate.d.ts +14 -0
- package/dist/{src/commands/Duplicate.js → mjs/src/commands/Duplicate.mjs} +3 -3
- package/dist/mjs/src/commands/Erase.d.ts +14 -0
- package/dist/{src/commands/Erase.js → mjs/src/commands/Erase.mjs} +3 -3
- package/dist/mjs/src/commands/SerializableCommand.d.ts +12 -0
- package/dist/{src/commands/SerializableCommand.js → mjs/src/commands/SerializableCommand.mjs} +1 -1
- package/dist/mjs/src/commands/UnresolvedCommand.d.ts +14 -0
- package/dist/{src/commands/UnresolvedCommand.js → mjs/src/commands/UnresolvedCommand.mjs} +1 -1
- package/dist/mjs/src/commands/invertCommand.d.ts +4 -0
- package/dist/{src/commands/invertCommand.js → mjs/src/commands/invertCommand.mjs} +2 -2
- package/dist/mjs/src/commands/lib.mjs +7 -0
- package/dist/mjs/src/commands/localization.d.ts +23 -0
- package/dist/mjs/src/commands/uniteCommands.d.ts +4 -0
- package/dist/{src/commands/uniteCommands.js → mjs/src/commands/uniteCommands.mjs} +2 -2
- package/dist/mjs/src/components/AbstractComponent.d.ts +73 -0
- package/dist/{src/components/AbstractComponent.js → mjs/src/components/AbstractComponent.mjs} +4 -4
- package/dist/mjs/src/components/ImageBackground.d.ts +42 -0
- package/dist/{src/components/ImageBackground.js → mjs/src/components/ImageBackground.mjs} +5 -5
- package/dist/mjs/src/components/ImageComponent.d.ts +31 -0
- package/dist/{src/components/ImageComponent.js → mjs/src/components/ImageComponent.mjs} +3 -3
- package/dist/mjs/src/components/RestylableComponent.d.ts +24 -0
- package/dist/{src/components/RestylableComponent.js → mjs/src/components/RestylableComponent.mjs} +4 -4
- package/dist/mjs/src/components/SVGGlobalAttributesObject.d.ts +21 -0
- package/dist/{src/components/SVGGlobalAttributesObject.js → mjs/src/components/SVGGlobalAttributesObject.mjs} +3 -3
- package/dist/mjs/src/components/Stroke.d.ts +40 -0
- package/dist/{src/components/Stroke.js → mjs/src/components/Stroke.mjs} +5 -5
- package/dist/mjs/src/components/TextComponent.d.ts +53 -0
- package/dist/{src/components/TextComponent.js → mjs/src/components/TextComponent.mjs} +7 -7
- package/dist/mjs/src/components/UnknownSVGObject.d.ts +18 -0
- package/dist/{src/components/UnknownSVGObject.js → mjs/src/components/UnknownSVGObject.mjs} +3 -3
- package/dist/mjs/src/components/builders/ArrowBuilder.d.ts +19 -0
- package/dist/{src/components/builders/ArrowBuilder.js → mjs/src/components/builders/ArrowBuilder.mjs} +2 -2
- package/dist/mjs/src/components/builders/FreehandLineBuilder.d.ts +33 -0
- package/dist/{src/components/builders/FreehandLineBuilder.js → mjs/src/components/builders/FreehandLineBuilder.mjs} +7 -7
- package/dist/mjs/src/components/builders/LineBuilder.d.ts +18 -0
- package/dist/{src/components/builders/LineBuilder.js → mjs/src/components/builders/LineBuilder.mjs} +2 -2
- package/dist/mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +36 -0
- package/dist/{src/components/builders/PressureSensitiveFreehandLineBuilder.js → mjs/src/components/builders/PressureSensitiveFreehandLineBuilder.mjs} +6 -6
- package/dist/mjs/src/components/builders/RectangleBuilder.d.ts +20 -0
- package/dist/{src/components/builders/RectangleBuilder.js → mjs/src/components/builders/RectangleBuilder.mjs} +4 -4
- package/dist/mjs/src/components/builders/types.d.ts +12 -0
- package/dist/mjs/src/components/builders/types.mjs +1 -0
- package/dist/{src/components/lib.js → mjs/src/components/lib.d.ts} +3 -3
- package/dist/mjs/src/components/lib.mjs +12 -0
- package/dist/mjs/src/components/localization.d.ts +11 -0
- package/dist/mjs/src/components/util/StrokeSmoother.d.ts +35 -0
- package/dist/{src/components/util/StrokeSmoother.js → mjs/src/components/util/StrokeSmoother.mjs} +3 -3
- package/dist/mjs/src/components/util/describeComponentList.d.ts +4 -0
- package/dist/{src/lib.js → mjs/src/lib.d.ts} +4 -3
- package/dist/mjs/src/lib.mjs +34 -0
- package/dist/mjs/src/localization.d.ts +14 -0
- package/dist/{src/localization.js → mjs/src/localization.mjs} +5 -5
- package/dist/mjs/src/localizations/de.d.ts +3 -0
- package/dist/{src/localizations/de.js → mjs/src/localizations/de.mjs} +1 -1
- package/dist/mjs/src/localizations/en.d.ts +3 -0
- package/dist/{src/localizations/en.js → mjs/src/localizations/en.mjs} +1 -1
- package/dist/mjs/src/localizations/es.d.ts +3 -0
- package/dist/{src/localizations/es.js → mjs/src/localizations/es.mjs} +1 -1
- package/dist/mjs/src/localizations/getLocalizationTable.d.ts +3 -0
- package/dist/{src/localizations/getLocalizationTable.js → mjs/src/localizations/getLocalizationTable.mjs} +4 -4
- package/dist/mjs/src/math/LineSegment2.d.ts +24 -0
- package/dist/{src/math/LineSegment2.js → mjs/src/math/LineSegment2.mjs} +2 -2
- package/dist/mjs/src/math/Mat33.d.ts +118 -0
- package/dist/{src/math/Mat33.js → mjs/src/math/Mat33.mjs} +2 -2
- package/dist/mjs/src/math/Path.d.ts +71 -0
- package/dist/{src/math/Path.js → mjs/src/math/Path.mjs} +5 -5
- package/dist/mjs/src/math/Rect2.d.ts +52 -0
- package/dist/{src/math/Rect2.js → mjs/src/math/Rect2.mjs} +2 -2
- package/dist/mjs/src/math/Triangle.d.ts +11 -0
- package/dist/mjs/src/math/Vec2.d.ts +13 -0
- package/dist/{src/math/Vec2.js → mjs/src/math/Vec2.mjs} +1 -1
- package/dist/mjs/src/math/Vec3.d.ts +106 -0
- package/dist/mjs/src/math/lib.mjs +7 -0
- package/dist/mjs/src/math/rounding.d.ts +4 -0
- package/dist/mjs/src/rendering/Display.d.ts +75 -0
- package/dist/{src/rendering/Display.js → mjs/src/rendering/Display.mjs} +7 -7
- package/dist/mjs/src/rendering/RenderingStyle.d.ts +31 -0
- package/dist/{src/rendering/RenderingStyle.js → mjs/src/rendering/RenderingStyle.mjs} +1 -1
- package/dist/mjs/src/rendering/TextRenderingStyle.d.ts +36 -0
- package/dist/{src/rendering/TextRenderingStyle.js → mjs/src/rendering/TextRenderingStyle.mjs} +1 -1
- package/dist/mjs/src/rendering/caching/CacheRecord.d.ts +20 -0
- package/dist/{src/rendering/caching/CacheRecord.js → mjs/src/rendering/caching/CacheRecord.mjs} +1 -1
- package/dist/mjs/src/rendering/caching/CacheRecordManager.d.ts +12 -0
- package/dist/{src/rendering/caching/CacheRecordManager.js → mjs/src/rendering/caching/CacheRecordManager.mjs} +1 -1
- package/dist/mjs/src/rendering/caching/RenderingCache.d.ts +11 -0
- package/dist/{src/rendering/caching/RenderingCache.js → mjs/src/rendering/caching/RenderingCache.mjs} +3 -3
- package/dist/mjs/src/rendering/caching/RenderingCacheNode.d.ts +29 -0
- package/dist/{src/rendering/caching/RenderingCacheNode.js → mjs/src/rendering/caching/RenderingCacheNode.mjs} +3 -3
- package/dist/mjs/src/rendering/caching/testUtils.d.ts +9 -0
- package/dist/{src/rendering/caching/testUtils.js → mjs/src/rendering/caching/testUtils.mjs} +4 -4
- package/dist/mjs/src/rendering/caching/types.d.ts +19 -0
- package/dist/mjs/src/rendering/caching/types.mjs +1 -0
- package/dist/{src/rendering/lib.js → mjs/src/rendering/lib.d.ts} +2 -0
- package/dist/mjs/src/rendering/lib.mjs +5 -0
- package/dist/mjs/src/rendering/localization.d.ts +10 -0
- package/dist/mjs/src/rendering/renderers/AbstractRenderer.d.ts +68 -0
- package/dist/{src/rendering/renderers/AbstractRenderer.js → mjs/src/rendering/renderers/AbstractRenderer.mjs} +3 -3
- package/dist/mjs/src/rendering/renderers/CanvasRenderer.d.ts +63 -0
- package/dist/{src/rendering/renderers/CanvasRenderer.js → mjs/src/rendering/renderers/CanvasRenderer.mjs} +32 -5
- package/dist/mjs/src/rendering/renderers/DummyRenderer.d.ts +35 -0
- package/dist/{src/rendering/renderers/DummyRenderer.js → mjs/src/rendering/renderers/DummyRenderer.mjs} +2 -2
- package/dist/mjs/src/rendering/renderers/SVGRenderer.d.ts +57 -0
- package/dist/{src/rendering/renderers/SVGRenderer.js → mjs/src/rendering/renderers/SVGRenderer.mjs} +33 -7
- package/dist/mjs/src/rendering/renderers/TextOnlyRenderer.d.ts +29 -0
- package/dist/{src/rendering/renderers/TextOnlyRenderer.js → mjs/src/rendering/renderers/TextOnlyRenderer.mjs} +2 -2
- package/dist/mjs/src/testing/beforeEachFile.d.ts +1 -0
- package/dist/{src/testing/beforeEachFile.js → mjs/src/testing/beforeEachFile.mjs} +1 -1
- package/dist/mjs/src/testing/createEditor.d.ts +4 -0
- package/dist/{src/testing/createEditor.js → mjs/src/testing/createEditor.mjs} +2 -2
- package/dist/mjs/src/testing/lib.d.ts +2 -0
- package/dist/mjs/src/testing/lib.mjs +2 -0
- package/dist/mjs/src/testing/loadExpectExtensions.d.ts +2 -0
- package/dist/mjs/src/testing/sendPenEvent.d.ts +12 -0
- package/dist/mjs/src/testing/sendPenEvent.mjs +19 -0
- package/dist/mjs/src/testing/sendTouchEvent.d.ts +42 -0
- package/dist/mjs/src/testing/sendTouchEvent.mjs +62 -0
- package/dist/mjs/src/toolbar/HTMLToolbar.d.ts +103 -0
- package/dist/{src/toolbar/HTMLToolbar.js → mjs/src/toolbar/HTMLToolbar.mjs} +17 -17
- package/dist/mjs/src/toolbar/IconProvider.d.ts +62 -0
- package/dist/{src/toolbar/IconProvider.js → mjs/src/toolbar/IconProvider.mjs} +4 -4
- package/dist/mjs/src/toolbar/lib.mjs +3 -0
- package/dist/mjs/src/toolbar/localization.d.ts +49 -0
- package/dist/mjs/src/toolbar/makeColorInput.d.ts +6 -0
- package/dist/{src/toolbar/makeColorInput.js → mjs/src/toolbar/makeColorInput.mjs} +3 -3
- package/dist/mjs/src/toolbar/types.d.ts +4 -0
- package/dist/mjs/src/toolbar/types.mjs +1 -0
- package/dist/mjs/src/toolbar/widgets/ActionButtonWidget.d.ts +15 -0
- package/dist/{src/toolbar/widgets/ActionButtonWidget.js → mjs/src/toolbar/widgets/ActionButtonWidget.mjs} +1 -1
- package/dist/mjs/src/toolbar/widgets/BaseToolWidget.d.ts +11 -0
- package/dist/{src/toolbar/widgets/BaseToolWidget.js → mjs/src/toolbar/widgets/BaseToolWidget.mjs} +2 -2
- package/dist/mjs/src/toolbar/widgets/BaseWidget.d.ts +72 -0
- package/dist/{src/toolbar/widgets/BaseWidget.js → mjs/src/toolbar/widgets/BaseWidget.mjs} +3 -3
- package/dist/mjs/src/toolbar/widgets/DocumentPropertiesWidget.d.ts +18 -0
- package/dist/{src/toolbar/widgets/DocumentPropertiesWidget.js → mjs/src/toolbar/widgets/DocumentPropertiesWidget.mjs} +9 -7
- package/dist/mjs/src/toolbar/widgets/EraserToolWidget.d.ts +17 -0
- package/dist/{src/toolbar/widgets/EraserToolWidget.js → mjs/src/toolbar/widgets/EraserToolWidget.mjs} +3 -3
- package/dist/mjs/src/toolbar/widgets/HandToolWidget.d.ts +17 -0
- package/dist/{src/toolbar/widgets/HandToolWidget.js → mjs/src/toolbar/widgets/HandToolWidget.mjs} +7 -7
- package/dist/mjs/src/toolbar/widgets/InsertImageWidget.d.ts +19 -0
- package/dist/{src/toolbar/widgets/InsertImageWidget.js → mjs/src/toolbar/widgets/InsertImageWidget.mjs} +8 -8
- package/dist/mjs/src/toolbar/widgets/OverflowWidget.d.ts +25 -0
- package/dist/{src/toolbar/widgets/OverflowWidget.js → mjs/src/toolbar/widgets/OverflowWidget.mjs} +1 -1
- package/dist/mjs/src/toolbar/widgets/PenToolWidget.d.ts +27 -0
- package/dist/{src/toolbar/widgets/PenToolWidget.js → mjs/src/toolbar/widgets/PenToolWidget.mjs} +11 -10
- package/dist/mjs/src/toolbar/widgets/SelectionToolWidget.d.ts +13 -0
- package/dist/{src/toolbar/widgets/SelectionToolWidget.js → mjs/src/toolbar/widgets/SelectionToolWidget.mjs} +8 -8
- package/dist/mjs/src/toolbar/widgets/TextToolWidget.d.ts +16 -0
- package/dist/{src/toolbar/widgets/TextToolWidget.js → mjs/src/toolbar/widgets/TextToolWidget.mjs} +9 -6
- package/dist/mjs/src/toolbar/widgets/lib.mjs +10 -0
- package/dist/mjs/src/tools/BaseTool.d.ts +22 -0
- package/dist/{src/tools/BaseTool.js → mjs/src/tools/BaseTool.mjs} +1 -1
- package/dist/mjs/src/tools/Eraser.d.ts +23 -0
- package/dist/{src/tools/Eraser.js → mjs/src/tools/Eraser.mjs} +8 -8
- package/dist/mjs/src/tools/FindTool.d.ts +21 -0
- package/dist/{src/tools/FindTool.js → mjs/src/tools/FindTool.mjs} +2 -2
- package/dist/mjs/src/tools/PanZoom.d.ts +52 -0
- package/dist/{src/tools/PanZoom.js → mjs/src/tools/PanZoom.mjs} +8 -8
- package/dist/mjs/src/tools/PasteHandler.d.ts +23 -0
- package/dist/{src/tools/PasteHandler.js → mjs/src/tools/PasteHandler.mjs} +7 -7
- package/dist/mjs/src/tools/Pen.d.ts +39 -0
- package/dist/{src/tools/Pen.js → mjs/src/tools/Pen.mjs} +5 -5
- package/dist/mjs/src/tools/PipetteTool.d.ts +18 -0
- package/dist/{src/tools/PipetteTool.js → mjs/src/tools/PipetteTool.mjs} +1 -1
- package/dist/mjs/src/tools/SelectionTool/SelectAllShortcutHandler.d.ts +8 -0
- package/dist/{src/tools/SelectionTool/SelectAllShortcutHandler.js → mjs/src/tools/SelectionTool/SelectAllShortcutHandler.mjs} +2 -2
- package/dist/mjs/src/tools/SelectionTool/Selection.d.ts +64 -0
- package/dist/{src/tools/SelectionTool/Selection.js → mjs/src/tools/SelectionTool/Selection.mjs} +12 -12
- package/dist/mjs/src/tools/SelectionTool/SelectionHandle.d.ts +38 -0
- package/dist/{src/tools/SelectionTool/SelectionHandle.js → mjs/src/tools/SelectionTool/SelectionHandle.mjs} +3 -3
- package/dist/mjs/src/tools/SelectionTool/SelectionTool.d.ts +36 -0
- package/dist/{src/tools/SelectionTool/SelectionTool.js → mjs/src/tools/SelectionTool/SelectionTool.mjs} +13 -14
- package/dist/mjs/src/tools/SelectionTool/TransformMode.d.ts +34 -0
- package/dist/{src/tools/SelectionTool/TransformMode.js → mjs/src/tools/SelectionTool/TransformMode.mjs} +4 -4
- package/dist/mjs/src/tools/SelectionTool/types.d.ts +9 -0
- package/dist/mjs/src/tools/TextTool.d.ts +33 -0
- package/dist/{src/tools/TextTool.js → mjs/src/tools/TextTool.mjs} +11 -11
- package/dist/mjs/src/tools/ToolController.d.ts +18 -0
- package/dist/{src/tools/ToolController.js → mjs/src/tools/ToolController.mjs} +16 -16
- package/dist/mjs/src/tools/ToolEnabledGroup.d.ts +6 -0
- package/dist/mjs/src/tools/ToolSwitcherShortcut.d.ts +16 -0
- package/dist/{src/tools/ToolSwitcherShortcut.js → mjs/src/tools/ToolSwitcherShortcut.mjs} +1 -1
- package/dist/mjs/src/tools/ToolbarShortcutHandler.d.ts +12 -0
- package/dist/{src/tools/ToolbarShortcutHandler.js → mjs/src/tools/ToolbarShortcutHandler.mjs} +1 -1
- package/dist/mjs/src/tools/UndoRedoShortcut.d.ts +8 -0
- package/dist/{src/tools/UndoRedoShortcut.js → mjs/src/tools/UndoRedoShortcut.mjs} +1 -1
- package/dist/{src/tools/lib.js → mjs/src/tools/lib.d.ts} +1 -1
- package/dist/mjs/src/tools/lib.mjs +16 -0
- package/dist/mjs/src/tools/localization.d.ts +28 -0
- package/dist/mjs/src/types.d.ts +151 -0
- package/dist/mjs/src/util/assertions.d.ts +23 -0
- package/dist/mjs/src/util/fileToBase64.d.ts +3 -0
- package/dist/mjs/src/util/untilNextAnimationFrame.d.ts +3 -0
- package/dist/mjs/src/util/waitForTimeout.d.ts +2 -0
- package/package.json +34 -33
- package/src/Color4.ts +2 -0
- package/src/Editor.ts +62 -28
- package/src/EditorImage.ts +4 -2
- package/src/SVGLoader.ts +4 -0
- package/src/lib.ts +2 -1
- package/src/rendering/lib.ts +2 -0
- package/src/rendering/renderers/CanvasRenderer.ts +27 -0
- package/src/rendering/renderers/SVGRenderer.ts +32 -1
- package/src/testing/lib.ts +3 -0
- package/src/testing/sendPenEvent.ts +31 -0
- package/src/testing/sendTouchEvent.ts +36 -1
- package/src/toolbar/toolbar.css +5 -0
- package/src/toolbar/widgets/DocumentPropertiesWidget.ts +4 -2
- package/src/toolbar/widgets/PenToolWidget.ts +1 -0
- package/src/toolbar/widgets/TextToolWidget.ts +4 -1
- package/src/tools/Eraser.test.ts +11 -10
- package/src/tools/PanZoom.test.ts +1 -1
- package/src/tools/Pen.test.ts +63 -62
- package/src/tools/SelectionTool/SelectionTool.test.ts +15 -14
- package/src/tools/SelectionTool/SelectionTool.ts +5 -7
- package/tsconfig.json +3 -2
- package/tsconfig.mjs.json +9 -0
- package/dist/src/testing/sendTouchEvent.d.ts +0 -6
- package/dist/src/testing/sendTouchEvent.js +0 -26
- /package/dist/{build_tools → cjs/build_tools}/BundledFile.d.ts +0 -0
- /package/dist/{build_tools → cjs/build_tools}/buildTranslationTemplate.d.ts +0 -0
- /package/dist/{build_tools → cjs/build_tools}/bundle.d.ts +0 -0
- /package/dist/{src/components/builders/types.js → cjs/build_tools/postDist.d.ts} +0 -0
- /package/dist/{src → cjs/src}/EventDispatcher.d.ts +0 -0
- /package/dist/{src → cjs/src}/Pointer.d.ts +0 -0
- /package/dist/{src → cjs/src}/UndoRedoHistory.d.ts +0 -0
- /package/dist/{src → cjs/src}/Viewport.d.ts +0 -0
- /package/dist/{src → cjs/src}/bundle/bundled.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/Command.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/Duplicate.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/Erase.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/SerializableCommand.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/UnresolvedCommand.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/invertCommand.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/uniteCommands.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/AbstractComponent.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/ImageBackground.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/ImageComponent.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/RestylableComponent.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/SVGGlobalAttributesObject.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/Stroke.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/TextComponent.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/UnknownSVGObject.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/ArrowBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/FreehandLineBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/LineBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/RectangleBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/builders/types.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/util/StrokeSmoother.d.ts +0 -0
- /package/dist/{src → cjs/src}/components/util/describeComponentList.d.ts +0 -0
- /package/dist/{src → cjs/src}/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/localizations/de.d.ts +0 -0
- /package/dist/{src → cjs/src}/localizations/en.d.ts +0 -0
- /package/dist/{src → cjs/src}/localizations/es.d.ts +0 -0
- /package/dist/{src → cjs/src}/localizations/getLocalizationTable.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/LineSegment2.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Mat33.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Path.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Rect2.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Triangle.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Vec2.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/Vec3.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/math/rounding.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/Display.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/RenderingStyle.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/TextRenderingStyle.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/CacheRecord.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/CacheRecordManager.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/RenderingCache.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/RenderingCacheNode.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/testUtils.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/caching/types.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/renderers/AbstractRenderer.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/renderers/DummyRenderer.d.ts +0 -0
- /package/dist/{src → cjs/src}/rendering/renderers/TextOnlyRenderer.d.ts +0 -0
- /package/dist/{src → cjs/src}/testing/beforeEachFile.d.ts +0 -0
- /package/dist/{src → cjs/src}/testing/createEditor.d.ts +0 -0
- /package/dist/{src → cjs/src}/testing/loadExpectExtensions.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/HTMLToolbar.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/IconProvider.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/makeColorInput.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/types.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/ActionButtonWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/BaseToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/BaseWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/DocumentPropertiesWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/EraserToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/HandToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/InsertImageWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/OverflowWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/PenToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/SelectionToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/TextToolWidget.d.ts +0 -0
- /package/dist/{src → cjs/src}/toolbar/widgets/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/BaseTool.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/Eraser.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/FindTool.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/PanZoom.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/PasteHandler.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/Pen.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/PipetteTool.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/Selection.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionHandle.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/SelectionTool.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/TransformMode.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/SelectionTool/types.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/TextTool.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/ToolController.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/ToolEnabledGroup.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/ToolSwitcherShortcut.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/ToolbarShortcutHandler.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/UndoRedoShortcut.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/lib.d.ts +0 -0
- /package/dist/{src → cjs/src}/tools/localization.d.ts +0 -0
- /package/dist/{src → cjs/src}/types.d.ts +0 -0
- /package/dist/{src → cjs/src}/util/assertions.d.ts +0 -0
- /package/dist/{src → cjs/src}/util/fileToBase64.d.ts +0 -0
- /package/dist/{src → cjs/src}/util/untilNextAnimationFrame.d.ts +0 -0
- /package/dist/{src → cjs/src}/util/waitForTimeout.d.ts +0 -0
- /package/dist/{build_tools/BundledFile.js → mjs/build_tools/BundledFile.mjs} +0 -0
- /package/dist/{src/rendering/caching/types.js → mjs/build_tools/buildTranslationTemplate.d.ts} +0 -0
- /package/dist/{src/toolbar/types.js → mjs/build_tools/bundle.d.ts} +0 -0
- /package/dist/{src/EventDispatcher.js → mjs/src/EventDispatcher.mjs} +0 -0
- /package/dist/{src/commands/Command.js → mjs/src/commands/Command.mjs} +0 -0
- /package/dist/{src/commands/lib.js → mjs/src/commands/lib.d.ts} +0 -0
- /package/dist/{src/commands/localization.js → mjs/src/commands/localization.mjs} +0 -0
- /package/dist/{src/components/localization.js → mjs/src/components/localization.mjs} +0 -0
- /package/dist/{src/components/util/describeComponentList.js → mjs/src/components/util/describeComponentList.mjs} +0 -0
- /package/dist/{src/math/Triangle.js → mjs/src/math/Triangle.mjs} +0 -0
- /package/dist/{src/math/Vec3.js → mjs/src/math/Vec3.mjs} +0 -0
- /package/dist/{src/math/lib.js → mjs/src/math/lib.d.ts} +0 -0
- /package/dist/{src/math/rounding.js → mjs/src/math/rounding.mjs} +0 -0
- /package/dist/{src/rendering/localization.js → mjs/src/rendering/localization.mjs} +0 -0
- /package/dist/{src/testing/loadExpectExtensions.js → mjs/src/testing/loadExpectExtensions.mjs} +0 -0
- /package/dist/{src/toolbar/lib.js → mjs/src/toolbar/lib.d.ts} +0 -0
- /package/dist/{src/toolbar/localization.js → mjs/src/toolbar/localization.mjs} +0 -0
- /package/dist/{src/toolbar/widgets/lib.js → mjs/src/toolbar/widgets/lib.d.ts} +0 -0
- /package/dist/{src/tools/SelectionTool/types.js → mjs/src/tools/SelectionTool/types.mjs} +0 -0
- /package/dist/{src/tools/ToolEnabledGroup.js → mjs/src/tools/ToolEnabledGroup.mjs} +0 -0
- /package/dist/{src/tools/localization.js → mjs/src/tools/localization.mjs} +0 -0
- /package/dist/{src/types.js → mjs/src/types.mjs} +0 -0
- /package/dist/{src/util/assertions.js → mjs/src/util/assertions.mjs} +0 -0
- /package/dist/{src/util/fileToBase64.js → mjs/src/util/fileToBase64.mjs} +0 -0
- /package/dist/{src/util/untilNextAnimationFrame.js → mjs/src/util/untilNextAnimationFrame.mjs} +0 -0
- /package/dist/{src/util/waitForTimeout.js → mjs/src/util/waitForTimeout.mjs} +0 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
export interface TextRendererLocalization {
|
2
|
+
pathNodeCount(pathCount: number): string;
|
3
|
+
textNodeCount(nodeCount: number): string;
|
4
|
+
imageNodeCount(nodeCount: number): string;
|
5
|
+
textNode(content: string): string;
|
6
|
+
unlabeledImageNode: string;
|
7
|
+
imageNode(label: string): string;
|
8
|
+
rerenderAsText: string;
|
9
|
+
}
|
10
|
+
export declare const defaultTextRendererLocalization: TextRendererLocalization;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import Color4 from '../../Color4';
|
2
|
+
import { LoadSaveDataTable } from '../../components/AbstractComponent';
|
3
|
+
import Mat33 from '../../math/Mat33';
|
4
|
+
import Path, { PathCommand } from '../../math/Path';
|
5
|
+
import Rect2 from '../../math/Rect2';
|
6
|
+
import { Point2, Vec2 } from '../../math/Vec2';
|
7
|
+
import Viewport from '../../Viewport';
|
8
|
+
import RenderingStyle from '../RenderingStyle';
|
9
|
+
import TextStyle from '../TextRenderingStyle';
|
10
|
+
export interface RenderablePathSpec {
|
11
|
+
startPoint: Point2;
|
12
|
+
commands: PathCommand[];
|
13
|
+
style: RenderingStyle;
|
14
|
+
path?: Path;
|
15
|
+
}
|
16
|
+
export interface RenderableImage {
|
17
|
+
transform: Mat33;
|
18
|
+
image: HTMLImageElement | HTMLCanvasElement;
|
19
|
+
base64Url: string;
|
20
|
+
label?: string;
|
21
|
+
}
|
22
|
+
export default abstract class AbstractRenderer {
|
23
|
+
private viewport;
|
24
|
+
private selfTransform;
|
25
|
+
private transformStack;
|
26
|
+
protected constructor(viewport: Viewport);
|
27
|
+
protected getViewport(): Viewport;
|
28
|
+
abstract displaySize(): Vec2;
|
29
|
+
abstract clear(): void;
|
30
|
+
protected abstract beginPath(startPoint: Point2): void;
|
31
|
+
protected abstract endPath(style: RenderingStyle): void;
|
32
|
+
protected abstract lineTo(point: Point2): void;
|
33
|
+
protected abstract moveTo(point: Point2): void;
|
34
|
+
protected abstract traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
|
35
|
+
protected abstract traceQuadraticBezierCurve(controlPoint: Point2, endPoint: Point2): void;
|
36
|
+
abstract drawText(text: string, transform: Mat33, style: TextStyle): void;
|
37
|
+
abstract drawImage(image: RenderableImage): void;
|
38
|
+
abstract isTooSmallToRender(rect: Rect2): boolean;
|
39
|
+
setDraftMode(_draftMode: boolean): void;
|
40
|
+
protected objectLevel: number;
|
41
|
+
private currentPaths;
|
42
|
+
private flushPath;
|
43
|
+
drawPath(path: RenderablePathSpec): void;
|
44
|
+
drawRect(rect: Rect2, lineWidth: number, lineFill: RenderingStyle): void;
|
45
|
+
fillRect(rect: Rect2, fill: Color4): void;
|
46
|
+
startObject(_boundingBox: Rect2, _clip?: boolean): void;
|
47
|
+
/**
|
48
|
+
* Notes the end of an object.
|
49
|
+
* @param _loaderData - a map from strings to JSON-ifyable objects
|
50
|
+
* and contains properties attached to the object by whatever loader loaded the image. This
|
51
|
+
* is used to preserve attributes not supported by js-draw when loading/saving an image.
|
52
|
+
* Renderers may ignore this.
|
53
|
+
*
|
54
|
+
* @param _objectTags - a list of labels (e.g. `className`s) to be attached to the object.
|
55
|
+
* Renderers may ignore this.
|
56
|
+
*/
|
57
|
+
endObject(_loaderData?: LoadSaveDataTable, _objectTags?: string[]): void;
|
58
|
+
protected getNestingLevel(): number;
|
59
|
+
abstract drawPoints(...points: Point2[]): void;
|
60
|
+
canRenderFromWithoutDataLoss(_other: AbstractRenderer): boolean;
|
61
|
+
renderFromOtherOfSameType(_renderTo: Mat33, other: AbstractRenderer): void;
|
62
|
+
setTransform(transform: Mat33 | null): void;
|
63
|
+
pushTransform(transform: Mat33): void;
|
64
|
+
popTransform(): void;
|
65
|
+
getCanvasToScreenTransform(): Mat33;
|
66
|
+
canvasToScreen(vec: Vec2): Vec2;
|
67
|
+
getSizeOfCanvasPixelOnScreen(): number;
|
68
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import
|
2
|
-
import
|
3
|
-
import
|
1
|
+
import Path, { PathCommandType } from '../../math/Path.mjs';
|
2
|
+
import { Vec2 } from '../../math/Vec2.mjs';
|
3
|
+
import { stylesEqual } from '../RenderingStyle.mjs';
|
4
4
|
export default class AbstractRenderer {
|
5
5
|
constructor(viewport) {
|
6
6
|
this.viewport = viewport;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import Mat33 from '../../math/Mat33';
|
2
|
+
import Rect2 from '../../math/Rect2';
|
3
|
+
import { Point2, Vec2 } from '../../math/Vec2';
|
4
|
+
import Vec3 from '../../math/Vec3';
|
5
|
+
import Viewport from '../../Viewport';
|
6
|
+
import RenderingStyle from '../RenderingStyle';
|
7
|
+
import TextStyle from '../TextRenderingStyle';
|
8
|
+
import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
|
9
|
+
/**
|
10
|
+
* Renders onto a `CanvasRenderingContext2D`.
|
11
|
+
*
|
12
|
+
* @example
|
13
|
+
* ```ts
|
14
|
+
* const editor = new Editor(document.body);
|
15
|
+
*
|
16
|
+
* const canvas = document.createElement('canvas');
|
17
|
+
* const ctx = canvas.getContext('2d');
|
18
|
+
*
|
19
|
+
* // Ensure that the canvas can fit the entire rendering
|
20
|
+
* const viewport = editor.image.getImportExportViewport();
|
21
|
+
* canvas.width = viewport.getScreenRectSize().x;
|
22
|
+
* canvas.height = viewport.getScreenRectSize().y;
|
23
|
+
*
|
24
|
+
* // Render editor.image onto the renderer
|
25
|
+
* const renderer = new CanvasRenderer(ctx, viewport);
|
26
|
+
* editor.image.render(renderer, viewport);
|
27
|
+
* ```
|
28
|
+
*/
|
29
|
+
export default class CanvasRenderer extends AbstractRenderer {
|
30
|
+
private ctx;
|
31
|
+
private ignoreObjectsAboveLevel;
|
32
|
+
private ignoringObject;
|
33
|
+
private currentObjectBBox;
|
34
|
+
private minSquareCurveApproxDist;
|
35
|
+
private minRenderSizeAnyDimen;
|
36
|
+
private minRenderSizeBothDimens;
|
37
|
+
/**
|
38
|
+
* Creates a new `CanvasRenderer` that renders to the given rendering context.
|
39
|
+
* The `viewport` is used to determine the translation/rotation/scaling of the content
|
40
|
+
* to draw.
|
41
|
+
*/
|
42
|
+
constructor(ctx: CanvasRenderingContext2D, viewport: Viewport);
|
43
|
+
private transformBy;
|
44
|
+
canRenderFromWithoutDataLoss(other: AbstractRenderer): boolean;
|
45
|
+
renderFromOtherOfSameType(transformBy: Mat33, other: AbstractRenderer): void;
|
46
|
+
setDraftMode(draftMode: boolean): void;
|
47
|
+
displaySize(): Vec2;
|
48
|
+
clear(): void;
|
49
|
+
protected beginPath(startPoint: Point2): void;
|
50
|
+
protected endPath(style: RenderingStyle): void;
|
51
|
+
protected lineTo(point: Point2): void;
|
52
|
+
protected moveTo(point: Point2): void;
|
53
|
+
protected traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void;
|
54
|
+
protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
|
55
|
+
drawPath(path: RenderablePathSpec): void;
|
56
|
+
drawText(text: string, transform: Mat33, style: TextStyle): void;
|
57
|
+
drawImage(image: RenderableImage): void;
|
58
|
+
private clipLevels;
|
59
|
+
startObject(boundingBox: Rect2, clip?: boolean): void;
|
60
|
+
endObject(): void;
|
61
|
+
drawPoints(...points: Point2[]): void;
|
62
|
+
isTooSmallToRender(rect: Rect2): boolean;
|
63
|
+
}
|
@@ -1,9 +1,34 @@
|
|
1
|
-
import
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
1
|
+
import Color4 from '../../Color4.mjs';
|
2
|
+
import TextComponent from '../../components/TextComponent.mjs';
|
3
|
+
import Path from '../../math/Path.mjs';
|
4
|
+
import { Vec2 } from '../../math/Vec2.mjs';
|
5
|
+
import AbstractRenderer from './AbstractRenderer.mjs';
|
6
|
+
/**
|
7
|
+
* Renders onto a `CanvasRenderingContext2D`.
|
8
|
+
*
|
9
|
+
* @example
|
10
|
+
* ```ts
|
11
|
+
* const editor = new Editor(document.body);
|
12
|
+
*
|
13
|
+
* const canvas = document.createElement('canvas');
|
14
|
+
* const ctx = canvas.getContext('2d');
|
15
|
+
*
|
16
|
+
* // Ensure that the canvas can fit the entire rendering
|
17
|
+
* const viewport = editor.image.getImportExportViewport();
|
18
|
+
* canvas.width = viewport.getScreenRectSize().x;
|
19
|
+
* canvas.height = viewport.getScreenRectSize().y;
|
20
|
+
*
|
21
|
+
* // Render editor.image onto the renderer
|
22
|
+
* const renderer = new CanvasRenderer(ctx, viewport);
|
23
|
+
* editor.image.render(renderer, viewport);
|
24
|
+
* ```
|
25
|
+
*/
|
6
26
|
export default class CanvasRenderer extends AbstractRenderer {
|
27
|
+
/**
|
28
|
+
* Creates a new `CanvasRenderer` that renders to the given rendering context.
|
29
|
+
* The `viewport` is used to determine the translation/rotation/scaling of the content
|
30
|
+
* to draw.
|
31
|
+
*/
|
7
32
|
constructor(ctx, viewport) {
|
8
33
|
super(viewport);
|
9
34
|
this.ctx = ctx;
|
@@ -175,6 +200,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
175
200
|
this.ignoringObject = false;
|
176
201
|
}
|
177
202
|
}
|
203
|
+
// @internal
|
178
204
|
drawPoints(...points) {
|
179
205
|
const pointRadius = 10;
|
180
206
|
for (let i = 0; i < points.length; i++) {
|
@@ -191,6 +217,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
191
217
|
this.ctx.fillText(`${i}`, point.x, point.y, pointRadius * 2);
|
192
218
|
}
|
193
219
|
}
|
220
|
+
// @internal
|
194
221
|
isTooSmallToRender(rect) {
|
195
222
|
// Should we ignore all objects within this object's bbox?
|
196
223
|
const diagonal = this.getCanvasToScreenTransform().transformVec3(rect.size);
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import Mat33 from '../../math/Mat33';
|
2
|
+
import Rect2 from '../../math/Rect2';
|
3
|
+
import { Point2, Vec2 } from '../../math/Vec2';
|
4
|
+
import Vec3 from '../../math/Vec3';
|
5
|
+
import Viewport from '../../Viewport';
|
6
|
+
import RenderingStyle from '../RenderingStyle';
|
7
|
+
import TextStyle from '../TextRenderingStyle';
|
8
|
+
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
9
|
+
export default class DummyRenderer extends AbstractRenderer {
|
10
|
+
clearedCount: number;
|
11
|
+
renderedPathCount: number;
|
12
|
+
lastFillStyle: RenderingStyle | null;
|
13
|
+
lastPoint: Point2 | null;
|
14
|
+
objectNestingLevel: number;
|
15
|
+
lastText: string | null;
|
16
|
+
lastImage: RenderableImage | null;
|
17
|
+
pointBuffer: Point2[];
|
18
|
+
constructor(viewport: Viewport);
|
19
|
+
displaySize(): Vec2;
|
20
|
+
clear(): void;
|
21
|
+
protected beginPath(startPoint: Vec3): void;
|
22
|
+
protected endPath(style: RenderingStyle): void;
|
23
|
+
protected lineTo(point: Vec3): void;
|
24
|
+
protected moveTo(point: Point2): void;
|
25
|
+
protected traceCubicBezierCurve(p1: Vec3, p2: Vec3, p3: Vec3): void;
|
26
|
+
protected traceQuadraticBezierCurve(controlPoint: Vec3, endPoint: Vec3): void;
|
27
|
+
drawPoints(..._points: Vec3[]): void;
|
28
|
+
drawText(text: string, _transform: Mat33, _style: TextStyle): void;
|
29
|
+
drawImage(image: RenderableImage): void;
|
30
|
+
startObject(boundingBox: Rect2, _clip: boolean): void;
|
31
|
+
endObject(): void;
|
32
|
+
isTooSmallToRender(_rect: Rect2): boolean;
|
33
|
+
canRenderFromWithoutDataLoss(other: AbstractRenderer): boolean;
|
34
|
+
renderFromOtherOfSameType(transform: Mat33, other: AbstractRenderer): void;
|
35
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import { Vec2 } from '../../math/Vec2.mjs';
|
2
|
+
import AbstractRenderer from './AbstractRenderer.mjs';
|
3
3
|
// Renderer that outputs almost nothing. Useful for automated tests.
|
4
4
|
export default class DummyRenderer extends AbstractRenderer {
|
5
5
|
constructor(viewport) {
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { LoadSaveDataTable } from '../../components/AbstractComponent';
|
2
|
+
import Mat33 from '../../math/Mat33';
|
3
|
+
import Rect2 from '../../math/Rect2';
|
4
|
+
import { Point2, Vec2 } from '../../math/Vec2';
|
5
|
+
import Viewport from '../../Viewport';
|
6
|
+
import RenderingStyle from '../RenderingStyle';
|
7
|
+
import TextStyle from '../TextRenderingStyle';
|
8
|
+
import AbstractRenderer, { RenderableImage, RenderablePathSpec } from './AbstractRenderer';
|
9
|
+
export declare const renderedStylesheetId = "js-draw-style-sheet";
|
10
|
+
/**
|
11
|
+
* Renders onto an `SVGElement`.
|
12
|
+
*
|
13
|
+
* @see {@link Editor.toSVG}
|
14
|
+
*/
|
15
|
+
export default class SVGRenderer extends AbstractRenderer {
|
16
|
+
private elem;
|
17
|
+
private sanitize;
|
18
|
+
private lastPathStyle;
|
19
|
+
private lastPathString;
|
20
|
+
private objectElems;
|
21
|
+
private overwrittenAttrs;
|
22
|
+
/**
|
23
|
+
* Creates a renderer that renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
|
24
|
+
*
|
25
|
+
* `viewport` is used to determine the translation/rotation/scaling/output size of the rendered
|
26
|
+
* data.
|
27
|
+
*/
|
28
|
+
constructor(elem: SVGSVGElement, viewport: Viewport, sanitize?: boolean);
|
29
|
+
private addStyleSheet;
|
30
|
+
setRootSVGAttribute(name: string, value: string | null): void;
|
31
|
+
displaySize(): Vec2;
|
32
|
+
clear(): void;
|
33
|
+
private addPathToSVG;
|
34
|
+
drawPath(pathSpec: RenderablePathSpec): void;
|
35
|
+
private transformFrom;
|
36
|
+
private textContainer;
|
37
|
+
private textContainerTransform;
|
38
|
+
private textParentStyle;
|
39
|
+
drawText(text: string, transform: Mat33, style: TextStyle): void;
|
40
|
+
drawImage(image: RenderableImage): void;
|
41
|
+
startObject(boundingBox: Rect2): void;
|
42
|
+
endObject(loaderData?: LoadSaveDataTable, elemClassNames?: string[]): void;
|
43
|
+
private unimplementedMessage;
|
44
|
+
protected beginPath(_startPoint: Point2): void;
|
45
|
+
protected endPath(_style: RenderingStyle): void;
|
46
|
+
protected lineTo(_point: Point2): void;
|
47
|
+
protected moveTo(_point: Point2): void;
|
48
|
+
protected traceCubicBezierCurve(_controlPoint1: Point2, _controlPoint2: Point2, _endPoint: Point2): void;
|
49
|
+
protected traceQuadraticBezierCurve(_controlPoint: Point2, _endPoint: Point2): void;
|
50
|
+
drawPoints(...points: Point2[]): void;
|
51
|
+
drawSVGElem(elem: SVGElement): void;
|
52
|
+
isTooSmallToRender(_rect: Rect2): boolean;
|
53
|
+
static fromViewport(viewport: Viewport, sanitize?: boolean): {
|
54
|
+
element: SVGSVGElement;
|
55
|
+
renderer: SVGRenderer;
|
56
|
+
};
|
57
|
+
}
|
package/dist/{src/rendering/renderers/SVGRenderer.js → mjs/src/rendering/renderers/SVGRenderer.mjs}
RENAMED
@@ -1,13 +1,23 @@
|
|
1
|
-
import
|
2
|
-
import
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
1
|
+
import Mat33 from '../../math/Mat33.mjs';
|
2
|
+
import Path from '../../math/Path.mjs';
|
3
|
+
import { toRoundedString } from '../../math/rounding.mjs';
|
4
|
+
import { Vec2 } from '../../math/Vec2.mjs';
|
5
|
+
import { svgAttributesDataKey, svgStyleAttributesDataKey } from '../../SVGLoader.mjs';
|
6
|
+
import AbstractRenderer from './AbstractRenderer.mjs';
|
7
7
|
export const renderedStylesheetId = 'js-draw-style-sheet';
|
8
8
|
const svgNameSpace = 'http://www.w3.org/2000/svg';
|
9
|
+
/**
|
10
|
+
* Renders onto an `SVGElement`.
|
11
|
+
*
|
12
|
+
* @see {@link Editor.toSVG}
|
13
|
+
*/
|
9
14
|
export default class SVGRenderer extends AbstractRenderer {
|
10
|
-
|
15
|
+
/**
|
16
|
+
* Creates a renderer that renders onto `elem`. If `sanitize`, don't render potentially untrusted data.
|
17
|
+
*
|
18
|
+
* `viewport` is used to determine the translation/rotation/scaling/output size of the rendered
|
19
|
+
* data.
|
20
|
+
*/
|
11
21
|
constructor(elem, viewport, sanitize = false) {
|
12
22
|
super(viewport);
|
13
23
|
this.elem = elem;
|
@@ -275,4 +285,20 @@ export default class SVGRenderer extends AbstractRenderer {
|
|
275
285
|
isTooSmallToRender(_rect) {
|
276
286
|
return false;
|
277
287
|
}
|
288
|
+
// Creates a new SVG element and SVGRenerer with attributes set for the given Viewport.
|
289
|
+
static fromViewport(viewport, sanitize = true) {
|
290
|
+
const svgNameSpace = 'http://www.w3.org/2000/svg';
|
291
|
+
const result = document.createElementNS(svgNameSpace, 'svg');
|
292
|
+
const rect = viewport.getScreenRectSize();
|
293
|
+
// rect.x -> size of rect in x direction, rect.y -> size of rect in y direction.
|
294
|
+
result.setAttribute('viewBox', [0, 0, rect.x, rect.y].map(part => toRoundedString(part)).join(' '));
|
295
|
+
result.setAttribute('width', toRoundedString(rect.x));
|
296
|
+
result.setAttribute('height', toRoundedString(rect.y));
|
297
|
+
// Ensure the image can be identified as an SVG if downloaded.
|
298
|
+
// See https://jwatt.org/svg/authoring/
|
299
|
+
result.setAttribute('version', '1.1');
|
300
|
+
result.setAttribute('baseProfile', 'full');
|
301
|
+
result.setAttribute('xmlns', svgNameSpace);
|
302
|
+
return { element: result, renderer: new SVGRenderer(result, viewport, sanitize) };
|
303
|
+
}
|
278
304
|
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import Mat33 from '../../math/Mat33';
|
2
|
+
import Rect2 from '../../math/Rect2';
|
3
|
+
import Vec3 from '../../math/Vec3';
|
4
|
+
import Viewport from '../../Viewport';
|
5
|
+
import { TextRendererLocalization } from '../localization';
|
6
|
+
import RenderingStyle from '../RenderingStyle';
|
7
|
+
import TextStyle from '../TextRenderingStyle';
|
8
|
+
import AbstractRenderer, { RenderableImage } from './AbstractRenderer';
|
9
|
+
export default class TextOnlyRenderer extends AbstractRenderer {
|
10
|
+
private localizationTable;
|
11
|
+
private descriptionBuilder;
|
12
|
+
private pathCount;
|
13
|
+
private textNodeCount;
|
14
|
+
private imageNodeCount;
|
15
|
+
constructor(viewport: Viewport, localizationTable: TextRendererLocalization);
|
16
|
+
displaySize(): Vec3;
|
17
|
+
clear(): void;
|
18
|
+
getDescription(): string;
|
19
|
+
protected beginPath(_startPoint: Vec3): void;
|
20
|
+
protected endPath(_style: RenderingStyle): void;
|
21
|
+
protected lineTo(_point: Vec3): void;
|
22
|
+
protected moveTo(_point: Vec3): void;
|
23
|
+
protected traceCubicBezierCurve(_p1: Vec3, _p2: Vec3, _p3: Vec3): void;
|
24
|
+
protected traceQuadraticBezierCurve(_controlPoint: Vec3, _endPoint: Vec3): void;
|
25
|
+
drawText(text: string, _transform: Mat33, _style: TextStyle): void;
|
26
|
+
drawImage(image: RenderableImage): void;
|
27
|
+
isTooSmallToRender(rect: Rect2): boolean;
|
28
|
+
drawPoints(..._points: Vec3[]): void;
|
29
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import { Vec2 } from '../../math/Vec2.mjs';
|
2
|
+
import AbstractRenderer from './AbstractRenderer.mjs';
|
3
3
|
// Outputs a description of what was rendered.
|
4
4
|
export default class TextOnlyRenderer extends AbstractRenderer {
|
5
5
|
constructor(viewport, localizationTable) {
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import { RenderingMode } from '../rendering/Display.mjs';
|
2
|
+
import Editor from '../Editor.mjs';
|
3
3
|
/** Creates an editor. Should only be used in test files. */
|
4
4
|
export default () => {
|
5
5
|
if (jest === undefined) {
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import Editor from '../Editor';
|
2
|
+
import { Point2 } from '../math/Vec2';
|
3
|
+
import Pointer from '../Pointer';
|
4
|
+
import { InputEvtType } from '../types';
|
5
|
+
/**
|
6
|
+
* Dispatch a pen event to the currently selected tool.
|
7
|
+
* Intended for unit tests.
|
8
|
+
*
|
9
|
+
* @see {@link sendTouchEvent}
|
10
|
+
*/
|
11
|
+
declare const sendPenEvent: (editor: Editor, eventType: InputEvtType.PointerDownEvt | InputEvtType.PointerMoveEvt | InputEvtType.PointerUpEvt, point: Point2, allPointers?: Pointer[]) => void;
|
12
|
+
export default sendPenEvent;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import Pointer from '../Pointer.mjs';
|
2
|
+
import { InputEvtType } from '../types.mjs';
|
3
|
+
/**
|
4
|
+
* Dispatch a pen event to the currently selected tool.
|
5
|
+
* Intended for unit tests.
|
6
|
+
*
|
7
|
+
* @see {@link sendTouchEvent}
|
8
|
+
*/
|
9
|
+
const sendPenEvent = (editor, eventType, point, allPointers) => {
|
10
|
+
const mainPointer = Pointer.ofCanvasPoint(point, eventType !== InputEvtType.PointerUpEvt, editor.viewport);
|
11
|
+
editor.toolController.dispatchInputEvent({
|
12
|
+
kind: eventType,
|
13
|
+
allPointers: allPointers !== null && allPointers !== void 0 ? allPointers : [
|
14
|
+
mainPointer,
|
15
|
+
],
|
16
|
+
current: mainPointer,
|
17
|
+
});
|
18
|
+
};
|
19
|
+
export default sendPenEvent;
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import Editor from '../Editor';
|
2
|
+
import { Vec2 } from '../math/Vec2';
|
3
|
+
import Pointer from '../Pointer';
|
4
|
+
import { InputEvtType } from '../types';
|
5
|
+
/**
|
6
|
+
* Dispatch a touch event to the currently selected tool. Intended for unit tests.
|
7
|
+
*
|
8
|
+
* @see {@link sendPenEvent}
|
9
|
+
*
|
10
|
+
* @example
|
11
|
+
* **Simulating a horizontal swipe gesture:**
|
12
|
+
* ```ts
|
13
|
+
* sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
14
|
+
* for (let i = 1; i <= 10; i++) {
|
15
|
+
* jest.advanceTimersByTime(10);
|
16
|
+
* sendTouchEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(i * 10, 0));
|
17
|
+
* }
|
18
|
+
* ```
|
19
|
+
*
|
20
|
+
* @example
|
21
|
+
* **Simulating a pinch gesture.** This example assumes that you're using [Jest with timer mocks enabled](https://jestjs.io/docs/timer-mocks).
|
22
|
+
* ```ts
|
23
|
+
* let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
24
|
+
* let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(100, 0), [ firstPointer ]);
|
25
|
+
*
|
26
|
+
* // Simulate a pinch
|
27
|
+
* const maxIterations = 10;
|
28
|
+
* for (let i = 0; i < maxIterations; i++) {
|
29
|
+
* // Use the unit testing framework's tool for increasing the current time
|
30
|
+
* // returned by (new Date()).getTime(), etc.
|
31
|
+
* jest.advanceTimersByTime(100);
|
32
|
+
*
|
33
|
+
* const point1 = Vec2.of(-i * 5, 0);
|
34
|
+
* const point2 = Vec2.of(i * 5 + 100, 0);
|
35
|
+
*
|
36
|
+
* firstPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point1, [ secondPointer ]);
|
37
|
+
* secondPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point2, [ firstPointer ]);
|
38
|
+
* }
|
39
|
+
* ```
|
40
|
+
*/
|
41
|
+
declare const sendTouchEvent: (editor: Editor, eventType: InputEvtType.PointerDownEvt | InputEvtType.PointerMoveEvt | InputEvtType.PointerUpEvt, screenPos: Vec2, allOtherPointers?: Pointer[]) => Pointer;
|
42
|
+
export default sendTouchEvent;
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import Pointer, { PointerDevice } from '../Pointer.mjs';
|
2
|
+
import { InputEvtType } from '../types.mjs';
|
3
|
+
/**
|
4
|
+
* Dispatch a touch event to the currently selected tool. Intended for unit tests.
|
5
|
+
*
|
6
|
+
* @see {@link sendPenEvent}
|
7
|
+
*
|
8
|
+
* @example
|
9
|
+
* **Simulating a horizontal swipe gesture:**
|
10
|
+
* ```ts
|
11
|
+
* sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
12
|
+
* for (let i = 1; i <= 10; i++) {
|
13
|
+
* jest.advanceTimersByTime(10);
|
14
|
+
* sendTouchEvent(editor, InputEvtType.PointerMoveEvt, Vec2.of(i * 10, 0));
|
15
|
+
* }
|
16
|
+
* ```
|
17
|
+
*
|
18
|
+
* @example
|
19
|
+
* **Simulating a pinch gesture.** This example assumes that you're using [Jest with timer mocks enabled](https://jestjs.io/docs/timer-mocks).
|
20
|
+
* ```ts
|
21
|
+
* let firstPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(0, 0));
|
22
|
+
* let secondPointer = sendTouchEvent(editor, InputEvtType.PointerDownEvt, Vec2.of(100, 0), [ firstPointer ]);
|
23
|
+
*
|
24
|
+
* // Simulate a pinch
|
25
|
+
* const maxIterations = 10;
|
26
|
+
* for (let i = 0; i < maxIterations; i++) {
|
27
|
+
* // Use the unit testing framework's tool for increasing the current time
|
28
|
+
* // returned by (new Date()).getTime(), etc.
|
29
|
+
* jest.advanceTimersByTime(100);
|
30
|
+
*
|
31
|
+
* const point1 = Vec2.of(-i * 5, 0);
|
32
|
+
* const point2 = Vec2.of(i * 5 + 100, 0);
|
33
|
+
*
|
34
|
+
* firstPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point1, [ secondPointer ]);
|
35
|
+
* secondPointer = sendTouchEvent(editor, InputEvtType.PointerMoveEvt, point2, [ firstPointer ]);
|
36
|
+
* }
|
37
|
+
* ```
|
38
|
+
*/
|
39
|
+
const sendTouchEvent = (editor, eventType, screenPos, allOtherPointers) => {
|
40
|
+
const canvasPos = editor.viewport.screenToCanvas(screenPos);
|
41
|
+
let ptrId = 0;
|
42
|
+
let maxPtrId = 0;
|
43
|
+
// Get a unique ID for the main pointer
|
44
|
+
// (try to use id=0, but don't use it if it's already in use).
|
45
|
+
for (const pointer of allOtherPointers !== null && allOtherPointers !== void 0 ? allOtherPointers : []) {
|
46
|
+
maxPtrId = Math.max(pointer.id, maxPtrId);
|
47
|
+
if (pointer.id === ptrId) {
|
48
|
+
ptrId = maxPtrId + 1;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
const mainPointer = Pointer.ofCanvasPoint(canvasPos, eventType !== InputEvtType.PointerUpEvt, editor.viewport, ptrId, PointerDevice.Touch);
|
52
|
+
editor.toolController.dispatchInputEvent({
|
53
|
+
kind: eventType,
|
54
|
+
allPointers: [
|
55
|
+
...(allOtherPointers !== null && allOtherPointers !== void 0 ? allOtherPointers : []),
|
56
|
+
mainPointer,
|
57
|
+
],
|
58
|
+
current: mainPointer,
|
59
|
+
});
|
60
|
+
return mainPointer;
|
61
|
+
};
|
62
|
+
export default sendTouchEvent;
|