fabric 5.3.0 → 6.0.0-beta1
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/.babelrc +11 -0
- package/.babelrcAlt +19 -0
- package/.browserslistrc +5 -0
- package/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.prettierignore +16 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +491 -189
- package/CONTRIBUTING.md +226 -58
- package/README.md +188 -239
- package/bower.json +1 -3
- package/dist/fabric.d.ts +1021 -0
- package/dist/index.cjs +28027 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27964 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +28092 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +15 -0
- package/dist/index.node.mjs +28035 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/Collection.d.ts +126 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +226 -0
- package/dist/src/Intersection.d.ts +100 -0
- package/dist/src/Observable.d.ts +54 -0
- package/dist/src/Pattern.d.ts +104 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +87 -0
- package/dist/src/brushes/BaseBrush.d.ts +105 -0
- package/dist/src/brushes/CircleBrush.d.ts +49 -0
- package/dist/src/brushes/PatternBrush.d.ts +23 -0
- package/dist/src/brushes/PencilBrush.d.ts +92 -0
- package/dist/src/brushes/SprayBrush.d.ts +79 -0
- package/dist/src/cache.d.ts +46 -0
- package/dist/src/canvas/Canvas.d.ts +567 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
- package/dist/src/canvas/StaticCanvas.d.ts +751 -0
- package/dist/src/canvas/TextEditingManager.d.ts +17 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
- package/dist/src/color/Color.d.ts +174 -0
- package/dist/src/color/color_map.d.ts +155 -0
- package/dist/src/color/constants.d.ts +22 -0
- package/dist/src/color/util.d.ts +12 -0
- package/dist/src/config.d.ts +115 -0
- package/dist/src/constants.d.ts +14 -0
- package/dist/src/controls/Control.d.ts +228 -0
- package/dist/src/controls/changeWidth.d.ts +13 -0
- package/dist/src/controls/controls.render.d.ts +29 -0
- package/dist/src/controls/default_controls.d.ts +50 -0
- package/dist/src/controls/drag.d.ts +12 -0
- package/dist/src/controls/polyControl.d.ts +5 -0
- package/dist/src/controls/rotate.d.ts +12 -0
- package/dist/src/controls/scale.d.ts +47 -0
- package/dist/src/controls/scaleSkew.d.ts +39 -0
- package/dist/src/controls/skew.d.ts +33 -0
- package/dist/src/controls/util.d.ts +41 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist/src/env/browser.d.ts +3 -0
- package/dist/src/env/index.d.ts +7 -0
- package/dist/src/env/node.d.ts +3 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +156 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +90 -0
- package/dist/src/filters/Blur.d.ts +50 -0
- package/dist/src/filters/Boilerplate.d.ts +46 -0
- package/dist/src/filters/Brightness.d.ts +46 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +62 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
- package/dist/src/filters/Composed.d.ts +47 -0
- package/dist/src/filters/Contrast.d.ts +44 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/Gamma.d.ts +53 -0
- package/dist/src/filters/Grayscale.d.ts +45 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +54 -0
- package/dist/src/filters/Noise.d.ts +53 -0
- package/dist/src/filters/Pixelate.d.ts +43 -0
- package/dist/src/filters/RemoveColor.d.ts +62 -0
- package/dist/src/filters/Resize.d.ts +134 -0
- package/dist/src/filters/Saturation.d.ts +47 -0
- package/dist/src/filters/Vibrance.d.ts +47 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/WebGLProbe.d.ts +28 -0
- package/dist/src/filters/typedefs.d.ts +49 -0
- package/dist/src/gradient/Gradient.d.ts +149 -0
- package/dist/src/gradient/constants.d.ts +15 -0
- package/dist/src/gradient/parser/index.d.ts +4 -0
- package/dist/src/gradient/parser/misc.d.ts +4 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
- package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist/src/gradient/typedefs.d.ts +93 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
- package/dist/src/mixins/stateful.mixin.d.ts +18 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
- package/dist/src/parkinglot/straighten.d.ts +2 -0
- package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
- package/dist/src/parser/attributes.d.ts +6 -0
- package/dist/src/parser/constants.d.ts +54 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist/src/parser/elementById.d.ts +6 -0
- package/dist/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist/src/parser/elements_parser.d.ts +3 -0
- package/dist/src/parser/getCSSRules.d.ts +7 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
- package/dist/src/parser/getGradientDefs.d.ts +7 -0
- package/dist/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist/src/parser/getSvgRegex.d.ts +2 -0
- package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
- package/dist/src/parser/loadSVGFromString.d.ts +12 -0
- package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
- package/dist/src/parser/normalizeAttr.d.ts +2 -0
- package/dist/src/parser/normalizeValue.d.ts +2 -0
- package/dist/src/parser/parseAttributes.d.ts +9 -0
- package/dist/src/parser/parseElements.d.ts +11 -0
- package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
- package/dist/src/parser/parseSVGDocument.d.ts +15 -0
- package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist/src/parser/parseStyleObject.d.ts +2 -0
- package/dist/src/parser/parseStyleString.d.ts +2 -0
- package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
- package/dist/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist/src/parser/percent.d.ts +9 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist/src/parser/rotateMatrix.d.ts +2 -0
- package/dist/src/parser/scaleMatrix.d.ts +2 -0
- package/dist/src/parser/selectorMatches.d.ts +2 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist/src/parser/skewMatrix.d.ts +2 -0
- package/dist/src/parser/translateMatrix.d.ts +2 -0
- package/dist/src/shapes/ActiveSelection.d.ts +66 -0
- package/dist/src/shapes/Circle.d.ts +80 -0
- package/dist/src/shapes/Ellipse.d.ts +74 -0
- package/dist/src/shapes/Group.d.ts +381 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +322 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +283 -0
- package/dist/src/shapes/Line.d.ts +117 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
- package/dist/src/shapes/Object/Object.d.ts +906 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
- package/dist/src/shapes/Path.d.ts +123 -0
- package/dist/src/shapes/Polygon.d.ts +7 -0
- package/dist/src/shapes/Polyline.d.ts +130 -0
- package/dist/src/shapes/Rect.d.ts +62 -0
- package/dist/src/shapes/Text/StyledText.d.ts +118 -0
- package/dist/src/shapes/Text/Text.d.ts +656 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Textbox.d.ts +170 -0
- package/dist/src/shapes/Triangle.d.ts +17 -0
- package/dist/src/typedefs.d.ts +93 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist/src/util/animation/animate.d.ts +37 -0
- package/dist/src/util/animation/easing.d.ts +130 -0
- package/dist/src/util/animation/types.d.ts +87 -0
- package/dist/src/util/applyMixins.d.ts +8 -0
- package/dist/src/util/class_registry.d.ts +14 -0
- package/dist/src/util/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +40 -0
- package/dist/src/util/dom_request.d.ts +14 -0
- package/dist/src/util/dom_style.d.ts +7 -0
- package/dist/src/util/fireEvent.d.ts +3 -0
- package/dist/src/util/internals/cloneDeep.d.ts +2 -0
- package/dist/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist/src/util/internals/ifNaN.d.ts +8 -0
- package/dist/src/util/internals/index.d.ts +4 -0
- package/dist/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist/src/util/internals/uid.d.ts +2 -0
- package/dist/src/util/lang_class.d.ts +12 -0
- package/dist/src/util/lang_string.d.ts +22 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist/src/util/misc/capValue.d.ts +2 -0
- package/dist/src/util/misc/cos.d.ts +10 -0
- package/dist/src/util/misc/dom.d.ts +28 -0
- package/dist/src/util/misc/findScaleTo.d.ts +29 -0
- package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
- package/dist/src/util/misc/isTransparent.d.ts +11 -0
- package/dist/src/util/misc/matrix.d.ts +92 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist/src/util/misc/objectEnlive.d.ts +56 -0
- package/dist/src/util/misc/objectTransforms.d.ts +68 -0
- package/dist/src/util/misc/pick.d.ts +8 -0
- package/dist/src/util/misc/planeChange.d.ts +84 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
- package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
- package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist/src/util/misc/sin.d.ts +10 -0
- package/dist/src/util/misc/svgParsing.d.ts +53 -0
- package/dist/src/util/misc/textStyles.d.ts +32 -0
- package/dist/src/util/misc/toFixed.d.ts +8 -0
- package/dist/src/util/misc/vectors.d.ts +57 -0
- package/dist/src/util/path.d.ts +108 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +427 -0
- package/index.node.ts +43 -0
- package/index.ts +1 -0
- package/package.json +90 -39
- package/publish.js +0 -26
- package/rollup.config.mjs +79 -0
- package/rollup.test.config.js +24 -0
- package/scripts/build.mjs +50 -0
- package/scripts/buildLock.mjs +115 -0
- package/scripts/buildReporter.mjs +15 -0
- package/scripts/buildStats.mjs +139 -0
- package/scripts/dirname.mjs +14 -0
- package/scripts/index.mjs +679 -0
- package/scripts/transform_files.mjs +504 -0
- package/src/Collection.ts +311 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +294 -0
- package/src/Intersection.ts +273 -0
- package/src/Observable.ts +175 -0
- package/src/Pattern.ts +211 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +215 -0
- package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
- package/src/brushes/CircleBrush.ts +145 -0
- package/src/brushes/PatternBrush.ts +70 -0
- package/src/brushes/PencilBrush.ts +300 -0
- package/src/brushes/SprayBrush.ts +219 -0
- package/src/cache.ts +89 -0
- package/src/canvas/Canvas.ts +1672 -0
- package/src/canvas/SelectableCanvas.ts +1636 -0
- package/src/canvas/StaticCanvas.ts +1709 -0
- package/src/canvas/TextEditingManager.ts +48 -0
- package/src/canvas/canvas_gestures.mixin.ts +207 -0
- package/src/color/Color.ts +404 -0
- package/src/color/color_map.ts +154 -0
- package/src/color/constants.ts +26 -0
- package/src/color/util.ts +32 -0
- package/src/config.ts +159 -0
- package/src/constants.ts +19 -0
- package/src/controls/Control.ts +377 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/controls.render.ts +138 -0
- package/src/controls/default_controls.ts +132 -0
- package/src/controls/drag.ts +31 -0
- package/src/controls/polyControl.ts +135 -0
- package/src/controls/rotate.ts +87 -0
- package/src/controls/scale.ts +277 -0
- package/src/controls/scaleSkew.ts +92 -0
- package/src/controls/skew.ts +242 -0
- package/src/controls/util.ts +154 -0
- package/src/controls/wrapWithFireEvent.ts +25 -0
- package/src/controls/wrapWithFixedAnchor.ts +20 -0
- package/src/env/browser.ts +28 -0
- package/src/env/index.ts +19 -0
- package/src/env/node.ts +52 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
- package/src/filters/BlendColor.ts +258 -0
- package/src/filters/BlendImage.ts +254 -0
- package/src/filters/Blur.ts +202 -0
- package/src/filters/Boilerplate.ts +91 -0
- package/src/filters/Brightness.ts +93 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +156 -0
- package/src/filters/ColorMatrixFilters.ts +106 -0
- package/src/filters/Composed.ts +85 -0
- package/src/filters/Contrast.ts +94 -0
- package/src/filters/Convolute.ts +341 -0
- package/src/filters/FilterBackend.ts +32 -0
- package/src/filters/Gamma.ts +127 -0
- package/src/filters/Grayscale.ts +137 -0
- package/src/filters/HueRotation.ts +66 -0
- package/src/filters/Invert.ts +117 -0
- package/src/filters/Noise.ts +109 -0
- package/src/filters/Pixelate.ts +114 -0
- package/src/filters/RemoveColor.ts +148 -0
- package/src/filters/Resize.ts +540 -0
- package/src/filters/Saturation.ts +100 -0
- package/src/filters/Vibrance.ts +103 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/WebGLProbe.ts +62 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +401 -0
- package/src/gradient/constants.ts +12 -0
- package/src/gradient/parser/index.ts +3 -0
- package/src/gradient/parser/misc.ts +13 -0
- package/src/gradient/parser/parseColorStops.ts +55 -0
- package/src/gradient/parser/parseCoords.ts +73 -0
- package/src/gradient/typedefs.ts +104 -0
- package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
- package/src/mixins/stateful.mixin.ts +104 -0
- package/src/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +162 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +118 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +23 -0
- package/src/parser/elementMatchesRule.ts +19 -0
- package/src/parser/elements_parser.ts +191 -0
- package/src/parser/getCSSRules.ts +62 -0
- package/src/parser/getGlobalStylesForElement.ts +19 -0
- package/src/parser/getGradientDefs.ts +32 -0
- package/src/parser/getMultipleNodes.ts +15 -0
- package/src/parser/getSvgRegex.ts +5 -0
- package/src/parser/hasAncestorWithNodeName.ts +14 -0
- package/src/parser/loadSVGFromString.ts +26 -0
- package/src/parser/loadSVGFromURL.ts +40 -0
- package/src/parser/normalizeAttr.ts +10 -0
- package/src/parser/normalizeValue.ts +63 -0
- package/src/parser/parseAttributes.ts +90 -0
- package/src/parser/parseElements.ts +28 -0
- package/src/parser/parseFontDeclaration.ts +44 -0
- package/src/parser/parsePointsAttribute.ts +36 -0
- package/src/parser/parseSVGDocument.ts +106 -0
- package/src/parser/parseStyleAttribute.ts +27 -0
- package/src/parser/parseStyleObject.ts +15 -0
- package/src/parser/parseStyleString.ts +16 -0
- package/src/parser/parseTransformAttribute.ts +155 -0
- package/src/parser/parseUseDirectives.ts +79 -0
- package/src/parser/percent.ts +27 -0
- package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
- package/src/parser/rotateMatrix.ts +21 -0
- package/src/parser/scaleMatrix.ts +9 -0
- package/src/parser/selectorMatches.ts +25 -0
- package/src/parser/setStrokeFillOpacity.ts +40 -0
- package/src/parser/skewMatrix.ts +6 -0
- package/src/parser/translateMatrix.ts +8 -0
- package/src/shapes/ActiveSelection.ts +157 -0
- package/src/shapes/Circle.ts +205 -0
- package/src/shapes/Ellipse.ts +154 -0
- package/src/shapes/Group.ts +1053 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
- package/src/shapes/IText/IText.ts +666 -0
- package/src/shapes/IText/ITextBehavior.ts +1055 -0
- package/src/shapes/IText/ITextClickBehavior.ts +321 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +789 -0
- package/src/shapes/Line.ts +329 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +19 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +645 -0
- package/src/shapes/Object/Object.ts +1896 -0
- package/src/shapes/Object/ObjectGeometry.ts +830 -0
- package/src/shapes/Object/ObjectOrigin.ts +354 -0
- package/src/shapes/Object/StackedObject.ts +191 -0
- package/src/shapes/Object/defaultValues.ts +112 -0
- package/src/shapes/Path.ts +395 -0
- package/src/shapes/Polygon.ts +19 -0
- package/src/shapes/Polyline.ts +333 -0
- package/src/shapes/Rect.ts +199 -0
- package/src/shapes/Text/StyledText.ts +319 -0
- package/src/shapes/Text/Text.ts +1948 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Textbox.ts +471 -0
- package/src/shapes/Triangle.ts +45 -0
- package/src/typedefs.ts +119 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +28 -0
- package/src/util/animation/AnimationRegistry.ts +58 -0
- package/src/util/animation/ArrayAnimation.ts +27 -0
- package/src/util/animation/ColorAnimation.ts +74 -0
- package/src/util/animation/ValueAnimation.ts +29 -0
- package/src/util/animation/animate.ts +74 -0
- package/src/util/animation/easing.ts +327 -0
- package/src/util/animation/types.ts +136 -0
- package/src/util/applyMixins.ts +22 -0
- package/src/util/class_registry.ts +54 -0
- package/src/util/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +138 -0
- package/src/util/dom_request.ts +64 -0
- package/src/util/dom_style.ts +20 -0
- package/src/util/fireEvent.ts +15 -0
- package/src/util/internals/cloneDeep.ts +2 -0
- package/src/util/internals/getRandomInt.ts +8 -0
- package/src/util/internals/ifNaN.ts +9 -0
- package/src/util/internals/index.ts +3 -0
- package/src/util/internals/removeFromArray.ts +14 -0
- package/src/util/internals/uid.ts +3 -0
- package/src/util/lang_class.ts +90 -0
- package/src/util/lang_string.ts +79 -0
- package/src/util/misc/boundingBoxFromPoints.ts +37 -0
- package/src/util/misc/capValue.ts +2 -0
- package/src/util/misc/cos.ts +24 -0
- package/src/util/misc/dom.ts +50 -0
- package/src/util/misc/findScaleTo.ts +44 -0
- package/src/util/misc/groupSVGElements.ts +15 -0
- package/src/util/misc/isTransparent.ts +51 -0
- package/src/util/misc/matrix.ts +207 -0
- package/src/util/misc/mergeClipPaths.ts +40 -0
- package/src/util/misc/objectEnlive.ts +189 -0
- package/src/util/misc/objectTransforms.ts +129 -0
- package/src/util/misc/pick.ts +17 -0
- package/src/util/misc/planeChange.ts +136 -0
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
- package/src/util/misc/projectStroke/index.ts +53 -0
- package/src/util/misc/projectStroke/types.ts +24 -0
- package/src/util/misc/radiansDegreesConversion.ts +18 -0
- package/src/util/misc/resolveOrigin.ts +22 -0
- package/src/util/misc/rotatePoint.ts +15 -0
- package/src/util/misc/sin.ts +26 -0
- package/src/util/misc/svgParsing.ts +181 -0
- package/src/util/misc/textStyles.ts +133 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path.ts +941 -0
- package/src/util/transform_matrix_removal.ts +60 -0
- package/src/util/types.ts +78 -0
- package/tsconfig.json +106 -0
- package/HEADER.js +0 -203
- package/build.js +0 -287
- package/dist/fabric.js +0 -31187
- package/dist/fabric.min.js +0 -1
- package/old-travis-reference.yml +0 -97
- package/src/brushes/circle_brush.class.js +0 -144
- package/src/brushes/pattern_brush.class.js +0 -61
- package/src/brushes/pencil_brush.class.js +0 -310
- package/src/brushes/spray_brush.class.js +0 -219
- package/src/canvas.class.js +0 -1312
- package/src/color.class.js +0 -636
- package/src/control.class.js +0 -339
- package/src/controls.actions.js +0 -740
- package/src/controls.render.js +0 -99
- package/src/elements_parser.js +0 -152
- package/src/filters/2d_backend.class.js +0 -65
- package/src/filters/blendcolor_filter.class.js +0 -251
- package/src/filters/blendimage_filter.class.js +0 -247
- package/src/filters/blur_filter.class.js +0 -217
- package/src/filters/brightness_filter.class.js +0 -113
- package/src/filters/colormatrix_filter.class.js +0 -159
- package/src/filters/composed_filter.class.js +0 -72
- package/src/filters/contrast_filter.class.js +0 -113
- package/src/filters/convolute_filter.class.js +0 -352
- package/src/filters/filter_boilerplate.js +0 -111
- package/src/filters/filter_generator.js +0 -85
- package/src/filters/gamma_filter.class.js +0 -136
- package/src/filters/grayscale_filter.class.js +0 -154
- package/src/filters/hue_rotation.class.js +0 -107
- package/src/filters/invert_filter.class.js +0 -111
- package/src/filters/noise_filter.class.js +0 -134
- package/src/filters/pixelate_filter.class.js +0 -137
- package/src/filters/removecolor_filter.class.js +0 -173
- package/src/filters/resize_filter.class.js +0 -490
- package/src/filters/saturate_filter.class.js +0 -119
- package/src/filters/vibrance_filter.class.js +0 -122
- package/src/filters/webgl_backend.class.js +0 -396
- package/src/globalFabric.js +0 -4
- package/src/gradient.class.js +0 -490
- package/src/intersection.class.js +0 -172
- package/src/log.js +0 -11
- package/src/mixins/animation.mixin.js +0 -231
- package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
- package/src/mixins/canvas_events.mixin.js +0 -974
- package/src/mixins/canvas_gestures.mixin.js +0 -149
- package/src/mixins/canvas_grouping.mixin.js +0 -177
- package/src/mixins/canvas_serialization.mixin.js +0 -228
- package/src/mixins/collection.mixin.js +0 -170
- package/src/mixins/default_controls.js +0 -114
- package/src/mixins/itext.svg_export.js +0 -241
- package/src/mixins/itext_behavior.mixin.js +0 -940
- package/src/mixins/itext_click_behavior.mixin.js +0 -278
- package/src/mixins/itext_key_behavior.mixin.js +0 -694
- package/src/mixins/object.svg_export.js +0 -258
- package/src/mixins/object_geometry.mixin.js +0 -683
- package/src/mixins/object_interactivity.mixin.js +0 -314
- package/src/mixins/object_origin.mixin.js +0 -255
- package/src/mixins/object_stacking.mixin.js +0 -80
- package/src/mixins/object_straightening.mixin.js +0 -80
- package/src/mixins/observable.mixin.js +0 -141
- package/src/mixins/shared_methods.mixin.js +0 -94
- package/src/mixins/stateful.mixin.js +0 -107
- package/src/mixins/text_style.mixin.js +0 -324
- package/src/parser.js +0 -1090
- package/src/pattern.class.js +0 -189
- package/src/point.class.js +0 -337
- package/src/shadow.class.js +0 -195
- package/src/shapes/active_selection.class.js +0 -155
- package/src/shapes/circle.class.js +0 -210
- package/src/shapes/ellipse.class.js +0 -181
- package/src/shapes/group.class.js +0 -593
- package/src/shapes/image.class.js +0 -764
- package/src/shapes/itext.class.js +0 -526
- package/src/shapes/line.class.js +0 -324
- package/src/shapes/object.class.js +0 -2008
- package/src/shapes/path.class.js +0 -384
- package/src/shapes/polygon.class.js +0 -81
- package/src/shapes/polyline.class.js +0 -268
- package/src/shapes/rect.class.js +0 -187
- package/src/shapes/text.class.js +0 -1696
- package/src/shapes/textbox.class.js +0 -461
- package/src/shapes/triangle.class.js +0 -93
- package/src/static_canvas.class.js +0 -1881
- package/src/util/anim_ease.js +0 -398
- package/src/util/animate.js +0 -254
- package/src/util/animate_color.js +0 -74
- package/src/util/dom_event.js +0 -50
- package/src/util/dom_misc.js +0 -300
- package/src/util/dom_request.js +0 -54
- package/src/util/dom_style.js +0 -70
- package/src/util/lang_array.js +0 -94
- package/src/util/lang_class.js +0 -115
- package/src/util/lang_object.js +0 -75
- package/src/util/lang_string.js +0 -110
- package/src/util/misc.js +0 -1330
- package/src/util/named_accessors.mixin.js +0 -428
- package/src/util/path.js +0 -829
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { Point } from '../../Point';
|
|
2
|
+
import type { Group } from '../Group';
|
|
3
|
+
import { TDegree, TOriginX, TOriginY } from '../../typedefs';
|
|
4
|
+
import { transformPoint } from '../../util/misc/matrix';
|
|
5
|
+
import { sizeAfterTransform } from '../../util/misc/objectTransforms';
|
|
6
|
+
import { degreesToRadians } from '../../util/misc/radiansDegreesConversion';
|
|
7
|
+
import { CommonMethods } from '../../CommonMethods';
|
|
8
|
+
import { resolveOrigin } from '../../util/misc/resolveOrigin';
|
|
9
|
+
|
|
10
|
+
export class ObjectOrigin<EventSpec> extends CommonMethods<EventSpec> {
|
|
11
|
+
/**
|
|
12
|
+
* Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}
|
|
13
|
+
* @type Number
|
|
14
|
+
* @default 0
|
|
15
|
+
*/
|
|
16
|
+
declare top: number;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}
|
|
20
|
+
* @type Number
|
|
21
|
+
* @default 0
|
|
22
|
+
*/
|
|
23
|
+
declare left: number;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Object width
|
|
27
|
+
* @type Number
|
|
28
|
+
* @default
|
|
29
|
+
*/
|
|
30
|
+
declare width: number;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Object height
|
|
34
|
+
* @type Number
|
|
35
|
+
* @default
|
|
36
|
+
*/
|
|
37
|
+
declare height: number;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Object scale factor (horizontal)
|
|
41
|
+
* @type Number
|
|
42
|
+
* @default 1
|
|
43
|
+
*/
|
|
44
|
+
declare scaleX: number;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Object scale factor (vertical)
|
|
48
|
+
* @type Number
|
|
49
|
+
* @default 1
|
|
50
|
+
*/
|
|
51
|
+
declare scaleY: number;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Angle of skew on x axes of an object (in degrees)
|
|
55
|
+
* @type Number
|
|
56
|
+
* @default 0
|
|
57
|
+
*/
|
|
58
|
+
declare skewX: number;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Angle of skew on y axes of an object (in degrees)
|
|
62
|
+
* @type Number
|
|
63
|
+
* @default 0
|
|
64
|
+
*/
|
|
65
|
+
declare skewY: number;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Horizontal origin of transformation of an object (one of "left", "right", "center")
|
|
69
|
+
* See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
|
|
70
|
+
* @type String
|
|
71
|
+
* @default 'left'
|
|
72
|
+
*/
|
|
73
|
+
declare originX: TOriginX;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Vertical origin of transformation of an object (one of "top", "bottom", "center")
|
|
77
|
+
* See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups
|
|
78
|
+
* @type String
|
|
79
|
+
* @default 'top'
|
|
80
|
+
*/
|
|
81
|
+
declare originY: TOriginY;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Angle of rotation of an object (in degrees)
|
|
85
|
+
* @type Number
|
|
86
|
+
* @default 0
|
|
87
|
+
*/
|
|
88
|
+
declare angle: TDegree;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Width of a stroke used to render this object
|
|
92
|
+
* @type Number
|
|
93
|
+
* @default 1
|
|
94
|
+
*/
|
|
95
|
+
declare strokeWidth: number;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* When `false`, the stoke width will scale with the object.
|
|
99
|
+
* When `true`, the stroke will always match the exact pixel size entered for stroke width.
|
|
100
|
+
* this Property does not work on Text classes or drawing call that uses strokeText,fillText methods
|
|
101
|
+
* default to false
|
|
102
|
+
* @since 2.6.0
|
|
103
|
+
* @type Boolean
|
|
104
|
+
* @default false
|
|
105
|
+
* @type Boolean
|
|
106
|
+
* @default false
|
|
107
|
+
*/
|
|
108
|
+
declare strokeUniform: boolean;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Object containing this object.
|
|
112
|
+
* can influence its size and position
|
|
113
|
+
*/
|
|
114
|
+
declare group?: Group;
|
|
115
|
+
|
|
116
|
+
declare _originalOriginX?: TOriginX;
|
|
117
|
+
|
|
118
|
+
declare _originalOriginY?: TOriginY;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Calculate object bounding box dimensions from its properties scale, skew.
|
|
122
|
+
* @param {Object} [options]
|
|
123
|
+
* @param {Number} [options.scaleX]
|
|
124
|
+
* @param {Number} [options.scaleY]
|
|
125
|
+
* @param {Number} [options.skewX]
|
|
126
|
+
* @param {Number} [options.skewY]
|
|
127
|
+
* @private
|
|
128
|
+
* @returns {Point} dimensions
|
|
129
|
+
*/
|
|
130
|
+
_getTransformedDimensions(options: any = {}): Point {
|
|
131
|
+
const dimOptions = {
|
|
132
|
+
scaleX: this.scaleX,
|
|
133
|
+
scaleY: this.scaleY,
|
|
134
|
+
skewX: this.skewX,
|
|
135
|
+
skewY: this.skewY,
|
|
136
|
+
width: this.width,
|
|
137
|
+
height: this.height,
|
|
138
|
+
strokeWidth: this.strokeWidth,
|
|
139
|
+
...options,
|
|
140
|
+
};
|
|
141
|
+
// stroke is applied before/after transformations are applied according to `strokeUniform`
|
|
142
|
+
const strokeWidth = dimOptions.strokeWidth;
|
|
143
|
+
let preScalingStrokeValue = strokeWidth,
|
|
144
|
+
postScalingStrokeValue = 0;
|
|
145
|
+
|
|
146
|
+
if (this.strokeUniform) {
|
|
147
|
+
preScalingStrokeValue = 0;
|
|
148
|
+
postScalingStrokeValue = strokeWidth;
|
|
149
|
+
}
|
|
150
|
+
const dimX = dimOptions.width + preScalingStrokeValue,
|
|
151
|
+
dimY = dimOptions.height + preScalingStrokeValue,
|
|
152
|
+
noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;
|
|
153
|
+
let finalDimensions;
|
|
154
|
+
if (noSkew) {
|
|
155
|
+
finalDimensions = new Point(
|
|
156
|
+
dimX * dimOptions.scaleX,
|
|
157
|
+
dimY * dimOptions.scaleY
|
|
158
|
+
);
|
|
159
|
+
} else {
|
|
160
|
+
finalDimensions = sizeAfterTransform(dimX, dimY, dimOptions);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return finalDimensions.scalarAdd(postScalingStrokeValue);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Translates the coordinates from a set of origin to another (based on the object's dimensions)
|
|
168
|
+
* @param {Point} point The point which corresponds to the originX and originY params
|
|
169
|
+
* @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'
|
|
170
|
+
* @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'
|
|
171
|
+
* @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'
|
|
172
|
+
* @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'
|
|
173
|
+
* @return {Point}
|
|
174
|
+
*/
|
|
175
|
+
translateToGivenOrigin(
|
|
176
|
+
point: Point,
|
|
177
|
+
fromOriginX: TOriginX,
|
|
178
|
+
fromOriginY: TOriginY,
|
|
179
|
+
toOriginX: TOriginX,
|
|
180
|
+
toOriginY: TOriginY
|
|
181
|
+
): Point {
|
|
182
|
+
let x = point.x,
|
|
183
|
+
y = point.y;
|
|
184
|
+
const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),
|
|
185
|
+
offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);
|
|
186
|
+
|
|
187
|
+
if (offsetX || offsetY) {
|
|
188
|
+
const dim = this._getTransformedDimensions();
|
|
189
|
+
x += offsetX * dim.x;
|
|
190
|
+
y += offsetY * dim.y;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return new Point(x, y);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Translates the coordinates from origin to center coordinates (based on the object's dimensions)
|
|
198
|
+
* @param {Point} point The point which corresponds to the originX and originY params
|
|
199
|
+
* @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
|
|
200
|
+
* @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
|
|
201
|
+
* @return {Point}
|
|
202
|
+
*/
|
|
203
|
+
translateToCenterPoint(
|
|
204
|
+
point: Point,
|
|
205
|
+
originX: TOriginX,
|
|
206
|
+
originY: TOriginY
|
|
207
|
+
): Point {
|
|
208
|
+
const p = this.translateToGivenOrigin(
|
|
209
|
+
point,
|
|
210
|
+
originX,
|
|
211
|
+
originY,
|
|
212
|
+
'center',
|
|
213
|
+
'center'
|
|
214
|
+
);
|
|
215
|
+
if (this.angle) {
|
|
216
|
+
return p.rotate(degreesToRadians(this.angle), point);
|
|
217
|
+
}
|
|
218
|
+
return p;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Translates the coordinates from center to origin coordinates (based on the object's dimensions)
|
|
223
|
+
* @param {Point} center The point which corresponds to center of the object
|
|
224
|
+
* @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'
|
|
225
|
+
* @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'
|
|
226
|
+
* @return {Point}
|
|
227
|
+
*/
|
|
228
|
+
translateToOriginPoint(
|
|
229
|
+
center: Point,
|
|
230
|
+
originX: TOriginX,
|
|
231
|
+
originY: TOriginY
|
|
232
|
+
): Point {
|
|
233
|
+
const p = this.translateToGivenOrigin(
|
|
234
|
+
center,
|
|
235
|
+
'center',
|
|
236
|
+
'center',
|
|
237
|
+
originX,
|
|
238
|
+
originY
|
|
239
|
+
);
|
|
240
|
+
if (this.angle) {
|
|
241
|
+
return p.rotate(degreesToRadians(this.angle), center);
|
|
242
|
+
}
|
|
243
|
+
return p;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Returns the center coordinates of the object relative to canvas
|
|
248
|
+
* @return {Point}
|
|
249
|
+
*/
|
|
250
|
+
getCenterPoint(): Point {
|
|
251
|
+
const relCenter = this.getRelativeCenterPoint();
|
|
252
|
+
return this.group
|
|
253
|
+
? transformPoint(relCenter, this.group.calcTransformMatrix())
|
|
254
|
+
: relCenter;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Returns the center coordinates of the object relative to it's parent
|
|
259
|
+
* @return {Point}
|
|
260
|
+
*/
|
|
261
|
+
getRelativeCenterPoint(): Point {
|
|
262
|
+
return this.translateToCenterPoint(
|
|
263
|
+
new Point(this.left, this.top),
|
|
264
|
+
this.originX,
|
|
265
|
+
this.originY
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Returns the coordinates of the object as if it has a different origin
|
|
271
|
+
* @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
|
|
272
|
+
* @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
|
|
273
|
+
* @return {Point}
|
|
274
|
+
*/
|
|
275
|
+
getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {
|
|
276
|
+
return this.translateToOriginPoint(
|
|
277
|
+
this.getRelativeCenterPoint(),
|
|
278
|
+
originX,
|
|
279
|
+
originY
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Sets the position of the object taking into consideration the object's origin
|
|
285
|
+
* @param {Point} pos The new position of the object
|
|
286
|
+
* @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
|
|
287
|
+
* @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
|
|
288
|
+
* @return {void}
|
|
289
|
+
*/
|
|
290
|
+
setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {
|
|
291
|
+
const center = this.translateToCenterPoint(pos, originX, originY),
|
|
292
|
+
position = this.translateToOriginPoint(
|
|
293
|
+
center,
|
|
294
|
+
this.originX,
|
|
295
|
+
this.originY
|
|
296
|
+
);
|
|
297
|
+
this.set({ left: position.x, top: position.y });
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Sets the origin/position of the object to it's center point
|
|
302
|
+
* @private
|
|
303
|
+
* @return {void}
|
|
304
|
+
*/
|
|
305
|
+
_setOriginToCenter() {
|
|
306
|
+
this._originalOriginX = this.originX;
|
|
307
|
+
this._originalOriginY = this.originY;
|
|
308
|
+
|
|
309
|
+
const center = this.getRelativeCenterPoint();
|
|
310
|
+
|
|
311
|
+
this.originX = 'center';
|
|
312
|
+
this.originY = 'center';
|
|
313
|
+
|
|
314
|
+
this.left = center.x;
|
|
315
|
+
this.top = center.y;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Resets the origin/position of the object to it's original origin
|
|
320
|
+
* @private
|
|
321
|
+
* @return {void}
|
|
322
|
+
*/
|
|
323
|
+
_resetOrigin() {
|
|
324
|
+
if (
|
|
325
|
+
this._originalOriginX !== undefined &&
|
|
326
|
+
this._originalOriginY !== undefined
|
|
327
|
+
) {
|
|
328
|
+
const originPoint = this.translateToOriginPoint(
|
|
329
|
+
this.getRelativeCenterPoint(),
|
|
330
|
+
this._originalOriginX,
|
|
331
|
+
this._originalOriginY
|
|
332
|
+
);
|
|
333
|
+
|
|
334
|
+
this.left = originPoint.x;
|
|
335
|
+
this.top = originPoint.y;
|
|
336
|
+
|
|
337
|
+
this.originX = this._originalOriginX;
|
|
338
|
+
this.originY = this._originalOriginY;
|
|
339
|
+
this._originalOriginX = undefined;
|
|
340
|
+
this._originalOriginY = undefined;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* @private
|
|
346
|
+
*/
|
|
347
|
+
_getLeftTopCoords() {
|
|
348
|
+
return this.translateToOriginPoint(
|
|
349
|
+
this.getRelativeCenterPoint(),
|
|
350
|
+
'left',
|
|
351
|
+
'top'
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { ObjectEvents } from '../../EventTypeDefs';
|
|
2
|
+
import type { Group } from '../Group';
|
|
3
|
+
import type { Canvas } from '../../canvas/Canvas';
|
|
4
|
+
import { StaticCanvas } from '../../canvas/StaticCanvas';
|
|
5
|
+
import { ObjectGeometry } from './ObjectGeometry';
|
|
6
|
+
|
|
7
|
+
type TAncestor = StackedObject | Canvas | StaticCanvas;
|
|
8
|
+
type TCollection = Group | Canvas | StaticCanvas;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Strict: only ancestors that are objects (without canvas)
|
|
12
|
+
*/
|
|
13
|
+
export type Ancestors<Strict> = Strict extends true
|
|
14
|
+
? [StackedObject | Group] | [StackedObject | Group, ...Group[]] | Group[]
|
|
15
|
+
:
|
|
16
|
+
| [StackedObject | Group | Canvas | StaticCanvas]
|
|
17
|
+
| [StackedObject | Group, Canvas | StaticCanvas]
|
|
18
|
+
| [StackedObject, ...Group[]]
|
|
19
|
+
| Group[]
|
|
20
|
+
| [StackedObject | Group, ...Group[], Canvas | StaticCanvas];
|
|
21
|
+
|
|
22
|
+
export type AncestryComparison<Strict> = {
|
|
23
|
+
/**
|
|
24
|
+
* common ancestors of `this` and`other`(may include`this` | `other`)
|
|
25
|
+
*/
|
|
26
|
+
common: Ancestors<Strict>;
|
|
27
|
+
/**
|
|
28
|
+
* ancestors that are of `this` only
|
|
29
|
+
*/
|
|
30
|
+
fork: Ancestors<Strict>;
|
|
31
|
+
/**
|
|
32
|
+
* ancestors that are of `other` only
|
|
33
|
+
*/
|
|
34
|
+
otherFork: Ancestors<Strict>;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export class StackedObject<
|
|
38
|
+
EventSpec extends ObjectEvents = ObjectEvents
|
|
39
|
+
> extends ObjectGeometry<EventSpec> {
|
|
40
|
+
/**
|
|
41
|
+
* Checks if object is descendant of target
|
|
42
|
+
* Should be used instead of @link {Collection.contains} for performance reasons
|
|
43
|
+
* @param {TAncestor} target
|
|
44
|
+
* @returns {boolean}
|
|
45
|
+
*/
|
|
46
|
+
isDescendantOf(target: TAncestor): boolean {
|
|
47
|
+
let parent = this.group || this.canvas;
|
|
48
|
+
while (parent) {
|
|
49
|
+
if (target === parent) {
|
|
50
|
+
return true;
|
|
51
|
+
} else if (parent instanceof StaticCanvas) {
|
|
52
|
+
// happens after all parents were traversed through without a match
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
parent = (parent as Group).group || (parent as Group).canvas;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
*
|
|
62
|
+
* @param {boolean} [strict] returns only ancestors that are objects (without canvas)
|
|
63
|
+
* @returns {Ancestors} ancestors from bottom to top
|
|
64
|
+
*/
|
|
65
|
+
getAncestors<T extends boolean>(strict?: T): Ancestors<T> {
|
|
66
|
+
const ancestors: TAncestor[] = [];
|
|
67
|
+
let parent = this.group || (strict ? undefined : this.canvas);
|
|
68
|
+
while (parent) {
|
|
69
|
+
ancestors.push(parent);
|
|
70
|
+
parent =
|
|
71
|
+
(parent as Group).group ||
|
|
72
|
+
(strict ? undefined : (parent as Group).canvas);
|
|
73
|
+
}
|
|
74
|
+
return ancestors as Ancestors<T>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Compare ancestors
|
|
79
|
+
*
|
|
80
|
+
* @param {StackedObject} other
|
|
81
|
+
* @param {boolean} [strict] finds only ancestors that are objects (without canvas)
|
|
82
|
+
* @returns {AncestryComparison} an object that represent the ancestry situation.
|
|
83
|
+
*/
|
|
84
|
+
findCommonAncestors<T extends this, S extends boolean>(
|
|
85
|
+
other: T,
|
|
86
|
+
strict?: S
|
|
87
|
+
): AncestryComparison<S> {
|
|
88
|
+
if (this === other) {
|
|
89
|
+
return {
|
|
90
|
+
fork: [],
|
|
91
|
+
otherFork: [],
|
|
92
|
+
common: [this, ...this.getAncestors(strict)],
|
|
93
|
+
} as AncestryComparison<S>;
|
|
94
|
+
}
|
|
95
|
+
const ancestors = this.getAncestors(strict);
|
|
96
|
+
const otherAncestors = other.getAncestors(strict);
|
|
97
|
+
// if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case
|
|
98
|
+
if (
|
|
99
|
+
ancestors.length === 0 &&
|
|
100
|
+
otherAncestors.length > 0 &&
|
|
101
|
+
this === otherAncestors[otherAncestors.length - 1]
|
|
102
|
+
) {
|
|
103
|
+
return {
|
|
104
|
+
fork: [],
|
|
105
|
+
otherFork: [
|
|
106
|
+
other,
|
|
107
|
+
...otherAncestors.slice(0, otherAncestors.length - 1),
|
|
108
|
+
],
|
|
109
|
+
common: [this],
|
|
110
|
+
} as AncestryComparison<S>;
|
|
111
|
+
}
|
|
112
|
+
// compare ancestors
|
|
113
|
+
for (let i = 0, ancestor; i < ancestors.length; i++) {
|
|
114
|
+
ancestor = ancestors[i];
|
|
115
|
+
if (ancestor === other) {
|
|
116
|
+
return {
|
|
117
|
+
fork: [this, ...ancestors.slice(0, i)],
|
|
118
|
+
otherFork: [],
|
|
119
|
+
common: ancestors.slice(i),
|
|
120
|
+
} as AncestryComparison<S>;
|
|
121
|
+
}
|
|
122
|
+
for (let j = 0; j < otherAncestors.length; j++) {
|
|
123
|
+
if (this === otherAncestors[j]) {
|
|
124
|
+
return {
|
|
125
|
+
fork: [],
|
|
126
|
+
otherFork: [other, ...otherAncestors.slice(0, j)],
|
|
127
|
+
common: [this, ...ancestors],
|
|
128
|
+
} as AncestryComparison<S>;
|
|
129
|
+
}
|
|
130
|
+
if (ancestor === otherAncestors[j]) {
|
|
131
|
+
return {
|
|
132
|
+
fork: [this, ...ancestors.slice(0, i)],
|
|
133
|
+
otherFork: [other, ...otherAncestors.slice(0, j)],
|
|
134
|
+
common: ancestors.slice(i),
|
|
135
|
+
} as AncestryComparison<S>;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// nothing shared
|
|
140
|
+
return {
|
|
141
|
+
fork: [this, ...ancestors],
|
|
142
|
+
otherFork: [other, ...otherAncestors],
|
|
143
|
+
common: [],
|
|
144
|
+
} as AncestryComparison<S>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
*
|
|
149
|
+
* @param {StackedObject} other
|
|
150
|
+
* @param {boolean} [strict] checks only ancestors that are objects (without canvas)
|
|
151
|
+
* @returns {boolean}
|
|
152
|
+
*/
|
|
153
|
+
hasCommonAncestors<T extends this>(other: T, strict?: boolean): boolean {
|
|
154
|
+
const commonAncestors = this.findCommonAncestors(other, strict);
|
|
155
|
+
return commonAncestors && !!commonAncestors.common.length;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
*
|
|
160
|
+
* @param {FabricObject} other object to compare against
|
|
161
|
+
* @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`
|
|
162
|
+
*/
|
|
163
|
+
isInFrontOf<T extends this>(other: T): boolean | undefined {
|
|
164
|
+
if (this === other) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
const ancestorData = this.findCommonAncestors(other);
|
|
168
|
+
if (!ancestorData) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
if (ancestorData.fork.includes(other as any)) {
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
if (ancestorData.otherFork.includes(this as any)) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const firstCommonAncestor = ancestorData.common[0];
|
|
178
|
+
if (!firstCommonAncestor) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
const headOfFork = ancestorData.fork.pop(),
|
|
182
|
+
headOfOtherFork = ancestorData.otherFork.pop(),
|
|
183
|
+
thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
|
|
184
|
+
headOfFork as any
|
|
185
|
+
),
|
|
186
|
+
otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
|
|
187
|
+
headOfOtherFork as any
|
|
188
|
+
);
|
|
189
|
+
return thisIndex > -1 && thisIndex > otherIndex;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { getEnv } from '../../env';
|
|
2
|
+
|
|
3
|
+
export const stateProperties = [
|
|
4
|
+
'top',
|
|
5
|
+
'left',
|
|
6
|
+
'scaleX',
|
|
7
|
+
'scaleY',
|
|
8
|
+
'flipX',
|
|
9
|
+
'flipY',
|
|
10
|
+
'originX',
|
|
11
|
+
'originY',
|
|
12
|
+
'angle',
|
|
13
|
+
'opacity',
|
|
14
|
+
'globalCompositeOperation',
|
|
15
|
+
'shadow',
|
|
16
|
+
'visible',
|
|
17
|
+
'skewX',
|
|
18
|
+
'skewY',
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
export const cacheProperties = [
|
|
22
|
+
'fill',
|
|
23
|
+
'stroke',
|
|
24
|
+
'strokeWidth',
|
|
25
|
+
'strokeDashArray',
|
|
26
|
+
'width',
|
|
27
|
+
'height',
|
|
28
|
+
'paintFirst',
|
|
29
|
+
'strokeUniform',
|
|
30
|
+
'strokeLineCap',
|
|
31
|
+
'strokeDashOffset',
|
|
32
|
+
'strokeLineJoin',
|
|
33
|
+
'strokeMiterLimit',
|
|
34
|
+
'backgroundColor',
|
|
35
|
+
'clipPath',
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
export const fabricObjectDefaultValues = {
|
|
39
|
+
type: 'object',
|
|
40
|
+
originX: 'left',
|
|
41
|
+
originY: 'top',
|
|
42
|
+
top: 0,
|
|
43
|
+
left: 0,
|
|
44
|
+
width: 0,
|
|
45
|
+
height: 0,
|
|
46
|
+
scaleX: 1,
|
|
47
|
+
scaleY: 1,
|
|
48
|
+
flipX: false,
|
|
49
|
+
flipY: false,
|
|
50
|
+
opacity: 1,
|
|
51
|
+
angle: 0,
|
|
52
|
+
skewX: 0,
|
|
53
|
+
skewY: 0,
|
|
54
|
+
cornerSize: 13,
|
|
55
|
+
touchCornerSize: 24,
|
|
56
|
+
transparentCorners: true,
|
|
57
|
+
hoverCursor: null,
|
|
58
|
+
moveCursor: null,
|
|
59
|
+
padding: 0,
|
|
60
|
+
borderColor: 'rgb(178,204,255)',
|
|
61
|
+
borderDashArray: null,
|
|
62
|
+
cornerColor: 'rgb(178,204,255)',
|
|
63
|
+
cornerStrokeColor: '',
|
|
64
|
+
cornerStyle: 'rect',
|
|
65
|
+
cornerDashArray: null,
|
|
66
|
+
centeredScaling: false,
|
|
67
|
+
centeredRotation: true,
|
|
68
|
+
fill: 'rgb(0,0,0)',
|
|
69
|
+
fillRule: 'nonzero',
|
|
70
|
+
globalCompositeOperation: 'source-over',
|
|
71
|
+
backgroundColor: '',
|
|
72
|
+
selectionBackgroundColor: '',
|
|
73
|
+
stroke: null,
|
|
74
|
+
strokeWidth: 1,
|
|
75
|
+
strokeDashArray: null,
|
|
76
|
+
strokeDashOffset: 0,
|
|
77
|
+
strokeLineCap: 'butt',
|
|
78
|
+
strokeLineJoin: 'miter',
|
|
79
|
+
strokeMiterLimit: 4,
|
|
80
|
+
shadow: null,
|
|
81
|
+
borderOpacityWhenMoving: 0.4,
|
|
82
|
+
borderScaleFactor: 1,
|
|
83
|
+
minScaleLimit: 0,
|
|
84
|
+
selectable: true,
|
|
85
|
+
evented: true,
|
|
86
|
+
visible: true,
|
|
87
|
+
hasControls: true,
|
|
88
|
+
hasBorders: true,
|
|
89
|
+
perPixelTargetFind: false,
|
|
90
|
+
includeDefaultValues: true,
|
|
91
|
+
lockMovementX: false,
|
|
92
|
+
lockMovementY: false,
|
|
93
|
+
lockRotation: false,
|
|
94
|
+
lockScalingX: false,
|
|
95
|
+
lockScalingY: false,
|
|
96
|
+
lockSkewingX: false,
|
|
97
|
+
lockSkewingY: false,
|
|
98
|
+
lockScalingFlip: false,
|
|
99
|
+
excludeFromExport: false,
|
|
100
|
+
// TODO: restore once default values are refactored to a method
|
|
101
|
+
objectCaching: true, // !getEnv().isLikelyNode
|
|
102
|
+
noScaleCache: true,
|
|
103
|
+
strokeUniform: false,
|
|
104
|
+
dirty: true,
|
|
105
|
+
paintFirst: 'fill',
|
|
106
|
+
activeOn: 'down',
|
|
107
|
+
colorProperties: ['fill', 'stroke', 'backgroundColor'],
|
|
108
|
+
clipPath: undefined,
|
|
109
|
+
inverted: false,
|
|
110
|
+
absolutePositioned: false,
|
|
111
|
+
FX_DURATION: 500,
|
|
112
|
+
};
|