js-draw 1.21.3 → 1.23.1
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +104 -76
- package/build-config.json +2 -2
- package/dist/Editor.css +29 -16
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -1
- package/dist/cjs/Editor.d.ts +1 -3
- package/dist/cjs/Editor.js +38 -26
- package/dist/cjs/EventDispatcher.js +1 -1
- package/dist/cjs/Pointer.js +3 -3
- package/dist/cjs/SVGLoader/SVGLoader.js +15 -6
- package/dist/cjs/UndoRedoHistory.js +1 -1
- package/dist/cjs/Viewport.d.ts +1 -1
- package/dist/cjs/Viewport.js +5 -3
- package/dist/cjs/commands/Command.js +7 -5
- package/dist/cjs/commands/Duplicate.js +2 -2
- package/dist/cjs/commands/Erase.js +3 -4
- package/dist/cjs/commands/invertCommand.js +4 -4
- package/dist/cjs/commands/lib.d.ts +1 -1
- package/dist/cjs/commands/uniteCommands.js +4 -4
- package/dist/cjs/components/AbstractComponent.d.ts +2 -2
- package/dist/cjs/components/AbstractComponent.js +4 -4
- package/dist/cjs/components/BackgroundComponent.js +8 -6
- package/dist/cjs/components/ImageComponent.js +12 -5
- package/dist/cjs/components/RestylableComponent.js +1 -1
- package/dist/cjs/components/SVGGlobalAttributesObject.js +1 -2
- package/dist/cjs/components/Stroke.js +37 -24
- package/dist/cjs/components/TextComponent.js +13 -10
- package/dist/cjs/components/UnknownSVGObject.js +2 -3
- package/dist/cjs/components/builders/ArrowBuilder.d.ts +6 -0
- package/dist/cjs/components/builders/ArrowBuilder.js +9 -3
- package/dist/cjs/components/builders/CircleBuilder.d.ts +6 -0
- package/dist/cjs/components/builders/CircleBuilder.js +11 -4
- package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +6 -0
- package/dist/cjs/components/builders/FreehandLineBuilder.js +10 -4
- package/dist/cjs/components/builders/LineBuilder.d.ts +6 -0
- package/dist/cjs/components/builders/LineBuilder.js +8 -4
- package/dist/cjs/components/builders/PolylineBuilder.d.ts +4 -1
- package/dist/cjs/components/builders/PolylineBuilder.js +9 -5
- package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +16 -10
- package/dist/cjs/components/builders/RectangleBuilder.d.ts +12 -0
- package/dist/cjs/components/builders/RectangleBuilder.js +17 -3
- package/dist/cjs/components/builders/autocorrect/makeShapeFitAutocorrect.js +5 -8
- package/dist/cjs/components/builders/autocorrect/makeSnapToGridAutocorrect.js +1 -1
- package/dist/cjs/components/builders/lib.d.ts +7 -0
- package/dist/cjs/components/builders/lib.js +18 -0
- package/dist/cjs/components/lib.d.ts +1 -4
- package/dist/cjs/components/lib.js +2 -9
- package/dist/cjs/components/util/StrokeSmoother.js +5 -6
- package/dist/cjs/dialogs/makeAboutDialog.js +1 -1
- package/dist/cjs/dialogs/makeMessageDialog.js +2 -2
- package/dist/cjs/image/EditorImage.d.ts +30 -7
- package/dist/cjs/image/EditorImage.js +43 -22
- package/dist/cjs/image/export/editorImageToSVG.js +1 -1
- package/dist/cjs/inputEvents.js +3 -3
- package/dist/cjs/lib.d.ts +2 -2
- package/dist/cjs/localizations/de.js +2 -2
- package/dist/cjs/localizations/es.js +7 -3
- package/dist/cjs/rendering/Display.js +7 -3
- package/dist/cjs/rendering/RenderablePathSpec.js +26 -11
- package/dist/cjs/rendering/RenderingStyle.js +22 -15
- package/dist/cjs/rendering/TextRenderingStyle.js +1 -1
- package/dist/cjs/rendering/caching/CacheRecord.js +1 -1
- package/dist/cjs/rendering/caching/CacheRecordManager.js +1 -1
- package/dist/cjs/rendering/caching/RenderingCache.js +1 -1
- package/dist/cjs/rendering/caching/RenderingCacheNode.js +26 -15
- package/dist/cjs/rendering/caching/testUtils.js +2 -2
- package/dist/cjs/rendering/renderers/AbstractRenderer.js +3 -1
- package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
- package/dist/cjs/rendering/renderers/CanvasRenderer.js +6 -28
- package/dist/cjs/rendering/renderers/DummyRenderer.js +1 -1
- package/dist/cjs/rendering/renderers/SVGRenderer.js +39 -21
- package/dist/cjs/rendering/renderers/TextOnlyRenderer.js +13 -15
- package/dist/cjs/shortcuts/KeyBinding.js +6 -12
- package/dist/cjs/shortcuts/KeyboardShortcutManager.js +2 -2
- package/dist/cjs/testing/createEditor.js +6 -1
- package/dist/cjs/testing/findNodeWithText.d.ts +4 -1
- package/dist/cjs/testing/findNodeWithText.js +12 -3
- package/dist/cjs/testing/getUniquePointerId.js +1 -1
- package/dist/cjs/testing/sendHtmlSwipe.js +7 -3
- package/dist/cjs/testing/sendPenEvent.js +1 -3
- package/dist/cjs/testing/sendTouchEvent.js +1 -4
- package/dist/cjs/testing/startPinchGesture.js +3 -1
- package/dist/cjs/toolbar/AbstractToolbar.d.ts +19 -0
- package/dist/cjs/toolbar/AbstractToolbar.js +26 -11
- package/dist/cjs/toolbar/EdgeToolbar.js +11 -15
- package/dist/cjs/toolbar/IconProvider.d.ts +5 -1
- package/dist/cjs/toolbar/IconProvider.js +117 -149
- package/dist/cjs/toolbar/localization.js +5 -5
- package/dist/cjs/toolbar/utils/HelpDisplay.js +8 -6
- package/dist/cjs/toolbar/utils/makeDraggable.js +4 -7
- package/dist/cjs/toolbar/widgets/BaseToolWidget.js +3 -2
- package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/BaseWidget.js +8 -8
- package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +2 -2
- package/dist/cjs/toolbar/widgets/EraserToolWidget.js +5 -3
- package/dist/cjs/toolbar/widgets/HandToolWidget.js +8 -6
- package/dist/cjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.js +9 -10
- package/dist/cjs/toolbar/widgets/PenToolWidget.js +22 -13
- package/dist/cjs/toolbar/widgets/SelectionToolWidget.js +2 -2
- package/dist/cjs/toolbar/widgets/TextToolWidget.js +5 -5
- package/dist/cjs/toolbar/widgets/components/makeFileInput.js +7 -7
- package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +5 -5
- package/dist/cjs/toolbar/widgets/components/makeSnappedList.js +9 -5
- package/dist/cjs/toolbar/widgets/keybindings.js +2 -2
- package/dist/cjs/toolbar/widgets/layout/DropdownLayoutManager.js +6 -6
- package/dist/cjs/tools/BaseTool.js +5 -3
- package/dist/cjs/tools/Eraser.js +25 -20
- package/dist/cjs/tools/FindTool.js +2 -2
- package/dist/cjs/tools/InputFilter/ContextMenuRecognizer.js +1 -3
- package/dist/cjs/tools/InputFilter/InputMapper.js +1 -1
- package/dist/cjs/tools/InputFilter/InputPipeline.js +1 -1
- package/dist/cjs/tools/InputFilter/InputStabilizer.js +12 -5
- package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +7 -4
- package/dist/cjs/tools/PanZoom.d.ts +1 -1
- package/dist/cjs/tools/PanZoom.js +18 -13
- package/dist/cjs/tools/PasteHandler.js +8 -2
- package/dist/cjs/tools/Pen.d.ts +13 -0
- package/dist/cjs/tools/Pen.js +30 -9
- package/dist/cjs/tools/ScrollbarTool.js +8 -7
- package/dist/cjs/tools/SelectionTool/Selection.js +16 -12
- package/dist/cjs/tools/SelectionTool/SelectionHandle.js +5 -2
- package/dist/cjs/tools/SelectionTool/SelectionMenuShortcut.js +3 -1
- package/dist/cjs/tools/SelectionTool/SelectionTool.js +25 -16
- package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.js +1 -1
- package/dist/cjs/tools/SelectionTool/TransformMode.js +6 -7
- package/dist/cjs/tools/SelectionTool/util/makeClipboardErrorHandlers.js +23 -2
- package/dist/cjs/tools/SelectionTool/util/showSelectionContextMenu.js +29 -20
- package/dist/cjs/tools/SoundUITool.js +5 -3
- package/dist/cjs/tools/TextTool.js +8 -6
- package/dist/cjs/tools/ToolController.js +16 -10
- package/dist/cjs/tools/lib.d.ts +1 -0
- package/dist/cjs/tools/lib.js +3 -1
- package/dist/cjs/tools/localization.d.ts +2 -0
- package/dist/cjs/tools/localization.js +3 -1
- package/dist/cjs/tools/util/StationaryPenDetector.js +3 -3
- package/dist/cjs/tools/util/createMenuOverlay.js +2 -2
- package/dist/cjs/util/ClipboardHandler.d.ts +1 -1
- package/dist/cjs/util/ClipboardHandler.js +19 -18
- package/dist/cjs/util/ReactiveValue.js +16 -12
- package/dist/cjs/util/adjustEditorThemeForContrast.js +6 -2
- package/dist/cjs/util/cloneElementWithStyles.js +1 -1
- package/dist/cjs/util/createElement.d.ts +62 -0
- package/dist/cjs/util/createElement.js +53 -0
- package/dist/cjs/util/guessKeyCodeFromKey.js +1 -1
- package/dist/cjs/util/listenForKeyboardEventsFrom.js +8 -6
- package/dist/cjs/util/waitForAll.js +3 -3
- package/dist/cjs/util/waitForImageLoaded.js +3 -3
- package/dist/cjs/util/waitForTimeout.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/mjs/Editor.d.ts +1 -3
- package/dist/mjs/Editor.mjs +39 -27
- package/dist/mjs/EventDispatcher.mjs +1 -1
- package/dist/mjs/Pointer.mjs +3 -3
- package/dist/mjs/SVGLoader/SVGLoader.mjs +16 -7
- package/dist/mjs/UndoRedoHistory.mjs +1 -1
- package/dist/mjs/Viewport.d.ts +1 -1
- package/dist/mjs/Viewport.mjs +5 -3
- package/dist/mjs/commands/Command.mjs +7 -5
- package/dist/mjs/commands/Duplicate.mjs +2 -2
- package/dist/mjs/commands/Erase.mjs +3 -4
- package/dist/mjs/commands/invertCommand.mjs +4 -4
- package/dist/mjs/commands/lib.d.ts +1 -1
- package/dist/mjs/commands/lib.mjs +1 -1
- package/dist/mjs/commands/uniteCommands.mjs +4 -4
- package/dist/mjs/components/AbstractComponent.d.ts +2 -2
- package/dist/mjs/components/AbstractComponent.mjs +4 -4
- package/dist/mjs/components/BackgroundComponent.mjs +10 -8
- package/dist/mjs/components/ImageComponent.mjs +12 -5
- package/dist/mjs/components/RestylableComponent.mjs +2 -2
- package/dist/mjs/components/SVGGlobalAttributesObject.mjs +1 -2
- package/dist/mjs/components/Stroke.mjs +40 -27
- package/dist/mjs/components/TextComponent.mjs +15 -12
- package/dist/mjs/components/UnknownSVGObject.mjs +2 -3
- package/dist/mjs/components/builders/ArrowBuilder.d.ts +6 -0
- package/dist/mjs/components/builders/ArrowBuilder.mjs +9 -3
- package/dist/mjs/components/builders/CircleBuilder.d.ts +6 -0
- package/dist/mjs/components/builders/CircleBuilder.mjs +11 -4
- package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +6 -0
- package/dist/mjs/components/builders/FreehandLineBuilder.mjs +10 -4
- package/dist/mjs/components/builders/LineBuilder.d.ts +6 -0
- package/dist/mjs/components/builders/LineBuilder.mjs +8 -4
- package/dist/mjs/components/builders/PolylineBuilder.d.ts +4 -1
- package/dist/mjs/components/builders/PolylineBuilder.mjs +10 -6
- package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +17 -11
- package/dist/mjs/components/builders/RectangleBuilder.d.ts +12 -0
- package/dist/mjs/components/builders/RectangleBuilder.mjs +17 -3
- package/dist/mjs/components/builders/autocorrect/makeShapeFitAutocorrect.mjs +5 -8
- package/dist/mjs/components/builders/autocorrect/makeSnapToGridAutocorrect.mjs +1 -1
- package/dist/mjs/components/builders/lib.d.ts +7 -0
- package/dist/mjs/components/builders/lib.mjs +7 -0
- package/dist/mjs/components/lib.d.ts +1 -4
- package/dist/mjs/components/lib.mjs +2 -5
- package/dist/mjs/components/util/StrokeSmoother.mjs +5 -6
- package/dist/mjs/dialogs/makeAboutDialog.mjs +1 -1
- package/dist/mjs/dialogs/makeMessageDialog.mjs +2 -2
- package/dist/mjs/image/EditorImage.d.ts +30 -7
- package/dist/mjs/image/EditorImage.mjs +43 -22
- package/dist/mjs/image/export/editorImageToSVG.mjs +1 -1
- package/dist/mjs/inputEvents.mjs +3 -3
- package/dist/mjs/lib.d.ts +2 -2
- package/dist/mjs/lib.mjs +2 -2
- package/dist/mjs/localization.mjs +2 -2
- package/dist/mjs/localizations/de.mjs +2 -2
- package/dist/mjs/localizations/es.mjs +7 -3
- package/dist/mjs/rendering/Display.mjs +7 -3
- package/dist/mjs/rendering/RenderablePathSpec.mjs +26 -11
- package/dist/mjs/rendering/RenderingStyle.mjs +22 -15
- package/dist/mjs/rendering/TextRenderingStyle.mjs +1 -1
- package/dist/mjs/rendering/caching/CacheRecord.mjs +1 -1
- package/dist/mjs/rendering/caching/CacheRecordManager.mjs +1 -1
- package/dist/mjs/rendering/caching/RenderingCache.mjs +1 -1
- package/dist/mjs/rendering/caching/RenderingCacheNode.mjs +26 -15
- package/dist/mjs/rendering/caching/testUtils.mjs +2 -2
- package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +3 -1
- package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +2 -25
- package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +6 -28
- package/dist/mjs/rendering/renderers/DummyRenderer.mjs +1 -1
- package/dist/mjs/rendering/renderers/SVGRenderer.mjs +40 -22
- package/dist/mjs/rendering/renderers/TextOnlyRenderer.mjs +13 -15
- package/dist/mjs/shortcuts/KeyBinding.mjs +6 -12
- package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +2 -2
- package/dist/mjs/testing/createEditor.mjs +6 -1
- package/dist/mjs/testing/findNodeWithText.d.ts +4 -1
- package/dist/mjs/testing/findNodeWithText.mjs +12 -3
- package/dist/mjs/testing/getUniquePointerId.mjs +1 -1
- package/dist/mjs/testing/sendHtmlSwipe.mjs +7 -3
- package/dist/mjs/testing/sendPenEvent.mjs +1 -3
- package/dist/mjs/testing/sendTouchEvent.mjs +1 -4
- package/dist/mjs/testing/startPinchGesture.mjs +3 -1
- package/dist/mjs/toolbar/AbstractToolbar.d.ts +19 -0
- package/dist/mjs/toolbar/AbstractToolbar.mjs +26 -11
- package/dist/mjs/toolbar/EdgeToolbar.mjs +11 -15
- package/dist/mjs/toolbar/IconProvider.d.ts +5 -1
- package/dist/mjs/toolbar/IconProvider.mjs +117 -149
- package/dist/mjs/toolbar/localization.mjs +5 -5
- package/dist/mjs/toolbar/utils/HelpDisplay.mjs +8 -6
- package/dist/mjs/toolbar/utils/makeDraggable.mjs +4 -7
- package/dist/mjs/toolbar/widgets/BaseToolWidget.mjs +3 -2
- package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +9 -9
- package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +2 -2
- package/dist/mjs/toolbar/widgets/EraserToolWidget.mjs +5 -3
- package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +8 -6
- package/dist/mjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.mjs +9 -10
- package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +23 -14
- package/dist/mjs/toolbar/widgets/SelectionToolWidget.mjs +2 -2
- package/dist/mjs/toolbar/widgets/TextToolWidget.mjs +5 -5
- package/dist/mjs/toolbar/widgets/components/makeFileInput.mjs +7 -7
- package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +5 -5
- package/dist/mjs/toolbar/widgets/components/makeSnappedList.mjs +9 -5
- package/dist/mjs/toolbar/widgets/keybindings.mjs +2 -2
- package/dist/mjs/toolbar/widgets/layout/DropdownLayoutManager.mjs +6 -6
- package/dist/mjs/tools/BaseTool.mjs +6 -4
- package/dist/mjs/tools/Eraser.mjs +25 -20
- package/dist/mjs/tools/FindTool.mjs +2 -2
- package/dist/mjs/tools/InputFilter/ContextMenuRecognizer.mjs +2 -4
- package/dist/mjs/tools/InputFilter/InputMapper.mjs +1 -1
- package/dist/mjs/tools/InputFilter/InputPipeline.mjs +1 -1
- package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +13 -6
- package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +7 -4
- package/dist/mjs/tools/PanZoom.d.ts +1 -1
- package/dist/mjs/tools/PanZoom.mjs +19 -14
- package/dist/mjs/tools/PasteHandler.mjs +8 -2
- package/dist/mjs/tools/Pen.d.ts +13 -0
- package/dist/mjs/tools/Pen.mjs +31 -10
- package/dist/mjs/tools/ScrollbarTool.mjs +8 -7
- package/dist/mjs/tools/SelectionTool/Selection.mjs +16 -12
- package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +5 -2
- package/dist/mjs/tools/SelectionTool/SelectionMenuShortcut.mjs +3 -1
- package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +26 -17
- package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.mjs +1 -1
- package/dist/mjs/tools/SelectionTool/TransformMode.mjs +6 -7
- package/dist/mjs/tools/SelectionTool/util/makeClipboardErrorHandlers.mjs +23 -2
- package/dist/mjs/tools/SelectionTool/util/showSelectionContextMenu.mjs +29 -20
- package/dist/mjs/tools/SoundUITool.mjs +5 -3
- package/dist/mjs/tools/TextTool.mjs +8 -6
- package/dist/mjs/tools/ToolController.mjs +16 -10
- package/dist/mjs/tools/lib.d.ts +1 -0
- package/dist/mjs/tools/lib.mjs +1 -0
- package/dist/mjs/tools/localization.d.ts +2 -0
- package/dist/mjs/tools/localization.mjs +3 -1
- package/dist/mjs/tools/util/StationaryPenDetector.mjs +3 -3
- package/dist/mjs/tools/util/createMenuOverlay.mjs +2 -2
- package/dist/mjs/util/ClipboardHandler.d.ts +1 -1
- package/dist/mjs/util/ClipboardHandler.mjs +19 -18
- package/dist/mjs/util/ReactiveValue.mjs +16 -12
- package/dist/mjs/util/adjustEditorThemeForContrast.mjs +6 -2
- package/dist/mjs/util/cloneElementWithStyles.mjs +1 -1
- package/dist/mjs/util/createElement.d.ts +62 -0
- package/dist/mjs/util/createElement.mjs +47 -0
- package/dist/mjs/util/guessKeyCodeFromKey.mjs +1 -1
- package/dist/mjs/util/listenForKeyboardEventsFrom.mjs +8 -6
- package/dist/mjs/util/waitForAll.mjs +3 -3
- package/dist/mjs/util/waitForImageLoaded.mjs +3 -3
- package/dist/mjs/util/waitForTimeout.mjs +1 -1
- package/dist/mjs/version.mjs +1 -1
- package/package.json +88 -88
- package/src/Coloris.css +6 -6
- package/src/Editor.scss +7 -5
- package/src/dialogs/dialogs.scss +3 -4
- package/src/dialogs/makeAboutDialog.scss +2 -2
- package/src/dialogs/makeMessageDialog.scss +11 -7
- package/src/styles.js +1 -1
- package/src/toolbar/AbstractToolbar.scss +20 -12
- package/src/toolbar/DropdownToolbar.scss +5 -4
- package/src/toolbar/EdgeToolbar.scss +65 -31
- package/src/toolbar/toolbar.scss +5 -5
- package/src/toolbar/utils/HelpDisplay.scss +48 -25
- package/src/toolbar/utils/labelVisibleOnHover.scss +39 -16
- package/src/toolbar/widgets/DocumentPropertiesWidget.scss +0 -1
- package/src/toolbar/widgets/HandToolWidget.scss +0 -1
- package/src/toolbar/widgets/InsertImageWidget/InsertImageWidget.scss +2 -3
- package/src/toolbar/widgets/OverflowWidget.css +1 -2
- package/src/toolbar/widgets/PenToolWidget.scss +0 -2
- package/src/toolbar/widgets/SelectionToolWidget.scss +1 -2
- package/src/toolbar/widgets/components/components.scss +6 -6
- package/src/toolbar/widgets/components/makeColorInput.scss +0 -2
- package/src/toolbar/widgets/components/makeFileInput.scss +5 -7
- package/src/toolbar/widgets/components/makeGridSelector.scss +6 -9
- package/src/toolbar/widgets/components/makeSnappedList.scss +3 -4
- package/src/toolbar/widgets/components/makeThicknessSlider.scss +1 -2
- package/src/toolbar/widgets/widgets.scss +7 -7
- package/src/tools/FindTool.css +1 -2
- package/src/tools/ScrollbarTool.scss +9 -5
- package/src/tools/SelectionTool/SelectionTool.scss +15 -7
- package/src/tools/SelectionTool/util/makeClipboardErrorHandlers.scss +1 -2
- package/src/tools/SoundUITool.scss +4 -4
- package/src/tools/tools.scss +5 -6
- package/src/tools/util/createMenuOverlay.scss +10 -4
- package/tsconfig.json +1 -3
- package/typedoc.json +1 -1
@@ -1,2 +1,8 @@
|
|
1
1
|
import { ComponentBuilderFactory } from './types';
|
2
|
+
/**
|
3
|
+
* Creates a stroke builder that generates outlined circles.
|
4
|
+
*
|
5
|
+
* Example:
|
6
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
7
|
+
*/
|
2
8
|
export declare const makeOutlinedCircleBuilder: ComponentBuilderFactory;
|
@@ -9,6 +9,12 @@ const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
|
|
9
9
|
const Viewport_1 = __importDefault(require("../../Viewport"));
|
10
10
|
const Stroke_1 = __importDefault(require("../Stroke"));
|
11
11
|
const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
|
12
|
+
/**
|
13
|
+
* Creates a stroke builder that generates outlined circles.
|
14
|
+
*
|
15
|
+
* Example:
|
16
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
17
|
+
*/
|
12
18
|
exports.makeOutlinedCircleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
|
13
19
|
return new CircleBuilder(initialPoint, viewport);
|
14
20
|
});
|
@@ -26,7 +32,7 @@ class CircleBuilder {
|
|
26
32
|
buildPreview() {
|
27
33
|
const pathCommands = [];
|
28
34
|
const numDivisions = 6;
|
29
|
-
const stepSize = Math.PI * 2 / numDivisions;
|
35
|
+
const stepSize = (Math.PI * 2) / numDivisions;
|
30
36
|
// Round the stroke width so that when exported it doesn't have unnecessary trailing decimals.
|
31
37
|
const strokeWidth = Viewport_1.default.roundPoint(this.endPoint.width, 5 / this.viewport.getScaleFactor());
|
32
38
|
const center = this.startPoint.pos.lerp(this.endPoint.pos, 0.5);
|
@@ -38,7 +44,9 @@ class CircleBuilder {
|
|
38
44
|
// controlPointRadiusScale is selected to make the circles appear circular and
|
39
45
|
// **does** depend on stepSize.
|
40
46
|
const controlPointRadiusScale = 1.141;
|
41
|
-
const controlPoint = math_1.Vec2.of(Math.cos(t - stepSize / 2), -Math.sin(t - stepSize / 2))
|
47
|
+
const controlPoint = math_1.Vec2.of(Math.cos(t - stepSize / 2), -Math.sin(t - stepSize / 2))
|
48
|
+
.times(radius * controlPointRadiusScale)
|
49
|
+
.plus(center);
|
42
50
|
pathCommands.push({
|
43
51
|
kind: math_1.PathCommandType.QuadraticBezierTo,
|
44
52
|
controlPoint,
|
@@ -49,8 +57,7 @@ class CircleBuilder {
|
|
49
57
|
kind: math_1.PathCommandType.LineTo,
|
50
58
|
point: startPoint,
|
51
59
|
});
|
52
|
-
const path = new math_1.Path(startPoint, pathCommands)
|
53
|
-
.mapPoints(point => this.viewport.roundPoint(point));
|
60
|
+
const path = new math_1.Path(startPoint, pathCommands).mapPoints((point) => this.viewport.roundPoint(point));
|
54
61
|
const preview = new Stroke_1.default([
|
55
62
|
(0, RenderablePathSpec_1.pathToRenderable)(path, {
|
56
63
|
fill: math_1.Color4.transparent,
|
@@ -6,6 +6,12 @@ import Viewport from '../../Viewport';
|
|
6
6
|
import { StrokeDataPoint } from '../../types';
|
7
7
|
import { ComponentBuilder, ComponentBuilderFactory } from './types';
|
8
8
|
import RenderingStyle from '../../rendering/RenderingStyle';
|
9
|
+
/**
|
10
|
+
* Creates a stroke builder that draws freehand lines.
|
11
|
+
*
|
12
|
+
* Example:
|
13
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
14
|
+
*/
|
9
15
|
export declare const makeFreehandLineBuilder: ComponentBuilderFactory;
|
10
16
|
export default class FreehandLineBuilder implements ComponentBuilder {
|
11
17
|
private startPoint;
|
@@ -9,6 +9,12 @@ const Stroke_1 = __importDefault(require("../Stroke"));
|
|
9
9
|
const Viewport_1 = __importDefault(require("../../Viewport"));
|
10
10
|
const StrokeSmoother_1 = require("../util/StrokeSmoother");
|
11
11
|
const makeShapeFitAutocorrect_1 = __importDefault(require("./autocorrect/makeShapeFitAutocorrect"));
|
12
|
+
/**
|
13
|
+
* Creates a stroke builder that draws freehand lines.
|
14
|
+
*
|
15
|
+
* Example:
|
16
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
17
|
+
*/
|
12
18
|
exports.makeFreehandLineBuilder = (0, makeShapeFitAutocorrect_1.default)((initialPoint, viewport) => {
|
13
19
|
// Don't smooth if input is more than ± 3 pixels from the true curve, do smooth if
|
14
20
|
// less than ±1 px from the curve.
|
@@ -38,7 +44,7 @@ class FreehandLineBuilder {
|
|
38
44
|
stroke: {
|
39
45
|
color: this.startPoint.color,
|
40
46
|
width: this.roundDistance(this.averageWidth),
|
41
|
-
}
|
47
|
+
},
|
42
48
|
};
|
43
49
|
}
|
44
50
|
previewCurrentPath() {
|
@@ -135,7 +141,7 @@ class FreehandLineBuilder {
|
|
135
141
|
kind: math_1.PathCommandType.QuadraticBezierTo,
|
136
142
|
controlPoint: center.plus(math_1.Vec2.of(width, -width)),
|
137
143
|
endPoint: center.plus(math_1.Vec2.of(width, 0)),
|
138
|
-
}
|
144
|
+
},
|
139
145
|
];
|
140
146
|
}
|
141
147
|
const result = [];
|
@@ -163,8 +169,8 @@ class FreehandLineBuilder {
|
|
163
169
|
this.curveFitter.addPoint(newPoint);
|
164
170
|
this.widthAverageNumSamples++;
|
165
171
|
this.averageWidth =
|
166
|
-
this.averageWidth * (this.widthAverageNumSamples - 1) / this.widthAverageNumSamples
|
167
|
-
|
172
|
+
(this.averageWidth * (this.widthAverageNumSamples - 1)) / this.widthAverageNumSamples +
|
173
|
+
newPoint.width / this.widthAverageNumSamples;
|
168
174
|
}
|
169
175
|
}
|
170
176
|
exports.default = FreehandLineBuilder;
|
@@ -4,6 +4,12 @@ import { StrokeDataPoint } from '../../types';
|
|
4
4
|
import Viewport from '../../Viewport';
|
5
5
|
import AbstractComponent from '../AbstractComponent';
|
6
6
|
import { ComponentBuilder, ComponentBuilderFactory } from './types';
|
7
|
+
/**
|
8
|
+
* Creates a stroke builder that generates filled lines.
|
9
|
+
*
|
10
|
+
* Example:
|
11
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
12
|
+
*/
|
7
13
|
export declare const makeLineBuilder: ComponentBuilderFactory;
|
8
14
|
export default class LineBuilder implements ComponentBuilder {
|
9
15
|
private readonly startPoint;
|
@@ -8,6 +8,12 @@ const math_1 = require("@js-draw/math");
|
|
8
8
|
const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
|
9
9
|
const Stroke_1 = __importDefault(require("../Stroke"));
|
10
10
|
const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
|
11
|
+
/**
|
12
|
+
* Creates a stroke builder that generates filled lines.
|
13
|
+
*
|
14
|
+
* Example:
|
15
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
16
|
+
*/
|
11
17
|
exports.makeLineBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
|
12
18
|
return new LineBuilder(initialPoint, viewport);
|
13
19
|
});
|
@@ -48,10 +54,8 @@ class LineBuilder {
|
|
48
54
|
kind: math_1.PathCommandType.LineTo,
|
49
55
|
point: startPoint.minus(scaledStartNormal),
|
50
56
|
},
|
51
|
-
]).mapPoints(point => this.viewport.roundPoint(point));
|
52
|
-
const preview = new Stroke_1.default([
|
53
|
-
(0, RenderablePathSpec_1.pathToRenderable)(path, { fill: this.startPoint.color })
|
54
|
-
]);
|
57
|
+
]).mapPoints((point) => this.viewport.roundPoint(point));
|
58
|
+
const preview = new Stroke_1.default([(0, RenderablePathSpec_1.pathToRenderable)(path, { fill: this.startPoint.color })]);
|
55
59
|
return preview;
|
56
60
|
}
|
57
61
|
build() {
|
@@ -7,8 +7,11 @@ import { StrokeDataPoint } from '../../types';
|
|
7
7
|
import { ComponentBuilder, ComponentBuilderFactory } from './types';
|
8
8
|
import RenderingStyle from '../../rendering/RenderingStyle';
|
9
9
|
/**
|
10
|
-
* Creates
|
10
|
+
* Creates a freehand line builder that creates strokes from line segments
|
11
|
+
* rather than Bézier curves.
|
11
12
|
*
|
13
|
+
* Example:
|
14
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
12
15
|
*/
|
13
16
|
export declare const makePolylineBuilder: ComponentBuilderFactory;
|
14
17
|
export default class PolylineBuilder implements ComponentBuilder {
|
@@ -9,8 +9,11 @@ const Stroke_1 = __importDefault(require("../Stroke"));
|
|
9
9
|
const Viewport_1 = __importDefault(require("../../Viewport"));
|
10
10
|
const makeShapeFitAutocorrect_1 = __importDefault(require("./autocorrect/makeShapeFitAutocorrect"));
|
11
11
|
/**
|
12
|
-
* Creates
|
12
|
+
* Creates a freehand line builder that creates strokes from line segments
|
13
|
+
* rather than Bézier curves.
|
13
14
|
*
|
15
|
+
* Example:
|
16
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
14
17
|
*/
|
15
18
|
exports.makePolylineBuilder = (0, makeShapeFitAutocorrect_1.default)((initialPoint, viewport) => {
|
16
19
|
// Fit to a value slightly smaller than the pixel size. A larger value can
|
@@ -48,7 +51,7 @@ class PolylineBuilder {
|
|
48
51
|
stroke: {
|
49
52
|
color: this.startPoint.color,
|
50
53
|
width: this.roundDistance(this.averageWidth),
|
51
|
-
}
|
54
|
+
},
|
52
55
|
};
|
53
56
|
}
|
54
57
|
previewCurrentPath() {
|
@@ -102,12 +105,13 @@ class PolylineBuilder {
|
|
102
105
|
addPoint(newPoint) {
|
103
106
|
this.widthAverageNumSamples++;
|
104
107
|
this.averageWidth =
|
105
|
-
this.averageWidth * (this.widthAverageNumSamples - 1) / this.widthAverageNumSamples
|
106
|
-
|
108
|
+
(this.averageWidth * (this.widthAverageNumSamples - 1)) / this.widthAverageNumSamples +
|
109
|
+
newPoint.width / this.widthAverageNumSamples;
|
107
110
|
const roundedPoint = this.roundPoint(newPoint.pos);
|
108
111
|
if (!roundedPoint.eq(this.lastPoint)) {
|
109
112
|
// If almost exactly in the same line as the previous
|
110
|
-
if (this.lastLineSegment &&
|
113
|
+
if (this.lastLineSegment &&
|
114
|
+
this.lastLineSegment.direction.dot(roundedPoint.minus(this.lastPoint).normalized()) > 0.997) {
|
111
115
|
this.parts.pop();
|
112
116
|
this.lastPoint = this.lastLineSegment.p1;
|
113
117
|
}
|
@@ -36,7 +36,7 @@ class PressureSensitiveFreehandLineBuilder {
|
|
36
36
|
this.parts = [];
|
37
37
|
this.upperSegments = [];
|
38
38
|
this.lowerSegments = [];
|
39
|
-
this.curveFitter = new StrokeSmoother_1.StrokeSmoother(startPoint, minFitAllowed, maxFitAllowed, curve => this.addCurve(curve));
|
39
|
+
this.curveFitter = new StrokeSmoother_1.StrokeSmoother(startPoint, minFitAllowed, maxFitAllowed, (curve) => this.addCurve(curve));
|
40
40
|
this.curveStartWidth = startPoint.width;
|
41
41
|
this.bbox = new math_1.Rect2(this.startPoint.pos.x, this.startPoint.pos.y, 0, 0);
|
42
42
|
}
|
@@ -70,7 +70,8 @@ class PressureSensitiveFreehandLineBuilder {
|
|
70
70
|
}
|
71
71
|
let startPoint;
|
72
72
|
const lastLowerSegment = lowerPath[lowerPath.length - 1];
|
73
|
-
if (lastLowerSegment.kind === math_1.PathCommandType.LineTo ||
|
73
|
+
if (lastLowerSegment.kind === math_1.PathCommandType.LineTo ||
|
74
|
+
lastLowerSegment.kind === math_1.PathCommandType.MoveTo) {
|
74
75
|
startPoint = lastLowerSegment.point;
|
75
76
|
}
|
76
77
|
else {
|
@@ -169,11 +170,11 @@ class PressureSensitiveFreehandLineBuilder {
|
|
169
170
|
// where the next stroke and the previous stroke are in different directions.
|
170
171
|
//
|
171
172
|
// Are the exit/enter directions of the previous and current curves in different enough directions?
|
172
|
-
if (getEnterDirection(upperCurve).dot(getExitDirection(this.lastUpperBezier)) < 0.35
|
173
|
-
|
173
|
+
if (getEnterDirection(upperCurve).dot(getExitDirection(this.lastUpperBezier)) < 0.35 ||
|
174
|
+
getEnterDirection(lowerCurve).dot(getExitDirection(this.lastLowerBezier)) < 0.35 ||
|
174
175
|
// Also handle if the curves exit/enter directions differ
|
175
|
-
|
176
|
-
|
176
|
+
getEnterDirection(upperCurve).dot(getExitDirection(upperCurve)) < 0 ||
|
177
|
+
getEnterDirection(lowerCurve).dot(getExitDirection(lowerCurve)) < 0) {
|
177
178
|
return true;
|
178
179
|
}
|
179
180
|
// Check whether the lower curve intersects the other wall:
|
@@ -280,8 +281,9 @@ class PressureSensitiveFreehandLineBuilder {
|
|
280
281
|
// Approximate the normal at the location of the control point
|
281
282
|
const projectionT = bezier.nearestPointTo(controlPoint).parameterValue;
|
282
283
|
const halfVecT = projectionT;
|
283
|
-
const halfVec = bezier
|
284
|
-
|
284
|
+
const halfVec = bezier
|
285
|
+
.normal(halfVecT)
|
286
|
+
.times((curve.startWidth / 2) * halfVecT + (curve.endWidth / 2) * (1 - halfVecT));
|
285
287
|
// Each starts at startPt ± startVec
|
286
288
|
const lowerCurveStartPoint = this.roundPoint(startPt.plus(startVec));
|
287
289
|
const lowerCurveControlPoint = this.roundPoint(controlPoint.plus(halfVec));
|
@@ -324,8 +326,12 @@ class PressureSensitiveFreehandLineBuilder {
|
|
324
326
|
const upperCurve = new math_1.QuadraticBezier(upperCurveStartPoint, upperCurveControlPoint, upperCurveEndPoint);
|
325
327
|
const lowerCurve = new math_1.QuadraticBezier(lowerCurveStartPoint, lowerCurveControlPoint, lowerCurveEndPoint);
|
326
328
|
return {
|
327
|
-
upperCurveCommand,
|
328
|
-
|
329
|
+
upperCurveCommand,
|
330
|
+
upperToLowerConnector,
|
331
|
+
lowerToUpperConnector,
|
332
|
+
lowerCurveCommand,
|
333
|
+
upperCurve,
|
334
|
+
lowerCurve,
|
329
335
|
nextCurveStartConnector,
|
330
336
|
};
|
331
337
|
}
|
@@ -4,7 +4,19 @@ import { StrokeDataPoint } from '../../types';
|
|
4
4
|
import Viewport from '../../Viewport';
|
5
5
|
import AbstractComponent from '../AbstractComponent';
|
6
6
|
import { ComponentBuilder, ComponentBuilderFactory } from './types';
|
7
|
+
/**
|
8
|
+
* Creates filled rectangles with sharp corners.
|
9
|
+
*
|
10
|
+
* Example:
|
11
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
12
|
+
*/
|
7
13
|
export declare const makeFilledRectangleBuilder: ComponentBuilderFactory;
|
14
|
+
/**
|
15
|
+
* Creates outlined rectangles with sharp corners.
|
16
|
+
*
|
17
|
+
* Example:
|
18
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
19
|
+
*/
|
8
20
|
export declare const makeOutlinedRectangleBuilder: ComponentBuilderFactory;
|
9
21
|
export default class RectangleBuilder implements ComponentBuilder {
|
10
22
|
private readonly startPoint;
|
@@ -8,9 +8,21 @@ const math_1 = require("@js-draw/math");
|
|
8
8
|
const RenderablePathSpec_1 = require("../../rendering/RenderablePathSpec");
|
9
9
|
const Stroke_1 = __importDefault(require("../Stroke"));
|
10
10
|
const makeSnapToGridAutocorrect_1 = __importDefault(require("./autocorrect/makeSnapToGridAutocorrect"));
|
11
|
+
/**
|
12
|
+
* Creates filled rectangles with sharp corners.
|
13
|
+
*
|
14
|
+
* Example:
|
15
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
16
|
+
*/
|
11
17
|
exports.makeFilledRectangleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
|
12
18
|
return new RectangleBuilder(initialPoint, true, viewport);
|
13
19
|
});
|
20
|
+
/**
|
21
|
+
* Creates outlined rectangles with sharp corners.
|
22
|
+
*
|
23
|
+
* Example:
|
24
|
+
* [[include:doc-pages/inline-examples/changing-pen-types.md]]
|
25
|
+
*/
|
14
26
|
exports.makeOutlinedRectangleBuilder = (0, makeSnapToGridAutocorrect_1.default)((initialPoint, viewport) => {
|
15
27
|
return new RectangleBuilder(initialPoint, false, viewport);
|
16
28
|
});
|
@@ -34,12 +46,14 @@ class RectangleBuilder {
|
|
34
46
|
const startPoint = rotationMat.inverse().transformVec2(this.startPoint.pos);
|
35
47
|
const endPoint = rotationMat.inverse().transformVec2(this.endPoint.pos);
|
36
48
|
const rect = math_1.Rect2.fromCorners(startPoint, endPoint);
|
37
|
-
const path = math_1.Path.fromRect(rect, this.filled ? null : this.endPoint.width)
|
49
|
+
const path = math_1.Path.fromRect(rect, this.filled ? null : this.endPoint.width)
|
50
|
+
.transformedBy(
|
38
51
|
// Rotate the canvas rectangle so that its rotation matches the screen
|
39
|
-
rotationMat)
|
52
|
+
rotationMat)
|
53
|
+
.mapPoints((point) => this.viewport.roundPoint(point));
|
40
54
|
const preview = new Stroke_1.default([
|
41
55
|
(0, RenderablePathSpec_1.pathToRenderable)(path, {
|
42
|
-
fill: this.endPoint.color
|
56
|
+
fill: this.endPoint.color,
|
43
57
|
}),
|
44
58
|
]);
|
45
59
|
return preview;
|
@@ -8,14 +8,11 @@ const makeShapeFitAutocorrect = (sourceFactory) => {
|
|
8
8
|
};
|
9
9
|
exports.default = makeShapeFitAutocorrect;
|
10
10
|
const makeLineTemplate = (startPoint, points, _bbox) => {
|
11
|
-
const templatePoints = [
|
12
|
-
|
13
|
-
points[points.length - 1],
|
14
|
-
];
|
15
|
-
return { points: templatePoints, };
|
11
|
+
const templatePoints = [startPoint, points[points.length - 1]];
|
12
|
+
return { points: templatePoints };
|
16
13
|
};
|
17
14
|
const makeRectangleTemplate = (_startPoint, _points, bbox) => {
|
18
|
-
return { points: [...bbox.corners, bbox.corners[0]]
|
15
|
+
return { points: [...bbox.corners, bbox.corners[0]] };
|
19
16
|
};
|
20
17
|
class ShapeFitBuilder {
|
21
18
|
constructor(sourceFactory, startPoint, viewport) {
|
@@ -41,10 +38,10 @@ class ShapeFitBuilder {
|
|
41
38
|
async autocorrectShape() {
|
42
39
|
// Use screen points so that autocorrected shapes rotate with the screen.
|
43
40
|
const startPoint = this.viewport.canvasToScreen(this.startPoint.pos);
|
44
|
-
const points = this.points.map(point => this.viewport.canvasToScreen(point.pos));
|
41
|
+
const points = this.points.map((point) => this.viewport.canvasToScreen(point.pos));
|
45
42
|
const bbox = math_1.Rect2.bboxOf(points);
|
46
43
|
const snappedStartPoint = this.viewport.canvasToScreen(this.viewport.snapToGrid(this.startPoint.pos));
|
47
|
-
const snappedPoints = this.points.map(point => this.viewport.canvasToScreen(this.viewport.snapToGrid(point.pos)));
|
44
|
+
const snappedPoints = this.points.map((point) => this.viewport.canvasToScreen(this.viewport.snapToGrid(point.pos)));
|
48
45
|
const snappedBBox = math_1.Rect2.bboxOf(snappedPoints);
|
49
46
|
// Only fit larger shapes
|
50
47
|
if (bbox.maxDimension < 32) {
|
@@ -37,7 +37,7 @@ class SnapToGridAutocompleteBuilder {
|
|
37
37
|
// Use screen points so that snapped shapes rotate with the screen.
|
38
38
|
const startPoint = snapToGrid(this.startPoint);
|
39
39
|
const builder = this.sourceFactory(startPoint, this.viewport);
|
40
|
-
const points = this.points.map(point => snapToGrid(point));
|
40
|
+
const points = this.points.map((point) => snapToGrid(point));
|
41
41
|
for (const point of points) {
|
42
42
|
builder.addPoint(point);
|
43
43
|
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export { makeFreehandLineBuilder } from './FreehandLineBuilder';
|
2
|
+
export { makePolylineBuilder } from './PolylineBuilder';
|
3
|
+
export { makePressureSensitiveFreehandLineBuilder } from './PressureSensitiveFreehandLineBuilder';
|
4
|
+
export { makeOutlinedCircleBuilder } from './CircleBuilder';
|
5
|
+
export { makeArrowBuilder } from './ArrowBuilder';
|
6
|
+
export { makeLineBuilder } from './LineBuilder';
|
7
|
+
export { makeFilledRectangleBuilder, makeOutlinedRectangleBuilder } from './RectangleBuilder';
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.makeOutlinedRectangleBuilder = exports.makeFilledRectangleBuilder = exports.makeLineBuilder = exports.makeArrowBuilder = exports.makeOutlinedCircleBuilder = exports.makePressureSensitiveFreehandLineBuilder = exports.makePolylineBuilder = exports.makeFreehandLineBuilder = void 0;
|
4
|
+
var FreehandLineBuilder_1 = require("./FreehandLineBuilder");
|
5
|
+
Object.defineProperty(exports, "makeFreehandLineBuilder", { enumerable: true, get: function () { return FreehandLineBuilder_1.makeFreehandLineBuilder; } });
|
6
|
+
var PolylineBuilder_1 = require("./PolylineBuilder");
|
7
|
+
Object.defineProperty(exports, "makePolylineBuilder", { enumerable: true, get: function () { return PolylineBuilder_1.makePolylineBuilder; } });
|
8
|
+
var PressureSensitiveFreehandLineBuilder_1 = require("./PressureSensitiveFreehandLineBuilder");
|
9
|
+
Object.defineProperty(exports, "makePressureSensitiveFreehandLineBuilder", { enumerable: true, get: function () { return PressureSensitiveFreehandLineBuilder_1.makePressureSensitiveFreehandLineBuilder; } });
|
10
|
+
var CircleBuilder_1 = require("./CircleBuilder");
|
11
|
+
Object.defineProperty(exports, "makeOutlinedCircleBuilder", { enumerable: true, get: function () { return CircleBuilder_1.makeOutlinedCircleBuilder; } });
|
12
|
+
var ArrowBuilder_1 = require("./ArrowBuilder");
|
13
|
+
Object.defineProperty(exports, "makeArrowBuilder", { enumerable: true, get: function () { return ArrowBuilder_1.makeArrowBuilder; } });
|
14
|
+
var LineBuilder_1 = require("./LineBuilder");
|
15
|
+
Object.defineProperty(exports, "makeLineBuilder", { enumerable: true, get: function () { return LineBuilder_1.makeLineBuilder; } });
|
16
|
+
var RectangleBuilder_1 = require("./RectangleBuilder");
|
17
|
+
Object.defineProperty(exports, "makeFilledRectangleBuilder", { enumerable: true, get: function () { return RectangleBuilder_1.makeFilledRectangleBuilder; } });
|
18
|
+
Object.defineProperty(exports, "makeOutlinedRectangleBuilder", { enumerable: true, get: function () { return RectangleBuilder_1.makeOutlinedRectangleBuilder; } });
|
@@ -1,8 +1,5 @@
|
|
1
1
|
export * from './builders/types';
|
2
|
-
export
|
3
|
-
export { makePolylineBuilder } from './builders/PolylineBuilder';
|
4
|
-
export { makePressureSensitiveFreehandLineBuilder } from './builders/PressureSensitiveFreehandLineBuilder';
|
5
|
-
export { makeOutlinedCircleBuilder } from './builders/CircleBuilder';
|
2
|
+
export * from './builders/lib';
|
6
3
|
export { default as StrokeSmoother, Curve as StrokeSmootherCurve } from './util/StrokeSmoother';
|
7
4
|
export * from './AbstractComponent';
|
8
5
|
export { default as AbstractComponent } from './AbstractComponent';
|
@@ -29,16 +29,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
29
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
30
30
|
};
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
32
|
-
exports.ImageComponent = exports.BackgroundComponentBackgroundType = exports.BackgroundComponent = exports.StrokeComponent = exports.Text = exports.TextComponent = exports.isRestylableComponent = exports.createRestyleComponentCommand = exports.Stroke = exports.AbstractComponent = exports.StrokeSmoother =
|
32
|
+
exports.ImageComponent = exports.BackgroundComponentBackgroundType = exports.BackgroundComponent = exports.StrokeComponent = exports.Text = exports.TextComponent = exports.isRestylableComponent = exports.createRestyleComponentCommand = exports.Stroke = exports.AbstractComponent = exports.StrokeSmoother = void 0;
|
33
33
|
__exportStar(require("./builders/types"), exports);
|
34
|
-
|
35
|
-
Object.defineProperty(exports, "makeFreehandLineBuilder", { enumerable: true, get: function () { return FreehandLineBuilder_1.makeFreehandLineBuilder; } });
|
36
|
-
var PolylineBuilder_1 = require("./builders/PolylineBuilder");
|
37
|
-
Object.defineProperty(exports, "makePolylineBuilder", { enumerable: true, get: function () { return PolylineBuilder_1.makePolylineBuilder; } });
|
38
|
-
var PressureSensitiveFreehandLineBuilder_1 = require("./builders/PressureSensitiveFreehandLineBuilder");
|
39
|
-
Object.defineProperty(exports, "makePressureSensitiveFreehandLineBuilder", { enumerable: true, get: function () { return PressureSensitiveFreehandLineBuilder_1.makePressureSensitiveFreehandLineBuilder; } });
|
40
|
-
var CircleBuilder_1 = require("./builders/CircleBuilder");
|
41
|
-
Object.defineProperty(exports, "makeOutlinedCircleBuilder", { enumerable: true, get: function () { return CircleBuilder_1.makeOutlinedCircleBuilder; } });
|
34
|
+
__exportStar(require("./builders/lib"), exports);
|
42
35
|
var StrokeSmoother_1 = require("./util/StrokeSmoother");
|
43
36
|
Object.defineProperty(exports, "StrokeSmoother", { enumerable: true, get: function () { return __importDefault(StrokeSmoother_1).default; } });
|
44
37
|
__exportStar(require("./AbstractComponent"), exports);
|
@@ -56,9 +56,7 @@ class StrokeSmoother {
|
|
56
56
|
console.assert(this.lastExitingVec.magnitude() !== 0, 'lastExitingVec has zero length!');
|
57
57
|
// Use the last two points to start a new curve (the last point isn't used
|
58
58
|
// in the current curve and we want connected curves to share end points)
|
59
|
-
this.buffer = [
|
60
|
-
this.buffer[this.buffer.length - 2], lastPoint,
|
61
|
-
];
|
59
|
+
this.buffer = [this.buffer[this.buffer.length - 2], lastPoint];
|
62
60
|
this.currentCurve = null;
|
63
61
|
this.isFirstSegment = false;
|
64
62
|
}
|
@@ -99,8 +97,7 @@ class StrokeSmoother {
|
|
99
97
|
return;
|
100
98
|
}
|
101
99
|
const threshold = Math.min(this.lastPoint.width, newPoint.width) / 3;
|
102
|
-
const shouldSnapToInitial = this.startPoint.pos.distanceTo(newPoint.pos) < threshold
|
103
|
-
&& this.isFirstSegment;
|
100
|
+
const shouldSnapToInitial = this.startPoint.pos.distanceTo(newPoint.pos) < threshold && this.isFirstSegment;
|
104
101
|
// Snap to the starting point if the stroke is contained within a small ball centered
|
105
102
|
// at the starting point.
|
106
103
|
// This allows us to create a circle/dot at the start of the stroke.
|
@@ -153,7 +150,9 @@ class StrokeSmoother {
|
|
153
150
|
const startEndDist = segmentEnd.distanceTo(segmentStart);
|
154
151
|
const maxControlPointDist = maxRelativeLength * startEndDist;
|
155
152
|
// Exit in cases where we would divide by zero
|
156
|
-
if (maxControlPointDist === 0 ||
|
153
|
+
if (maxControlPointDist === 0 ||
|
154
|
+
exitingVec.magnitude() === 0 ||
|
155
|
+
!isFinite(exitingVec.magnitude())) {
|
157
156
|
return;
|
158
157
|
}
|
159
158
|
console.assert(isFinite(enteringVec.magnitude()), 'Pre-normalized enteringVec has NaN or ∞ magnitude!');
|
@@ -13,7 +13,7 @@ const makeAboutDialog = (editor, entries) => {
|
|
13
13
|
const container = document.createElement(entry.minimized ? 'details' : 'div');
|
14
14
|
container.classList.add('about-entry');
|
15
15
|
const header = document.createElement(entry.minimized ? 'summary' : 'h2');
|
16
|
-
if (typeof
|
16
|
+
if (typeof entry.heading === 'string') {
|
17
17
|
header.innerText = entry.heading;
|
18
18
|
}
|
19
19
|
else {
|
@@ -20,7 +20,7 @@ const makeAboutDialog = (editor, options) => {
|
|
20
20
|
const scrollRegion = document.createElement('div');
|
21
21
|
scrollRegion.classList.add('scroll');
|
22
22
|
// Allow scrolling in the scrollable container -- don't forward wheel events.
|
23
|
-
scrollRegion.onwheel = evt => evt.stopPropagation();
|
23
|
+
scrollRegion.onwheel = (evt) => evt.stopPropagation();
|
24
24
|
contentWrapper.replaceChildren(heading, scrollRegion, closeButton);
|
25
25
|
dialog.replaceChildren(contentWrapper);
|
26
26
|
overlay.replaceChildren(dialog);
|
@@ -32,7 +32,7 @@ const makeAboutDialog = (editor, options) => {
|
|
32
32
|
dialog.close();
|
33
33
|
};
|
34
34
|
const addCloseListeners = () => {
|
35
|
-
dialog.addEventListener('pointerdown', event => {
|
35
|
+
dialog.addEventListener('pointerdown', (event) => {
|
36
36
|
if (event.target === dialog) {
|
37
37
|
void closeDialog();
|
38
38
|
}
|
@@ -22,7 +22,20 @@ export type EditorImageNotifier = EventDispatcher<EditorImageEventType, {
|
|
22
22
|
*/
|
23
23
|
export type PreRenderComponentCallback = (component: AbstractComponent, componentsProcessed: number, totalComponents: number) => Promise<boolean>;
|
24
24
|
/**
|
25
|
-
* Handles lookup/storage of elements in the image.
|
25
|
+
* @summary Handles lookup/storage of elements in the image.
|
26
|
+
*
|
27
|
+
* `js-draw` images are made up of a collection of {@link AbstractComponent}s (which
|
28
|
+
* includes {@link Stroke}s, {@link TextComponent}s, etc.). An `EditorImage`
|
29
|
+
* is the data structure that stores these components.
|
30
|
+
*
|
31
|
+
* Here's how to do a few common operations:
|
32
|
+
* - **Get all components in a {@link @js-draw/math!Rect2 | Rect2}**:
|
33
|
+
* {@link EditorImage.getElementsIntersectingRegion}.
|
34
|
+
* - **Draw an `EditorImage` onto a canvas/SVG**: {@link EditorImage.render}.
|
35
|
+
* - **Adding a new component**: {@link EditorImage.addElement}.
|
36
|
+
*
|
37
|
+
* **Example**:
|
38
|
+
* [[include:doc-pages/inline-examples/image-add-and-lookup.md]]
|
26
39
|
*/
|
27
40
|
export default class EditorImage {
|
28
41
|
private root;
|
@@ -40,10 +53,13 @@ export default class EditorImage {
|
|
40
53
|
/** @internal */
|
41
54
|
renderWithCache(screenRenderer: AbstractRenderer, cache: RenderingCache, viewport: Viewport): void;
|
42
55
|
/**
|
43
|
-
* Renders
|
56
|
+
* Renders this image to the given `renderer`.
|
44
57
|
*
|
45
|
-
* `viewport` is
|
46
|
-
*
|
58
|
+
* If `viewport` is non-null, only components that can be seen from that viewport
|
59
|
+
* will be rendered. If `viewport` is `null`, **all** components are rendered.
|
60
|
+
*
|
61
|
+
* **Example**:
|
62
|
+
* [[include:doc-pages/inline-examples/canvas-renderer.md]]
|
47
63
|
*/
|
48
64
|
render(renderer: AbstractRenderer, viewport: Viewport | null): void;
|
49
65
|
/**
|
@@ -63,14 +79,21 @@ export default class EditorImage {
|
|
63
79
|
*/
|
64
80
|
renderAll(renderer: AbstractRenderer): void;
|
65
81
|
/**
|
66
|
-
* @returns all elements in the image, sorted by z-index
|
82
|
+
* @returns all elements in the image, sorted by z-index (low to high).
|
67
83
|
*
|
68
|
-
*
|
84
|
+
* This can be slow for large images. If you only need all elemenst in part of the image,
|
85
|
+
* consider using {@link getElementsIntersectingRegion} instead.
|
86
|
+
*
|
87
|
+
* **Note**: The result does not include background elements. See {@link getBackgroundComponents}.
|
69
88
|
*/
|
70
89
|
getAllElements(): AbstractComponent[];
|
71
90
|
/** Returns the number of elements added to this image. @internal */
|
72
91
|
estimateNumElements(): number;
|
73
|
-
/**
|
92
|
+
/**
|
93
|
+
* @returns a list of `AbstractComponent`s intersecting `region`, sorted by increasing z-index.
|
94
|
+
*
|
95
|
+
* Components in the background layer are only included if `includeBackground` is `true`.
|
96
|
+
*/
|
74
97
|
getElementsIntersectingRegion(region: Rect2, includeBackground?: boolean): AbstractComponent[];
|
75
98
|
/** Called whenever (just after) an element is completely removed. @internal */
|
76
99
|
onDestroyElement(elem: AbstractComponent): void;
|