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,189 @@
|
|
|
1
|
+
import type { ControlRenderingStyleOverride } from '../controls/controlRendering';
|
|
2
|
+
import { classRegistry } from '../ClassRegistry';
|
|
3
|
+
import { Group } from './Group';
|
|
4
|
+
import type { FabricObject } from './Object/FabricObject';
|
|
5
|
+
|
|
6
|
+
export class ActiveSelection extends Group {
|
|
7
|
+
declare _objects: FabricObject[];
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* controls how selected objects are added during a multiselection event
|
|
11
|
+
* - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order
|
|
12
|
+
* - `selection-order` adds the selected object to the top of the stack,
|
|
13
|
+
* meaning that the stack is ordered by the order in which objects were selected
|
|
14
|
+
* @default `canvas-stacking`
|
|
15
|
+
*/
|
|
16
|
+
multiSelectionStacking: 'canvas-stacking' | 'selection-order' =
|
|
17
|
+
'canvas-stacking';
|
|
18
|
+
|
|
19
|
+
constructor(
|
|
20
|
+
objects?: FabricObject[],
|
|
21
|
+
options?: any,
|
|
22
|
+
objectsRelativeToGroup?: boolean
|
|
23
|
+
) {
|
|
24
|
+
super(objects, options, objectsRelativeToGroup);
|
|
25
|
+
this.setCoords();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
_shouldSetNestedCoords() {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @private
|
|
37
|
+
* @override we don't want the selection monitor to be active
|
|
38
|
+
*/
|
|
39
|
+
__objectSelectionMonitor() {
|
|
40
|
+
// noop
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Adds objects with respect to {@link multiSelectionStacking}
|
|
45
|
+
* @param targets object to add to selection
|
|
46
|
+
*/
|
|
47
|
+
multiSelectAdd(...targets: FabricObject[]) {
|
|
48
|
+
if (this.multiSelectionStacking === 'selection-order') {
|
|
49
|
+
this.add(...targets);
|
|
50
|
+
} else {
|
|
51
|
+
// respect object stacking as it is on canvas
|
|
52
|
+
// perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`
|
|
53
|
+
targets.forEach((target) => {
|
|
54
|
+
const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));
|
|
55
|
+
const insertAt =
|
|
56
|
+
index === -1
|
|
57
|
+
? // `target` is in front of all other objects
|
|
58
|
+
this.size()
|
|
59
|
+
: index;
|
|
60
|
+
this.insertAt(insertAt, target);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @private
|
|
67
|
+
* @param {FabricObject} object
|
|
68
|
+
* @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane
|
|
69
|
+
* @returns {boolean} true if object entered group
|
|
70
|
+
*/
|
|
71
|
+
enterGroup(object: FabricObject, removeParentTransform?: boolean) {
|
|
72
|
+
if (object.group) {
|
|
73
|
+
// save ref to group for later in order to return to it
|
|
74
|
+
const parent = object.group;
|
|
75
|
+
parent._exitGroup(object);
|
|
76
|
+
object.__owningGroup = parent;
|
|
77
|
+
}
|
|
78
|
+
this._enterGroup(object, removeParentTransform);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* we want objects to retain their canvas ref when exiting instance
|
|
84
|
+
* @private
|
|
85
|
+
* @param {FabricObject} object
|
|
86
|
+
* @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it
|
|
87
|
+
*/
|
|
88
|
+
exitGroup(object: FabricObject, removeParentTransform?: boolean) {
|
|
89
|
+
this._exitGroup(object, removeParentTransform);
|
|
90
|
+
const parent = object.__owningGroup;
|
|
91
|
+
if (parent) {
|
|
92
|
+
// return to owning group
|
|
93
|
+
parent._enterGroup(object, true);
|
|
94
|
+
delete object.__owningGroup;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @private
|
|
100
|
+
* @param {'added'|'removed'} type
|
|
101
|
+
* @param {FabricObject[]} targets
|
|
102
|
+
*/
|
|
103
|
+
_onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {
|
|
104
|
+
super._onAfterObjectsChange(type, targets);
|
|
105
|
+
const groups: Group[] = [];
|
|
106
|
+
targets.forEach((object) => {
|
|
107
|
+
object.group &&
|
|
108
|
+
!groups.includes(object.group) &&
|
|
109
|
+
groups.push(object.group);
|
|
110
|
+
});
|
|
111
|
+
if (type === 'removed') {
|
|
112
|
+
// invalidate groups' layout and mark as dirty
|
|
113
|
+
groups.forEach((group) => {
|
|
114
|
+
group._onAfterObjectsChange('added', targets);
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
// mark groups as dirty
|
|
118
|
+
groups.forEach((group) => {
|
|
119
|
+
group._set('dirty', true);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* If returns true, deselection is cancelled.
|
|
126
|
+
* @since 2.0.0
|
|
127
|
+
* @return {Boolean} [cancel]
|
|
128
|
+
*/
|
|
129
|
+
onDeselect() {
|
|
130
|
+
this.removeAll();
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Returns string representation of a group
|
|
136
|
+
* @return {String}
|
|
137
|
+
*/
|
|
138
|
+
toString() {
|
|
139
|
+
return `#<ActiveSelection: (${this.complexity()})>`;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Decide if the object should cache or not. Create its own cache level
|
|
144
|
+
* objectCaching is a global flag, wins over everything
|
|
145
|
+
* needsItsOwnCache should be used when the object drawing method requires
|
|
146
|
+
* a cache step. None of the fabric classes requires it.
|
|
147
|
+
* Generally you do not cache objects in groups because the group outside is cached.
|
|
148
|
+
* @return {Boolean}
|
|
149
|
+
*/
|
|
150
|
+
shouldCache() {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Check if this group or its parent group are caching, recursively up
|
|
156
|
+
* @return {Boolean}
|
|
157
|
+
*/
|
|
158
|
+
isOnACache() {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Renders controls and borders for the object
|
|
164
|
+
* @param {CanvasRenderingContext2D} ctx Context to render on
|
|
165
|
+
* @param {Object} [styleOverride] properties to override the object style
|
|
166
|
+
* @param {Object} [childrenOverride] properties to override the children overrides
|
|
167
|
+
*/
|
|
168
|
+
_renderControls(
|
|
169
|
+
ctx: CanvasRenderingContext2D,
|
|
170
|
+
styleOverride?: ControlRenderingStyleOverride,
|
|
171
|
+
childrenOverride?: ControlRenderingStyleOverride
|
|
172
|
+
) {
|
|
173
|
+
ctx.save();
|
|
174
|
+
ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;
|
|
175
|
+
super._renderControls(ctx, styleOverride);
|
|
176
|
+
const options = {
|
|
177
|
+
hasControls: false,
|
|
178
|
+
...childrenOverride,
|
|
179
|
+
forActiveSelection: true,
|
|
180
|
+
};
|
|
181
|
+
for (let i = 0; i < this._objects.length; i++) {
|
|
182
|
+
this._objects[i]._renderControls(ctx, options);
|
|
183
|
+
}
|
|
184
|
+
ctx.restore();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
classRegistry.setClass(ActiveSelection);
|
|
189
|
+
classRegistry.setClass(ActiveSelection, 'activeSelection');
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import type { ObjectEvents } from '../EventTypeDefs';
|
|
2
|
+
import { SHARED_ATTRIBUTES } from '../parser/attributes';
|
|
3
|
+
import { parseAttributes } from '../parser/parseAttributes';
|
|
4
|
+
import { cos } from '../util/misc/cos';
|
|
5
|
+
import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
|
|
6
|
+
import { sin } from '../util/misc/sin';
|
|
7
|
+
import { classRegistry } from '../ClassRegistry';
|
|
8
|
+
import { FabricObject, cacheProperties } from './Object/FabricObject';
|
|
9
|
+
import { TClassProperties } from '../typedefs';
|
|
10
|
+
import {
|
|
11
|
+
FabricObjectProps,
|
|
12
|
+
SerializedObjectProps,
|
|
13
|
+
TProps,
|
|
14
|
+
} from './Object/types';
|
|
15
|
+
|
|
16
|
+
interface UniqueCircleProps {
|
|
17
|
+
/**
|
|
18
|
+
* Radius of this circle
|
|
19
|
+
* @type Number
|
|
20
|
+
* @default 0
|
|
21
|
+
*/
|
|
22
|
+
radius: number;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* degrees of start of the circle.
|
|
26
|
+
* probably will change to degrees in next major version
|
|
27
|
+
* @type Number 0 - 359
|
|
28
|
+
* @default 0
|
|
29
|
+
*/
|
|
30
|
+
startAngle: number;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* End angle of the circle
|
|
34
|
+
* probably will change to degrees in next major version
|
|
35
|
+
* @type Number 1 - 360
|
|
36
|
+
* @default 360
|
|
37
|
+
*/
|
|
38
|
+
endAngle: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface SerializedCircleProps
|
|
42
|
+
extends SerializedObjectProps,
|
|
43
|
+
UniqueCircleProps {}
|
|
44
|
+
|
|
45
|
+
export interface CircleProps extends FabricObjectProps, UniqueCircleProps {}
|
|
46
|
+
|
|
47
|
+
const CIRCLE_PROPS = ['radius', 'startAngle', 'endAngle'] as const;
|
|
48
|
+
|
|
49
|
+
export const circleDefaultValues: UniqueCircleProps = {
|
|
50
|
+
radius: 0,
|
|
51
|
+
startAngle: 0,
|
|
52
|
+
endAngle: 360,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export class Circle<
|
|
56
|
+
Props extends TProps<CircleProps> = Partial<CircleProps>,
|
|
57
|
+
SProps extends SerializedCircleProps = SerializedCircleProps,
|
|
58
|
+
EventSpec extends ObjectEvents = ObjectEvents
|
|
59
|
+
>
|
|
60
|
+
extends FabricObject<Props, SProps, EventSpec>
|
|
61
|
+
implements UniqueCircleProps
|
|
62
|
+
{
|
|
63
|
+
declare radius: number;
|
|
64
|
+
declare startAngle: number;
|
|
65
|
+
declare endAngle: number;
|
|
66
|
+
|
|
67
|
+
static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];
|
|
68
|
+
|
|
69
|
+
static ownDefaults: Record<string, any> = circleDefaultValues;
|
|
70
|
+
|
|
71
|
+
static getDefaults(): Record<string, any> {
|
|
72
|
+
return {
|
|
73
|
+
...super.getDefaults(),
|
|
74
|
+
...Circle.ownDefaults,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @private
|
|
80
|
+
* @param {String} key
|
|
81
|
+
* @param {*} value
|
|
82
|
+
*/
|
|
83
|
+
_set(key: string, value: any) {
|
|
84
|
+
super._set(key, value);
|
|
85
|
+
|
|
86
|
+
if (key === 'radius') {
|
|
87
|
+
this.setRadius(value);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @private
|
|
95
|
+
* @param {CanvasRenderingContext2D} ctx context to render on
|
|
96
|
+
*/
|
|
97
|
+
_render(ctx: CanvasRenderingContext2D) {
|
|
98
|
+
ctx.beginPath();
|
|
99
|
+
ctx.arc(
|
|
100
|
+
0,
|
|
101
|
+
0,
|
|
102
|
+
this.radius,
|
|
103
|
+
degreesToRadians(this.startAngle),
|
|
104
|
+
degreesToRadians(this.endAngle),
|
|
105
|
+
false
|
|
106
|
+
);
|
|
107
|
+
this._renderPaintInOrder(ctx);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Returns horizontal radius of an object (according to how an object is scaled)
|
|
112
|
+
* @return {Number}
|
|
113
|
+
*/
|
|
114
|
+
getRadiusX(): number {
|
|
115
|
+
return this.get('radius') * this.get('scaleX');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Returns vertical radius of an object (according to how an object is scaled)
|
|
120
|
+
* @return {Number}
|
|
121
|
+
*/
|
|
122
|
+
getRadiusY(): number {
|
|
123
|
+
return this.get('radius') * this.get('scaleY');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Sets radius of an object (and updates width accordingly)
|
|
128
|
+
*/
|
|
129
|
+
setRadius(value: number) {
|
|
130
|
+
this.radius = value;
|
|
131
|
+
this.set({ width: value * 2, height: value * 2 });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Returns object representation of an instance
|
|
136
|
+
* @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
|
|
137
|
+
* @return {Object} object representation of an instance
|
|
138
|
+
*/
|
|
139
|
+
toObject<
|
|
140
|
+
T extends Omit<Props & TClassProperties<this>, keyof SProps>,
|
|
141
|
+
K extends keyof T = never
|
|
142
|
+
>(propertiesToInclude: K[] = []): Pick<T, K> & SProps {
|
|
143
|
+
return super.toObject([...CIRCLE_PROPS, ...propertiesToInclude]);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* _TO_SVG_START_ */
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Returns svg representation of an instance
|
|
150
|
+
* @return {Array} an array of strings with the specific svg representation
|
|
151
|
+
* of the instance
|
|
152
|
+
*/
|
|
153
|
+
_toSVG(): (string | number)[] {
|
|
154
|
+
const angle = (this.endAngle - this.startAngle) % 360;
|
|
155
|
+
|
|
156
|
+
if (angle === 0) {
|
|
157
|
+
return [
|
|
158
|
+
'<circle ',
|
|
159
|
+
'COMMON_PARTS',
|
|
160
|
+
'cx="0" cy="0" ',
|
|
161
|
+
'r="',
|
|
162
|
+
this.radius,
|
|
163
|
+
'" />\n',
|
|
164
|
+
];
|
|
165
|
+
} else {
|
|
166
|
+
const { radius } = this;
|
|
167
|
+
const start = degreesToRadians(this.startAngle),
|
|
168
|
+
end = degreesToRadians(this.endAngle),
|
|
169
|
+
startX = cos(start) * radius,
|
|
170
|
+
startY = sin(start) * radius,
|
|
171
|
+
endX = cos(end) * radius,
|
|
172
|
+
endY = sin(end) * radius,
|
|
173
|
+
largeFlag = angle > 180 ? '1' : '0';
|
|
174
|
+
return [
|
|
175
|
+
`<path d="M ${startX} ${startY}`,
|
|
176
|
+
` A ${radius} ${radius}`,
|
|
177
|
+
' 0 ',
|
|
178
|
+
`${largeFlag} 1`,
|
|
179
|
+
` ${endX} ${endY}`,
|
|
180
|
+
'" ',
|
|
181
|
+
'COMMON_PARTS',
|
|
182
|
+
' />\n',
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/* _TO_SVG_END_ */
|
|
187
|
+
|
|
188
|
+
/* _FROM_SVG_START_ */
|
|
189
|
+
/**
|
|
190
|
+
* List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})
|
|
191
|
+
* @static
|
|
192
|
+
* @memberOf Circle
|
|
193
|
+
* @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement
|
|
194
|
+
*/
|
|
195
|
+
static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Returns {@link Circle} instance from an SVG element
|
|
199
|
+
* @static
|
|
200
|
+
* @memberOf Circle
|
|
201
|
+
* @param {SVGElement} element Element to parse
|
|
202
|
+
* @param {Function} [callback] Options callback invoked after parsing is finished
|
|
203
|
+
* @param {Object} [options] Partial Circle object to default missing properties on the element.
|
|
204
|
+
* @throws {Error} If value of `r` attribute is missing or invalid
|
|
205
|
+
*/
|
|
206
|
+
static fromElement(element: SVGElement, callback: (circle: Circle) => any) {
|
|
207
|
+
const {
|
|
208
|
+
left = 0,
|
|
209
|
+
top = 0,
|
|
210
|
+
radius,
|
|
211
|
+
...otherParsedAttributes
|
|
212
|
+
} = parseAttributes(element, this.ATTRIBUTE_NAMES) as Partial<CircleProps>;
|
|
213
|
+
|
|
214
|
+
if (!radius || radius < 0) {
|
|
215
|
+
throw new Error(
|
|
216
|
+
'value of `r` attribute is required and can not be negative'
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// this probably requires to be fixed for default origins not being top/left.
|
|
221
|
+
callback(
|
|
222
|
+
new this({
|
|
223
|
+
...otherParsedAttributes,
|
|
224
|
+
radius,
|
|
225
|
+
left: left - radius,
|
|
226
|
+
top: top - radius,
|
|
227
|
+
})
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/* _FROM_SVG_END_ */
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @todo how do we declare this??
|
|
235
|
+
*/
|
|
236
|
+
static fromObject<T extends TProps<SerializedCircleProps>>(object: T) {
|
|
237
|
+
return super._fromObject<Circle>(object);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
classRegistry.setClass(Circle);
|
|
242
|
+
classRegistry.setSVGClass(Circle);
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { twoMathPi } from '../constants';
|
|
2
|
+
import { SHARED_ATTRIBUTES } from '../parser/attributes';
|
|
3
|
+
import { parseAttributes } from '../parser/parseAttributes';
|
|
4
|
+
import { TClassProperties } from '../typedefs';
|
|
5
|
+
import { classRegistry } from '../ClassRegistry';
|
|
6
|
+
import { FabricObject, cacheProperties } from './Object/FabricObject';
|
|
7
|
+
import type {
|
|
8
|
+
FabricObjectProps,
|
|
9
|
+
SerializedObjectProps,
|
|
10
|
+
TProps,
|
|
11
|
+
} from './Object/types';
|
|
12
|
+
import type { ObjectEvents } from '../EventTypeDefs';
|
|
13
|
+
|
|
14
|
+
export const ellipseDefaultValues: UniqueEllipseProps = {
|
|
15
|
+
rx: 0,
|
|
16
|
+
ry: 0,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
interface UniqueEllipseProps {
|
|
20
|
+
rx: number;
|
|
21
|
+
ry: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface SerializedEllipseProps
|
|
25
|
+
extends SerializedObjectProps,
|
|
26
|
+
UniqueEllipseProps {}
|
|
27
|
+
|
|
28
|
+
export interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}
|
|
29
|
+
|
|
30
|
+
const ELLIPSE_PROPS = ['rx', 'ry'] as const;
|
|
31
|
+
|
|
32
|
+
export class Ellipse<
|
|
33
|
+
Props extends TProps<EllipseProps> = Partial<EllipseProps>,
|
|
34
|
+
SProps extends SerializedEllipseProps = SerializedEllipseProps,
|
|
35
|
+
EventSpec extends ObjectEvents = ObjectEvents
|
|
36
|
+
>
|
|
37
|
+
extends FabricObject<Props, SProps, EventSpec>
|
|
38
|
+
implements EllipseProps
|
|
39
|
+
{
|
|
40
|
+
/**
|
|
41
|
+
* Horizontal radius
|
|
42
|
+
* @type Number
|
|
43
|
+
* @default
|
|
44
|
+
*/
|
|
45
|
+
declare rx: number;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Vertical radius
|
|
49
|
+
* @type Number
|
|
50
|
+
* @default
|
|
51
|
+
*/
|
|
52
|
+
declare ry: number;
|
|
53
|
+
|
|
54
|
+
static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];
|
|
55
|
+
|
|
56
|
+
static ownDefaults: Record<string, any> = ellipseDefaultValues;
|
|
57
|
+
|
|
58
|
+
static getDefaults() {
|
|
59
|
+
return {
|
|
60
|
+
...super.getDefaults(),
|
|
61
|
+
...Ellipse.ownDefaults,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @private
|
|
67
|
+
* @param {String} key
|
|
68
|
+
* @param {*} value
|
|
69
|
+
* @return {Ellipse} thisArg
|
|
70
|
+
*/
|
|
71
|
+
_set(key: string, value: any) {
|
|
72
|
+
super._set(key, value);
|
|
73
|
+
switch (key) {
|
|
74
|
+
case 'rx':
|
|
75
|
+
this.rx = value;
|
|
76
|
+
this.set('width', value * 2);
|
|
77
|
+
break;
|
|
78
|
+
|
|
79
|
+
case 'ry':
|
|
80
|
+
this.ry = value;
|
|
81
|
+
this.set('height', value * 2);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns horizontal radius of an object (according to how an object is scaled)
|
|
89
|
+
* @return {Number}
|
|
90
|
+
*/
|
|
91
|
+
getRx() {
|
|
92
|
+
return this.get('rx') * this.get('scaleX');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns Vertical radius of an object (according to how an object is scaled)
|
|
97
|
+
* @return {Number}
|
|
98
|
+
*/
|
|
99
|
+
getRy() {
|
|
100
|
+
return this.get('ry') * this.get('scaleY');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Returns object representation of an instance
|
|
105
|
+
* @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
|
|
106
|
+
* @return {Object} object representation of an instance
|
|
107
|
+
*/
|
|
108
|
+
toObject<
|
|
109
|
+
T extends Omit<Props & TClassProperties<this>, keyof SProps>,
|
|
110
|
+
K extends keyof T = never
|
|
111
|
+
>(propertiesToInclude: K[] = []): Pick<T, K> & SProps {
|
|
112
|
+
return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns svg representation of an instance
|
|
117
|
+
* @return {Array} an array of strings with the specific svg representation
|
|
118
|
+
* of the instance
|
|
119
|
+
*/
|
|
120
|
+
_toSVG() {
|
|
121
|
+
return [
|
|
122
|
+
'<ellipse ',
|
|
123
|
+
'COMMON_PARTS',
|
|
124
|
+
'cx="0" cy="0" ',
|
|
125
|
+
'rx="',
|
|
126
|
+
this.rx,
|
|
127
|
+
'" ry="',
|
|
128
|
+
this.ry,
|
|
129
|
+
'" />\n',
|
|
130
|
+
];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @private
|
|
135
|
+
* @param {CanvasRenderingContext2D} ctx context to render on
|
|
136
|
+
*/
|
|
137
|
+
_render(ctx: CanvasRenderingContext2D) {
|
|
138
|
+
ctx.beginPath();
|
|
139
|
+
ctx.save();
|
|
140
|
+
ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);
|
|
141
|
+
ctx.arc(0, 0, this.rx, 0, twoMathPi, false);
|
|
142
|
+
ctx.restore();
|
|
143
|
+
this._renderPaintInOrder(ctx);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* _FROM_SVG_START_ */
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})
|
|
150
|
+
* @static
|
|
151
|
+
* @memberOf Ellipse
|
|
152
|
+
* @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement
|
|
153
|
+
*/
|
|
154
|
+
static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Returns {@link Ellipse} instance from an SVG element
|
|
158
|
+
* @static
|
|
159
|
+
* @memberOf Ellipse
|
|
160
|
+
* @param {SVGElement} element Element to parse
|
|
161
|
+
* @param {Function} [callback] Options callback invoked after parsing is finished
|
|
162
|
+
* @return {Ellipse}
|
|
163
|
+
*/
|
|
164
|
+
static fromElement(
|
|
165
|
+
element: SVGElement,
|
|
166
|
+
callback: (ellipse: Ellipse) => void
|
|
167
|
+
) {
|
|
168
|
+
const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES);
|
|
169
|
+
|
|
170
|
+
parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;
|
|
171
|
+
parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;
|
|
172
|
+
callback(new this(parsedAttributes));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* _FROM_SVG_END_ */
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
classRegistry.setClass(Ellipse);
|
|
179
|
+
classRegistry.setSVGClass(Ellipse);
|