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,122 +0,0 @@
|
|
|
1
|
-
(function(global) {
|
|
2
|
-
|
|
3
|
-
'use strict';
|
|
4
|
-
|
|
5
|
-
var fabric = global.fabric || (global.fabric = { }),
|
|
6
|
-
filters = fabric.Image.filters,
|
|
7
|
-
createClass = fabric.util.createClass;
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Vibrance filter class
|
|
11
|
-
* @class fabric.Image.filters.Vibrance
|
|
12
|
-
* @memberOf fabric.Image.filters
|
|
13
|
-
* @extends fabric.Image.filters.BaseFilter
|
|
14
|
-
* @see {@link fabric.Image.filters.Vibrance#initialize} for constructor definition
|
|
15
|
-
* @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
|
|
16
|
-
* @example
|
|
17
|
-
* var filter = new fabric.Image.filters.Vibrance({
|
|
18
|
-
* vibrance: 1
|
|
19
|
-
* });
|
|
20
|
-
* object.filters.push(filter);
|
|
21
|
-
* object.applyFilters();
|
|
22
|
-
*/
|
|
23
|
-
filters.Vibrance = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Vibrance.prototype */ {
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Filter type
|
|
27
|
-
* @param {String} type
|
|
28
|
-
* @default
|
|
29
|
-
*/
|
|
30
|
-
type: 'Vibrance',
|
|
31
|
-
|
|
32
|
-
fragmentSource: 'precision highp float;\n' +
|
|
33
|
-
'uniform sampler2D uTexture;\n' +
|
|
34
|
-
'uniform float uVibrance;\n' +
|
|
35
|
-
'varying vec2 vTexCoord;\n' +
|
|
36
|
-
'void main() {\n' +
|
|
37
|
-
'vec4 color = texture2D(uTexture, vTexCoord);\n' +
|
|
38
|
-
'float max = max(color.r, max(color.g, color.b));\n' +
|
|
39
|
-
'float avg = (color.r + color.g + color.b) / 3.0;\n' +
|
|
40
|
-
'float amt = (abs(max - avg) * 2.0) * uVibrance;\n' +
|
|
41
|
-
'color.r += max != color.r ? (max - color.r) * amt : 0.00;\n' +
|
|
42
|
-
'color.g += max != color.g ? (max - color.g) * amt : 0.00;\n' +
|
|
43
|
-
'color.b += max != color.b ? (max - color.b) * amt : 0.00;\n' +
|
|
44
|
-
'gl_FragColor = color;\n' +
|
|
45
|
-
'}',
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Vibrance value, from -1 to 1.
|
|
49
|
-
* Increases/decreases the saturation of more muted colors with less effect on saturated colors.
|
|
50
|
-
* A value of 0 has no effect.
|
|
51
|
-
*
|
|
52
|
-
* @param {Number} vibrance
|
|
53
|
-
* @default
|
|
54
|
-
*/
|
|
55
|
-
vibrance: 0,
|
|
56
|
-
|
|
57
|
-
mainParameter: 'vibrance',
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Constructor
|
|
61
|
-
* @memberOf fabric.Image.filters.Vibrance.prototype
|
|
62
|
-
* @param {Object} [options] Options object
|
|
63
|
-
* @param {Number} [options.vibrance=0] Vibrance value for the image (between -1 and 1)
|
|
64
|
-
*/
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.
|
|
68
|
-
*
|
|
69
|
-
* @param {Object} options
|
|
70
|
-
* @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
|
|
71
|
-
*/
|
|
72
|
-
applyTo2d: function(options) {
|
|
73
|
-
if (this.vibrance === 0) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
var imageData = options.imageData,
|
|
77
|
-
data = imageData.data, len = data.length,
|
|
78
|
-
adjust = -this.vibrance, i, max, avg, amt;
|
|
79
|
-
|
|
80
|
-
for (i = 0; i < len; i += 4) {
|
|
81
|
-
max = Math.max(data[i], data[i + 1], data[i + 2]);
|
|
82
|
-
avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
|
|
83
|
-
amt = ((Math.abs(max - avg) * 2 / 255) * adjust);
|
|
84
|
-
data[i] += max !== data[i] ? (max - data[i]) * amt : 0;
|
|
85
|
-
data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;
|
|
86
|
-
data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Return WebGL uniform locations for this filter's shader.
|
|
92
|
-
*
|
|
93
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
94
|
-
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
95
|
-
*/
|
|
96
|
-
getUniformLocations: function(gl, program) {
|
|
97
|
-
return {
|
|
98
|
-
uVibrance: gl.getUniformLocation(program, 'uVibrance'),
|
|
99
|
-
};
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Send data from this filter to its shader program's uniforms.
|
|
104
|
-
*
|
|
105
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
106
|
-
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
107
|
-
*/
|
|
108
|
-
sendUniformData: function(gl, uniformLocations) {
|
|
109
|
-
gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Returns filter instance from an object representation
|
|
115
|
-
* @static
|
|
116
|
-
* @param {Object} object Object to create an instance from
|
|
117
|
-
* @param {Function} [callback] to be invoked after filter creation
|
|
118
|
-
* @return {fabric.Image.filters.Vibrance} Instance of fabric.Image.filters.Vibrance
|
|
119
|
-
*/
|
|
120
|
-
fabric.Image.filters.Vibrance.fromObject = fabric.Image.filters.BaseFilter.fromObject;
|
|
121
|
-
|
|
122
|
-
})(typeof exports !== 'undefined' ? exports : this);
|
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
(function() {
|
|
2
|
-
|
|
3
|
-
'use strict';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Tests if webgl supports certain precision
|
|
7
|
-
* @param {WebGL} Canvas WebGL context to test on
|
|
8
|
-
* @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'
|
|
9
|
-
* @returns {Boolean} Whether the user's browser WebGL supports given precision.
|
|
10
|
-
*/
|
|
11
|
-
function testPrecision(gl, precision){
|
|
12
|
-
var fragmentSource = 'precision ' + precision + ' float;\nvoid main(){}';
|
|
13
|
-
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
14
|
-
gl.shaderSource(fragmentShader, fragmentSource);
|
|
15
|
-
gl.compileShader(fragmentShader);
|
|
16
|
-
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Indicate whether this filtering backend is supported by the user's browser.
|
|
24
|
-
* @param {Number} tileSize check if the tileSize is supported
|
|
25
|
-
* @returns {Boolean} Whether the user's browser supports WebGL.
|
|
26
|
-
*/
|
|
27
|
-
fabric.isWebglSupported = function(tileSize) {
|
|
28
|
-
if (fabric.isLikelyNode) {
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;
|
|
32
|
-
var canvas = document.createElement('canvas');
|
|
33
|
-
var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
|
34
|
-
var isSupported = false;
|
|
35
|
-
// eslint-disable-next-line
|
|
36
|
-
if (gl) {
|
|
37
|
-
fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
|
|
38
|
-
isSupported = fabric.maxTextureSize >= tileSize;
|
|
39
|
-
var precisions = ['highp', 'mediump', 'lowp'];
|
|
40
|
-
for (var i = 0; i < 3; i++){
|
|
41
|
-
if (testPrecision(gl, precisions[i])){
|
|
42
|
-
fabric.webGlPrecision = precisions[i];
|
|
43
|
-
break;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
this.isSupported = isSupported;
|
|
48
|
-
return isSupported;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
fabric.WebglFilterBackend = WebglFilterBackend;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* WebGL filter backend.
|
|
55
|
-
*/
|
|
56
|
-
function WebglFilterBackend(options) {
|
|
57
|
-
if (options && options.tileSize) {
|
|
58
|
-
this.tileSize = options.tileSize;
|
|
59
|
-
}
|
|
60
|
-
this.setupGLContext(this.tileSize, this.tileSize);
|
|
61
|
-
this.captureGPUInfo();
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
WebglFilterBackend.prototype = /** @lends fabric.WebglFilterBackend.prototype */ {
|
|
65
|
-
|
|
66
|
-
tileSize: 2048,
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Experimental. This object is a sort of repository of help layers used to avoid
|
|
70
|
-
* of recreating them during frequent filtering. If you are previewing a filter with
|
|
71
|
-
* a slider you probably do not want to create help layers every filter step.
|
|
72
|
-
* in this object there will be appended some canvases, created once, resized sometimes
|
|
73
|
-
* cleared never. Clearing is left to the developer.
|
|
74
|
-
**/
|
|
75
|
-
resources: {
|
|
76
|
-
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Setup a WebGL context suitable for filtering, and bind any needed event handlers.
|
|
81
|
-
*/
|
|
82
|
-
setupGLContext: function(width, height) {
|
|
83
|
-
this.dispose();
|
|
84
|
-
this.createWebGLCanvas(width, height);
|
|
85
|
-
// eslint-disable-next-line
|
|
86
|
-
this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);
|
|
87
|
-
this.chooseFastestCopyGLTo2DMethod(width, height);
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Pick a method to copy data from GL context to 2d canvas. In some browsers using
|
|
92
|
-
* putImageData is faster than drawImage for that specific operation.
|
|
93
|
-
*/
|
|
94
|
-
chooseFastestCopyGLTo2DMethod: function(width, height) {
|
|
95
|
-
var canMeasurePerf = typeof window.performance !== 'undefined', canUseImageData;
|
|
96
|
-
try {
|
|
97
|
-
new ImageData(1, 1);
|
|
98
|
-
canUseImageData = true;
|
|
99
|
-
}
|
|
100
|
-
catch (e) {
|
|
101
|
-
canUseImageData = false;
|
|
102
|
-
}
|
|
103
|
-
// eslint-disable-next-line no-undef
|
|
104
|
-
var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined';
|
|
105
|
-
// eslint-disable-next-line no-undef
|
|
106
|
-
var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';
|
|
107
|
-
|
|
108
|
-
if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
var targetCanvas = fabric.util.createCanvasElement();
|
|
113
|
-
// eslint-disable-next-line no-undef
|
|
114
|
-
var imageBuffer = new ArrayBuffer(width * height * 4);
|
|
115
|
-
if (fabric.forceGLPutImageData) {
|
|
116
|
-
this.imageBuffer = imageBuffer;
|
|
117
|
-
this.copyGLTo2D = copyGLTo2DPutImageData;
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
var testContext = {
|
|
121
|
-
imageBuffer: imageBuffer,
|
|
122
|
-
destinationWidth: width,
|
|
123
|
-
destinationHeight: height,
|
|
124
|
-
targetCanvas: targetCanvas
|
|
125
|
-
};
|
|
126
|
-
var startTime, drawImageTime, putImageDataTime;
|
|
127
|
-
targetCanvas.width = width;
|
|
128
|
-
targetCanvas.height = height;
|
|
129
|
-
|
|
130
|
-
startTime = window.performance.now();
|
|
131
|
-
copyGLTo2DDrawImage.call(testContext, this.gl, testContext);
|
|
132
|
-
drawImageTime = window.performance.now() - startTime;
|
|
133
|
-
|
|
134
|
-
startTime = window.performance.now();
|
|
135
|
-
copyGLTo2DPutImageData.call(testContext, this.gl, testContext);
|
|
136
|
-
putImageDataTime = window.performance.now() - startTime;
|
|
137
|
-
|
|
138
|
-
if (drawImageTime > putImageDataTime) {
|
|
139
|
-
this.imageBuffer = imageBuffer;
|
|
140
|
-
this.copyGLTo2D = copyGLTo2DPutImageData;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
this.copyGLTo2D = copyGLTo2DDrawImage;
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Create a canvas element and associated WebGL context and attaches them as
|
|
149
|
-
* class properties to the GLFilterBackend class.
|
|
150
|
-
*/
|
|
151
|
-
createWebGLCanvas: function(width, height) {
|
|
152
|
-
var canvas = fabric.util.createCanvasElement();
|
|
153
|
-
canvas.width = width;
|
|
154
|
-
canvas.height = height;
|
|
155
|
-
var glOptions = {
|
|
156
|
-
alpha: true,
|
|
157
|
-
premultipliedAlpha: false,
|
|
158
|
-
depth: false,
|
|
159
|
-
stencil: false,
|
|
160
|
-
antialias: false
|
|
161
|
-
},
|
|
162
|
-
gl = canvas.getContext('webgl', glOptions);
|
|
163
|
-
if (!gl) {
|
|
164
|
-
gl = canvas.getContext('experimental-webgl', glOptions);
|
|
165
|
-
}
|
|
166
|
-
if (!gl) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
gl.clearColor(0, 0, 0, 0);
|
|
170
|
-
// this canvas can fire webglcontextlost and webglcontextrestored
|
|
171
|
-
this.canvas = canvas;
|
|
172
|
-
this.gl = gl;
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Attempts to apply the requested filters to the source provided, drawing the filtered output
|
|
177
|
-
* to the provided target canvas.
|
|
178
|
-
*
|
|
179
|
-
* @param {Array} filters The filters to apply.
|
|
180
|
-
* @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.
|
|
181
|
-
* @param {Number} width The width of the source input.
|
|
182
|
-
* @param {Number} height The height of the source input.
|
|
183
|
-
* @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.
|
|
184
|
-
* @param {String|undefined} cacheKey A key used to cache resources related to the source. If
|
|
185
|
-
* omitted, caching will be skipped.
|
|
186
|
-
*/
|
|
187
|
-
applyFilters: function(filters, source, width, height, targetCanvas, cacheKey) {
|
|
188
|
-
var gl = this.gl;
|
|
189
|
-
var cachedTexture;
|
|
190
|
-
if (cacheKey) {
|
|
191
|
-
cachedTexture = this.getCachedTexture(cacheKey, source);
|
|
192
|
-
}
|
|
193
|
-
var pipelineState = {
|
|
194
|
-
originalWidth: source.width || source.originalWidth,
|
|
195
|
-
originalHeight: source.height || source.originalHeight,
|
|
196
|
-
sourceWidth: width,
|
|
197
|
-
sourceHeight: height,
|
|
198
|
-
destinationWidth: width,
|
|
199
|
-
destinationHeight: height,
|
|
200
|
-
context: gl,
|
|
201
|
-
sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),
|
|
202
|
-
targetTexture: this.createTexture(gl, width, height),
|
|
203
|
-
originalTexture: cachedTexture ||
|
|
204
|
-
this.createTexture(gl, width, height, !cachedTexture && source),
|
|
205
|
-
passes: filters.length,
|
|
206
|
-
webgl: true,
|
|
207
|
-
aPosition: this.aPosition,
|
|
208
|
-
programCache: this.programCache,
|
|
209
|
-
pass: 0,
|
|
210
|
-
filterBackend: this,
|
|
211
|
-
targetCanvas: targetCanvas
|
|
212
|
-
};
|
|
213
|
-
var tempFbo = gl.createFramebuffer();
|
|
214
|
-
gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);
|
|
215
|
-
filters.forEach(function(filter) { filter && filter.applyTo(pipelineState); });
|
|
216
|
-
resizeCanvasIfNeeded(pipelineState);
|
|
217
|
-
this.copyGLTo2D(gl, pipelineState);
|
|
218
|
-
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
219
|
-
gl.deleteTexture(pipelineState.sourceTexture);
|
|
220
|
-
gl.deleteTexture(pipelineState.targetTexture);
|
|
221
|
-
gl.deleteFramebuffer(tempFbo);
|
|
222
|
-
targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);
|
|
223
|
-
return pipelineState;
|
|
224
|
-
},
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Detach event listeners, remove references, and clean up caches.
|
|
228
|
-
*/
|
|
229
|
-
dispose: function() {
|
|
230
|
-
if (this.canvas) {
|
|
231
|
-
this.canvas = null;
|
|
232
|
-
this.gl = null;
|
|
233
|
-
}
|
|
234
|
-
this.clearWebGLCaches();
|
|
235
|
-
},
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Wipe out WebGL-related caches.
|
|
239
|
-
*/
|
|
240
|
-
clearWebGLCaches: function() {
|
|
241
|
-
this.programCache = {};
|
|
242
|
-
this.textureCache = {};
|
|
243
|
-
},
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Create a WebGL texture object.
|
|
247
|
-
*
|
|
248
|
-
* Accepts specific dimensions to initialize the texture to or a source image.
|
|
249
|
-
*
|
|
250
|
-
* @param {WebGLRenderingContext} gl The GL context to use for creating the texture.
|
|
251
|
-
* @param {Number} width The width to initialize the texture at.
|
|
252
|
-
* @param {Number} height The height to initialize the texture.
|
|
253
|
-
* @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.
|
|
254
|
-
* @param {Number} filterType gl.NEAREST or gl.LINEAR usually, webgl numeri constants
|
|
255
|
-
* @returns {WebGLTexture}
|
|
256
|
-
*/
|
|
257
|
-
createTexture: function(gl, width, height, textureImageSource, filterType) {
|
|
258
|
-
var texture = gl.createTexture();
|
|
259
|
-
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
260
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterType || gl.NEAREST);
|
|
261
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterType || gl.NEAREST);
|
|
262
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
263
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
264
|
-
if (textureImageSource) {
|
|
265
|
-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
|
|
269
|
-
}
|
|
270
|
-
return texture;
|
|
271
|
-
},
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Can be optionally used to get a texture from the cache array
|
|
275
|
-
*
|
|
276
|
-
* If an existing texture is not found, a new texture is created and cached.
|
|
277
|
-
*
|
|
278
|
-
* @param {String} uniqueId A cache key to use to find an existing texture.
|
|
279
|
-
* @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the
|
|
280
|
-
* texture cache entry if one does not already exist.
|
|
281
|
-
*/
|
|
282
|
-
getCachedTexture: function(uniqueId, textureImageSource) {
|
|
283
|
-
if (this.textureCache[uniqueId]) {
|
|
284
|
-
return this.textureCache[uniqueId];
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
var texture = this.createTexture(
|
|
288
|
-
this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);
|
|
289
|
-
this.textureCache[uniqueId] = texture;
|
|
290
|
-
return texture;
|
|
291
|
-
}
|
|
292
|
-
},
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Clear out cached resources related to a source image that has been
|
|
296
|
-
* filtered previously.
|
|
297
|
-
*
|
|
298
|
-
* @param {String} cacheKey The cache key provided when the source image was filtered.
|
|
299
|
-
*/
|
|
300
|
-
evictCachesForKey: function(cacheKey) {
|
|
301
|
-
if (this.textureCache[cacheKey]) {
|
|
302
|
-
this.gl.deleteTexture(this.textureCache[cacheKey]);
|
|
303
|
-
delete this.textureCache[cacheKey];
|
|
304
|
-
}
|
|
305
|
-
},
|
|
306
|
-
|
|
307
|
-
copyGLTo2D: copyGLTo2DDrawImage,
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Attempt to extract GPU information strings from a WebGL context.
|
|
311
|
-
*
|
|
312
|
-
* Useful information when debugging or blacklisting specific GPUs.
|
|
313
|
-
*
|
|
314
|
-
* @returns {Object} A GPU info object with renderer and vendor strings.
|
|
315
|
-
*/
|
|
316
|
-
captureGPUInfo: function() {
|
|
317
|
-
if (this.gpuInfo) {
|
|
318
|
-
return this.gpuInfo;
|
|
319
|
-
}
|
|
320
|
-
var gl = this.gl, gpuInfo = { renderer: '', vendor: '' };
|
|
321
|
-
if (!gl) {
|
|
322
|
-
return gpuInfo;
|
|
323
|
-
}
|
|
324
|
-
var ext = gl.getExtension('WEBGL_debug_renderer_info');
|
|
325
|
-
if (ext) {
|
|
326
|
-
var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
|
|
327
|
-
var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
|
|
328
|
-
if (renderer) {
|
|
329
|
-
gpuInfo.renderer = renderer.toLowerCase();
|
|
330
|
-
}
|
|
331
|
-
if (vendor) {
|
|
332
|
-
gpuInfo.vendor = vendor.toLowerCase();
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
this.gpuInfo = gpuInfo;
|
|
336
|
-
return gpuInfo;
|
|
337
|
-
},
|
|
338
|
-
};
|
|
339
|
-
})();
|
|
340
|
-
|
|
341
|
-
function resizeCanvasIfNeeded(pipelineState) {
|
|
342
|
-
var targetCanvas = pipelineState.targetCanvas,
|
|
343
|
-
width = targetCanvas.width, height = targetCanvas.height,
|
|
344
|
-
dWidth = pipelineState.destinationWidth,
|
|
345
|
-
dHeight = pipelineState.destinationHeight;
|
|
346
|
-
|
|
347
|
-
if (width !== dWidth || height !== dHeight) {
|
|
348
|
-
targetCanvas.width = dWidth;
|
|
349
|
-
targetCanvas.height = dHeight;
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
/**
|
|
354
|
-
* Copy an input WebGL canvas on to an output 2D canvas.
|
|
355
|
-
*
|
|
356
|
-
* The WebGL canvas is assumed to be upside down, with the top-left pixel of the
|
|
357
|
-
* desired output image appearing in the bottom-left corner of the WebGL canvas.
|
|
358
|
-
*
|
|
359
|
-
* @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.
|
|
360
|
-
* @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.
|
|
361
|
-
* @param {Object} pipelineState The 2D target canvas to copy on to.
|
|
362
|
-
*/
|
|
363
|
-
function copyGLTo2DDrawImage(gl, pipelineState) {
|
|
364
|
-
var glCanvas = gl.canvas, targetCanvas = pipelineState.targetCanvas,
|
|
365
|
-
ctx = targetCanvas.getContext('2d');
|
|
366
|
-
ctx.translate(0, targetCanvas.height); // move it down again
|
|
367
|
-
ctx.scale(1, -1); // vertical flip
|
|
368
|
-
// where is my image on the big glcanvas?
|
|
369
|
-
var sourceY = glCanvas.height - targetCanvas.height;
|
|
370
|
-
ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0,
|
|
371
|
-
targetCanvas.width, targetCanvas.height);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData
|
|
376
|
-
* API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).
|
|
377
|
-
*
|
|
378
|
-
* @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.
|
|
379
|
-
* @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.
|
|
380
|
-
* @param {Object} pipelineState The 2D target canvas to copy on to.
|
|
381
|
-
*/
|
|
382
|
-
function copyGLTo2DPutImageData(gl, pipelineState) {
|
|
383
|
-
var targetCanvas = pipelineState.targetCanvas, ctx = targetCanvas.getContext('2d'),
|
|
384
|
-
dWidth = pipelineState.destinationWidth,
|
|
385
|
-
dHeight = pipelineState.destinationHeight,
|
|
386
|
-
numBytes = dWidth * dHeight * 4;
|
|
387
|
-
|
|
388
|
-
// eslint-disable-next-line no-undef
|
|
389
|
-
var u8 = new Uint8Array(this.imageBuffer, 0, numBytes);
|
|
390
|
-
// eslint-disable-next-line no-undef
|
|
391
|
-
var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);
|
|
392
|
-
|
|
393
|
-
gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);
|
|
394
|
-
var imgData = new ImageData(u8Clamped, dWidth, dHeight);
|
|
395
|
-
ctx.putImageData(imgData, 0, 0);
|
|
396
|
-
}
|
package/src/globalFabric.js
DELETED