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
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { TClassProperties } from '../typedefs';
|
|
2
|
+
import { BaseFilter } from './BaseFilter';
|
|
3
|
+
import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* MyFilter filter class
|
|
7
|
+
* @example
|
|
8
|
+
* const filter = new MyFilter({
|
|
9
|
+
* add here an example of how to use your filter
|
|
10
|
+
* });
|
|
11
|
+
* object.filters.push(filter);
|
|
12
|
+
* object.applyFilters();
|
|
13
|
+
*/
|
|
14
|
+
export class MyFilter extends BaseFilter {
|
|
15
|
+
/**
|
|
16
|
+
* MyFilter value, from -1 to 1.
|
|
17
|
+
* translated to -255 to 255 for 2d
|
|
18
|
+
* 0.0039215686 is the part of 1 that get translated to 1 in 2d
|
|
19
|
+
* @param {Number} myParameter
|
|
20
|
+
* @default
|
|
21
|
+
*/
|
|
22
|
+
declare myParameter: number;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Apply the MyFilter operation to a Uint8ClampedArray representing the pixels of an image.
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} options
|
|
28
|
+
* @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
|
|
29
|
+
*/
|
|
30
|
+
applyTo2d(options: T2DPipelineState) {
|
|
31
|
+
if (this.myParameter === 0) {
|
|
32
|
+
// early return if the parameter value has a neutral value
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
for (let i = 0; i < options.imageData.data.length; i += 4) {
|
|
37
|
+
// insert here your code to modify data[i]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Return WebGL uniform locations for this filter's shader.
|
|
43
|
+
*
|
|
44
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
45
|
+
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
46
|
+
*/
|
|
47
|
+
getUniformLocations(
|
|
48
|
+
gl: WebGLRenderingContext,
|
|
49
|
+
program: WebGLProgram
|
|
50
|
+
): TWebGLUniformLocationMap {
|
|
51
|
+
return {
|
|
52
|
+
uMyParameter: gl.getUniformLocation(program, 'uMyParameter'),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Send data from this filter to its shader program's uniforms.
|
|
58
|
+
*
|
|
59
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
60
|
+
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
61
|
+
*/
|
|
62
|
+
sendUniformData(
|
|
63
|
+
gl: WebGLRenderingContext,
|
|
64
|
+
uniformLocations: TWebGLUniformLocationMap
|
|
65
|
+
) {
|
|
66
|
+
gl.uniform1f(uniformLocations.uMyParameter, this.myParameter);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static async fromObject(object: any) {
|
|
70
|
+
return new MyFilter(object);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export const myFilterDefaultValues: Partial<TClassProperties<MyFilter>> = {
|
|
75
|
+
type: 'MyFilter',
|
|
76
|
+
fragmentSource: `
|
|
77
|
+
precision highp float;
|
|
78
|
+
uniform sampler2D uTexture;
|
|
79
|
+
uniform float uMyParameter;
|
|
80
|
+
varying vec2 vTexCoord;
|
|
81
|
+
void main() {
|
|
82
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
83
|
+
// add your gl code here
|
|
84
|
+
gl_FragColor = color;
|
|
85
|
+
}
|
|
86
|
+
`,
|
|
87
|
+
myParameter: 0,
|
|
88
|
+
mainParameter: 'myParameter',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
Object.assign(MyFilter.prototype, myFilterDefaultValues);
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { TClassProperties } from '../typedefs';
|
|
2
|
+
import { BaseFilter } from './BaseFilter';
|
|
3
|
+
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
4
|
+
import { classRegistry } from '../util/class_registry';
|
|
5
|
+
/**
|
|
6
|
+
* Brightness filter class
|
|
7
|
+
* @example
|
|
8
|
+
* const filter = new Brightness({
|
|
9
|
+
* brightness: 0.05
|
|
10
|
+
* });
|
|
11
|
+
* object.filters.push(filter);
|
|
12
|
+
* object.applyFilters();
|
|
13
|
+
*/
|
|
14
|
+
export class Brightness extends BaseFilter {
|
|
15
|
+
/**
|
|
16
|
+
* Brightness value, from -1 to 1.
|
|
17
|
+
* translated to -255 to 255 for 2d
|
|
18
|
+
* 0.0039215686 is the part of 1 that get translated to 1 in 2d
|
|
19
|
+
* @param {Number} brightness
|
|
20
|
+
* @default
|
|
21
|
+
*/
|
|
22
|
+
declare brightness: number;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.
|
|
26
|
+
*
|
|
27
|
+
* @param {Object} options
|
|
28
|
+
* @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
|
|
29
|
+
*/
|
|
30
|
+
applyTo2d({ imageData: { data } }: T2DPipelineState) {
|
|
31
|
+
if (this.brightness === 0) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const brightness = Math.round(this.brightness * 255);
|
|
35
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
36
|
+
data[i] = data[i] + brightness;
|
|
37
|
+
data[i + 1] = data[i + 1] + brightness;
|
|
38
|
+
data[i + 2] = data[i + 2] + brightness;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Return WebGL uniform locations for this filter's shader.
|
|
44
|
+
*
|
|
45
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
46
|
+
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
47
|
+
*/
|
|
48
|
+
getUniformLocations(
|
|
49
|
+
gl: WebGLRenderingContext,
|
|
50
|
+
program: WebGLProgram
|
|
51
|
+
): TWebGLUniformLocationMap {
|
|
52
|
+
return {
|
|
53
|
+
uBrightness: gl.getUniformLocation(program, 'uBrightness'),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Send data from this filter to its shader program's uniforms.
|
|
59
|
+
*
|
|
60
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
61
|
+
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
62
|
+
*/
|
|
63
|
+
sendUniformData(
|
|
64
|
+
gl: WebGLRenderingContext,
|
|
65
|
+
uniformLocations: TWebGLUniformLocationMap
|
|
66
|
+
) {
|
|
67
|
+
gl.uniform1f(uniformLocations.uBrightness, this.brightness);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static async fromObject(object: any) {
|
|
71
|
+
return new Brightness(object);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const brightnessDefaultValues: Partial<TClassProperties<Brightness>> = {
|
|
76
|
+
type: 'Brightness',
|
|
77
|
+
fragmentSource: `
|
|
78
|
+
precision highp float;
|
|
79
|
+
uniform sampler2D uTexture;
|
|
80
|
+
uniform float uBrightness;
|
|
81
|
+
varying vec2 vTexCoord;
|
|
82
|
+
void main() {
|
|
83
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
84
|
+
color.rgb += uBrightness;
|
|
85
|
+
gl_FragColor = color;
|
|
86
|
+
}
|
|
87
|
+
`,
|
|
88
|
+
brightness: 0,
|
|
89
|
+
mainParameter: 'brightness',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
Object.assign(Brightness.prototype, brightnessDefaultValues);
|
|
93
|
+
classRegistry.setClass(Brightness);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas 2D filter backend.
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseFilter } from './BaseFilter';
|
|
5
|
+
import { T2DPipelineState, TPipelineResources } from './typedefs';
|
|
6
|
+
|
|
7
|
+
export class Canvas2dFilterBackend {
|
|
8
|
+
/**
|
|
9
|
+
* Experimental. This object is a sort of repository of help layers used to avoid
|
|
10
|
+
* of recreating them during frequent filtering. If you are previewing a filter with
|
|
11
|
+
* a slider you probably do not want to create help layers every filter step.
|
|
12
|
+
* in this object there will be appended some canvases, created once, resized sometimes
|
|
13
|
+
* cleared never. Clearing is left to the developer.
|
|
14
|
+
**/
|
|
15
|
+
resources: TPipelineResources = {};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Apply a set of filters against a source image and draw the filtered output
|
|
19
|
+
* to the provided destination canvas.
|
|
20
|
+
*
|
|
21
|
+
* @param {EnhancedFilter} filters The filter to apply.
|
|
22
|
+
* @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.
|
|
23
|
+
* @param {Number} sourceWidth The width of the source input.
|
|
24
|
+
* @param {Number} sourceHeight The height of the source input.
|
|
25
|
+
* @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.
|
|
26
|
+
*/
|
|
27
|
+
applyFilters(
|
|
28
|
+
filters: BaseFilter[],
|
|
29
|
+
sourceElement: CanvasImageSource,
|
|
30
|
+
sourceWidth: number,
|
|
31
|
+
sourceHeight: number,
|
|
32
|
+
targetCanvas: HTMLCanvasElement
|
|
33
|
+
): T2DPipelineState | void {
|
|
34
|
+
const ctx = targetCanvas.getContext('2d');
|
|
35
|
+
if (!ctx) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);
|
|
39
|
+
const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);
|
|
40
|
+
const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);
|
|
41
|
+
const pipelineState: T2DPipelineState = {
|
|
42
|
+
sourceWidth,
|
|
43
|
+
sourceHeight,
|
|
44
|
+
imageData,
|
|
45
|
+
originalEl: sourceElement,
|
|
46
|
+
originalImageData,
|
|
47
|
+
canvasEl: targetCanvas,
|
|
48
|
+
ctx,
|
|
49
|
+
filterBackend: this,
|
|
50
|
+
};
|
|
51
|
+
filters.forEach((filter) => {
|
|
52
|
+
filter.applyTo(pipelineState);
|
|
53
|
+
});
|
|
54
|
+
const { imageData: imageDataPostFilter } = pipelineState;
|
|
55
|
+
if (
|
|
56
|
+
imageDataPostFilter.width !== sourceWidth ||
|
|
57
|
+
imageDataPostFilter.height !== sourceHeight
|
|
58
|
+
) {
|
|
59
|
+
targetCanvas.width = imageDataPostFilter.width;
|
|
60
|
+
targetCanvas.height = imageDataPostFilter.height;
|
|
61
|
+
}
|
|
62
|
+
ctx.putImageData(imageDataPostFilter, 0, 0);
|
|
63
|
+
return pipelineState;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { TClassProperties } from '../typedefs';
|
|
2
|
+
import { BaseFilter } from './BaseFilter';
|
|
3
|
+
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
4
|
+
import { classRegistry } from '../util/class_registry';
|
|
5
|
+
/**
|
|
6
|
+
* Color Matrix filter class
|
|
7
|
+
* @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
|
|
8
|
+
* @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}
|
|
9
|
+
* @example <caption>Kodachrome filter</caption>
|
|
10
|
+
* const filter = new ColorMatrix({
|
|
11
|
+
* matrix: [
|
|
12
|
+
1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,
|
|
13
|
+
-0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,
|
|
14
|
+
-0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,
|
|
15
|
+
0, 0, 0, 1, 0
|
|
16
|
+
]
|
|
17
|
+
* });
|
|
18
|
+
* object.filters.push(filter);
|
|
19
|
+
* object.applyFilters();
|
|
20
|
+
*/
|
|
21
|
+
export class ColorMatrix extends BaseFilter {
|
|
22
|
+
/**
|
|
23
|
+
* Colormatrix for pixels.
|
|
24
|
+
* array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning
|
|
25
|
+
* outside the -1, 1 range.
|
|
26
|
+
* 0.0039215686 is the part of 1 that get translated to 1 in 2d
|
|
27
|
+
* @param {Array} matrix array of 20 numbers.
|
|
28
|
+
* @default
|
|
29
|
+
*/
|
|
30
|
+
declare matrix: number[];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario
|
|
34
|
+
* to save some calculation
|
|
35
|
+
* @type Boolean
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
declare colorsOnly: boolean;
|
|
39
|
+
|
|
40
|
+
setOptions({ matrix, ...options }: Record<string, any>) {
|
|
41
|
+
if (matrix) {
|
|
42
|
+
// safeguard against mutation
|
|
43
|
+
this.matrix = [...matrix];
|
|
44
|
+
}
|
|
45
|
+
Object.assign(this, options);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.
|
|
50
|
+
*
|
|
51
|
+
* @param {Object} options
|
|
52
|
+
* @param {ImageData} options.imageData The Uint8Array to be filtered.
|
|
53
|
+
*/
|
|
54
|
+
applyTo2d(options: T2DPipelineState) {
|
|
55
|
+
const imageData = options.imageData,
|
|
56
|
+
data = imageData.data,
|
|
57
|
+
m = this.matrix,
|
|
58
|
+
colorsOnly = this.colorsOnly;
|
|
59
|
+
|
|
60
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
61
|
+
const r = data[i];
|
|
62
|
+
const g = data[i + 1];
|
|
63
|
+
const b = data[i + 2];
|
|
64
|
+
if (colorsOnly) {
|
|
65
|
+
data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;
|
|
66
|
+
data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;
|
|
67
|
+
data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;
|
|
68
|
+
} else {
|
|
69
|
+
const a = data[i + 3];
|
|
70
|
+
data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;
|
|
71
|
+
data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;
|
|
72
|
+
data[i + 2] =
|
|
73
|
+
r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;
|
|
74
|
+
data[i + 3] =
|
|
75
|
+
r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Return WebGL uniform locations for this filter's shader.
|
|
82
|
+
*
|
|
83
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
84
|
+
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
85
|
+
*/
|
|
86
|
+
getUniformLocations(
|
|
87
|
+
gl: WebGLRenderingContext,
|
|
88
|
+
program: WebGLProgram
|
|
89
|
+
): TWebGLUniformLocationMap {
|
|
90
|
+
return {
|
|
91
|
+
uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),
|
|
92
|
+
uConstants: gl.getUniformLocation(program, 'uConstants'),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Send data from this filter to its shader program's uniforms.
|
|
98
|
+
*
|
|
99
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
100
|
+
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
101
|
+
*/
|
|
102
|
+
sendUniformData(
|
|
103
|
+
gl: WebGLRenderingContext,
|
|
104
|
+
uniformLocations: TWebGLUniformLocationMap
|
|
105
|
+
) {
|
|
106
|
+
const m = this.matrix,
|
|
107
|
+
matrix = [
|
|
108
|
+
m[0],
|
|
109
|
+
m[1],
|
|
110
|
+
m[2],
|
|
111
|
+
m[3],
|
|
112
|
+
m[5],
|
|
113
|
+
m[6],
|
|
114
|
+
m[7],
|
|
115
|
+
m[8],
|
|
116
|
+
m[10],
|
|
117
|
+
m[11],
|
|
118
|
+
m[12],
|
|
119
|
+
m[13],
|
|
120
|
+
m[15],
|
|
121
|
+
m[16],
|
|
122
|
+
m[17],
|
|
123
|
+
m[18],
|
|
124
|
+
],
|
|
125
|
+
constants = [m[4], m[9], m[14], m[19]];
|
|
126
|
+
gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);
|
|
127
|
+
gl.uniform4fv(uniformLocations.uConstants, constants);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
static async fromObject(object: any) {
|
|
131
|
+
return new ColorMatrix(object);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export const colorMatrixDefaultValues: Partial<TClassProperties<ColorMatrix>> =
|
|
136
|
+
{
|
|
137
|
+
type: 'ColorMatrix',
|
|
138
|
+
fragmentSource: `
|
|
139
|
+
precision highp float;
|
|
140
|
+
uniform sampler2D uTexture;
|
|
141
|
+
varying vec2 vTexCoord;
|
|
142
|
+
uniform mat4 uColorMatrix;
|
|
143
|
+
uniform vec4 uConstants;
|
|
144
|
+
void main() {
|
|
145
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
146
|
+
color *= uColorMatrix;
|
|
147
|
+
color += uConstants;
|
|
148
|
+
gl_FragColor = color;
|
|
149
|
+
}`,
|
|
150
|
+
matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
|
|
151
|
+
mainParameter: 'matrix',
|
|
152
|
+
colorsOnly: true,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
Object.assign(ColorMatrix.prototype, colorMatrixDefaultValues);
|
|
156
|
+
classRegistry.setClass(ColorMatrix);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { ColorMatrix } from './ColorMatrix';
|
|
2
|
+
import { classRegistry } from '../util/class_registry';
|
|
3
|
+
|
|
4
|
+
export function createColorMatrixFilter(key: string, matrix: number[]) {
|
|
5
|
+
return class GeneratedColorMatrix extends ColorMatrix {
|
|
6
|
+
/**
|
|
7
|
+
* Filter type
|
|
8
|
+
* @param {String} type
|
|
9
|
+
* @default
|
|
10
|
+
*/
|
|
11
|
+
type = key;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Colormatrix for the effect
|
|
15
|
+
* array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning
|
|
16
|
+
* outside the -1, 1 range.
|
|
17
|
+
* @param {Array} matrix array of 20 numbers.
|
|
18
|
+
* @default
|
|
19
|
+
*/
|
|
20
|
+
matrix = matrix;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Lock the matrix export for this kind of static, parameter less filters.
|
|
24
|
+
*/
|
|
25
|
+
mainParameter = undefined;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Lock the colormatrix on the color part, skipping alpha
|
|
29
|
+
*/
|
|
30
|
+
colorsOnly = true;
|
|
31
|
+
|
|
32
|
+
static async fromObject(object: any) {
|
|
33
|
+
return new GeneratedColorMatrix(object);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const Brownie = createColorMatrixFilter(
|
|
39
|
+
'Brownie',
|
|
40
|
+
[
|
|
41
|
+
0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,
|
|
42
|
+
0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,
|
|
43
|
+
]
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
classRegistry.setClass(Brownie);
|
|
47
|
+
|
|
48
|
+
export const Vintage = createColorMatrixFilter(
|
|
49
|
+
'Vintage',
|
|
50
|
+
[
|
|
51
|
+
0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,
|
|
52
|
+
0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,
|
|
53
|
+
]
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
classRegistry.setClass(Vintage);
|
|
57
|
+
|
|
58
|
+
export const Kodachrome = createColorMatrixFilter(
|
|
59
|
+
'Kodachrome',
|
|
60
|
+
[
|
|
61
|
+
1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,
|
|
62
|
+
0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,
|
|
63
|
+
]
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
classRegistry.setClass(Kodachrome);
|
|
67
|
+
|
|
68
|
+
export const Technicolor = createColorMatrixFilter(
|
|
69
|
+
'Technicolor',
|
|
70
|
+
[
|
|
71
|
+
1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,
|
|
72
|
+
-0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,
|
|
73
|
+
]
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
classRegistry.setClass(Technicolor);
|
|
77
|
+
|
|
78
|
+
export const Polaroid = createColorMatrixFilter(
|
|
79
|
+
'Polaroid',
|
|
80
|
+
[
|
|
81
|
+
1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,
|
|
82
|
+
1.483, 0, 0, 0, 0, 0, 1, 0,
|
|
83
|
+
]
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
classRegistry.setClass(Polaroid);
|
|
87
|
+
|
|
88
|
+
export const Sepia = createColorMatrixFilter(
|
|
89
|
+
'Sepia',
|
|
90
|
+
[
|
|
91
|
+
0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,
|
|
92
|
+
0, 0, 0, 0, 0, 1, 0,
|
|
93
|
+
]
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
classRegistry.setClass(Sepia);
|
|
97
|
+
|
|
98
|
+
export const BlackWhite = createColorMatrixFilter(
|
|
99
|
+
'BlackWhite',
|
|
100
|
+
[
|
|
101
|
+
1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,
|
|
102
|
+
1, 0,
|
|
103
|
+
]
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
classRegistry.setClass(BlackWhite);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { TClassProperties } from '../typedefs';
|
|
2
|
+
import {
|
|
3
|
+
type AnyFilter,
|
|
4
|
+
BaseFilter,
|
|
5
|
+
type BaseFilterOptions,
|
|
6
|
+
} from './BaseFilter';
|
|
7
|
+
import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
|
|
8
|
+
import { isWebGLPipelineState } from './typedefs';
|
|
9
|
+
import { classRegistry } from '../util/class_registry';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* A container class that knows how to apply a sequence of filters to an input image.
|
|
13
|
+
*/
|
|
14
|
+
// @ts-expect-error
|
|
15
|
+
export class Composed extends BaseFilter {
|
|
16
|
+
/**
|
|
17
|
+
* A non sparse array of filters to apply
|
|
18
|
+
*/
|
|
19
|
+
declare subFilters: AnyFilter[];
|
|
20
|
+
|
|
21
|
+
constructor({
|
|
22
|
+
subFilters = [],
|
|
23
|
+
...options
|
|
24
|
+
}: Partial<BaseFilterOptions & { subFilters: AnyFilter[] }> = {}) {
|
|
25
|
+
super(options);
|
|
26
|
+
this.subFilters = subFilters;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Apply this container's filters to the input image provided.
|
|
31
|
+
*
|
|
32
|
+
* @param {Object} options
|
|
33
|
+
* @param {Number} options.passes The number of filters remaining to be applied.
|
|
34
|
+
*/
|
|
35
|
+
applyTo(options: TWebGLPipelineState | T2DPipelineState) {
|
|
36
|
+
if (isWebGLPipelineState(options)) {
|
|
37
|
+
options.passes += this.subFilters.length - 1;
|
|
38
|
+
}
|
|
39
|
+
this.subFilters.forEach((filter) => {
|
|
40
|
+
filter.applyTo(options);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Serialize this filter into JSON.
|
|
46
|
+
*
|
|
47
|
+
* @returns {Object} A JSON representation of this filter.
|
|
48
|
+
*/
|
|
49
|
+
toObject() {
|
|
50
|
+
return {
|
|
51
|
+
...super.toObject(),
|
|
52
|
+
subFilters: this.subFilters.map((filter) => filter.toObject()),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
isNeutralState() {
|
|
57
|
+
return !this.subFilters.some((filter) => !filter.isNeutralState());
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Deserialize a JSON definition of a ComposedFilter into a concrete instance.
|
|
62
|
+
* @static
|
|
63
|
+
* @param {oject} object Object to create an instance from
|
|
64
|
+
* @param {object} [options]
|
|
65
|
+
* @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
|
|
66
|
+
* @returns {Promise<Composed>}
|
|
67
|
+
*/
|
|
68
|
+
static fromObject(
|
|
69
|
+
object: Record<string, any>,
|
|
70
|
+
options: { signal: AbortSignal }
|
|
71
|
+
) {
|
|
72
|
+
return Promise.all(
|
|
73
|
+
((object.subFilters || []) as AnyFilter[]).map((filter) =>
|
|
74
|
+
classRegistry.getClass(filter.type).fromObject(filter, options)
|
|
75
|
+
)
|
|
76
|
+
).then((enlivedFilters) => new Composed({ subFilters: enlivedFilters }));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const composedDefaultValues: Partial<TClassProperties<Composed>> = {
|
|
81
|
+
type: 'Composed',
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
Object.assign(Composed.prototype, composedDefaultValues);
|
|
85
|
+
classRegistry.setClass(Composed);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { TClassProperties } from '../typedefs';
|
|
2
|
+
import { BaseFilter } from './BaseFilter';
|
|
3
|
+
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
4
|
+
import { classRegistry } from '../util/class_registry';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Contrast filter class
|
|
8
|
+
* @example
|
|
9
|
+
* const filter = new Contrast({
|
|
10
|
+
* contrast: 0.25
|
|
11
|
+
* });
|
|
12
|
+
* object.filters.push(filter);
|
|
13
|
+
* object.applyFilters();
|
|
14
|
+
*/
|
|
15
|
+
export class Contrast extends BaseFilter {
|
|
16
|
+
/**
|
|
17
|
+
* contrast value, range from -1 to 1.
|
|
18
|
+
* @param {Number} contrast
|
|
19
|
+
* @default 0
|
|
20
|
+
*/
|
|
21
|
+
declare contrast: number;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Apply the Contrast operation to a Uint8Array representing the pixels of an image.
|
|
25
|
+
*
|
|
26
|
+
* @param {Object} options
|
|
27
|
+
* @param {ImageData} options.imageData The Uint8Array to be filtered.
|
|
28
|
+
*/
|
|
29
|
+
applyTo2d({ imageData: { data } }: T2DPipelineState) {
|
|
30
|
+
if (this.contrast === 0) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const contrast = Math.floor(this.contrast * 255),
|
|
34
|
+
contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));
|
|
35
|
+
|
|
36
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
37
|
+
data[i] = contrastF * (data[i] - 128) + 128;
|
|
38
|
+
data[i + 1] = contrastF * (data[i + 1] - 128) + 128;
|
|
39
|
+
data[i + 2] = contrastF * (data[i + 2] - 128) + 128;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Return WebGL uniform locations for this filter's shader.
|
|
45
|
+
*
|
|
46
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
47
|
+
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
48
|
+
*/
|
|
49
|
+
getUniformLocations(
|
|
50
|
+
gl: WebGLRenderingContext,
|
|
51
|
+
program: WebGLProgram
|
|
52
|
+
): TWebGLUniformLocationMap {
|
|
53
|
+
return {
|
|
54
|
+
uContrast: gl.getUniformLocation(program, 'uContrast'),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Send data from this filter to its shader program's uniforms.
|
|
60
|
+
*
|
|
61
|
+
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
62
|
+
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
63
|
+
*/
|
|
64
|
+
sendUniformData(
|
|
65
|
+
gl: WebGLRenderingContext,
|
|
66
|
+
uniformLocations: TWebGLUniformLocationMap
|
|
67
|
+
) {
|
|
68
|
+
gl.uniform1f(uniformLocations.uContrast, this.contrast);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
static async fromObject(object: any) {
|
|
72
|
+
return new Contrast(object);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const contrastDefaultValues: Partial<TClassProperties<Contrast>> = {
|
|
77
|
+
type: 'Contrast',
|
|
78
|
+
fragmentSource: `
|
|
79
|
+
precision highp float;
|
|
80
|
+
uniform sampler2D uTexture;
|
|
81
|
+
uniform float uContrast;
|
|
82
|
+
varying vec2 vTexCoord;
|
|
83
|
+
void main() {
|
|
84
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
85
|
+
float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
|
|
86
|
+
color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
|
|
87
|
+
gl_FragColor = color;
|
|
88
|
+
}`,
|
|
89
|
+
contrast: 0,
|
|
90
|
+
mainParameter: 'contrast',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
Object.assign(Contrast.prototype, contrastDefaultValues);
|
|
94
|
+
classRegistry.setClass(Contrast);
|