fabric 5.3.0 → 6.0.0-beta3
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/.eslintignore +3 -0
- package/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.gitpod.yml +17 -1
- package/.prettierignore +19 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +532 -189
- package/CONTRIBUTING.md +224 -59
- package/README.md +200 -235
- package/bower.json +1 -3
- package/dist/fabric.d.ts +42 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +27582 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27519 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +27663 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +14 -0
- package/dist/index.node.mjs +27606 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/ClassRegistry.d.ts +13 -0
- package/dist/src/Collection.d.ts +136 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +227 -0
- package/dist/src/Intersection.d.ts +112 -0
- package/dist/src/Observable.d.ts +60 -0
- package/dist/src/Pattern.d.ts +113 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +97 -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 +47 -0
- package/dist/src/canvas/Canvas.d.ts +548 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
- package/dist/src/canvas/StaticCanvas.d.ts +778 -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/commonControls.d.ts +28 -0
- package/dist/src/controls/controlRendering.d.ts +29 -0
- package/dist/src/controls/drag.d.ts +12 -0
- package/dist/src/controls/index.d.ts +13 -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 +15 -0
- package/dist/src/env/node.d.ts +5 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +153 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +92 -0
- package/dist/src/filters/Blur.d.ts +51 -0
- package/dist/src/filters/Boilerplate.d.ts +48 -0
- package/dist/src/filters/Brightness.d.ts +47 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +63 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
- package/dist/src/filters/Composed.d.ts +45 -0
- package/dist/src/filters/Contrast.d.ts +45 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
- package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
- package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
- package/dist/src/filters/Gamma.d.ts +54 -0
- package/dist/src/filters/Grayscale.d.ts +46 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +55 -0
- package/dist/src/filters/Noise.d.ts +54 -0
- package/dist/src/filters/Pixelate.d.ts +44 -0
- package/dist/src/filters/RemoveColor.d.ts +63 -0
- package/dist/src/filters/Resize.d.ts +136 -0
- package/dist/src/filters/Saturation.d.ts +48 -0
- package/dist/src/filters/Vibrance.d.ts +48 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/filters.d.ts +21 -0
- package/dist/src/filters/index.d.ts +5 -0
- package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
- package/dist/src/filters/shaders/blendColor.d.ts +13 -0
- package/dist/src/filters/shaders/blendImage.d.ts +3 -0
- package/dist/src/filters/shaders/blur.d.ts +2 -0
- package/dist/src/filters/shaders/brightness.d.ts +2 -0
- package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
- package/dist/src/filters/shaders/constrast.d.ts +2 -0
- package/dist/src/filters/shaders/convolute.d.ts +11 -0
- package/dist/src/filters/shaders/gamma.d.ts +2 -0
- package/dist/src/filters/shaders/grayscale.d.ts +3 -0
- package/dist/src/filters/shaders/invert.d.ts +2 -0
- package/dist/src/filters/shaders/noise.d.ts +2 -0
- package/dist/src/filters/shaders/pixelate.d.ts +2 -0
- package/dist/src/filters/shaders/removeColor.d.ts +2 -0
- package/dist/src/filters/shaders/saturation.d.ts +2 -0
- package/dist/src/filters/shaders/vibrance.d.ts +2 -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 +3 -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/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 +53 -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/index.d.ts +10 -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 +82 -0
- package/dist/src/shapes/Circle.d.ts +99 -0
- package/dist/src/shapes/Ellipse.d.ts +84 -0
- package/dist/src/shapes/Group.d.ts +408 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +335 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +311 -0
- package/dist/src/shapes/Line.d.ts +126 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
- package/dist/src/shapes/Object/Object.d.ts +594 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
- package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
- package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
- package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
- package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
- package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
- package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
- package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
- package/dist/src/shapes/Object/types/index.d.ts +6 -0
- package/dist/src/shapes/Path.d.ts +130 -0
- package/dist/src/shapes/Polygon.d.ts +9 -0
- package/dist/src/shapes/Polyline.d.ts +140 -0
- package/dist/src/shapes/Rect.d.ts +76 -0
- package/dist/src/shapes/Text/StyledText.d.ts +119 -0
- package/dist/src/shapes/Text/Text.d.ts +673 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Text/constants.d.ts +7 -0
- package/dist/src/shapes/Textbox.d.ts +185 -0
- package/dist/src/shapes/Triangle.d.ts +25 -0
- package/dist/src/typedefs.d.ts +90 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -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/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +39 -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/index.d.ts +35 -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_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 +9 -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/index.d.ts +96 -0
- package/dist/src/util/path/regex.d.ts +3 -0
- package/dist/src/util/path/typechecks.d.ts +24 -0
- package/dist/src/util/path/typedefs.d.ts +220 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +51 -0
- package/index.node.ts +37 -0
- package/index.ts +1 -0
- package/package.json +100 -40
- package/publish.js +0 -26
- package/rollup.config.mjs +91 -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/git.mjs +36 -0
- package/scripts/index.mjs +564 -0
- package/scripts/sandbox.mjs +149 -0
- package/src/ClassRegistry.ts +56 -0
- package/src/Collection.ts +346 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +296 -0
- package/src/Intersection.ts +302 -0
- package/src/Observable.ts +181 -0
- package/src/Pattern.ts +227 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +214 -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 +90 -0
- package/src/canvas/Canvas.ts +1607 -0
- package/src/canvas/SelectableCanvas.ts +1608 -0
- package/src/canvas/StaticCanvas.ts +1734 -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 +20 -0
- package/src/controls/Control.ts +380 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/commonControls.ts +105 -0
- package/src/controls/controlRendering.ts +138 -0
- package/src/controls/drag.ts +31 -0
- package/src/controls/index.ts +22 -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 +32 -0
- package/src/env/index.ts +24 -0
- package/src/env/node.ts +56 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
- package/src/filters/BlendColor.ts +217 -0
- package/src/filters/BlendImage.ts +228 -0
- package/src/filters/Blur.ts +179 -0
- package/src/filters/Boilerplate.ts +94 -0
- package/src/filters/Brightness.ts +83 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +145 -0
- package/src/filters/ColorMatrixFilters.ts +77 -0
- package/src/filters/Composed.ts +76 -0
- package/src/filters/Contrast.ts +82 -0
- package/src/filters/Convolute.ts +184 -0
- package/src/filters/FilterBackend.ts +34 -0
- package/src/filters/GLProbes/GLProbe.ts +11 -0
- package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
- package/src/filters/GLProbes/WebGLProbe.ts +46 -0
- package/src/filters/Gamma.ts +110 -0
- package/src/filters/Grayscale.ts +102 -0
- package/src/filters/HueRotation.ts +62 -0
- package/src/filters/Invert.ts +99 -0
- package/src/filters/Noise.ts +94 -0
- package/src/filters/Pixelate.ts +96 -0
- package/src/filters/RemoveColor.ts +135 -0
- package/src/filters/Resize.ts +538 -0
- package/src/filters/Saturation.ts +87 -0
- package/src/filters/Vibrance.ts +88 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/filters.ts +28 -0
- package/src/filters/index.ts +5 -0
- package/src/filters/shaders/baseFilter.ts +19 -0
- package/src/filters/shaders/blendColor.ts +33 -0
- package/src/filters/shaders/blendImage.ts +32 -0
- package/src/filters/shaders/blur.ts +24 -0
- package/src/filters/shaders/brightness.ts +11 -0
- package/src/filters/shaders/colorMatrix.ts +12 -0
- package/src/filters/shaders/constrast.ts +11 -0
- package/src/filters/shaders/convolute.ts +154 -0
- package/src/filters/shaders/gamma.ts +15 -0
- package/src/filters/shaders/grayscale.ts +36 -0
- package/src/filters/shaders/invert.ts +19 -0
- package/src/filters/shaders/noise.ts +16 -0
- package/src/filters/shaders/pixelate.ts +19 -0
- package/src/filters/shaders/removeColor.ts +13 -0
- package/src/filters/shaders/saturation.ts +15 -0
- package/src/filters/shaders/vibrance.ts +16 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +406 -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 +56 -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/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +157 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +115 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +21 -0
- package/src/parser/elementMatchesRule.ts +16 -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 +31 -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/index.ts +9 -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 +34 -0
- package/src/parser/parseSVGDocument.ts +93 -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 +78 -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 +189 -0
- package/src/shapes/Circle.ts +242 -0
- package/src/shapes/Ellipse.ts +179 -0
- package/src/shapes/Group.ts +1100 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
- package/src/shapes/IText/IText.ts +693 -0
- package/src/shapes/IText/ITextBehavior.ts +1064 -0
- package/src/shapes/IText/ITextClickBehavior.ts +325 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +841 -0
- package/src/shapes/Line.ts +346 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +29 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +672 -0
- package/src/shapes/Object/Object.ts +1561 -0
- package/src/shapes/Object/ObjectGeometry.ts +813 -0
- package/src/shapes/Object/ObjectOrigin.ts +276 -0
- package/src/shapes/Object/StackedObject.ts +206 -0
- package/src/shapes/Object/defaultValues.ts +108 -0
- package/src/shapes/Object/types/BaseProps.ts +96 -0
- package/src/shapes/Object/types/BorderProps.ts +40 -0
- package/src/shapes/Object/types/ControlProps.ts +69 -0
- package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
- package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
- package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
- package/src/shapes/Object/types/ObjectProps.ts +46 -0
- package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
- package/src/shapes/Object/types/index.ts +8 -0
- package/src/shapes/Path.ts +416 -0
- package/src/shapes/Polygon.ts +20 -0
- package/src/shapes/Polyline.ts +359 -0
- package/src/shapes/Rect.ts +233 -0
- package/src/shapes/Text/StyledText.ts +329 -0
- package/src/shapes/Text/Text.ts +1884 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Text/constants.ts +91 -0
- package/src/shapes/Textbox.ts +477 -0
- package/src/shapes/Triangle.ts +60 -0
- package/src/typedefs.ts +115 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +9 -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/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +121 -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/index.ts +102 -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_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 +28 -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 +29 -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 +226 -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 +134 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path/index.ts +1038 -0
- package/src/util/path/regex.ts +41 -0
- package/src/util/path/typechecks.ts +145 -0
- package/src/util/path/typedefs.ts +305 -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,242 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ControlCursorCallback,
|
|
3
|
+
TPointerEvent,
|
|
4
|
+
Transform,
|
|
5
|
+
TransformActionHandler,
|
|
6
|
+
} from '../EventTypeDefs';
|
|
7
|
+
import { resolveOrigin } from '../util/misc/resolveOrigin';
|
|
8
|
+
import { Point } from '../Point';
|
|
9
|
+
import { TAxis, TAxisKey } from '../typedefs';
|
|
10
|
+
import {
|
|
11
|
+
degreesToRadians,
|
|
12
|
+
radiansToDegrees,
|
|
13
|
+
} from '../util/misc/radiansDegreesConversion';
|
|
14
|
+
import {
|
|
15
|
+
findCornerQuadrant,
|
|
16
|
+
getLocalPoint,
|
|
17
|
+
isLocked,
|
|
18
|
+
NOT_ALLOWED_CURSOR,
|
|
19
|
+
} from './util';
|
|
20
|
+
import { wrapWithFireEvent } from './wrapWithFireEvent';
|
|
21
|
+
import { wrapWithFixedAnchor } from './wrapWithFixedAnchor';
|
|
22
|
+
|
|
23
|
+
export type SkewTransform = Transform & { skewingSide: -1 | 1 };
|
|
24
|
+
|
|
25
|
+
const AXIS_KEYS: Record<
|
|
26
|
+
TAxis,
|
|
27
|
+
{
|
|
28
|
+
counterAxis: TAxis;
|
|
29
|
+
scale: TAxisKey<'scale'>;
|
|
30
|
+
skew: TAxisKey<'skew'>;
|
|
31
|
+
lockSkewing: TAxisKey<'lockSkewing'>;
|
|
32
|
+
origin: TAxisKey<'origin'>;
|
|
33
|
+
flip: TAxisKey<'flip'>;
|
|
34
|
+
}
|
|
35
|
+
> = {
|
|
36
|
+
x: {
|
|
37
|
+
counterAxis: 'y',
|
|
38
|
+
scale: 'scaleX',
|
|
39
|
+
skew: 'skewX',
|
|
40
|
+
lockSkewing: 'lockSkewingX',
|
|
41
|
+
origin: 'originX',
|
|
42
|
+
flip: 'flipX',
|
|
43
|
+
},
|
|
44
|
+
y: {
|
|
45
|
+
counterAxis: 'x',
|
|
46
|
+
scale: 'scaleY',
|
|
47
|
+
skew: 'skewY',
|
|
48
|
+
lockSkewing: 'lockSkewingY',
|
|
49
|
+
origin: 'originY',
|
|
50
|
+
flip: 'flipY',
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const skewMap = ['ns', 'nesw', 'ew', 'nwse'];
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* return the correct cursor style for the skew action
|
|
58
|
+
* @param {Event} eventData the javascript event that is causing the scale
|
|
59
|
+
* @param {Control} control the control that is interested in the action
|
|
60
|
+
* @param {FabricObject} fabricObject the fabric object that is interested in the action
|
|
61
|
+
* @return {String} a valid css string for the cursor
|
|
62
|
+
*/
|
|
63
|
+
export const skewCursorStyleHandler: ControlCursorCallback = (
|
|
64
|
+
eventData,
|
|
65
|
+
control,
|
|
66
|
+
fabricObject
|
|
67
|
+
) => {
|
|
68
|
+
if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {
|
|
69
|
+
return NOT_ALLOWED_CURSOR;
|
|
70
|
+
}
|
|
71
|
+
if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {
|
|
72
|
+
return NOT_ALLOWED_CURSOR;
|
|
73
|
+
}
|
|
74
|
+
const n = findCornerQuadrant(fabricObject, control) % 4;
|
|
75
|
+
return `${skewMap[n]}-resize`;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Since skewing is applied before scaling, calculations are done in a scaleless plane
|
|
80
|
+
* @see https://github.com/fabricjs/fabric.js/pull/8380
|
|
81
|
+
*/
|
|
82
|
+
function skewObject(
|
|
83
|
+
axis: TAxis,
|
|
84
|
+
{ target, ex, ey, skewingSide, ...transform }: SkewTransform,
|
|
85
|
+
pointer: Point
|
|
86
|
+
) {
|
|
87
|
+
const { skew: skewKey } = AXIS_KEYS[axis],
|
|
88
|
+
offset = pointer
|
|
89
|
+
.subtract(new Point(ex, ey))
|
|
90
|
+
.divide(new Point(target.scaleX, target.scaleY))[axis],
|
|
91
|
+
skewingBefore = target[skewKey],
|
|
92
|
+
skewingStart = transform[skewKey],
|
|
93
|
+
shearingStart = Math.tan(degreesToRadians(skewingStart)),
|
|
94
|
+
// let a, b be the size of target
|
|
95
|
+
// let a' be the value of a after applying skewing
|
|
96
|
+
// then:
|
|
97
|
+
// a' = a + b * skewA => skewA = (a' - a) / b
|
|
98
|
+
// the value b is tricky since skewY is applied before skewX
|
|
99
|
+
b =
|
|
100
|
+
axis === 'y'
|
|
101
|
+
? target._getTransformedDimensions({
|
|
102
|
+
scaleX: 1,
|
|
103
|
+
scaleY: 1,
|
|
104
|
+
// since skewY is applied before skewX, b (=width) is not affected by skewX
|
|
105
|
+
skewX: 0,
|
|
106
|
+
}).x
|
|
107
|
+
: target._getTransformedDimensions({
|
|
108
|
+
scaleX: 1,
|
|
109
|
+
scaleY: 1,
|
|
110
|
+
}).y;
|
|
111
|
+
|
|
112
|
+
const shearing =
|
|
113
|
+
(2 * offset * skewingSide) /
|
|
114
|
+
// we max out fractions to safeguard from asymptotic behavior
|
|
115
|
+
Math.max(b, 1) +
|
|
116
|
+
// add starting state
|
|
117
|
+
shearingStart;
|
|
118
|
+
|
|
119
|
+
const skewing = radiansToDegrees(Math.atan(shearing));
|
|
120
|
+
|
|
121
|
+
target.set(skewKey, skewing);
|
|
122
|
+
const changed = skewingBefore !== target[skewKey];
|
|
123
|
+
|
|
124
|
+
if (changed && axis === 'y') {
|
|
125
|
+
// we don't want skewing to affect scaleX
|
|
126
|
+
// so we factor it by the inverse skewing diff to make it seem unchanged to the viewer
|
|
127
|
+
const { skewX, scaleX } = target,
|
|
128
|
+
dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),
|
|
129
|
+
dimAfter = target._getTransformedDimensions(),
|
|
130
|
+
compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;
|
|
131
|
+
compensationFactor !== 1 &&
|
|
132
|
+
target.set('scaleX', compensationFactor * scaleX);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return changed;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Wrapped Action handler for skewing on a given axis, takes care of the
|
|
140
|
+
* skew direction and determines the correct transform origin for the anchor point
|
|
141
|
+
* @param {Event} eventData javascript event that is doing the transform
|
|
142
|
+
* @param {Object} transform javascript object containing a series of information around the current transform
|
|
143
|
+
* @param {number} x current mouse x position, canvas normalized
|
|
144
|
+
* @param {number} y current mouse y position, canvas normalized
|
|
145
|
+
* @return {Boolean} true if some change happened
|
|
146
|
+
*/
|
|
147
|
+
function skewHandler(
|
|
148
|
+
axis: TAxis,
|
|
149
|
+
eventData: TPointerEvent,
|
|
150
|
+
transform: Transform,
|
|
151
|
+
x: number,
|
|
152
|
+
y: number
|
|
153
|
+
) {
|
|
154
|
+
const { target } = transform,
|
|
155
|
+
{
|
|
156
|
+
counterAxis,
|
|
157
|
+
origin: originKey,
|
|
158
|
+
lockSkewing: lockSkewingKey,
|
|
159
|
+
skew: skewKey,
|
|
160
|
+
flip: flipKey,
|
|
161
|
+
} = AXIS_KEYS[axis];
|
|
162
|
+
if (isLocked(target, lockSkewingKey)) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const { origin: counterOriginKey, flip: counterFlipKey } =
|
|
167
|
+
AXIS_KEYS[counterAxis],
|
|
168
|
+
counterOriginFactor =
|
|
169
|
+
resolveOrigin(transform[counterOriginKey]) *
|
|
170
|
+
(target[counterFlipKey] ? -1 : 1),
|
|
171
|
+
// if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.
|
|
172
|
+
// if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.
|
|
173
|
+
// skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,
|
|
174
|
+
// so we factor skewing direction by this value.
|
|
175
|
+
skewingSide = (-Math.sign(counterOriginFactor) *
|
|
176
|
+
(target[flipKey] ? -1 : 1)) as 1 | -1,
|
|
177
|
+
skewingDirection =
|
|
178
|
+
((target[skewKey] === 0 &&
|
|
179
|
+
// in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing
|
|
180
|
+
getLocalPoint(transform, 'center', 'center', x, y)[axis] > 0) ||
|
|
181
|
+
// in case target has skewing we use that as the direction
|
|
182
|
+
target[skewKey] > 0
|
|
183
|
+
? 1
|
|
184
|
+
: -1) * skewingSide,
|
|
185
|
+
// anchor to the opposite side of the skewing direction
|
|
186
|
+
// normalize value from [-1, 1] to origin value [0, 1]
|
|
187
|
+
origin = -skewingDirection * 0.5 + 0.5;
|
|
188
|
+
|
|
189
|
+
const finalHandler = wrapWithFireEvent<SkewTransform>(
|
|
190
|
+
'skewing',
|
|
191
|
+
wrapWithFixedAnchor((eventData, transform, x, y) =>
|
|
192
|
+
skewObject(axis, transform, new Point(x, y))
|
|
193
|
+
)
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
return finalHandler(
|
|
197
|
+
eventData,
|
|
198
|
+
{
|
|
199
|
+
...transform,
|
|
200
|
+
[originKey]: origin,
|
|
201
|
+
skewingSide,
|
|
202
|
+
},
|
|
203
|
+
x,
|
|
204
|
+
y
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Wrapped Action handler for skewing on the X axis, takes care of the
|
|
210
|
+
* skew direction and determines the correct transform origin for the anchor point
|
|
211
|
+
* @param {Event} eventData javascript event that is doing the transform
|
|
212
|
+
* @param {Object} transform javascript object containing a series of information around the current transform
|
|
213
|
+
* @param {number} x current mouse x position, canvas normalized
|
|
214
|
+
* @param {number} y current mouse y position, canvas normalized
|
|
215
|
+
* @return {Boolean} true if some change happened
|
|
216
|
+
*/
|
|
217
|
+
export const skewHandlerX: TransformActionHandler = (
|
|
218
|
+
eventData,
|
|
219
|
+
transform,
|
|
220
|
+
x,
|
|
221
|
+
y
|
|
222
|
+
) => {
|
|
223
|
+
return skewHandler('x', eventData, transform, x, y);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Wrapped Action handler for skewing on the Y axis, takes care of the
|
|
228
|
+
* skew direction and determines the correct transform origin for the anchor point
|
|
229
|
+
* @param {Event} eventData javascript event that is doing the transform
|
|
230
|
+
* @param {Object} transform javascript object containing a series of information around the current transform
|
|
231
|
+
* @param {number} x current mouse x position, canvas normalized
|
|
232
|
+
* @param {number} y current mouse y position, canvas normalized
|
|
233
|
+
* @return {Boolean} true if some change happened
|
|
234
|
+
*/
|
|
235
|
+
export const skewHandlerY: TransformActionHandler = (
|
|
236
|
+
eventData,
|
|
237
|
+
transform,
|
|
238
|
+
x,
|
|
239
|
+
y
|
|
240
|
+
) => {
|
|
241
|
+
return skewHandler('y', eventData, transform, x, y);
|
|
242
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TPointerEvent,
|
|
3
|
+
Transform,
|
|
4
|
+
TransformAction,
|
|
5
|
+
BasicTransformEvent,
|
|
6
|
+
} from '../EventTypeDefs';
|
|
7
|
+
import { resolveOrigin } from '../util/misc/resolveOrigin';
|
|
8
|
+
import { Point } from '../Point';
|
|
9
|
+
import type { FabricObject } from '../shapes/Object/FabricObject';
|
|
10
|
+
import { TOriginX, TOriginY } from '../typedefs';
|
|
11
|
+
import {
|
|
12
|
+
degreesToRadians,
|
|
13
|
+
radiansToDegrees,
|
|
14
|
+
} from '../util/misc/radiansDegreesConversion';
|
|
15
|
+
import type { Control } from './Control';
|
|
16
|
+
|
|
17
|
+
export const NOT_ALLOWED_CURSOR = 'not-allowed';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @param {Boolean} alreadySelected true if target is already selected
|
|
21
|
+
* @param {String} corner a string representing the corner ml, mr, tl ...
|
|
22
|
+
* @param {Event} e Event object
|
|
23
|
+
* @param {FabricObject} [target] inserted back to help overriding. Unused
|
|
24
|
+
*/
|
|
25
|
+
export const getActionFromCorner = (
|
|
26
|
+
alreadySelected: boolean,
|
|
27
|
+
corner: string,
|
|
28
|
+
e: TPointerEvent,
|
|
29
|
+
target: FabricObject
|
|
30
|
+
) => {
|
|
31
|
+
if (!corner || !alreadySelected) {
|
|
32
|
+
return 'drag';
|
|
33
|
+
}
|
|
34
|
+
const control = target.controls[corner];
|
|
35
|
+
return control.getActionName(e, control, target);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Checks if transform is centered
|
|
40
|
+
* @param {Object} transform transform data
|
|
41
|
+
* @return {Boolean} true if transform is centered
|
|
42
|
+
*/
|
|
43
|
+
export function isTransformCentered(transform: Transform) {
|
|
44
|
+
return transform.originX === 'center' && transform.originY === 'center';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function invertOrigin(origin: TOriginX | TOriginY) {
|
|
48
|
+
return -resolveOrigin(origin) + 0.5;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const isLocked = (
|
|
52
|
+
target: FabricObject,
|
|
53
|
+
lockingKey:
|
|
54
|
+
| 'lockMovementX'
|
|
55
|
+
| 'lockMovementY'
|
|
56
|
+
| 'lockRotation'
|
|
57
|
+
| 'lockScalingX'
|
|
58
|
+
| 'lockScalingY'
|
|
59
|
+
| 'lockSkewingX'
|
|
60
|
+
| 'lockSkewingY'
|
|
61
|
+
| 'lockScalingFlip'
|
|
62
|
+
) => target[lockingKey];
|
|
63
|
+
|
|
64
|
+
export const commonEventInfo: TransformAction<
|
|
65
|
+
Transform,
|
|
66
|
+
BasicTransformEvent
|
|
67
|
+
> = (eventData, transform, x, y) => {
|
|
68
|
+
return {
|
|
69
|
+
e: eventData,
|
|
70
|
+
transform,
|
|
71
|
+
pointer: new Point(x, y),
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Combine control position and object angle to find the control direction compared
|
|
77
|
+
* to the object center.
|
|
78
|
+
* @param {FabricObject} fabricObject the fabric object for which we are rendering controls
|
|
79
|
+
* @param {Control} control the control class
|
|
80
|
+
* @return {Number} 0 - 7 a quadrant number
|
|
81
|
+
*/
|
|
82
|
+
export function findCornerQuadrant(
|
|
83
|
+
fabricObject: FabricObject,
|
|
84
|
+
control: Control
|
|
85
|
+
) {
|
|
86
|
+
// angle is relative to canvas plane
|
|
87
|
+
const angle = fabricObject.getTotalAngle(),
|
|
88
|
+
cornerAngle =
|
|
89
|
+
angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;
|
|
90
|
+
return Math.round((cornerAngle % 360) / 45);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @returns the normalized point (rotated relative to center) in local coordinates
|
|
95
|
+
*/
|
|
96
|
+
function normalizePoint(
|
|
97
|
+
target: FabricObject,
|
|
98
|
+
point: Point,
|
|
99
|
+
originX: TOriginX,
|
|
100
|
+
originY: TOriginY
|
|
101
|
+
): Point {
|
|
102
|
+
const center = target.getRelativeCenterPoint(),
|
|
103
|
+
p =
|
|
104
|
+
typeof originX !== 'undefined' && typeof originY !== 'undefined'
|
|
105
|
+
? target.translateToGivenOrigin(
|
|
106
|
+
center,
|
|
107
|
+
'center',
|
|
108
|
+
'center',
|
|
109
|
+
originX,
|
|
110
|
+
originY
|
|
111
|
+
)
|
|
112
|
+
: new Point(target.left, target.top),
|
|
113
|
+
p2 = target.angle
|
|
114
|
+
? point.rotate(-degreesToRadians(target.angle), center)
|
|
115
|
+
: point;
|
|
116
|
+
return p2.subtract(p);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Transforms a point to the offset from the given origin
|
|
121
|
+
* @param {Object} transform
|
|
122
|
+
* @param {String} originX
|
|
123
|
+
* @param {String} originY
|
|
124
|
+
* @param {number} x
|
|
125
|
+
* @param {number} y
|
|
126
|
+
* @return {Fabric.Point} the normalized point
|
|
127
|
+
*/
|
|
128
|
+
export function getLocalPoint(
|
|
129
|
+
{ target, corner }: Transform,
|
|
130
|
+
originX: TOriginX,
|
|
131
|
+
originY: TOriginY,
|
|
132
|
+
x: number,
|
|
133
|
+
y: number
|
|
134
|
+
) {
|
|
135
|
+
const control = target.controls[corner],
|
|
136
|
+
zoom = target.canvas?.getZoom() || 1,
|
|
137
|
+
padding = target.padding / zoom,
|
|
138
|
+
localPoint = normalizePoint(target, new Point(x, y), originX, originY);
|
|
139
|
+
if (localPoint.x >= padding) {
|
|
140
|
+
localPoint.x -= padding;
|
|
141
|
+
}
|
|
142
|
+
if (localPoint.x <= -padding) {
|
|
143
|
+
localPoint.x += padding;
|
|
144
|
+
}
|
|
145
|
+
if (localPoint.y >= padding) {
|
|
146
|
+
localPoint.y -= padding;
|
|
147
|
+
}
|
|
148
|
+
if (localPoint.y <= padding) {
|
|
149
|
+
localPoint.y += padding;
|
|
150
|
+
}
|
|
151
|
+
localPoint.x -= control.offsetX;
|
|
152
|
+
localPoint.y -= control.offsetY;
|
|
153
|
+
return localPoint;
|
|
154
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TModificationEvents,
|
|
3
|
+
Transform,
|
|
4
|
+
TransformActionHandler,
|
|
5
|
+
} from '../EventTypeDefs';
|
|
6
|
+
import { fireEvent } from '../util/fireEvent';
|
|
7
|
+
import { commonEventInfo } from './util';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Wrap an action handler with firing an event if the action is performed
|
|
11
|
+
* @param {Function} actionHandler the function to wrap
|
|
12
|
+
* @return {Function} a function with an action handler signature
|
|
13
|
+
*/
|
|
14
|
+
export const wrapWithFireEvent = <T extends Transform>(
|
|
15
|
+
eventName: TModificationEvents,
|
|
16
|
+
actionHandler: TransformActionHandler<T>
|
|
17
|
+
) => {
|
|
18
|
+
return ((eventData, transform, x, y) => {
|
|
19
|
+
const actionPerformed = actionHandler(eventData, transform, x, y);
|
|
20
|
+
if (actionPerformed) {
|
|
21
|
+
fireEvent(eventName, commonEventInfo(eventData, transform, x, y));
|
|
22
|
+
}
|
|
23
|
+
return actionPerformed;
|
|
24
|
+
}) as TransformActionHandler<T>;
|
|
25
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Transform, TransformActionHandler } from '../EventTypeDefs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrap an action handler with saving/restoring object position on the transform.
|
|
5
|
+
* this is the code that permits to objects to keep their position while transforming.
|
|
6
|
+
* @param {Function} actionHandler the function to wrap
|
|
7
|
+
* @return {Function} a function with an action handler signature
|
|
8
|
+
*/
|
|
9
|
+
export function wrapWithFixedAnchor<T extends Transform>(
|
|
10
|
+
actionHandler: TransformActionHandler<T>
|
|
11
|
+
) {
|
|
12
|
+
return ((eventData, transform, x, y) => {
|
|
13
|
+
const { target, originX, originY } = transform,
|
|
14
|
+
centerPoint = target.getRelativeCenterPoint(),
|
|
15
|
+
constraint = target.translateToOriginPoint(centerPoint, originX, originY),
|
|
16
|
+
actionPerformed = actionHandler(eventData, transform, x, y);
|
|
17
|
+
target.setPositionByOrigin(constraint, originX, originY);
|
|
18
|
+
return actionPerformed;
|
|
19
|
+
}) as TransformActionHandler<T>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-globals */
|
|
2
|
+
import { config } from '../config';
|
|
3
|
+
import { WebGLProbe } from '../filters/GLProbes/WebGLProbe';
|
|
4
|
+
import { TCopyPasteData, TFabricEnv } from './types';
|
|
5
|
+
|
|
6
|
+
const copyPasteData: TCopyPasteData = {};
|
|
7
|
+
|
|
8
|
+
let initialized = false;
|
|
9
|
+
let isTouchSupported: boolean;
|
|
10
|
+
|
|
11
|
+
export const getEnv = (): TFabricEnv => {
|
|
12
|
+
if (!initialized) {
|
|
13
|
+
config.configure({
|
|
14
|
+
devicePixelRatio: window.devicePixelRatio || 1,
|
|
15
|
+
});
|
|
16
|
+
isTouchSupported =
|
|
17
|
+
'ontouchstart' in window ||
|
|
18
|
+
'ontouchstart' in document ||
|
|
19
|
+
(window && window.navigator && window.navigator.maxTouchPoints > 0);
|
|
20
|
+
initialized = true;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
document,
|
|
24
|
+
window,
|
|
25
|
+
isTouchSupported,
|
|
26
|
+
WebGLProbe: new WebGLProbe(),
|
|
27
|
+
dispose() {
|
|
28
|
+
// noop
|
|
29
|
+
},
|
|
30
|
+
copyPasteData,
|
|
31
|
+
};
|
|
32
|
+
};
|
package/src/env/index.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is consumed by fabric.
|
|
3
|
+
* The `./node` and `./browser` files define the env variable that is used by this module.
|
|
4
|
+
* The `./node` module sets the env at import time.
|
|
5
|
+
* The `./browser` module is defined to be the default env and doesn't set the env at all.
|
|
6
|
+
* This is done in order to support isomorphic usage for browser and node applications
|
|
7
|
+
* since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { TFabricEnv } from './types';
|
|
11
|
+
import { getEnv as getBrowserEnv } from './browser';
|
|
12
|
+
import type { DOMWindow } from 'jsdom';
|
|
13
|
+
|
|
14
|
+
let env: TFabricEnv;
|
|
15
|
+
|
|
16
|
+
export const setEnv = (value: TFabricEnv) => {
|
|
17
|
+
env = value;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const getEnv = () => env || getBrowserEnv();
|
|
21
|
+
|
|
22
|
+
export const getDocument = (): Document => getEnv().document;
|
|
23
|
+
|
|
24
|
+
export const getWindow = (): Window | DOMWindow => getEnv().window;
|
package/src/env/node.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-globals */
|
|
2
|
+
import type { Canvas as NodeCanvas } from 'canvas';
|
|
3
|
+
import { JSDOM } from 'jsdom';
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import utils from 'jsdom/lib/jsdom/living/generated/utils.js';
|
|
6
|
+
import { config } from '../config';
|
|
7
|
+
import { NodeGLProbe } from '../filters/GLProbes/NodeGLProbe';
|
|
8
|
+
import { setEnv } from './index';
|
|
9
|
+
import { TCopyPasteData, TFabricEnv } from './types';
|
|
10
|
+
|
|
11
|
+
const { implForWrapper: jsdomImplForWrapper } = utils;
|
|
12
|
+
|
|
13
|
+
const copyPasteData: TCopyPasteData = {};
|
|
14
|
+
|
|
15
|
+
const { window: JSDOMWindow } = new JSDOM(
|
|
16
|
+
decodeURIComponent(
|
|
17
|
+
'%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'
|
|
18
|
+
),
|
|
19
|
+
{
|
|
20
|
+
resources: 'usable',
|
|
21
|
+
// needed for `requestAnimationFrame`
|
|
22
|
+
pretendToBeVisual: true,
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
config.configure({
|
|
27
|
+
devicePixelRatio: JSDOMWindow.devicePixelRatio || 1,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export const getNodeCanvas = (canvasEl: HTMLCanvasElement) => {
|
|
31
|
+
const impl = jsdomImplForWrapper(canvasEl);
|
|
32
|
+
return (impl._canvas || impl._image) as NodeCanvas;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const getEnv = (): TFabricEnv => {
|
|
36
|
+
return {
|
|
37
|
+
document: JSDOMWindow.document,
|
|
38
|
+
window: JSDOMWindow,
|
|
39
|
+
isTouchSupported: false,
|
|
40
|
+
WebGLProbe: new NodeGLProbe(),
|
|
41
|
+
dispose(element) {
|
|
42
|
+
const impl = jsdomImplForWrapper(element);
|
|
43
|
+
if (impl) {
|
|
44
|
+
impl._image = null;
|
|
45
|
+
impl._canvas = null;
|
|
46
|
+
// unsure if necessary
|
|
47
|
+
impl._currentSrc = null;
|
|
48
|
+
impl._attributes = null;
|
|
49
|
+
impl._classList = null;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
copyPasteData,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
setEnv(getEnv());
|
package/src/env/types.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GLProbe } from '../filters/GLProbes/GLProbe';
|
|
2
|
+
import type { DOMWindow } from 'jsdom';
|
|
3
|
+
|
|
4
|
+
export type TCopyPasteData = {
|
|
5
|
+
copiedText?: string;
|
|
6
|
+
copiedStyle?: Record<string, string>;
|
|
7
|
+
};
|
|
8
|
+
export type TFabricEnv = {
|
|
9
|
+
document: Document;
|
|
10
|
+
window: Window | DOMWindow;
|
|
11
|
+
isTouchSupported: boolean;
|
|
12
|
+
WebGLProbe: GLProbe;
|
|
13
|
+
dispose(element: Element): void;
|
|
14
|
+
copyPasteData: TCopyPasteData;
|
|
15
|
+
};
|