fabric 5.3.0 → 6.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +11 -0
- package/.babelrcAlt +19 -0
- package/.browserslistrc +5 -0
- package/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.prettierignore +16 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +491 -189
- package/CONTRIBUTING.md +226 -58
- package/README.md +188 -239
- package/bower.json +1 -3
- package/dist/fabric.d.ts +1021 -0
- package/dist/index.cjs +28027 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27964 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +28092 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +15 -0
- package/dist/index.node.mjs +28035 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/Collection.d.ts +126 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +226 -0
- package/dist/src/Intersection.d.ts +100 -0
- package/dist/src/Observable.d.ts +54 -0
- package/dist/src/Pattern.d.ts +104 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +87 -0
- package/dist/src/brushes/BaseBrush.d.ts +105 -0
- package/dist/src/brushes/CircleBrush.d.ts +49 -0
- package/dist/src/brushes/PatternBrush.d.ts +23 -0
- package/dist/src/brushes/PencilBrush.d.ts +92 -0
- package/dist/src/brushes/SprayBrush.d.ts +79 -0
- package/dist/src/cache.d.ts +46 -0
- package/dist/src/canvas/Canvas.d.ts +567 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
- package/dist/src/canvas/StaticCanvas.d.ts +751 -0
- package/dist/src/canvas/TextEditingManager.d.ts +17 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
- package/dist/src/color/Color.d.ts +174 -0
- package/dist/src/color/color_map.d.ts +155 -0
- package/dist/src/color/constants.d.ts +22 -0
- package/dist/src/color/util.d.ts +12 -0
- package/dist/src/config.d.ts +115 -0
- package/dist/src/constants.d.ts +14 -0
- package/dist/src/controls/Control.d.ts +228 -0
- package/dist/src/controls/changeWidth.d.ts +13 -0
- package/dist/src/controls/controls.render.d.ts +29 -0
- package/dist/src/controls/default_controls.d.ts +50 -0
- package/dist/src/controls/drag.d.ts +12 -0
- package/dist/src/controls/polyControl.d.ts +5 -0
- package/dist/src/controls/rotate.d.ts +12 -0
- package/dist/src/controls/scale.d.ts +47 -0
- package/dist/src/controls/scaleSkew.d.ts +39 -0
- package/dist/src/controls/skew.d.ts +33 -0
- package/dist/src/controls/util.d.ts +41 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist/src/env/browser.d.ts +3 -0
- package/dist/src/env/index.d.ts +7 -0
- package/dist/src/env/node.d.ts +3 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +156 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +90 -0
- package/dist/src/filters/Blur.d.ts +50 -0
- package/dist/src/filters/Boilerplate.d.ts +46 -0
- package/dist/src/filters/Brightness.d.ts +46 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +62 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
- package/dist/src/filters/Composed.d.ts +47 -0
- package/dist/src/filters/Contrast.d.ts +44 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/Gamma.d.ts +53 -0
- package/dist/src/filters/Grayscale.d.ts +45 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +54 -0
- package/dist/src/filters/Noise.d.ts +53 -0
- package/dist/src/filters/Pixelate.d.ts +43 -0
- package/dist/src/filters/RemoveColor.d.ts +62 -0
- package/dist/src/filters/Resize.d.ts +134 -0
- package/dist/src/filters/Saturation.d.ts +47 -0
- package/dist/src/filters/Vibrance.d.ts +47 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/WebGLProbe.d.ts +28 -0
- package/dist/src/filters/typedefs.d.ts +49 -0
- package/dist/src/gradient/Gradient.d.ts +149 -0
- package/dist/src/gradient/constants.d.ts +15 -0
- package/dist/src/gradient/parser/index.d.ts +4 -0
- package/dist/src/gradient/parser/misc.d.ts +4 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
- package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist/src/gradient/typedefs.d.ts +93 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
- package/dist/src/mixins/stateful.mixin.d.ts +18 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
- package/dist/src/parkinglot/straighten.d.ts +2 -0
- package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
- package/dist/src/parser/attributes.d.ts +6 -0
- package/dist/src/parser/constants.d.ts +54 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist/src/parser/elementById.d.ts +6 -0
- package/dist/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist/src/parser/elements_parser.d.ts +3 -0
- package/dist/src/parser/getCSSRules.d.ts +7 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
- package/dist/src/parser/getGradientDefs.d.ts +7 -0
- package/dist/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist/src/parser/getSvgRegex.d.ts +2 -0
- package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
- package/dist/src/parser/loadSVGFromString.d.ts +12 -0
- package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
- package/dist/src/parser/normalizeAttr.d.ts +2 -0
- package/dist/src/parser/normalizeValue.d.ts +2 -0
- package/dist/src/parser/parseAttributes.d.ts +9 -0
- package/dist/src/parser/parseElements.d.ts +11 -0
- package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
- package/dist/src/parser/parseSVGDocument.d.ts +15 -0
- package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist/src/parser/parseStyleObject.d.ts +2 -0
- package/dist/src/parser/parseStyleString.d.ts +2 -0
- package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
- package/dist/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist/src/parser/percent.d.ts +9 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist/src/parser/rotateMatrix.d.ts +2 -0
- package/dist/src/parser/scaleMatrix.d.ts +2 -0
- package/dist/src/parser/selectorMatches.d.ts +2 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist/src/parser/skewMatrix.d.ts +2 -0
- package/dist/src/parser/translateMatrix.d.ts +2 -0
- package/dist/src/shapes/ActiveSelection.d.ts +66 -0
- package/dist/src/shapes/Circle.d.ts +80 -0
- package/dist/src/shapes/Ellipse.d.ts +74 -0
- package/dist/src/shapes/Group.d.ts +381 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +322 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +283 -0
- package/dist/src/shapes/Line.d.ts +117 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
- package/dist/src/shapes/Object/Object.d.ts +906 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
- package/dist/src/shapes/Path.d.ts +123 -0
- package/dist/src/shapes/Polygon.d.ts +7 -0
- package/dist/src/shapes/Polyline.d.ts +130 -0
- package/dist/src/shapes/Rect.d.ts +62 -0
- package/dist/src/shapes/Text/StyledText.d.ts +118 -0
- package/dist/src/shapes/Text/Text.d.ts +656 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Textbox.d.ts +170 -0
- package/dist/src/shapes/Triangle.d.ts +17 -0
- package/dist/src/typedefs.d.ts +93 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist/src/util/animation/animate.d.ts +37 -0
- package/dist/src/util/animation/easing.d.ts +130 -0
- package/dist/src/util/animation/types.d.ts +87 -0
- package/dist/src/util/applyMixins.d.ts +8 -0
- package/dist/src/util/class_registry.d.ts +14 -0
- package/dist/src/util/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +40 -0
- package/dist/src/util/dom_request.d.ts +14 -0
- package/dist/src/util/dom_style.d.ts +7 -0
- package/dist/src/util/fireEvent.d.ts +3 -0
- package/dist/src/util/internals/cloneDeep.d.ts +2 -0
- package/dist/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist/src/util/internals/ifNaN.d.ts +8 -0
- package/dist/src/util/internals/index.d.ts +4 -0
- package/dist/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist/src/util/internals/uid.d.ts +2 -0
- package/dist/src/util/lang_class.d.ts +12 -0
- package/dist/src/util/lang_string.d.ts +22 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist/src/util/misc/capValue.d.ts +2 -0
- package/dist/src/util/misc/cos.d.ts +10 -0
- package/dist/src/util/misc/dom.d.ts +28 -0
- package/dist/src/util/misc/findScaleTo.d.ts +29 -0
- package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
- package/dist/src/util/misc/isTransparent.d.ts +11 -0
- package/dist/src/util/misc/matrix.d.ts +92 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist/src/util/misc/objectEnlive.d.ts +56 -0
- package/dist/src/util/misc/objectTransforms.d.ts +68 -0
- package/dist/src/util/misc/pick.d.ts +8 -0
- package/dist/src/util/misc/planeChange.d.ts +84 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
- package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
- package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist/src/util/misc/sin.d.ts +10 -0
- package/dist/src/util/misc/svgParsing.d.ts +53 -0
- package/dist/src/util/misc/textStyles.d.ts +32 -0
- package/dist/src/util/misc/toFixed.d.ts +8 -0
- package/dist/src/util/misc/vectors.d.ts +57 -0
- package/dist/src/util/path.d.ts +108 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +427 -0
- package/index.node.ts +43 -0
- package/index.ts +1 -0
- package/package.json +90 -39
- package/publish.js +0 -26
- package/rollup.config.mjs +79 -0
- package/rollup.test.config.js +24 -0
- package/scripts/build.mjs +50 -0
- package/scripts/buildLock.mjs +115 -0
- package/scripts/buildReporter.mjs +15 -0
- package/scripts/buildStats.mjs +139 -0
- package/scripts/dirname.mjs +14 -0
- package/scripts/index.mjs +679 -0
- package/scripts/transform_files.mjs +504 -0
- package/src/Collection.ts +311 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +294 -0
- package/src/Intersection.ts +273 -0
- package/src/Observable.ts +175 -0
- package/src/Pattern.ts +211 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +215 -0
- package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
- package/src/brushes/CircleBrush.ts +145 -0
- package/src/brushes/PatternBrush.ts +70 -0
- package/src/brushes/PencilBrush.ts +300 -0
- package/src/brushes/SprayBrush.ts +219 -0
- package/src/cache.ts +89 -0
- package/src/canvas/Canvas.ts +1672 -0
- package/src/canvas/SelectableCanvas.ts +1636 -0
- package/src/canvas/StaticCanvas.ts +1709 -0
- package/src/canvas/TextEditingManager.ts +48 -0
- package/src/canvas/canvas_gestures.mixin.ts +207 -0
- package/src/color/Color.ts +404 -0
- package/src/color/color_map.ts +154 -0
- package/src/color/constants.ts +26 -0
- package/src/color/util.ts +32 -0
- package/src/config.ts +159 -0
- package/src/constants.ts +19 -0
- package/src/controls/Control.ts +377 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/controls.render.ts +138 -0
- package/src/controls/default_controls.ts +132 -0
- package/src/controls/drag.ts +31 -0
- package/src/controls/polyControl.ts +135 -0
- package/src/controls/rotate.ts +87 -0
- package/src/controls/scale.ts +277 -0
- package/src/controls/scaleSkew.ts +92 -0
- package/src/controls/skew.ts +242 -0
- package/src/controls/util.ts +154 -0
- package/src/controls/wrapWithFireEvent.ts +25 -0
- package/src/controls/wrapWithFixedAnchor.ts +20 -0
- package/src/env/browser.ts +28 -0
- package/src/env/index.ts +19 -0
- package/src/env/node.ts +52 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
- package/src/filters/BlendColor.ts +258 -0
- package/src/filters/BlendImage.ts +254 -0
- package/src/filters/Blur.ts +202 -0
- package/src/filters/Boilerplate.ts +91 -0
- package/src/filters/Brightness.ts +93 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +156 -0
- package/src/filters/ColorMatrixFilters.ts +106 -0
- package/src/filters/Composed.ts +85 -0
- package/src/filters/Contrast.ts +94 -0
- package/src/filters/Convolute.ts +341 -0
- package/src/filters/FilterBackend.ts +32 -0
- package/src/filters/Gamma.ts +127 -0
- package/src/filters/Grayscale.ts +137 -0
- package/src/filters/HueRotation.ts +66 -0
- package/src/filters/Invert.ts +117 -0
- package/src/filters/Noise.ts +109 -0
- package/src/filters/Pixelate.ts +114 -0
- package/src/filters/RemoveColor.ts +148 -0
- package/src/filters/Resize.ts +540 -0
- package/src/filters/Saturation.ts +100 -0
- package/src/filters/Vibrance.ts +103 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/WebGLProbe.ts +62 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +401 -0
- package/src/gradient/constants.ts +12 -0
- package/src/gradient/parser/index.ts +3 -0
- package/src/gradient/parser/misc.ts +13 -0
- package/src/gradient/parser/parseColorStops.ts +55 -0
- package/src/gradient/parser/parseCoords.ts +73 -0
- package/src/gradient/typedefs.ts +104 -0
- package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
- package/src/mixins/stateful.mixin.ts +104 -0
- package/src/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +162 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +118 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +23 -0
- package/src/parser/elementMatchesRule.ts +19 -0
- package/src/parser/elements_parser.ts +191 -0
- package/src/parser/getCSSRules.ts +62 -0
- package/src/parser/getGlobalStylesForElement.ts +19 -0
- package/src/parser/getGradientDefs.ts +32 -0
- package/src/parser/getMultipleNodes.ts +15 -0
- package/src/parser/getSvgRegex.ts +5 -0
- package/src/parser/hasAncestorWithNodeName.ts +14 -0
- package/src/parser/loadSVGFromString.ts +26 -0
- package/src/parser/loadSVGFromURL.ts +40 -0
- package/src/parser/normalizeAttr.ts +10 -0
- package/src/parser/normalizeValue.ts +63 -0
- package/src/parser/parseAttributes.ts +90 -0
- package/src/parser/parseElements.ts +28 -0
- package/src/parser/parseFontDeclaration.ts +44 -0
- package/src/parser/parsePointsAttribute.ts +36 -0
- package/src/parser/parseSVGDocument.ts +106 -0
- package/src/parser/parseStyleAttribute.ts +27 -0
- package/src/parser/parseStyleObject.ts +15 -0
- package/src/parser/parseStyleString.ts +16 -0
- package/src/parser/parseTransformAttribute.ts +155 -0
- package/src/parser/parseUseDirectives.ts +79 -0
- package/src/parser/percent.ts +27 -0
- package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
- package/src/parser/rotateMatrix.ts +21 -0
- package/src/parser/scaleMatrix.ts +9 -0
- package/src/parser/selectorMatches.ts +25 -0
- package/src/parser/setStrokeFillOpacity.ts +40 -0
- package/src/parser/skewMatrix.ts +6 -0
- package/src/parser/translateMatrix.ts +8 -0
- package/src/shapes/ActiveSelection.ts +157 -0
- package/src/shapes/Circle.ts +205 -0
- package/src/shapes/Ellipse.ts +154 -0
- package/src/shapes/Group.ts +1053 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
- package/src/shapes/IText/IText.ts +666 -0
- package/src/shapes/IText/ITextBehavior.ts +1055 -0
- package/src/shapes/IText/ITextClickBehavior.ts +321 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +789 -0
- package/src/shapes/Line.ts +329 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +19 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +645 -0
- package/src/shapes/Object/Object.ts +1896 -0
- package/src/shapes/Object/ObjectGeometry.ts +830 -0
- package/src/shapes/Object/ObjectOrigin.ts +354 -0
- package/src/shapes/Object/StackedObject.ts +191 -0
- package/src/shapes/Object/defaultValues.ts +112 -0
- package/src/shapes/Path.ts +395 -0
- package/src/shapes/Polygon.ts +19 -0
- package/src/shapes/Polyline.ts +333 -0
- package/src/shapes/Rect.ts +199 -0
- package/src/shapes/Text/StyledText.ts +319 -0
- package/src/shapes/Text/Text.ts +1948 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Textbox.ts +471 -0
- package/src/shapes/Triangle.ts +45 -0
- package/src/typedefs.ts +119 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +28 -0
- package/src/util/animation/AnimationRegistry.ts +58 -0
- package/src/util/animation/ArrayAnimation.ts +27 -0
- package/src/util/animation/ColorAnimation.ts +74 -0
- package/src/util/animation/ValueAnimation.ts +29 -0
- package/src/util/animation/animate.ts +74 -0
- package/src/util/animation/easing.ts +327 -0
- package/src/util/animation/types.ts +136 -0
- package/src/util/applyMixins.ts +22 -0
- package/src/util/class_registry.ts +54 -0
- package/src/util/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +138 -0
- package/src/util/dom_request.ts +64 -0
- package/src/util/dom_style.ts +20 -0
- package/src/util/fireEvent.ts +15 -0
- package/src/util/internals/cloneDeep.ts +2 -0
- package/src/util/internals/getRandomInt.ts +8 -0
- package/src/util/internals/ifNaN.ts +9 -0
- package/src/util/internals/index.ts +3 -0
- package/src/util/internals/removeFromArray.ts +14 -0
- package/src/util/internals/uid.ts +3 -0
- package/src/util/lang_class.ts +90 -0
- package/src/util/lang_string.ts +79 -0
- package/src/util/misc/boundingBoxFromPoints.ts +37 -0
- package/src/util/misc/capValue.ts +2 -0
- package/src/util/misc/cos.ts +24 -0
- package/src/util/misc/dom.ts +50 -0
- package/src/util/misc/findScaleTo.ts +44 -0
- package/src/util/misc/groupSVGElements.ts +15 -0
- package/src/util/misc/isTransparent.ts +51 -0
- package/src/util/misc/matrix.ts +207 -0
- package/src/util/misc/mergeClipPaths.ts +40 -0
- package/src/util/misc/objectEnlive.ts +189 -0
- package/src/util/misc/objectTransforms.ts +129 -0
- package/src/util/misc/pick.ts +17 -0
- package/src/util/misc/planeChange.ts +136 -0
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
- package/src/util/misc/projectStroke/index.ts +53 -0
- package/src/util/misc/projectStroke/types.ts +24 -0
- package/src/util/misc/radiansDegreesConversion.ts +18 -0
- package/src/util/misc/resolveOrigin.ts +22 -0
- package/src/util/misc/rotatePoint.ts +15 -0
- package/src/util/misc/sin.ts +26 -0
- package/src/util/misc/svgParsing.ts +181 -0
- package/src/util/misc/textStyles.ts +133 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path.ts +941 -0
- package/src/util/transform_matrix_removal.ts +60 -0
- package/src/util/types.ts +78 -0
- package/tsconfig.json +106 -0
- package/HEADER.js +0 -203
- package/build.js +0 -287
- package/dist/fabric.js +0 -31187
- package/dist/fabric.min.js +0 -1
- package/old-travis-reference.yml +0 -97
- package/src/brushes/circle_brush.class.js +0 -144
- package/src/brushes/pattern_brush.class.js +0 -61
- package/src/brushes/pencil_brush.class.js +0 -310
- package/src/brushes/spray_brush.class.js +0 -219
- package/src/canvas.class.js +0 -1312
- package/src/color.class.js +0 -636
- package/src/control.class.js +0 -339
- package/src/controls.actions.js +0 -740
- package/src/controls.render.js +0 -99
- package/src/elements_parser.js +0 -152
- package/src/filters/2d_backend.class.js +0 -65
- package/src/filters/blendcolor_filter.class.js +0 -251
- package/src/filters/blendimage_filter.class.js +0 -247
- package/src/filters/blur_filter.class.js +0 -217
- package/src/filters/brightness_filter.class.js +0 -113
- package/src/filters/colormatrix_filter.class.js +0 -159
- package/src/filters/composed_filter.class.js +0 -72
- package/src/filters/contrast_filter.class.js +0 -113
- package/src/filters/convolute_filter.class.js +0 -352
- package/src/filters/filter_boilerplate.js +0 -111
- package/src/filters/filter_generator.js +0 -85
- package/src/filters/gamma_filter.class.js +0 -136
- package/src/filters/grayscale_filter.class.js +0 -154
- package/src/filters/hue_rotation.class.js +0 -107
- package/src/filters/invert_filter.class.js +0 -111
- package/src/filters/noise_filter.class.js +0 -134
- package/src/filters/pixelate_filter.class.js +0 -137
- package/src/filters/removecolor_filter.class.js +0 -173
- package/src/filters/resize_filter.class.js +0 -490
- package/src/filters/saturate_filter.class.js +0 -119
- package/src/filters/vibrance_filter.class.js +0 -122
- package/src/filters/webgl_backend.class.js +0 -396
- package/src/globalFabric.js +0 -4
- package/src/gradient.class.js +0 -490
- package/src/intersection.class.js +0 -172
- package/src/log.js +0 -11
- package/src/mixins/animation.mixin.js +0 -231
- package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
- package/src/mixins/canvas_events.mixin.js +0 -974
- package/src/mixins/canvas_gestures.mixin.js +0 -149
- package/src/mixins/canvas_grouping.mixin.js +0 -177
- package/src/mixins/canvas_serialization.mixin.js +0 -228
- package/src/mixins/collection.mixin.js +0 -170
- package/src/mixins/default_controls.js +0 -114
- package/src/mixins/itext.svg_export.js +0 -241
- package/src/mixins/itext_behavior.mixin.js +0 -940
- package/src/mixins/itext_click_behavior.mixin.js +0 -278
- package/src/mixins/itext_key_behavior.mixin.js +0 -694
- package/src/mixins/object.svg_export.js +0 -258
- package/src/mixins/object_geometry.mixin.js +0 -683
- package/src/mixins/object_interactivity.mixin.js +0 -314
- package/src/mixins/object_origin.mixin.js +0 -255
- package/src/mixins/object_stacking.mixin.js +0 -80
- package/src/mixins/object_straightening.mixin.js +0 -80
- package/src/mixins/observable.mixin.js +0 -141
- package/src/mixins/shared_methods.mixin.js +0 -94
- package/src/mixins/stateful.mixin.js +0 -107
- package/src/mixins/text_style.mixin.js +0 -324
- package/src/parser.js +0 -1090
- package/src/pattern.class.js +0 -189
- package/src/point.class.js +0 -337
- package/src/shadow.class.js +0 -195
- package/src/shapes/active_selection.class.js +0 -155
- package/src/shapes/circle.class.js +0 -210
- package/src/shapes/ellipse.class.js +0 -181
- package/src/shapes/group.class.js +0 -593
- package/src/shapes/image.class.js +0 -764
- package/src/shapes/itext.class.js +0 -526
- package/src/shapes/line.class.js +0 -324
- package/src/shapes/object.class.js +0 -2008
- package/src/shapes/path.class.js +0 -384
- package/src/shapes/polygon.class.js +0 -81
- package/src/shapes/polyline.class.js +0 -268
- package/src/shapes/rect.class.js +0 -187
- package/src/shapes/text.class.js +0 -1696
- package/src/shapes/textbox.class.js +0 -461
- package/src/shapes/triangle.class.js +0 -93
- package/src/static_canvas.class.js +0 -1881
- package/src/util/anim_ease.js +0 -398
- package/src/util/animate.js +0 -254
- package/src/util/animate_color.js +0 -74
- package/src/util/dom_event.js +0 -50
- package/src/util/dom_misc.js +0 -300
- package/src/util/dom_request.js +0 -54
- package/src/util/dom_style.js +0 -70
- package/src/util/lang_array.js +0 -94
- package/src/util/lang_class.js +0 -115
- package/src/util/lang_object.js +0 -75
- package/src/util/lang_string.js +0 -110
- package/src/util/misc.js +0 -1330
- package/src/util/named_accessors.mixin.js +0 -428
- package/src/util/path.js +0 -829
|
@@ -1,64 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* Root filter class from which all filter classes inherit from
|
|
12
|
-
* @class fabric.Image.filters.BaseFilter
|
|
13
|
-
* @memberOf fabric.Image.filters
|
|
14
|
-
*/
|
|
15
|
-
fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {
|
|
1
|
+
import { createCanvasElement } from '../util/misc/dom';
|
|
2
|
+
import type {
|
|
3
|
+
T2DPipelineState,
|
|
4
|
+
TWebGLAttributeLocationMap,
|
|
5
|
+
TWebGLPipelineState,
|
|
6
|
+
TWebGLProgramCacheItem,
|
|
7
|
+
TWebGLUniformLocationMap,
|
|
8
|
+
} from './typedefs';
|
|
9
|
+
import { isWebGLPipelineState } from './typedefs';
|
|
10
|
+
import { WebGLPrecision, webGLProbe } from './WebGLProbe';
|
|
16
11
|
|
|
12
|
+
const highPsourceCode = `precision ${WebGLPrecision.high} float`;
|
|
13
|
+
|
|
14
|
+
export type AbstractBaseFilterOptions<T> = {
|
|
15
|
+
mainParameter: string;
|
|
16
|
+
vertexSource: string;
|
|
17
|
+
fragmentSource: T;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type BaseFilterOptions = AbstractBaseFilterOptions<string>;
|
|
21
|
+
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
23
|
+
export interface AnyFilter
|
|
24
|
+
extends AbstractBaseFilter<string | Record<string, string>> {}
|
|
25
|
+
|
|
26
|
+
export abstract class AbstractBaseFilter<T> {
|
|
17
27
|
/**
|
|
18
28
|
* Filter type
|
|
19
29
|
* @param {String} type
|
|
20
30
|
* @default
|
|
21
31
|
*/
|
|
22
|
-
type:
|
|
32
|
+
declare type: string;
|
|
23
33
|
|
|
24
34
|
/**
|
|
25
35
|
* Array of attributes to send with buffers. do not modify
|
|
26
36
|
* @private
|
|
27
37
|
*/
|
|
38
|
+
declare vertexSource: string;
|
|
28
39
|
|
|
29
|
-
|
|
30
|
-
'varying vec2 vTexCoord;\n' +
|
|
31
|
-
'void main() {\n' +
|
|
32
|
-
'vTexCoord = aPosition;\n' +
|
|
33
|
-
'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n' +
|
|
34
|
-
'}',
|
|
35
|
-
|
|
36
|
-
fragmentSource: 'precision highp float;\n' +
|
|
37
|
-
'varying vec2 vTexCoord;\n' +
|
|
38
|
-
'uniform sampler2D uTexture;\n' +
|
|
39
|
-
'void main() {\n' +
|
|
40
|
-
'gl_FragColor = texture2D(uTexture, vTexCoord);\n' +
|
|
41
|
-
'}',
|
|
40
|
+
declare fragmentSource: T;
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* Name of the parameter that can be changed in the filter.
|
|
44
|
+
* Some filters have more than one parameter and there is no
|
|
45
|
+
* mainParameter
|
|
46
|
+
* @private
|
|
46
47
|
*/
|
|
47
|
-
|
|
48
|
-
if (options) {
|
|
49
|
-
this.setOptions(options);
|
|
50
|
-
}
|
|
51
|
-
},
|
|
48
|
+
declare mainParameter?: keyof this;
|
|
52
49
|
|
|
53
50
|
/**
|
|
54
|
-
*
|
|
51
|
+
* Constructor
|
|
55
52
|
* @param {Object} [options] Options object
|
|
56
53
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
54
|
+
constructor(
|
|
55
|
+
options: Partial<AbstractBaseFilterOptions<T>> & Record<string, any> = {}
|
|
56
|
+
) {
|
|
57
|
+
Object.assign(this, options);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
abstract getFragmentSource(): string;
|
|
62
61
|
|
|
63
62
|
/**
|
|
64
63
|
* Compile this filter's shader program.
|
|
@@ -67,59 +66,66 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
67
66
|
* @param {String} fragmentSource fragmentShader source for compilation
|
|
68
67
|
* @param {String} vertexSource vertexShader source for compilation
|
|
69
68
|
*/
|
|
70
|
-
createProgram
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
createProgram(
|
|
70
|
+
gl: WebGLRenderingContext,
|
|
71
|
+
fragmentSource: string = this.getFragmentSource(),
|
|
72
|
+
vertexSource: string = this.vertexSource
|
|
73
|
+
) {
|
|
74
|
+
if (
|
|
75
|
+
webGLProbe.webGLPrecision &&
|
|
76
|
+
webGLProbe.webGLPrecision !== WebGLPrecision.high
|
|
77
|
+
) {
|
|
74
78
|
fragmentSource = fragmentSource.replace(
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
new RegExp(highPsourceCode, 'g'),
|
|
80
|
+
highPsourceCode.replace(WebGLPrecision.high, webGLProbe.webGLPrecision)
|
|
77
81
|
);
|
|
78
82
|
}
|
|
79
|
-
|
|
83
|
+
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
|
|
84
|
+
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
85
|
+
const program = gl.createProgram();
|
|
86
|
+
|
|
87
|
+
if (!vertexShader || !fragmentShader || !program) {
|
|
88
|
+
throw new Error('Vertex, fragment shader or program creation error');
|
|
89
|
+
}
|
|
80
90
|
gl.shaderSource(vertexShader, vertexSource);
|
|
81
91
|
gl.compileShader(vertexShader);
|
|
82
92
|
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
|
|
83
93
|
throw new Error(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
`Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(
|
|
95
|
+
vertexShader
|
|
96
|
+
)}`
|
|
87
97
|
);
|
|
88
98
|
}
|
|
89
99
|
|
|
90
|
-
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
91
100
|
gl.shaderSource(fragmentShader, fragmentSource);
|
|
92
101
|
gl.compileShader(fragmentShader);
|
|
93
102
|
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
|
|
94
103
|
throw new Error(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
`Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(
|
|
105
|
+
fragmentShader
|
|
106
|
+
)}`
|
|
98
107
|
);
|
|
99
108
|
}
|
|
100
109
|
|
|
101
|
-
var program = gl.createProgram();
|
|
102
110
|
gl.attachShader(program, vertexShader);
|
|
103
111
|
gl.attachShader(program, fragmentShader);
|
|
104
112
|
gl.linkProgram(program);
|
|
105
113
|
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
106
114
|
throw new Error(
|
|
107
115
|
// eslint-disable-next-line prefer-template
|
|
108
|
-
'Shader link error for "${this.type}" ' +
|
|
109
|
-
gl.getProgramInfoLog(program)
|
|
116
|
+
'Shader link error for "${this.type}" ' + gl.getProgramInfoLog(program)
|
|
110
117
|
);
|
|
111
118
|
}
|
|
112
119
|
|
|
113
|
-
|
|
114
|
-
var uniformLocations = this.getUniformLocations(gl, program) || { };
|
|
120
|
+
const uniformLocations = this.getUniformLocations(gl, program) || {};
|
|
115
121
|
uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');
|
|
116
122
|
uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');
|
|
117
123
|
return {
|
|
118
|
-
program
|
|
119
|
-
attributeLocations:
|
|
120
|
-
uniformLocations
|
|
124
|
+
program,
|
|
125
|
+
attributeLocations: this.getAttributeLocations(gl, program),
|
|
126
|
+
uniformLocations,
|
|
121
127
|
};
|
|
122
|
-
}
|
|
128
|
+
}
|
|
123
129
|
|
|
124
130
|
/**
|
|
125
131
|
* Return a map of attribute names to WebGLAttributeLocation objects.
|
|
@@ -128,11 +134,14 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
128
134
|
* @param {WebGLShaderProgram} program The shader program from which to take attribute locations.
|
|
129
135
|
* @returns {Object} A map of attribute names to attribute locations.
|
|
130
136
|
*/
|
|
131
|
-
getAttributeLocations
|
|
137
|
+
getAttributeLocations(
|
|
138
|
+
gl: WebGLRenderingContext,
|
|
139
|
+
program: WebGLProgram
|
|
140
|
+
): TWebGLAttributeLocationMap {
|
|
132
141
|
return {
|
|
133
142
|
aPosition: gl.getAttribLocation(program, 'aPosition'),
|
|
134
143
|
};
|
|
135
|
-
}
|
|
144
|
+
}
|
|
136
145
|
|
|
137
146
|
/**
|
|
138
147
|
* Return a map of uniform names to WebGLUniformLocation objects.
|
|
@@ -143,10 +152,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
143
152
|
* @param {WebGLShaderProgram} program The shader program from which to take uniform locations.
|
|
144
153
|
* @returns {Object} A map of uniform names to uniform locations.
|
|
145
154
|
*/
|
|
146
|
-
getUniformLocations
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
155
|
+
abstract getUniformLocations(
|
|
156
|
+
gl: WebGLRenderingContext,
|
|
157
|
+
program: WebGLProgram
|
|
158
|
+
): TWebGLUniformLocationMap;
|
|
150
159
|
|
|
151
160
|
/**
|
|
152
161
|
* Send attribute data from this filter to its shader program on the GPU.
|
|
@@ -154,41 +163,53 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
154
163
|
* @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
|
|
155
164
|
* @param {Object} attributeLocations A map of shader attribute names to their locations.
|
|
156
165
|
*/
|
|
157
|
-
sendAttributeData
|
|
158
|
-
|
|
159
|
-
|
|
166
|
+
sendAttributeData(
|
|
167
|
+
gl: WebGLRenderingContext,
|
|
168
|
+
attributeLocations: Record<string, number>,
|
|
169
|
+
aPositionData: Float32Array
|
|
170
|
+
) {
|
|
171
|
+
const attributeLocation = attributeLocations.aPosition;
|
|
172
|
+
const buffer = gl.createBuffer();
|
|
160
173
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
161
174
|
gl.enableVertexAttribArray(attributeLocation);
|
|
162
175
|
gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);
|
|
163
176
|
gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);
|
|
164
|
-
}
|
|
177
|
+
}
|
|
165
178
|
|
|
166
|
-
_setupFrameBuffer:
|
|
167
|
-
|
|
179
|
+
_setupFrameBuffer(options: TWebGLPipelineState) {
|
|
180
|
+
const gl = options.context;
|
|
168
181
|
if (options.passes > 1) {
|
|
169
|
-
width = options.destinationWidth;
|
|
170
|
-
height = options.destinationHeight;
|
|
182
|
+
const width = options.destinationWidth;
|
|
183
|
+
const height = options.destinationHeight;
|
|
171
184
|
if (options.sourceWidth !== width || options.sourceHeight !== height) {
|
|
172
185
|
gl.deleteTexture(options.targetTexture);
|
|
173
|
-
options.targetTexture = options.filterBackend.createTexture(
|
|
186
|
+
options.targetTexture = options.filterBackend.createTexture(
|
|
187
|
+
gl,
|
|
188
|
+
width,
|
|
189
|
+
height
|
|
190
|
+
);
|
|
174
191
|
}
|
|
175
|
-
gl.framebufferTexture2D(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
192
|
+
gl.framebufferTexture2D(
|
|
193
|
+
gl.FRAMEBUFFER,
|
|
194
|
+
gl.COLOR_ATTACHMENT0,
|
|
195
|
+
gl.TEXTURE_2D,
|
|
196
|
+
options.targetTexture,
|
|
197
|
+
0
|
|
198
|
+
);
|
|
199
|
+
} else {
|
|
179
200
|
// draw last filter on canvas and not to framebuffer.
|
|
180
201
|
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
181
202
|
gl.finish();
|
|
182
203
|
}
|
|
183
|
-
}
|
|
204
|
+
}
|
|
184
205
|
|
|
185
|
-
_swapTextures:
|
|
206
|
+
_swapTextures(options: TWebGLPipelineState) {
|
|
186
207
|
options.passes--;
|
|
187
208
|
options.pass++;
|
|
188
|
-
|
|
209
|
+
const temp = options.targetTexture;
|
|
189
210
|
options.targetTexture = options.sourceTexture;
|
|
190
211
|
options.sourceTexture = temp;
|
|
191
|
-
}
|
|
212
|
+
}
|
|
192
213
|
|
|
193
214
|
/**
|
|
194
215
|
* Generic isNeutral implementation for one parameter based filters.
|
|
@@ -197,26 +218,24 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
197
218
|
* Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )
|
|
198
219
|
* @param {Object} options
|
|
199
220
|
**/
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
222
|
+
isNeutralState(options?: any): boolean {
|
|
223
|
+
const main = this.mainParameter,
|
|
224
|
+
// @ts-ignore ts you are lying
|
|
225
|
+
proto = this.__proto__;
|
|
203
226
|
if (main) {
|
|
204
|
-
if (Array.isArray(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
return _class[main] === this[main];
|
|
227
|
+
if (Array.isArray(proto[main]) && Array.isArray(this[main])) {
|
|
228
|
+
return proto[main].every(
|
|
229
|
+
// @ts-ignore requires some kind of dynamic type thing, or delete, or leave it ignored
|
|
230
|
+
(value: any, i: number) => value === this[main][i]
|
|
231
|
+
);
|
|
232
|
+
} else {
|
|
233
|
+
return proto[main] === this[main];
|
|
214
234
|
}
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
235
|
+
} else {
|
|
217
236
|
return false;
|
|
218
237
|
}
|
|
219
|
-
}
|
|
238
|
+
}
|
|
220
239
|
|
|
221
240
|
/**
|
|
222
241
|
* Apply this filter to the input image data provided.
|
|
@@ -231,29 +250,36 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
231
250
|
* @param {WebGLRenderingContext} options.context The GL context used for rendering.
|
|
232
251
|
* @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
|
|
233
252
|
*/
|
|
234
|
-
applyTo:
|
|
235
|
-
if (options
|
|
253
|
+
applyTo(options: TWebGLPipelineState | T2DPipelineState) {
|
|
254
|
+
if (isWebGLPipelineState(options)) {
|
|
236
255
|
this._setupFrameBuffer(options);
|
|
237
256
|
this.applyToWebGL(options);
|
|
238
257
|
this._swapTextures(options);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
258
|
+
} else {
|
|
241
259
|
this.applyTo2d(options);
|
|
242
260
|
}
|
|
243
|
-
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
abstract applyTo2d(options: T2DPipelineState): void;
|
|
264
|
+
|
|
265
|
+
getCacheKey() {
|
|
266
|
+
return this.type;
|
|
267
|
+
}
|
|
244
268
|
|
|
245
269
|
/**
|
|
246
270
|
* Retrieves the cached shader.
|
|
247
271
|
* @param {Object} options
|
|
248
272
|
* @param {WebGLRenderingContext} options.context The GL context used for rendering.
|
|
249
273
|
* @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
|
|
274
|
+
* @return {WebGLProgram} the compiled program shader
|
|
250
275
|
*/
|
|
251
|
-
retrieveShader:
|
|
252
|
-
|
|
253
|
-
|
|
276
|
+
retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {
|
|
277
|
+
const key = this.getCacheKey();
|
|
278
|
+
if (!options.programCache[key]) {
|
|
279
|
+
options.programCache[key] = this.createProgram(options.context);
|
|
254
280
|
}
|
|
255
|
-
return options.programCache[
|
|
256
|
-
}
|
|
281
|
+
return options.programCache[key];
|
|
282
|
+
}
|
|
257
283
|
|
|
258
284
|
/**
|
|
259
285
|
* Apply this filter using webgl.
|
|
@@ -267,13 +293,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
267
293
|
* @param {WebGLRenderingContext} options.context The GL context used for rendering.
|
|
268
294
|
* @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
|
|
269
295
|
*/
|
|
270
|
-
applyToWebGL:
|
|
271
|
-
|
|
272
|
-
|
|
296
|
+
applyToWebGL(options: TWebGLPipelineState) {
|
|
297
|
+
const gl = options.context;
|
|
298
|
+
const shader = this.retrieveShader(options);
|
|
273
299
|
if (options.pass === 0 && options.originalTexture) {
|
|
274
300
|
gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
301
|
+
} else {
|
|
277
302
|
gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);
|
|
278
303
|
}
|
|
279
304
|
gl.useProgram(shader.program);
|
|
@@ -285,28 +310,34 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
285
310
|
this.sendUniformData(gl, shader.uniformLocations);
|
|
286
311
|
gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);
|
|
287
312
|
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
288
|
-
}
|
|
313
|
+
}
|
|
289
314
|
|
|
290
|
-
bindAdditionalTexture
|
|
315
|
+
bindAdditionalTexture(
|
|
316
|
+
gl: WebGLRenderingContext,
|
|
317
|
+
texture: WebGLTexture,
|
|
318
|
+
textureUnit: number
|
|
319
|
+
) {
|
|
291
320
|
gl.activeTexture(textureUnit);
|
|
292
321
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
293
322
|
// reset active texture to 0 as usual
|
|
294
323
|
gl.activeTexture(gl.TEXTURE0);
|
|
295
|
-
}
|
|
324
|
+
}
|
|
296
325
|
|
|
297
|
-
unbindAdditionalTexture:
|
|
326
|
+
unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {
|
|
298
327
|
gl.activeTexture(textureUnit);
|
|
299
328
|
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
300
329
|
gl.activeTexture(gl.TEXTURE0);
|
|
301
|
-
}
|
|
330
|
+
}
|
|
302
331
|
|
|
303
|
-
getMainParameter
|
|
304
|
-
return this[this.mainParameter];
|
|
305
|
-
}
|
|
332
|
+
getMainParameter() {
|
|
333
|
+
return this.mainParameter ? this[this.mainParameter] : undefined;
|
|
334
|
+
}
|
|
306
335
|
|
|
307
|
-
setMainParameter:
|
|
308
|
-
this
|
|
309
|
-
|
|
336
|
+
setMainParameter(value: any) {
|
|
337
|
+
if (this.mainParameter) {
|
|
338
|
+
this[this.mainParameter] = value;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
310
341
|
|
|
311
342
|
/**
|
|
312
343
|
* Send uniform data from this filter to its shader program on the GPU.
|
|
@@ -316,47 +347,68 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
|
|
|
316
347
|
* @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
|
|
317
348
|
* @param {Object} uniformLocations A map of shader uniform names to their locations.
|
|
318
349
|
*/
|
|
319
|
-
sendUniformData
|
|
320
|
-
|
|
321
|
-
|
|
350
|
+
abstract sendUniformData(
|
|
351
|
+
gl: WebGLRenderingContext,
|
|
352
|
+
uniformLocations: TWebGLUniformLocationMap
|
|
353
|
+
): void;
|
|
322
354
|
|
|
323
355
|
/**
|
|
324
356
|
* If needed by a 2d filter, this functions can create an helper canvas to be used
|
|
325
357
|
* remember that options.targetCanvas is available for use till end of chain.
|
|
326
358
|
*/
|
|
327
|
-
createHelpLayer:
|
|
359
|
+
createHelpLayer(options: T2DPipelineState) {
|
|
328
360
|
if (!options.helpLayer) {
|
|
329
|
-
|
|
361
|
+
const helpLayer = createCanvasElement();
|
|
330
362
|
helpLayer.width = options.sourceWidth;
|
|
331
363
|
helpLayer.height = options.sourceHeight;
|
|
332
364
|
options.helpLayer = helpLayer;
|
|
333
365
|
}
|
|
334
|
-
}
|
|
366
|
+
}
|
|
335
367
|
|
|
336
368
|
/**
|
|
337
369
|
* Returns object representation of an instance
|
|
338
370
|
* @return {Object} Object representation of an instance
|
|
339
371
|
*/
|
|
340
|
-
toObject
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
372
|
+
toObject() {
|
|
373
|
+
const mainP = this.mainParameter;
|
|
374
|
+
return {
|
|
375
|
+
type: this.type,
|
|
376
|
+
...(mainP ? { [mainP]: this[mainP] } : {}),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
347
379
|
|
|
348
380
|
/**
|
|
349
381
|
* Returns a JSON representation of an instance
|
|
350
382
|
* @return {Object} JSON
|
|
351
383
|
*/
|
|
352
|
-
toJSON
|
|
384
|
+
toJSON() {
|
|
353
385
|
// delegate, not alias
|
|
354
386
|
return this.toObject();
|
|
355
387
|
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
export abstract class BaseFilter extends AbstractBaseFilter<string> {
|
|
391
|
+
getFragmentSource() {
|
|
392
|
+
return this.fragmentSource;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
Object.assign(AbstractBaseFilter.prototype, {
|
|
397
|
+
vertexSource: `
|
|
398
|
+
attribute vec2 aPosition;
|
|
399
|
+
varying vec2 vTexCoord;
|
|
400
|
+
void main() {
|
|
401
|
+
vTexCoord = aPosition;
|
|
402
|
+
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
|
|
403
|
+
}`,
|
|
356
404
|
});
|
|
357
405
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
406
|
+
Object.assign(BaseFilter.prototype, {
|
|
407
|
+
fragmentSource: `
|
|
408
|
+
${highPsourceCode};
|
|
409
|
+
varying vec2 vTexCoord;
|
|
410
|
+
uniform sampler2D uTexture;
|
|
411
|
+
void main() {
|
|
412
|
+
gl_FragColor = texture2D(uTexture, vTexCoord);
|
|
413
|
+
}`,
|
|
414
|
+
});
|