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
|
@@ -1,764 +0,0 @@
|
|
|
1
|
-
(function(global) {
|
|
2
|
-
|
|
3
|
-
'use strict';
|
|
4
|
-
|
|
5
|
-
var extend = fabric.util.object.extend;
|
|
6
|
-
|
|
7
|
-
if (!global.fabric) {
|
|
8
|
-
global.fabric = { };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (global.fabric.Image) {
|
|
12
|
-
fabric.warn('fabric.Image is already defined.');
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Image class
|
|
18
|
-
* @class fabric.Image
|
|
19
|
-
* @extends fabric.Object
|
|
20
|
-
* @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}
|
|
21
|
-
* @see {@link fabric.Image#initialize} for constructor definition
|
|
22
|
-
*/
|
|
23
|
-
fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Type of an object
|
|
27
|
-
* @type String
|
|
28
|
-
* @default
|
|
29
|
-
*/
|
|
30
|
-
type: 'image',
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Width of a stroke.
|
|
34
|
-
* For image quality a stroke multiple of 2 gives better results.
|
|
35
|
-
* @type Number
|
|
36
|
-
* @default
|
|
37
|
-
*/
|
|
38
|
-
strokeWidth: 0,
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.
|
|
42
|
-
* This allows for relative urls as image src.
|
|
43
|
-
* @since 2.7.0
|
|
44
|
-
* @type Boolean
|
|
45
|
-
* @default
|
|
46
|
-
*/
|
|
47
|
-
srcFromAttribute: false,
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* private
|
|
51
|
-
* contains last value of scaleX to detect
|
|
52
|
-
* if the Image got resized after the last Render
|
|
53
|
-
* @type Number
|
|
54
|
-
*/
|
|
55
|
-
_lastScaleX: 1,
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* private
|
|
59
|
-
* contains last value of scaleY to detect
|
|
60
|
-
* if the Image got resized after the last Render
|
|
61
|
-
* @type Number
|
|
62
|
-
*/
|
|
63
|
-
_lastScaleY: 1,
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* private
|
|
67
|
-
* contains last value of scaling applied by the apply filter chain
|
|
68
|
-
* @type Number
|
|
69
|
-
*/
|
|
70
|
-
_filterScalingX: 1,
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* private
|
|
74
|
-
* contains last value of scaling applied by the apply filter chain
|
|
75
|
-
* @type Number
|
|
76
|
-
*/
|
|
77
|
-
_filterScalingY: 1,
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* minimum scale factor under which any resizeFilter is triggered to resize the image
|
|
81
|
-
* 0 will disable the automatic resize. 1 will trigger automatically always.
|
|
82
|
-
* number bigger than 1 are not implemented yet.
|
|
83
|
-
* @type Number
|
|
84
|
-
*/
|
|
85
|
-
minimumScaleTrigger: 0.5,
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* List of properties to consider when checking if
|
|
89
|
-
* state of an object is changed ({@link fabric.Object#hasStateChanged})
|
|
90
|
-
* as well as for history (undo/redo) purposes
|
|
91
|
-
* @type Array
|
|
92
|
-
*/
|
|
93
|
-
stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* List of properties to consider when checking if cache needs refresh
|
|
97
|
-
* Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single
|
|
98
|
-
* calls to Object.set(key, value). If the key is in this list, the object is marked as dirty
|
|
99
|
-
* and refreshed at the next render
|
|
100
|
-
* @type Array
|
|
101
|
-
*/
|
|
102
|
-
cacheProperties: fabric.Object.prototype.cacheProperties.concat('cropX', 'cropY'),
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* key used to retrieve the texture representing this image
|
|
106
|
-
* @since 2.0.0
|
|
107
|
-
* @type String
|
|
108
|
-
* @default
|
|
109
|
-
*/
|
|
110
|
-
cacheKey: '',
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Image crop in pixels from original image size.
|
|
114
|
-
* @since 2.0.0
|
|
115
|
-
* @type Number
|
|
116
|
-
* @default
|
|
117
|
-
*/
|
|
118
|
-
cropX: 0,
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Image crop in pixels from original image size.
|
|
122
|
-
* @since 2.0.0
|
|
123
|
-
* @type Number
|
|
124
|
-
* @default
|
|
125
|
-
*/
|
|
126
|
-
cropY: 0,
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Indicates whether this canvas will use image smoothing when painting this image.
|
|
130
|
-
* Also influence if the cacheCanvas for this image uses imageSmoothing
|
|
131
|
-
* @since 4.0.0-beta.11
|
|
132
|
-
* @type Boolean
|
|
133
|
-
* @default
|
|
134
|
-
*/
|
|
135
|
-
imageSmoothing: true,
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Constructor
|
|
139
|
-
* Image can be initialized with any canvas drawable or a string.
|
|
140
|
-
* The string should be a url and will be loaded as an image.
|
|
141
|
-
* Canvas and Image element work out of the box, while videos require extra code to work.
|
|
142
|
-
* Please check video element events for seeking.
|
|
143
|
-
* @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element
|
|
144
|
-
* @param {Object} [options] Options object
|
|
145
|
-
* @param {function} [callback] callback function to call after eventual filters applied.
|
|
146
|
-
* @return {fabric.Image} thisArg
|
|
147
|
-
*/
|
|
148
|
-
initialize: function(element, options) {
|
|
149
|
-
options || (options = { });
|
|
150
|
-
this.filters = [];
|
|
151
|
-
this.cacheKey = 'texture' + fabric.Object.__uid++;
|
|
152
|
-
this.callSuper('initialize', options);
|
|
153
|
-
this._initElement(element, options);
|
|
154
|
-
},
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Returns image element which this instance if based on
|
|
158
|
-
* @return {HTMLImageElement} Image element
|
|
159
|
-
*/
|
|
160
|
-
getElement: function() {
|
|
161
|
-
return this._element || {};
|
|
162
|
-
},
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Sets image element for this instance to a specified one.
|
|
166
|
-
* If filters defined they are applied to new image.
|
|
167
|
-
* You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.
|
|
168
|
-
* @param {HTMLImageElement} element
|
|
169
|
-
* @param {Object} [options] Options object
|
|
170
|
-
* @return {fabric.Image} thisArg
|
|
171
|
-
* @chainable
|
|
172
|
-
*/
|
|
173
|
-
setElement: function(element, options) {
|
|
174
|
-
this.removeTexture(this.cacheKey);
|
|
175
|
-
this.removeTexture(this.cacheKey + '_filtered');
|
|
176
|
-
this._element = element;
|
|
177
|
-
this._originalElement = element;
|
|
178
|
-
this._initConfig(options);
|
|
179
|
-
if (this.filters.length !== 0) {
|
|
180
|
-
this.applyFilters();
|
|
181
|
-
}
|
|
182
|
-
// resizeFilters work on the already filtered copy.
|
|
183
|
-
// we need to apply resizeFilters AFTER normal filters.
|
|
184
|
-
// applyResizeFilters is run more often than normal filters
|
|
185
|
-
// and is triggered by user interactions rather than dev code
|
|
186
|
-
if (this.resizeFilter) {
|
|
187
|
-
this.applyResizeFilters();
|
|
188
|
-
}
|
|
189
|
-
return this;
|
|
190
|
-
},
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Delete a single texture if in webgl mode
|
|
194
|
-
*/
|
|
195
|
-
removeTexture: function(key) {
|
|
196
|
-
var backend = fabric.filterBackend;
|
|
197
|
-
if (backend && backend.evictCachesForKey) {
|
|
198
|
-
backend.evictCachesForKey(key);
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Delete textures, reference to elements and eventually JSDOM cleanup
|
|
204
|
-
*/
|
|
205
|
-
dispose: function () {
|
|
206
|
-
this.callSuper('dispose');
|
|
207
|
-
this.removeTexture(this.cacheKey);
|
|
208
|
-
this.removeTexture(this.cacheKey + '_filtered');
|
|
209
|
-
this._cacheContext = undefined;
|
|
210
|
-
['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {
|
|
211
|
-
fabric.util.cleanUpJsdomNode(this[element]);
|
|
212
|
-
this[element] = undefined;
|
|
213
|
-
}).bind(this));
|
|
214
|
-
},
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Get the crossOrigin value (of the corresponding image element)
|
|
218
|
-
*/
|
|
219
|
-
getCrossOrigin: function() {
|
|
220
|
-
return this._originalElement && (this._originalElement.crossOrigin || null);
|
|
221
|
-
},
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Returns original size of an image
|
|
225
|
-
* @return {Object} Object with "width" and "height" properties
|
|
226
|
-
*/
|
|
227
|
-
getOriginalSize: function() {
|
|
228
|
-
var element = this.getElement();
|
|
229
|
-
return {
|
|
230
|
-
width: element.naturalWidth || element.width,
|
|
231
|
-
height: element.naturalHeight || element.height
|
|
232
|
-
};
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* @private
|
|
237
|
-
* @param {CanvasRenderingContext2D} ctx Context to render on
|
|
238
|
-
*/
|
|
239
|
-
_stroke: function(ctx) {
|
|
240
|
-
if (!this.stroke || this.strokeWidth === 0) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
var w = this.width / 2, h = this.height / 2;
|
|
244
|
-
ctx.beginPath();
|
|
245
|
-
ctx.moveTo(-w, -h);
|
|
246
|
-
ctx.lineTo(w, -h);
|
|
247
|
-
ctx.lineTo(w, h);
|
|
248
|
-
ctx.lineTo(-w, h);
|
|
249
|
-
ctx.lineTo(-w, -h);
|
|
250
|
-
ctx.closePath();
|
|
251
|
-
},
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Returns object representation of an instance
|
|
255
|
-
* @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
|
|
256
|
-
* @return {Object} Object representation of an instance
|
|
257
|
-
*/
|
|
258
|
-
toObject: function(propertiesToInclude) {
|
|
259
|
-
var filters = [];
|
|
260
|
-
|
|
261
|
-
this.filters.forEach(function(filterObj) {
|
|
262
|
-
if (filterObj) {
|
|
263
|
-
filters.push(filterObj.toObject());
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
var object = extend(
|
|
267
|
-
this.callSuper(
|
|
268
|
-
'toObject',
|
|
269
|
-
['cropX', 'cropY'].concat(propertiesToInclude)
|
|
270
|
-
), {
|
|
271
|
-
src: this.getSrc(),
|
|
272
|
-
crossOrigin: this.getCrossOrigin(),
|
|
273
|
-
filters: filters,
|
|
274
|
-
});
|
|
275
|
-
if (this.resizeFilter) {
|
|
276
|
-
object.resizeFilter = this.resizeFilter.toObject();
|
|
277
|
-
}
|
|
278
|
-
return object;
|
|
279
|
-
},
|
|
280
|
-
|
|
281
|
-
/**
|
|
282
|
-
* Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.
|
|
283
|
-
* @return {Boolean}
|
|
284
|
-
*/
|
|
285
|
-
hasCrop: function() {
|
|
286
|
-
return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;
|
|
287
|
-
},
|
|
288
|
-
|
|
289
|
-
/* _TO_SVG_START_ */
|
|
290
|
-
/**
|
|
291
|
-
* Returns svg representation of an instance
|
|
292
|
-
* @return {Array} an array of strings with the specific svg representation
|
|
293
|
-
* of the instance
|
|
294
|
-
*/
|
|
295
|
-
_toSVG: function() {
|
|
296
|
-
var svgString = [], imageMarkup = [], strokeSvg, element = this._element,
|
|
297
|
-
x = -this.width / 2, y = -this.height / 2, clipPath = '', imageRendering = '';
|
|
298
|
-
if (!element) {
|
|
299
|
-
return [];
|
|
300
|
-
}
|
|
301
|
-
if (this.hasCrop()) {
|
|
302
|
-
var clipPathId = fabric.Object.__uid++;
|
|
303
|
-
svgString.push(
|
|
304
|
-
'<clipPath id="imageCrop_' + clipPathId + '">\n',
|
|
305
|
-
'\t<rect x="' + x + '" y="' + y + '" width="' + this.width + '" height="' + this.height + '" />\n',
|
|
306
|
-
'</clipPath>\n'
|
|
307
|
-
);
|
|
308
|
-
clipPath = ' clip-path="url(#imageCrop_' + clipPathId + ')" ';
|
|
309
|
-
}
|
|
310
|
-
if (!this.imageSmoothing) {
|
|
311
|
-
imageRendering = '" image-rendering="optimizeSpeed';
|
|
312
|
-
}
|
|
313
|
-
imageMarkup.push('\t<image ', 'COMMON_PARTS', 'xlink:href="', this.getSvgSrc(true),
|
|
314
|
-
'" x="', x - this.cropX, '" y="', y - this.cropY,
|
|
315
|
-
// we're essentially moving origin of transformation from top/left corner to the center of the shape
|
|
316
|
-
// by wrapping it in container <g> element with actual transformation, then offsetting object to the top/left
|
|
317
|
-
// so that object's center aligns with container's left/top
|
|
318
|
-
'" width="', element.width || element.naturalWidth,
|
|
319
|
-
'" height="', element.height || element.height,
|
|
320
|
-
imageRendering,
|
|
321
|
-
'"', clipPath,
|
|
322
|
-
'></image>\n');
|
|
323
|
-
|
|
324
|
-
if (this.stroke || this.strokeDashArray) {
|
|
325
|
-
var origFill = this.fill;
|
|
326
|
-
this.fill = null;
|
|
327
|
-
strokeSvg = [
|
|
328
|
-
'\t<rect ',
|
|
329
|
-
'x="', x, '" y="', y,
|
|
330
|
-
'" width="', this.width, '" height="', this.height,
|
|
331
|
-
'" style="', this.getSvgStyles(),
|
|
332
|
-
'"/>\n'
|
|
333
|
-
];
|
|
334
|
-
this.fill = origFill;
|
|
335
|
-
}
|
|
336
|
-
if (this.paintFirst !== 'fill') {
|
|
337
|
-
svgString = svgString.concat(strokeSvg, imageMarkup);
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
svgString = svgString.concat(imageMarkup, strokeSvg);
|
|
341
|
-
}
|
|
342
|
-
return svgString;
|
|
343
|
-
},
|
|
344
|
-
/* _TO_SVG_END_ */
|
|
345
|
-
|
|
346
|
-
/**
|
|
347
|
-
* Returns source of an image
|
|
348
|
-
* @param {Boolean} filtered indicates if the src is needed for svg
|
|
349
|
-
* @return {String} Source of an image
|
|
350
|
-
*/
|
|
351
|
-
getSrc: function(filtered) {
|
|
352
|
-
var element = filtered ? this._element : this._originalElement;
|
|
353
|
-
if (element) {
|
|
354
|
-
if (element.toDataURL) {
|
|
355
|
-
return element.toDataURL();
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
if (this.srcFromAttribute) {
|
|
359
|
-
return element.getAttribute('src');
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
return element.src;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
return this.src || '';
|
|
367
|
-
}
|
|
368
|
-
},
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* Sets source of an image
|
|
372
|
-
* @param {String} src Source string (URL)
|
|
373
|
-
* @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)
|
|
374
|
-
* @param {Object} [options] Options object
|
|
375
|
-
* @param {String} [options.crossOrigin] crossOrigin value (one of "", "anonymous", "use-credentials")
|
|
376
|
-
* @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes
|
|
377
|
-
* @return {fabric.Image} thisArg
|
|
378
|
-
* @chainable
|
|
379
|
-
*/
|
|
380
|
-
setSrc: function(src, callback, options) {
|
|
381
|
-
fabric.util.loadImage(src, function(img, isError) {
|
|
382
|
-
this.setElement(img, options);
|
|
383
|
-
this._setWidthHeight();
|
|
384
|
-
callback && callback(this, isError);
|
|
385
|
-
}, this, options && options.crossOrigin);
|
|
386
|
-
return this;
|
|
387
|
-
},
|
|
388
|
-
|
|
389
|
-
/**
|
|
390
|
-
* Returns string representation of an instance
|
|
391
|
-
* @return {String} String representation of an instance
|
|
392
|
-
*/
|
|
393
|
-
toString: function() {
|
|
394
|
-
return '#<fabric.Image: { src: "' + this.getSrc() + '" }>';
|
|
395
|
-
},
|
|
396
|
-
|
|
397
|
-
applyResizeFilters: function() {
|
|
398
|
-
var filter = this.resizeFilter,
|
|
399
|
-
minimumScale = this.minimumScaleTrigger,
|
|
400
|
-
objectScale = this.getTotalObjectScaling(),
|
|
401
|
-
scaleX = objectScale.scaleX,
|
|
402
|
-
scaleY = objectScale.scaleY,
|
|
403
|
-
elementToFilter = this._filteredEl || this._originalElement;
|
|
404
|
-
if (this.group) {
|
|
405
|
-
this.set('dirty', true);
|
|
406
|
-
}
|
|
407
|
-
if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {
|
|
408
|
-
this._element = elementToFilter;
|
|
409
|
-
this._filterScalingX = 1;
|
|
410
|
-
this._filterScalingY = 1;
|
|
411
|
-
this._lastScaleX = scaleX;
|
|
412
|
-
this._lastScaleY = scaleY;
|
|
413
|
-
return;
|
|
414
|
-
}
|
|
415
|
-
if (!fabric.filterBackend) {
|
|
416
|
-
fabric.filterBackend = fabric.initFilterBackend();
|
|
417
|
-
}
|
|
418
|
-
var canvasEl = fabric.util.createCanvasElement(),
|
|
419
|
-
cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,
|
|
420
|
-
sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;
|
|
421
|
-
canvasEl.width = sourceWidth;
|
|
422
|
-
canvasEl.height = sourceHeight;
|
|
423
|
-
this._element = canvasEl;
|
|
424
|
-
this._lastScaleX = filter.scaleX = scaleX;
|
|
425
|
-
this._lastScaleY = filter.scaleY = scaleY;
|
|
426
|
-
fabric.filterBackend.applyFilters(
|
|
427
|
-
[filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);
|
|
428
|
-
this._filterScalingX = canvasEl.width / this._originalElement.width;
|
|
429
|
-
this._filterScalingY = canvasEl.height / this._originalElement.height;
|
|
430
|
-
},
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Applies filters assigned to this image (from "filters" array) or from filter param
|
|
434
|
-
* @method applyFilters
|
|
435
|
-
* @param {Array} filters to be applied
|
|
436
|
-
* @param {Boolean} forResizing specify if the filter operation is a resize operation
|
|
437
|
-
* @return {thisArg} return the fabric.Image object
|
|
438
|
-
* @chainable
|
|
439
|
-
*/
|
|
440
|
-
applyFilters: function(filters) {
|
|
441
|
-
|
|
442
|
-
filters = filters || this.filters || [];
|
|
443
|
-
filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });
|
|
444
|
-
this.set('dirty', true);
|
|
445
|
-
|
|
446
|
-
// needs to clear out or WEBGL will not resize correctly
|
|
447
|
-
this.removeTexture(this.cacheKey + '_filtered');
|
|
448
|
-
|
|
449
|
-
if (filters.length === 0) {
|
|
450
|
-
this._element = this._originalElement;
|
|
451
|
-
this._filteredEl = null;
|
|
452
|
-
this._filterScalingX = 1;
|
|
453
|
-
this._filterScalingY = 1;
|
|
454
|
-
return this;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
var imgElement = this._originalElement,
|
|
458
|
-
sourceWidth = imgElement.naturalWidth || imgElement.width,
|
|
459
|
-
sourceHeight = imgElement.naturalHeight || imgElement.height;
|
|
460
|
-
|
|
461
|
-
if (this._element === this._originalElement) {
|
|
462
|
-
// if the element is the same we need to create a new element
|
|
463
|
-
var canvasEl = fabric.util.createCanvasElement();
|
|
464
|
-
canvasEl.width = sourceWidth;
|
|
465
|
-
canvasEl.height = sourceHeight;
|
|
466
|
-
this._element = canvasEl;
|
|
467
|
-
this._filteredEl = canvasEl;
|
|
468
|
-
}
|
|
469
|
-
else {
|
|
470
|
-
// clear the existing element to get new filter data
|
|
471
|
-
// also dereference the eventual resized _element
|
|
472
|
-
this._element = this._filteredEl;
|
|
473
|
-
this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);
|
|
474
|
-
// we also need to resize again at next renderAll, so remove saved _lastScaleX/Y
|
|
475
|
-
this._lastScaleX = 1;
|
|
476
|
-
this._lastScaleY = 1;
|
|
477
|
-
}
|
|
478
|
-
if (!fabric.filterBackend) {
|
|
479
|
-
fabric.filterBackend = fabric.initFilterBackend();
|
|
480
|
-
}
|
|
481
|
-
fabric.filterBackend.applyFilters(
|
|
482
|
-
filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);
|
|
483
|
-
if (this._originalElement.width !== this._element.width ||
|
|
484
|
-
this._originalElement.height !== this._element.height) {
|
|
485
|
-
this._filterScalingX = this._element.width / this._originalElement.width;
|
|
486
|
-
this._filterScalingY = this._element.height / this._originalElement.height;
|
|
487
|
-
}
|
|
488
|
-
return this;
|
|
489
|
-
},
|
|
490
|
-
|
|
491
|
-
/**
|
|
492
|
-
* @private
|
|
493
|
-
* @param {CanvasRenderingContext2D} ctx Context to render on
|
|
494
|
-
*/
|
|
495
|
-
_render: function(ctx) {
|
|
496
|
-
fabric.util.setImageSmoothing(ctx, this.imageSmoothing);
|
|
497
|
-
if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {
|
|
498
|
-
this.applyResizeFilters();
|
|
499
|
-
}
|
|
500
|
-
this._stroke(ctx);
|
|
501
|
-
this._renderPaintInOrder(ctx);
|
|
502
|
-
},
|
|
503
|
-
|
|
504
|
-
/**
|
|
505
|
-
* Paint the cached copy of the object on the target context.
|
|
506
|
-
* it will set the imageSmoothing for the draw operation
|
|
507
|
-
* @param {CanvasRenderingContext2D} ctx Context to render on
|
|
508
|
-
*/
|
|
509
|
-
drawCacheOnCanvas: function(ctx) {
|
|
510
|
-
fabric.util.setImageSmoothing(ctx, this.imageSmoothing);
|
|
511
|
-
fabric.Object.prototype.drawCacheOnCanvas.call(this, ctx);
|
|
512
|
-
},
|
|
513
|
-
|
|
514
|
-
/**
|
|
515
|
-
* Decide if the object should cache or not. Create its own cache level
|
|
516
|
-
* needsItsOwnCache should be used when the object drawing method requires
|
|
517
|
-
* a cache step. None of the fabric classes requires it.
|
|
518
|
-
* Generally you do not cache objects in groups because the group outside is cached.
|
|
519
|
-
* This is the special image version where we would like to avoid caching where possible.
|
|
520
|
-
* Essentially images do not benefit from caching. They may require caching, and in that
|
|
521
|
-
* case we do it. Also caching an image usually ends in a loss of details.
|
|
522
|
-
* A full performance audit should be done.
|
|
523
|
-
* @return {Boolean}
|
|
524
|
-
*/
|
|
525
|
-
shouldCache: function() {
|
|
526
|
-
return this.needsItsOwnCache();
|
|
527
|
-
},
|
|
528
|
-
|
|
529
|
-
_renderFill: function(ctx) {
|
|
530
|
-
var elementToDraw = this._element;
|
|
531
|
-
if (!elementToDraw) {
|
|
532
|
-
return;
|
|
533
|
-
}
|
|
534
|
-
var scaleX = this._filterScalingX, scaleY = this._filterScalingY,
|
|
535
|
-
w = this.width, h = this.height, min = Math.min, max = Math.max,
|
|
536
|
-
// crop values cannot be lesser than 0.
|
|
537
|
-
cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),
|
|
538
|
-
elWidth = elementToDraw.naturalWidth || elementToDraw.width,
|
|
539
|
-
elHeight = elementToDraw.naturalHeight || elementToDraw.height,
|
|
540
|
-
sX = cropX * scaleX,
|
|
541
|
-
sY = cropY * scaleY,
|
|
542
|
-
// the width height cannot exceed element width/height, starting from the crop offset.
|
|
543
|
-
sW = min(w * scaleX, elWidth - sX),
|
|
544
|
-
sH = min(h * scaleY, elHeight - sY),
|
|
545
|
-
x = -w / 2, y = -h / 2,
|
|
546
|
-
maxDestW = min(w, elWidth / scaleX - cropX),
|
|
547
|
-
maxDestH = min(h, elHeight / scaleY - cropY);
|
|
548
|
-
|
|
549
|
-
elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);
|
|
550
|
-
},
|
|
551
|
-
|
|
552
|
-
/**
|
|
553
|
-
* needed to check if image needs resize
|
|
554
|
-
* @private
|
|
555
|
-
*/
|
|
556
|
-
_needsResize: function() {
|
|
557
|
-
var scale = this.getTotalObjectScaling();
|
|
558
|
-
return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);
|
|
559
|
-
},
|
|
560
|
-
|
|
561
|
-
/**
|
|
562
|
-
* @private
|
|
563
|
-
*/
|
|
564
|
-
_resetWidthHeight: function() {
|
|
565
|
-
this.set(this.getOriginalSize());
|
|
566
|
-
},
|
|
567
|
-
|
|
568
|
-
/**
|
|
569
|
-
* The Image class's initialization method. This method is automatically
|
|
570
|
-
* called by the constructor.
|
|
571
|
-
* @private
|
|
572
|
-
* @param {HTMLImageElement|String} element The element representing the image
|
|
573
|
-
* @param {Object} [options] Options object
|
|
574
|
-
*/
|
|
575
|
-
_initElement: function(element, options) {
|
|
576
|
-
this.setElement(fabric.util.getById(element), options);
|
|
577
|
-
fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);
|
|
578
|
-
},
|
|
579
|
-
|
|
580
|
-
/**
|
|
581
|
-
* @private
|
|
582
|
-
* @param {Object} [options] Options object
|
|
583
|
-
*/
|
|
584
|
-
_initConfig: function(options) {
|
|
585
|
-
options || (options = { });
|
|
586
|
-
this.setOptions(options);
|
|
587
|
-
this._setWidthHeight(options);
|
|
588
|
-
},
|
|
589
|
-
|
|
590
|
-
/**
|
|
591
|
-
* @private
|
|
592
|
-
* @param {Array} filters to be initialized
|
|
593
|
-
* @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created
|
|
594
|
-
*/
|
|
595
|
-
_initFilters: function(filters, callback) {
|
|
596
|
-
if (filters && filters.length) {
|
|
597
|
-
fabric.util.enlivenObjects(filters, function(enlivenedObjects) {
|
|
598
|
-
callback && callback(enlivenedObjects);
|
|
599
|
-
}, 'fabric.Image.filters');
|
|
600
|
-
}
|
|
601
|
-
else {
|
|
602
|
-
callback && callback();
|
|
603
|
-
}
|
|
604
|
-
},
|
|
605
|
-
|
|
606
|
-
/**
|
|
607
|
-
* @private
|
|
608
|
-
* Set the width and the height of the image object, using the element or the
|
|
609
|
-
* options.
|
|
610
|
-
* @param {Object} [options] Object with width/height properties
|
|
611
|
-
*/
|
|
612
|
-
_setWidthHeight: function(options) {
|
|
613
|
-
options || (options = { });
|
|
614
|
-
var el = this.getElement();
|
|
615
|
-
this.width = options.width || el.naturalWidth || el.width || 0;
|
|
616
|
-
this.height = options.height || el.naturalHeight || el.height || 0;
|
|
617
|
-
},
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* Calculate offset for center and scale factor for the image in order to respect
|
|
621
|
-
* the preserveAspectRatio attribute
|
|
622
|
-
* @private
|
|
623
|
-
* @return {Object}
|
|
624
|
-
*/
|
|
625
|
-
parsePreserveAspectRatioAttribute: function() {
|
|
626
|
-
var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),
|
|
627
|
-
rWidth = this._element.width, rHeight = this._element.height,
|
|
628
|
-
scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,
|
|
629
|
-
offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };
|
|
630
|
-
if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {
|
|
631
|
-
if (pAR.meetOrSlice === 'meet') {
|
|
632
|
-
scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);
|
|
633
|
-
offset = (pWidth - rWidth * scaleX) / 2;
|
|
634
|
-
if (pAR.alignX === 'Min') {
|
|
635
|
-
offsetLeft = -offset;
|
|
636
|
-
}
|
|
637
|
-
if (pAR.alignX === 'Max') {
|
|
638
|
-
offsetLeft = offset;
|
|
639
|
-
}
|
|
640
|
-
offset = (pHeight - rHeight * scaleY) / 2;
|
|
641
|
-
if (pAR.alignY === 'Min') {
|
|
642
|
-
offsetTop = -offset;
|
|
643
|
-
}
|
|
644
|
-
if (pAR.alignY === 'Max') {
|
|
645
|
-
offsetTop = offset;
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
if (pAR.meetOrSlice === 'slice') {
|
|
649
|
-
scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);
|
|
650
|
-
offset = rWidth - pWidth / scaleX;
|
|
651
|
-
if (pAR.alignX === 'Mid') {
|
|
652
|
-
cropX = offset / 2;
|
|
653
|
-
}
|
|
654
|
-
if (pAR.alignX === 'Max') {
|
|
655
|
-
cropX = offset;
|
|
656
|
-
}
|
|
657
|
-
offset = rHeight - pHeight / scaleY;
|
|
658
|
-
if (pAR.alignY === 'Mid') {
|
|
659
|
-
cropY = offset / 2;
|
|
660
|
-
}
|
|
661
|
-
if (pAR.alignY === 'Max') {
|
|
662
|
-
cropY = offset;
|
|
663
|
-
}
|
|
664
|
-
rWidth = pWidth / scaleX;
|
|
665
|
-
rHeight = pHeight / scaleY;
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
else {
|
|
669
|
-
scaleX = pWidth / rWidth;
|
|
670
|
-
scaleY = pHeight / rHeight;
|
|
671
|
-
}
|
|
672
|
-
return {
|
|
673
|
-
width: rWidth,
|
|
674
|
-
height: rHeight,
|
|
675
|
-
scaleX: scaleX,
|
|
676
|
-
scaleY: scaleY,
|
|
677
|
-
offsetLeft: offsetLeft,
|
|
678
|
-
offsetTop: offsetTop,
|
|
679
|
-
cropX: cropX,
|
|
680
|
-
cropY: cropY
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
});
|
|
684
|
-
|
|
685
|
-
/**
|
|
686
|
-
* Default CSS class name for canvas
|
|
687
|
-
* @static
|
|
688
|
-
* @type String
|
|
689
|
-
* @default
|
|
690
|
-
*/
|
|
691
|
-
fabric.Image.CSS_CANVAS = 'canvas-img';
|
|
692
|
-
|
|
693
|
-
/**
|
|
694
|
-
* Alias for getSrc
|
|
695
|
-
* @static
|
|
696
|
-
*/
|
|
697
|
-
fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;
|
|
698
|
-
|
|
699
|
-
/**
|
|
700
|
-
* Creates an instance of fabric.Image from its object representation
|
|
701
|
-
* @static
|
|
702
|
-
* @param {Object} object Object to create an instance from
|
|
703
|
-
* @param {Function} callback Callback to invoke when an image instance is created
|
|
704
|
-
*/
|
|
705
|
-
fabric.Image.fromObject = function(_object, callback) {
|
|
706
|
-
var object = fabric.util.object.clone(_object);
|
|
707
|
-
fabric.util.loadImage(object.src, function(img, isError) {
|
|
708
|
-
if (isError) {
|
|
709
|
-
callback && callback(null, true);
|
|
710
|
-
return;
|
|
711
|
-
}
|
|
712
|
-
fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {
|
|
713
|
-
object.filters = filters || [];
|
|
714
|
-
fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {
|
|
715
|
-
object.resizeFilter = resizeFilters[0];
|
|
716
|
-
fabric.util.enlivenObjectEnlivables(object, object, function () {
|
|
717
|
-
var image = new fabric.Image(img, object);
|
|
718
|
-
callback(image, false);
|
|
719
|
-
});
|
|
720
|
-
});
|
|
721
|
-
});
|
|
722
|
-
}, null, object.crossOrigin);
|
|
723
|
-
};
|
|
724
|
-
|
|
725
|
-
/**
|
|
726
|
-
* Creates an instance of fabric.Image from an URL string
|
|
727
|
-
* @static
|
|
728
|
-
* @param {String} url URL to create an image from
|
|
729
|
-
* @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.
|
|
730
|
-
* @param {Object} [imgOptions] Options object
|
|
731
|
-
*/
|
|
732
|
-
fabric.Image.fromURL = function(url, callback, imgOptions) {
|
|
733
|
-
fabric.util.loadImage(url, function(img, isError) {
|
|
734
|
-
callback && callback(new fabric.Image(img, imgOptions), isError);
|
|
735
|
-
}, null, imgOptions && imgOptions.crossOrigin);
|
|
736
|
-
};
|
|
737
|
-
|
|
738
|
-
/* _FROM_SVG_START_ */
|
|
739
|
-
/**
|
|
740
|
-
* List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})
|
|
741
|
-
* @static
|
|
742
|
-
* @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}
|
|
743
|
-
*/
|
|
744
|
-
fabric.Image.ATTRIBUTE_NAMES =
|
|
745
|
-
fabric.SHARED_ATTRIBUTES.concat(
|
|
746
|
-
'x y width height preserveAspectRatio xlink:href crossOrigin image-rendering'.split(' ')
|
|
747
|
-
);
|
|
748
|
-
|
|
749
|
-
/**
|
|
750
|
-
* Returns {@link fabric.Image} instance from an SVG element
|
|
751
|
-
* @static
|
|
752
|
-
* @param {SVGElement} element Element to parse
|
|
753
|
-
* @param {Object} [options] Options object
|
|
754
|
-
* @param {Function} callback Callback to execute when fabric.Image object is created
|
|
755
|
-
* @return {fabric.Image} Instance of fabric.Image
|
|
756
|
-
*/
|
|
757
|
-
fabric.Image.fromElement = function(element, callback, options) {
|
|
758
|
-
var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);
|
|
759
|
-
fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,
|
|
760
|
-
extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));
|
|
761
|
-
};
|
|
762
|
-
/* _FROM_SVG_END_ */
|
|
763
|
-
|
|
764
|
-
})(typeof exports !== 'undefined' ? exports : this);
|