ding-image-editor 3.15.3
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/README.md +193 -0
- package/dist/svg/icon-a.svg +376 -0
- package/dist/svg/icon-b.svg +369 -0
- package/dist/svg/icon-c.svg +369 -0
- package/dist/svg/icon-d.svg +369 -0
- package/dist/tui-image-editor.css +6 -0
- package/dist/tui-image-editor.js +62329 -0
- package/dist/tui-image-editor.min.css +5 -0
- package/dist/tui-image-editor.min.js +15 -0
- package/index.d.ts +334 -0
- package/package.json +52 -0
- package/src/css/buttons.styl +102 -0
- package/src/css/checkbox.styl +86 -0
- package/src/css/colorpicker.styl +98 -0
- package/src/css/gridtable.styl +45 -0
- package/src/css/icon.styl +44 -0
- package/src/css/index.styl +17 -0
- package/src/css/main.styl +163 -0
- package/src/css/position.styl +309 -0
- package/src/css/range.styl +91 -0
- package/src/css/submenu.styl +168 -0
- package/src/index.js +29 -0
- package/src/js/action.js +686 -0
- package/src/js/command/addIcon.js +42 -0
- package/src/js/command/addImageObject.js +34 -0
- package/src/js/command/addObject.js +43 -0
- package/src/js/command/addShape.js +51 -0
- package/src/js/command/addText.js +73 -0
- package/src/js/command/applyFilter.js +95 -0
- package/src/js/command/changeIconColor.js +48 -0
- package/src/js/command/changeSelection.js +31 -0
- package/src/js/command/changeShape.js +84 -0
- package/src/js/command/changeText.js +44 -0
- package/src/js/command/changeTextStyle.js +80 -0
- package/src/js/command/clearObjects.js +33 -0
- package/src/js/command/flip.js +36 -0
- package/src/js/command/loadImage.js +58 -0
- package/src/js/command/removeFilter.js +38 -0
- package/src/js/command/removeObject.js +37 -0
- package/src/js/command/resize.js +41 -0
- package/src/js/command/resizeCanvasDimension.js +40 -0
- package/src/js/command/rotate.js +64 -0
- package/src/js/command/setObjectPosition.js +50 -0
- package/src/js/command/setObjectProperties.js +55 -0
- package/src/js/component/cropper.js +407 -0
- package/src/js/component/filter.js +229 -0
- package/src/js/component/flip.js +146 -0
- package/src/js/component/freeDrawing.js +144 -0
- package/src/js/component/icon.js +246 -0
- package/src/js/component/imageLoader.js +84 -0
- package/src/js/component/line.js +205 -0
- package/src/js/component/resize.js +103 -0
- package/src/js/component/rotation.js +91 -0
- package/src/js/component/shape.js +601 -0
- package/src/js/component/text.js +572 -0
- package/src/js/component/zoom.js +708 -0
- package/src/js/consts.js +404 -0
- package/src/js/drawingMode/cropper.js +35 -0
- package/src/js/drawingMode/freeDrawing.js +36 -0
- package/src/js/drawingMode/icon.js +35 -0
- package/src/js/drawingMode/lineDrawing.js +36 -0
- package/src/js/drawingMode/resize.js +35 -0
- package/src/js/drawingMode/shape.js +35 -0
- package/src/js/drawingMode/text.js +35 -0
- package/src/js/drawingMode/zoom.js +37 -0
- package/src/js/extension/arrowLine.js +172 -0
- package/src/js/extension/blur.js +29 -0
- package/src/js/extension/colorFilter.js +104 -0
- package/src/js/extension/cropzone.js +568 -0
- package/src/js/extension/emboss.js +29 -0
- package/src/js/extension/mask.js +90 -0
- package/src/js/extension/sharpen.js +29 -0
- package/src/js/factory/command.js +36 -0
- package/src/js/factory/errorMessage.js +27 -0
- package/src/js/graphics.js +1539 -0
- package/src/js/helper/imagetracer.js +1396 -0
- package/src/js/helper/selectionModifyHelper.js +86 -0
- package/src/js/helper/shapeFilterFillHelper.js +564 -0
- package/src/js/helper/shapeResizeHelper.js +237 -0
- package/src/js/imageEditor.js +1795 -0
- package/src/js/interface/command.js +131 -0
- package/src/js/interface/component.js +127 -0
- package/src/js/interface/drawingMode.js +47 -0
- package/src/js/invoker.js +292 -0
- package/src/js/polyfill.js +498 -0
- package/src/js/ui/crop.js +139 -0
- package/src/js/ui/draw.js +187 -0
- package/src/js/ui/filter.js +510 -0
- package/src/js/ui/flip.js +87 -0
- package/src/js/ui/history.js +171 -0
- package/src/js/ui/icon.js +191 -0
- package/src/js/ui/locale/locale.js +19 -0
- package/src/js/ui/mask.js +96 -0
- package/src/js/ui/panelMenu.js +130 -0
- package/src/js/ui/resize.js +241 -0
- package/src/js/ui/rotate.js +123 -0
- package/src/js/ui/shape.js +265 -0
- package/src/js/ui/submenuBase.js +122 -0
- package/src/js/ui/template/controls.js +21 -0
- package/src/js/ui/template/mainContainer.js +38 -0
- package/src/js/ui/template/style.js +146 -0
- package/src/js/ui/template/submenu/crop.js +73 -0
- package/src/js/ui/template/submenu/draw.js +42 -0
- package/src/js/ui/template/submenu/filter.js +157 -0
- package/src/js/ui/template/submenu/flip.js +41 -0
- package/src/js/ui/template/submenu/history.js +22 -0
- package/src/js/ui/template/submenu/icon.js +108 -0
- package/src/js/ui/template/submenu/mask.js +30 -0
- package/src/js/ui/template/submenu/resize.js +54 -0
- package/src/js/ui/template/submenu/rotate.js +32 -0
- package/src/js/ui/template/submenu/shape.js +45 -0
- package/src/js/ui/template/submenu/text.js +67 -0
- package/src/js/ui/template/submenu/zoom.js +41 -0
- package/src/js/ui/text.js +279 -0
- package/src/js/ui/theme/standard.js +220 -0
- package/src/js/ui/theme/theme.js +249 -0
- package/src/js/ui/tools/colorpicker.js +250 -0
- package/src/js/ui/tools/range.js +390 -0
- package/src/js/ui.js +858 -0
- package/src/js/util.js +551 -0
- package/src/svg/default.svg +335 -0
- package/src/svg/icon-a/ic-apply.svg +6 -0
- package/src/svg/icon-a/ic-cancel.svg +6 -0
- package/src/svg/icon-a/ic-color-transparent-w.svg +12 -0
- package/src/svg/icon-a/ic-crop.svg +7 -0
- package/src/svg/icon-a/ic-delete-all.svg +6 -0
- package/src/svg/icon-a/ic-delete.svg +6 -0
- package/src/svg/icon-a/ic-draw-free.svg +5 -0
- package/src/svg/icon-a/ic-draw-line.svg +5 -0
- package/src/svg/icon-a/ic-draw.svg +6 -0
- package/src/svg/icon-a/ic-filter.svg +7 -0
- package/src/svg/icon-a/ic-flip-reset.svg +7 -0
- package/src/svg/icon-a/ic-flip-x.svg +6 -0
- package/src/svg/icon-a/ic-flip-y.svg +6 -0
- package/src/svg/icon-a/ic-flip.svg +6 -0
- package/src/svg/icon-a/ic-history-check.svg +5 -0
- package/src/svg/icon-a/ic-history-crop.svg +7 -0
- package/src/svg/icon-a/ic-history-delete.svg +9 -0
- package/src/svg/icon-a/ic-history-draw.svg +7 -0
- package/src/svg/icon-a/ic-history-filter.svg +8 -0
- package/src/svg/icon-a/ic-history-flip.svg +6 -0
- package/src/svg/icon-a/ic-history-group.svg +9 -0
- package/src/svg/icon-a/ic-history-icon.svg +6 -0
- package/src/svg/icon-a/ic-history-load.svg +7 -0
- package/src/svg/icon-a/ic-history-mask.svg +9 -0
- package/src/svg/icon-a/ic-history-resize.svg +12 -0
- package/src/svg/icon-a/ic-history-rotate.svg +16 -0
- package/src/svg/icon-a/ic-history-shape.svg +7 -0
- package/src/svg/icon-a/ic-history-text.svg +8 -0
- package/src/svg/icon-a/ic-history.svg +6 -0
- package/src/svg/icon-a/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-a/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-a/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-a/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-a/ic-icon-heart.svg +5 -0
- package/src/svg/icon-a/ic-icon-load.svg +8 -0
- package/src/svg/icon-a/ic-icon-location.svg +8 -0
- package/src/svg/icon-a/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-a/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-a/ic-icon-star.svg +5 -0
- package/src/svg/icon-a/ic-icon.svg +5 -0
- package/src/svg/icon-a/ic-mask-load.svg +8 -0
- package/src/svg/icon-a/ic-mask.svg +6 -0
- package/src/svg/icon-a/ic-redo.svg +7 -0
- package/src/svg/icon-a/ic-reset.svg +7 -0
- package/src/svg/icon-a/ic-resize.svg +13 -0
- package/src/svg/icon-a/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-a/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-a/ic-rotate.svg +7 -0
- package/src/svg/icon-a/ic-shape-circle.svg +5 -0
- package/src/svg/icon-a/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-a/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-a/ic-shape.svg +6 -0
- package/src/svg/icon-a/ic-text-align-center.svg +6 -0
- package/src/svg/icon-a/ic-text-align-left.svg +6 -0
- package/src/svg/icon-a/ic-text-align-right.svg +6 -0
- package/src/svg/icon-a/ic-text-bold.svg +7 -0
- package/src/svg/icon-a/ic-text-italic.svg +6 -0
- package/src/svg/icon-a/ic-text-underline.svg +7 -0
- package/src/svg/icon-a/ic-text.svg +7 -0
- package/src/svg/icon-a/ic-undo.svg +7 -0
- package/src/svg/icon-a/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-a/ic-zoom-zoom-in.svg +10 -0
- package/src/svg/icon-a/ic-zoom-zoom-out.svg +9 -0
- package/src/svg/icon-a/img-bi.svg +5 -0
- package/src/svg/icon-b/ic-apply.svg +6 -0
- package/src/svg/icon-b/ic-cancel.svg +6 -0
- package/src/svg/icon-b/ic-crop.svg +7 -0
- package/src/svg/icon-b/ic-delete-all.svg +6 -0
- package/src/svg/icon-b/ic-delete.svg +6 -0
- package/src/svg/icon-b/ic-draw-free.svg +5 -0
- package/src/svg/icon-b/ic-draw-line.svg +5 -0
- package/src/svg/icon-b/ic-draw.svg +6 -0
- package/src/svg/icon-b/ic-filter.svg +7 -0
- package/src/svg/icon-b/ic-flip-reset.svg +7 -0
- package/src/svg/icon-b/ic-flip-x.svg +6 -0
- package/src/svg/icon-b/ic-flip-y.svg +6 -0
- package/src/svg/icon-b/ic-flip.svg +6 -0
- package/src/svg/icon-b/ic-history-check.svg +5 -0
- package/src/svg/icon-b/ic-history-crop.svg +7 -0
- package/src/svg/icon-b/ic-history-delete.svg +9 -0
- package/src/svg/icon-b/ic-history-draw.svg +7 -0
- package/src/svg/icon-b/ic-history-filter.svg +8 -0
- package/src/svg/icon-b/ic-history-flip.svg +6 -0
- package/src/svg/icon-b/ic-history-group.svg +9 -0
- package/src/svg/icon-b/ic-history-icon.svg +6 -0
- package/src/svg/icon-b/ic-history-load.svg +7 -0
- package/src/svg/icon-b/ic-history-mask.svg +9 -0
- package/src/svg/icon-b/ic-history-resize.svg +12 -0
- package/src/svg/icon-b/ic-history-rotate.svg +16 -0
- package/src/svg/icon-b/ic-history-shape.svg +7 -0
- package/src/svg/icon-b/ic-history-text.svg +8 -0
- package/src/svg/icon-b/ic-history.svg +6 -0
- package/src/svg/icon-b/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-b/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-b/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-b/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-b/ic-icon-heart.svg +5 -0
- package/src/svg/icon-b/ic-icon-load.svg +8 -0
- package/src/svg/icon-b/ic-icon-location.svg +8 -0
- package/src/svg/icon-b/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-b/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-b/ic-icon-star.svg +5 -0
- package/src/svg/icon-b/ic-icon.svg +5 -0
- package/src/svg/icon-b/ic-mask-load.svg +8 -0
- package/src/svg/icon-b/ic-mask.svg +6 -0
- package/src/svg/icon-b/ic-redo.svg +7 -0
- package/src/svg/icon-b/ic-reset.svg +7 -0
- package/src/svg/icon-b/ic-resize.svg +13 -0
- package/src/svg/icon-b/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-b/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-b/ic-rotate.svg +7 -0
- package/src/svg/icon-b/ic-shape-circle.svg +5 -0
- package/src/svg/icon-b/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-b/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-b/ic-shape.svg +6 -0
- package/src/svg/icon-b/ic-text-align-center.svg +6 -0
- package/src/svg/icon-b/ic-text-align-left.svg +6 -0
- package/src/svg/icon-b/ic-text-align-right.svg +6 -0
- package/src/svg/icon-b/ic-text-bold.svg +7 -0
- package/src/svg/icon-b/ic-text-italic.svg +6 -0
- package/src/svg/icon-b/ic-text-underline.svg +7 -0
- package/src/svg/icon-b/ic-text.svg +7 -0
- package/src/svg/icon-b/ic-undo.svg +7 -0
- package/src/svg/icon-b/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-b/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-b/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-b/img-bi.svg +5 -0
- package/src/svg/icon-c/ic-apply.svg +6 -0
- package/src/svg/icon-c/ic-cancel.svg +6 -0
- package/src/svg/icon-c/ic-crop.svg +7 -0
- package/src/svg/icon-c/ic-delete-all.svg +6 -0
- package/src/svg/icon-c/ic-delete.svg +6 -0
- package/src/svg/icon-c/ic-draw-free.svg +5 -0
- package/src/svg/icon-c/ic-draw-line.svg +5 -0
- package/src/svg/icon-c/ic-draw.svg +6 -0
- package/src/svg/icon-c/ic-filter.svg +7 -0
- package/src/svg/icon-c/ic-flip-reset.svg +7 -0
- package/src/svg/icon-c/ic-flip-x.svg +6 -0
- package/src/svg/icon-c/ic-flip-y.svg +6 -0
- package/src/svg/icon-c/ic-flip.svg +6 -0
- package/src/svg/icon-c/ic-history-check.svg +5 -0
- package/src/svg/icon-c/ic-history-crop.svg +7 -0
- package/src/svg/icon-c/ic-history-delete.svg +9 -0
- package/src/svg/icon-c/ic-history-draw.svg +7 -0
- package/src/svg/icon-c/ic-history-filter.svg +8 -0
- package/src/svg/icon-c/ic-history-flip.svg +6 -0
- package/src/svg/icon-c/ic-history-group.svg +9 -0
- package/src/svg/icon-c/ic-history-icon.svg +6 -0
- package/src/svg/icon-c/ic-history-load.svg +7 -0
- package/src/svg/icon-c/ic-history-mask.svg +9 -0
- package/src/svg/icon-c/ic-history-resize.svg +12 -0
- package/src/svg/icon-c/ic-history-rotate.svg +16 -0
- package/src/svg/icon-c/ic-history-shape.svg +7 -0
- package/src/svg/icon-c/ic-history-text.svg +8 -0
- package/src/svg/icon-c/ic-history.svg +6 -0
- package/src/svg/icon-c/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-c/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-c/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-c/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-c/ic-icon-heart.svg +5 -0
- package/src/svg/icon-c/ic-icon-load.svg +8 -0
- package/src/svg/icon-c/ic-icon-location.svg +8 -0
- package/src/svg/icon-c/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-c/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-c/ic-icon-star.svg +5 -0
- package/src/svg/icon-c/ic-icon.svg +5 -0
- package/src/svg/icon-c/ic-mask-load.svg +8 -0
- package/src/svg/icon-c/ic-mask.svg +6 -0
- package/src/svg/icon-c/ic-redo.svg +7 -0
- package/src/svg/icon-c/ic-reset.svg +7 -0
- package/src/svg/icon-c/ic-resize.svg +13 -0
- package/src/svg/icon-c/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-c/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-c/ic-rotate.svg +7 -0
- package/src/svg/icon-c/ic-shape-circle.svg +5 -0
- package/src/svg/icon-c/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-c/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-c/ic-shape.svg +6 -0
- package/src/svg/icon-c/ic-text-align-center.svg +6 -0
- package/src/svg/icon-c/ic-text-align-left.svg +6 -0
- package/src/svg/icon-c/ic-text-align-right.svg +6 -0
- package/src/svg/icon-c/ic-text-bold.svg +7 -0
- package/src/svg/icon-c/ic-text-italic.svg +6 -0
- package/src/svg/icon-c/ic-text-underline.svg +7 -0
- package/src/svg/icon-c/ic-text.svg +7 -0
- package/src/svg/icon-c/ic-undo.svg +7 -0
- package/src/svg/icon-c/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-c/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-c/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-c/img-bi.svg +5 -0
- package/src/svg/icon-d/ic-apply.svg +6 -0
- package/src/svg/icon-d/ic-cancel.svg +6 -0
- package/src/svg/icon-d/ic-crop.svg +7 -0
- package/src/svg/icon-d/ic-delete-all.svg +6 -0
- package/src/svg/icon-d/ic-delete.svg +6 -0
- package/src/svg/icon-d/ic-draw-free.svg +5 -0
- package/src/svg/icon-d/ic-draw-line.svg +5 -0
- package/src/svg/icon-d/ic-draw.svg +6 -0
- package/src/svg/icon-d/ic-filter.svg +7 -0
- package/src/svg/icon-d/ic-flip-reset.svg +7 -0
- package/src/svg/icon-d/ic-flip-x.svg +6 -0
- package/src/svg/icon-d/ic-flip-y.svg +6 -0
- package/src/svg/icon-d/ic-flip.svg +6 -0
- package/src/svg/icon-d/ic-history-check.svg +5 -0
- package/src/svg/icon-d/ic-history-crop.svg +7 -0
- package/src/svg/icon-d/ic-history-delete.svg +9 -0
- package/src/svg/icon-d/ic-history-draw.svg +7 -0
- package/src/svg/icon-d/ic-history-filter.svg +8 -0
- package/src/svg/icon-d/ic-history-flip.svg +6 -0
- package/src/svg/icon-d/ic-history-group.svg +9 -0
- package/src/svg/icon-d/ic-history-icon.svg +6 -0
- package/src/svg/icon-d/ic-history-load.svg +7 -0
- package/src/svg/icon-d/ic-history-mask.svg +9 -0
- package/src/svg/icon-d/ic-history-resize.svg +12 -0
- package/src/svg/icon-d/ic-history-rotate.svg +16 -0
- package/src/svg/icon-d/ic-history-shape.svg +7 -0
- package/src/svg/icon-d/ic-history-text.svg +8 -0
- package/src/svg/icon-d/ic-history.svg +6 -0
- package/src/svg/icon-d/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-d/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-d/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-d/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-d/ic-icon-heart.svg +5 -0
- package/src/svg/icon-d/ic-icon-load.svg +8 -0
- package/src/svg/icon-d/ic-icon-location.svg +8 -0
- package/src/svg/icon-d/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-d/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-d/ic-icon-star.svg +5 -0
- package/src/svg/icon-d/ic-icon.svg +5 -0
- package/src/svg/icon-d/ic-mask-load.svg +8 -0
- package/src/svg/icon-d/ic-mask.svg +6 -0
- package/src/svg/icon-d/ic-redo.svg +7 -0
- package/src/svg/icon-d/ic-reset.svg +7 -0
- package/src/svg/icon-d/ic-resize.svg +13 -0
- package/src/svg/icon-d/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-d/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-d/ic-rotate.svg +7 -0
- package/src/svg/icon-d/ic-shape-circle.svg +5 -0
- package/src/svg/icon-d/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-d/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-d/ic-shape.svg +6 -0
- package/src/svg/icon-d/ic-text-align-center.svg +6 -0
- package/src/svg/icon-d/ic-text-align-left.svg +6 -0
- package/src/svg/icon-d/ic-text-align-right.svg +6 -0
- package/src/svg/icon-d/ic-text-bold.svg +7 -0
- package/src/svg/icon-d/ic-text-italic.svg +6 -0
- package/src/svg/icon-d/ic-text-underline.svg +7 -0
- package/src/svg/icon-d/ic-text.svg +7 -0
- package/src/svg/icon-d/ic-undo.svg +7 -0
- package/src/svg/icon-d/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-d/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-d/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-d/img-bi.svg +5 -0
@@ -0,0 +1,172 @@
|
|
1
|
+
import { fabric } from 'fabric';
|
2
|
+
|
3
|
+
const ARROW_ANGLE = 30;
|
4
|
+
const CHEVRON_SIZE_RATIO = 2.7;
|
5
|
+
const TRIANGLE_SIZE_RATIO = 1.7;
|
6
|
+
const RADIAN_CONVERSION_VALUE = 180;
|
7
|
+
|
8
|
+
const ArrowLine = fabric.util.createClass(
|
9
|
+
fabric.Line,
|
10
|
+
/** @lends Convolute.prototype */ {
|
11
|
+
/**
|
12
|
+
* Line type
|
13
|
+
* @param {String} type
|
14
|
+
* @default
|
15
|
+
*/
|
16
|
+
type: 'line',
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Constructor
|
20
|
+
* @param {Array} [points] Array of points
|
21
|
+
* @param {Object} [options] Options object
|
22
|
+
* @override
|
23
|
+
*/
|
24
|
+
initialize(points, options = {}) {
|
25
|
+
this.callSuper('initialize', points, options);
|
26
|
+
|
27
|
+
this.arrowType = options.arrowType;
|
28
|
+
},
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Render ArrowLine
|
32
|
+
* @private
|
33
|
+
* @override
|
34
|
+
*/
|
35
|
+
_render(ctx) {
|
36
|
+
const { x1: fromX, y1: fromY, x2: toX, y2: toY } = this.calcLinePoints();
|
37
|
+
const linePosition = {
|
38
|
+
fromX,
|
39
|
+
fromY,
|
40
|
+
toX,
|
41
|
+
toY,
|
42
|
+
};
|
43
|
+
this.ctx = ctx;
|
44
|
+
ctx.lineWidth = this.strokeWidth;
|
45
|
+
|
46
|
+
this._renderBasicLinePath(linePosition);
|
47
|
+
this._drawDecoratorPath(linePosition);
|
48
|
+
|
49
|
+
this._renderStroke(ctx);
|
50
|
+
},
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Render Basic line path
|
54
|
+
* @param {Object} linePosition - line position
|
55
|
+
* @param {number} option.fromX - line start position x
|
56
|
+
* @param {number} option.fromY - line start position y
|
57
|
+
* @param {number} option.toX - line end position x
|
58
|
+
* @param {number} option.toY - line end position y
|
59
|
+
* @private
|
60
|
+
*/
|
61
|
+
_renderBasicLinePath({ fromX, fromY, toX, toY }) {
|
62
|
+
this.ctx.beginPath();
|
63
|
+
this.ctx.moveTo(fromX, fromY);
|
64
|
+
this.ctx.lineTo(toX, toY);
|
65
|
+
},
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Render Arrow Head
|
69
|
+
* @param {Object} linePosition - line position
|
70
|
+
* @param {number} option.fromX - line start position x
|
71
|
+
* @param {number} option.fromY - line start position y
|
72
|
+
* @param {number} option.toX - line end position x
|
73
|
+
* @param {number} option.toY - line end position y
|
74
|
+
* @private
|
75
|
+
*/
|
76
|
+
_drawDecoratorPath(linePosition) {
|
77
|
+
this._drawDecoratorPathType('head', linePosition);
|
78
|
+
this._drawDecoratorPathType('tail', linePosition);
|
79
|
+
},
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Render Arrow Head
|
83
|
+
* @param {string} type - 'head' or 'tail'
|
84
|
+
* @param {Object} linePosition - line position
|
85
|
+
* @param {number} option.fromX - line start position x
|
86
|
+
* @param {number} option.fromY - line start position y
|
87
|
+
* @param {number} option.toX - line end position x
|
88
|
+
* @param {number} option.toY - line end position y
|
89
|
+
* @private
|
90
|
+
*/
|
91
|
+
_drawDecoratorPathType(type, linePosition) {
|
92
|
+
switch (this.arrowType[type]) {
|
93
|
+
case 'triangle':
|
94
|
+
this._drawTrianglePath(type, linePosition);
|
95
|
+
break;
|
96
|
+
case 'chevron':
|
97
|
+
this._drawChevronPath(type, linePosition);
|
98
|
+
break;
|
99
|
+
default:
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
},
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Render Triangle Head
|
106
|
+
* @param {string} type - 'head' or 'tail'
|
107
|
+
* @param {Object} linePosition - line position
|
108
|
+
* @param {number} option.fromX - line start position x
|
109
|
+
* @param {number} option.fromY - line start position y
|
110
|
+
* @param {number} option.toX - line end position x
|
111
|
+
* @param {number} option.toY - line end position y
|
112
|
+
* @private
|
113
|
+
*/
|
114
|
+
_drawTrianglePath(type, linePosition) {
|
115
|
+
const decorateSize = this.ctx.lineWidth * TRIANGLE_SIZE_RATIO;
|
116
|
+
|
117
|
+
this._drawChevronPath(type, linePosition, decorateSize);
|
118
|
+
this.ctx.closePath();
|
119
|
+
},
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Render Chevron Head
|
123
|
+
* @param {string} type - 'head' or 'tail'
|
124
|
+
* @param {Object} linePosition - line position
|
125
|
+
* @param {number} option.fromX - line start position x
|
126
|
+
* @param {number} option.fromY - line start position y
|
127
|
+
* @param {number} option.toX - line end position x
|
128
|
+
* @param {number} option.toY - line end position y
|
129
|
+
* @param {number} decorateSize - decorate size
|
130
|
+
* @private
|
131
|
+
*/
|
132
|
+
_drawChevronPath(type, { fromX, fromY, toX, toY }, decorateSize) {
|
133
|
+
const { ctx } = this;
|
134
|
+
if (!decorateSize) {
|
135
|
+
decorateSize = this.ctx.lineWidth * CHEVRON_SIZE_RATIO;
|
136
|
+
}
|
137
|
+
|
138
|
+
const [standardX, standardY] = type === 'head' ? [fromX, fromY] : [toX, toY];
|
139
|
+
const [compareX, compareY] = type === 'head' ? [toX, toY] : [fromX, fromY];
|
140
|
+
|
141
|
+
const angle =
|
142
|
+
(Math.atan2(compareY - standardY, compareX - standardX) * RADIAN_CONVERSION_VALUE) /
|
143
|
+
Math.PI;
|
144
|
+
const rotatedPosition = (changeAngle) =>
|
145
|
+
this.getRotatePosition(decorateSize, changeAngle, {
|
146
|
+
x: standardX,
|
147
|
+
y: standardY,
|
148
|
+
});
|
149
|
+
|
150
|
+
ctx.moveTo(...rotatedPosition(angle + ARROW_ANGLE));
|
151
|
+
ctx.lineTo(standardX, standardY);
|
152
|
+
ctx.lineTo(...rotatedPosition(angle - ARROW_ANGLE));
|
153
|
+
},
|
154
|
+
|
155
|
+
/**
|
156
|
+
* return position from change angle.
|
157
|
+
* @param {number} distance - change distance
|
158
|
+
* @param {number} angle - change angle
|
159
|
+
* @param {Object} referencePosition - reference position
|
160
|
+
* @returns {Array}
|
161
|
+
* @private
|
162
|
+
*/
|
163
|
+
getRotatePosition(distance, angle, referencePosition) {
|
164
|
+
const radian = (angle * Math.PI) / RADIAN_CONVERSION_VALUE;
|
165
|
+
const { x, y } = referencePosition;
|
166
|
+
|
167
|
+
return [distance * Math.cos(radian) + x, distance * Math.sin(radian) + y];
|
168
|
+
},
|
169
|
+
}
|
170
|
+
);
|
171
|
+
|
172
|
+
export default ArrowLine;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import { fabric } from 'fabric';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Blur object
|
5
|
+
* @class Blur
|
6
|
+
* @extends {fabric.Image.filters.Convolute}
|
7
|
+
* @ignore
|
8
|
+
*/
|
9
|
+
const Blur = fabric.util.createClass(
|
10
|
+
fabric.Image.filters.Convolute,
|
11
|
+
/** @lends Convolute.prototype */ {
|
12
|
+
/**
|
13
|
+
* Filter type
|
14
|
+
* @param {String} type
|
15
|
+
* @default
|
16
|
+
*/
|
17
|
+
type: 'Blur',
|
18
|
+
|
19
|
+
/**
|
20
|
+
* constructor
|
21
|
+
* @override
|
22
|
+
*/
|
23
|
+
initialize() {
|
24
|
+
this.matrix = [1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 9];
|
25
|
+
},
|
26
|
+
}
|
27
|
+
);
|
28
|
+
|
29
|
+
export default Blur;
|
@@ -0,0 +1,104 @@
|
|
1
|
+
import { fabric } from 'fabric';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* ColorFilter object
|
5
|
+
* @class ColorFilter
|
6
|
+
* @extends {fabric.Image.filters.BaseFilter}
|
7
|
+
* @ignore
|
8
|
+
*/
|
9
|
+
const ColorFilter = fabric.util.createClass(
|
10
|
+
fabric.Image.filters.BaseFilter,
|
11
|
+
/** @lends BaseFilter.prototype */ {
|
12
|
+
/**
|
13
|
+
* Filter type
|
14
|
+
* @param {String} type
|
15
|
+
* @default
|
16
|
+
*/
|
17
|
+
type: 'ColorFilter',
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Constructor
|
21
|
+
* @member fabric.Image.filters.ColorFilter.prototype
|
22
|
+
* @param {Object} [options] Options object
|
23
|
+
* @param {Number} [options.color='#FFFFFF'] Value of color (0...255)
|
24
|
+
* @param {Number} [options.threshold=45] Value of threshold (0...255)
|
25
|
+
* @override
|
26
|
+
*/
|
27
|
+
initialize(options) {
|
28
|
+
if (!options) {
|
29
|
+
options = {};
|
30
|
+
}
|
31
|
+
this.color = options.color || '#FFFFFF';
|
32
|
+
this.threshold = options.threshold || 45;
|
33
|
+
this.x = options.x || null;
|
34
|
+
this.y = options.y || null;
|
35
|
+
},
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Applies filter to canvas element
|
39
|
+
* @param {Object} canvas Canvas object passed by fabric
|
40
|
+
*/
|
41
|
+
// eslint-disable-next-line complexity
|
42
|
+
applyTo(canvas) {
|
43
|
+
const { canvasEl } = canvas;
|
44
|
+
const context = canvasEl.getContext('2d');
|
45
|
+
const imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height);
|
46
|
+
const { data } = imageData;
|
47
|
+
const { threshold } = this;
|
48
|
+
let filterColor = fabric.Color.sourceFromHex(this.color);
|
49
|
+
let i, len;
|
50
|
+
|
51
|
+
if (this.x && this.y) {
|
52
|
+
filterColor = this._getColor(imageData, this.x, this.y);
|
53
|
+
}
|
54
|
+
|
55
|
+
for (i = 0, len = data.length; i < len; i += 4) {
|
56
|
+
if (
|
57
|
+
this._isOutsideThreshold(data[i], filterColor[0], threshold) ||
|
58
|
+
this._isOutsideThreshold(data[i + 1], filterColor[1], threshold) ||
|
59
|
+
this._isOutsideThreshold(data[i + 2], filterColor[2], threshold)
|
60
|
+
) {
|
61
|
+
continue;
|
62
|
+
}
|
63
|
+
data[i] = data[i + 1] = data[i + 2] = data[i + 3] = 0;
|
64
|
+
}
|
65
|
+
context.putImageData(imageData, 0, 0);
|
66
|
+
},
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Check color if it is within threshold
|
70
|
+
* @param {Number} color1 source color
|
71
|
+
* @param {Number} color2 filtering color
|
72
|
+
* @param {Number} threshold threshold
|
73
|
+
* @returns {boolean} true if within threshold or false
|
74
|
+
*/
|
75
|
+
_isOutsideThreshold(color1, color2, threshold) {
|
76
|
+
const diff = color1 - color2;
|
77
|
+
|
78
|
+
return Math.abs(diff) > threshold;
|
79
|
+
},
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Get color at (x, y)
|
83
|
+
* @param {Object} imageData of canvas
|
84
|
+
* @param {Number} x left position
|
85
|
+
* @param {Number} y top position
|
86
|
+
* @returns {Array} color array
|
87
|
+
*/
|
88
|
+
_getColor(imageData, x, y) {
|
89
|
+
const color = [0, 0, 0, 0];
|
90
|
+
const { data, width } = imageData;
|
91
|
+
const bytes = 4;
|
92
|
+
const position = (width * y + x) * bytes;
|
93
|
+
|
94
|
+
color[0] = data[position];
|
95
|
+
color[1] = data[position + 1];
|
96
|
+
color[2] = data[position + 2];
|
97
|
+
color[3] = data[position + 3];
|
98
|
+
|
99
|
+
return color;
|
100
|
+
},
|
101
|
+
}
|
102
|
+
);
|
103
|
+
|
104
|
+
export default ColorFilter;
|