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.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,341 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { AbstractBaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+
6
+ /**
7
+ * Adapted from <a href="http://www.html5rocks.com/en/tutorials/canvas/imagefilters/">html5rocks article</a>
8
+ * @example <caption>Sharpen filter</caption>
9
+ * const filter = new Convolute({
10
+ * matrix: [ 0, -1, 0,
11
+ * -1, 5, -1,
12
+ * 0, -1, 0 ]
13
+ * });
14
+ * object.filters.push(filter);
15
+ * object.applyFilters();
16
+ * canvas.renderAll();
17
+ * @example <caption>Blur filter</caption>
18
+ * const filter = new Convolute({
19
+ * matrix: [ 1/9, 1/9, 1/9,
20
+ * 1/9, 1/9, 1/9,
21
+ * 1/9, 1/9, 1/9 ]
22
+ * });
23
+ * object.filters.push(filter);
24
+ * object.applyFilters();
25
+ * canvas.renderAll();
26
+ * @example <caption>Emboss filter</caption>
27
+ * const filter = new Convolute({
28
+ * matrix: [ 1, 1, 1,
29
+ * 1, 0.7, -1,
30
+ * -1, -1, -1 ]
31
+ * });
32
+ * object.filters.push(filter);
33
+ * object.applyFilters();
34
+ * canvas.renderAll();
35
+ * @example <caption>Emboss filter with opaqueness</caption>
36
+ * const filter = new Convolute({
37
+ * opaque: true,
38
+ * matrix: [ 1, 1, 1,
39
+ * 1, 0.7, -1,
40
+ * -1, -1, -1 ]
41
+ * });
42
+ * object.filters.push(filter);
43
+ * object.applyFilters();
44
+ * canvas.renderAll();
45
+ */
46
+ export class Convolute extends AbstractBaseFilter<Record<string, string>> {
47
+ /*
48
+ * Opaque value (true/false)
49
+ */
50
+ declare opaque: boolean;
51
+
52
+ /*
53
+ * matrix for the filter, max 9x9
54
+ */
55
+ declare matrix: number[];
56
+
57
+ getCacheKey() {
58
+ return `${this.type}_${Math.sqrt(this.matrix.length)}_${
59
+ this.opaque ? 1 : 0
60
+ }`;
61
+ }
62
+
63
+ getFragmentSource() {
64
+ return this.fragmentSource[this.getCacheKey()];
65
+ }
66
+
67
+ /**
68
+ * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.
69
+ *
70
+ * @param {Object} options
71
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
72
+ */
73
+ applyTo2d(options: T2DPipelineState) {
74
+ const imageData = options.imageData,
75
+ data = imageData.data,
76
+ weights = this.matrix,
77
+ side = Math.round(Math.sqrt(weights.length)),
78
+ halfSide = Math.floor(side / 2),
79
+ sw = imageData.width,
80
+ sh = imageData.height,
81
+ output = options.ctx.createImageData(sw, sh),
82
+ dst = output.data,
83
+ // go through the destination image pixels
84
+ alphaFac = this.opaque ? 1 : 0;
85
+ let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;
86
+
87
+ for (y = 0; y < sh; y++) {
88
+ for (x = 0; x < sw; x++) {
89
+ dstOff = (y * sw + x) * 4;
90
+ // calculate the weighed sum of the source image pixels that
91
+ // fall under the convolution matrix
92
+ r = 0;
93
+ g = 0;
94
+ b = 0;
95
+ a = 0;
96
+
97
+ for (cy = 0; cy < side; cy++) {
98
+ for (cx = 0; cx < side; cx++) {
99
+ scy = y + cy - halfSide;
100
+ scx = x + cx - halfSide;
101
+
102
+ // eslint-disable-next-line max-depth
103
+ if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {
104
+ continue;
105
+ }
106
+
107
+ srcOff = (scy * sw + scx) * 4;
108
+ wt = weights[cy * side + cx];
109
+
110
+ r += data[srcOff] * wt;
111
+ g += data[srcOff + 1] * wt;
112
+ b += data[srcOff + 2] * wt;
113
+ // eslint-disable-next-line max-depth
114
+ if (!alphaFac) {
115
+ a += data[srcOff + 3] * wt;
116
+ }
117
+ }
118
+ }
119
+ dst[dstOff] = r;
120
+ dst[dstOff + 1] = g;
121
+ dst[dstOff + 2] = b;
122
+ if (!alphaFac) {
123
+ dst[dstOff + 3] = a;
124
+ } else {
125
+ dst[dstOff + 3] = data[dstOff + 3];
126
+ }
127
+ }
128
+ }
129
+ options.imageData = output;
130
+ }
131
+
132
+ /**
133
+ * Return WebGL uniform locations for this filter's shader.
134
+ *
135
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
136
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
137
+ */
138
+ getUniformLocations(
139
+ gl: WebGLRenderingContext,
140
+ program: WebGLProgram
141
+ ): TWebGLUniformLocationMap {
142
+ return {
143
+ uMatrix: gl.getUniformLocation(program, 'uMatrix'),
144
+ uOpaque: gl.getUniformLocation(program, 'uOpaque'),
145
+ uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),
146
+ uSize: gl.getUniformLocation(program, 'uSize'),
147
+ };
148
+ }
149
+
150
+ /**
151
+ * Send data from this filter to its shader program's uniforms.
152
+ *
153
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
154
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
155
+ */
156
+ sendUniformData(
157
+ gl: WebGLRenderingContext,
158
+ uniformLocations: TWebGLUniformLocationMap
159
+ ) {
160
+ gl.uniform1fv(uniformLocations.uMatrix, this.matrix);
161
+ }
162
+
163
+ /**
164
+ * Returns object representation of an instance
165
+ * @return {Object} Object representation of an instance
166
+ */
167
+ toObject() {
168
+ return {
169
+ ...super.toObject(),
170
+ opaque: this.opaque,
171
+ matrix: [...this.matrix],
172
+ };
173
+ }
174
+
175
+ static async fromObject(object: any) {
176
+ return new Convolute(object);
177
+ }
178
+ }
179
+
180
+ export const convoluteDefaultValues: Partial<TClassProperties<Convolute>> = {
181
+ type: 'Convolute',
182
+ opaque: false,
183
+ matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],
184
+ fragmentSource: {
185
+ Convolute_3_1: `
186
+ precision highp float;
187
+ uniform sampler2D uTexture;
188
+ uniform float uMatrix[9];
189
+ uniform float uStepW;
190
+ uniform float uStepH;
191
+ varying vec2 vTexCoord;
192
+ void main() {
193
+ vec4 color = vec4(0, 0, 0, 0);
194
+ for (float h = 0.0; h < 3.0; h+=1.0) {
195
+ for (float w = 0.0; w < 3.0; w+=1.0) {
196
+ vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
197
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
198
+ }
199
+ }
200
+ gl_FragColor = color;
201
+ }
202
+ `,
203
+ Convolute_3_0: `
204
+ precision highp float;
205
+ uniform sampler2D uTexture;
206
+ uniform float uMatrix[9];
207
+ uniform float uStepW;
208
+ uniform float uStepH;
209
+ varying vec2 vTexCoord;
210
+ void main() {
211
+ vec4 color = vec4(0, 0, 0, 1);
212
+ for (float h = 0.0; h < 3.0; h+=1.0) {
213
+ for (float w = 0.0; w < 3.0; w+=1.0) {
214
+ vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
215
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
216
+ }
217
+ }
218
+ float alpha = texture2D(uTexture, vTexCoord).a;
219
+ gl_FragColor = color;
220
+ gl_FragColor.a = alpha;
221
+ }
222
+ `,
223
+ Convolute_5_1: `
224
+ precision highp float;
225
+ uniform sampler2D uTexture;
226
+ uniform float uMatrix[25];
227
+ uniform float uStepW;
228
+ uniform float uStepH;
229
+ varying vec2 vTexCoord;
230
+ void main() {
231
+ vec4 color = vec4(0, 0, 0, 0);
232
+ for (float h = 0.0; h < 5.0; h+=1.0) {
233
+ for (float w = 0.0; w < 5.0; w+=1.0) {
234
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
235
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
236
+ }
237
+ }
238
+ gl_FragColor = color;
239
+ }
240
+ `,
241
+ Convolute_5_0: `
242
+ precision highp float;
243
+ uniform sampler2D uTexture;
244
+ uniform float uMatrix[25];
245
+ uniform float uStepW;
246
+ uniform float uStepH;
247
+ varying vec2 vTexCoord;
248
+ void main() {
249
+ vec4 color = vec4(0, 0, 0, 1);
250
+ for (float h = 0.0; h < 5.0; h+=1.0) {
251
+ for (float w = 0.0; w < 5.0; w+=1.0) {
252
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
253
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
254
+ }
255
+ }
256
+ float alpha = texture2D(uTexture, vTexCoord).a;
257
+ gl_FragColor = color;
258
+ gl_FragColor.a = alpha;
259
+ }
260
+ `,
261
+ Convolute_7_1: `
262
+ precision highp float;
263
+ uniform sampler2D uTexture;
264
+ uniform float uMatrix[49];
265
+ uniform float uStepW;
266
+ uniform float uStepH;
267
+ varying vec2 vTexCoord;
268
+ void main() {
269
+ vec4 color = vec4(0, 0, 0, 0);
270
+ for (float h = 0.0; h < 7.0; h+=1.0) {
271
+ for (float w = 0.0; w < 7.0; w+=1.0) {
272
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
273
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
274
+ }
275
+ }
276
+ gl_FragColor = color;
277
+ }
278
+ `,
279
+ Convolute_7_0: `
280
+ precision highp float;
281
+ uniform sampler2D uTexture;
282
+ uniform float uMatrix[49];
283
+ uniform float uStepW;
284
+ uniform float uStepH;
285
+ varying vec2 vTexCoord;
286
+ void main() {
287
+ vec4 color = vec4(0, 0, 0, 1);
288
+ for (float h = 0.0; h < 7.0; h+=1.0) {
289
+ for (float w = 0.0; w < 7.0; w+=1.0) {
290
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
291
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
292
+ }
293
+ }
294
+ float alpha = texture2D(uTexture, vTexCoord).a;
295
+ gl_FragColor = color;
296
+ gl_FragColor.a = alpha;
297
+ }
298
+ `,
299
+ Convolute_9_1: `
300
+ precision highp float;
301
+ uniform sampler2D uTexture;
302
+ uniform float uMatrix[81];
303
+ uniform float uStepW;
304
+ uniform float uStepH;
305
+ varying vec2 vTexCoord;
306
+ void main() {
307
+ vec4 color = vec4(0, 0, 0, 0);
308
+ for (float h = 0.0; h < 9.0; h+=1.0) {
309
+ for (float w = 0.0; w < 9.0; w+=1.0) {
310
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
311
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
312
+ }
313
+ }
314
+ gl_FragColor = color;
315
+ }
316
+ `,
317
+ Convolute_9_0: `
318
+ precision highp float;
319
+ uniform sampler2D uTexture;
320
+ uniform float uMatrix[81];
321
+ uniform float uStepW;
322
+ uniform float uStepH;
323
+ varying vec2 vTexCoord;
324
+ void main() {
325
+ vec4 color = vec4(0, 0, 0, 1);
326
+ for (float h = 0.0; h < 9.0; h+=1.0) {
327
+ for (float w = 0.0; w < 9.0; w+=1.0) {
328
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
329
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
330
+ }
331
+ }
332
+ float alpha = texture2D(uTexture, vTexCoord).a;
333
+ gl_FragColor = color;
334
+ gl_FragColor.a = alpha;
335
+ }
336
+ `,
337
+ },
338
+ };
339
+
340
+ Object.assign(Convolute.prototype, convoluteDefaultValues);
341
+ classRegistry.setClass(Convolute);
@@ -0,0 +1,32 @@
1
+ import { config } from '../config';
2
+ import { Canvas2dFilterBackend } from './Canvas2dFilterBackend';
3
+ import { WebGLFilterBackend } from './WebGLFilterBackend';
4
+ import { webGLProbe } from './WebGLProbe';
5
+
6
+ export type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;
7
+
8
+ let filterBackend: FilterBackend;
9
+
10
+ /**
11
+ * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend
12
+ */
13
+ export function initFilterBackend(): FilterBackend {
14
+ webGLProbe.queryWebGL();
15
+ if (config.enableGLFiltering && webGLProbe.isSupported(config.textureSize)) {
16
+ return new WebGLFilterBackend({ tileSize: config.textureSize });
17
+ } else {
18
+ return new Canvas2dFilterBackend();
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Get the current fabricJS filter backend or initialize one if not avaialble yet
24
+ * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),
25
+ * pass `false` to get the backend ref without mutating it
26
+ */
27
+ export function getFilterBackend(strict = true): FilterBackend {
28
+ if (!filterBackend && strict) {
29
+ filterBackend = initFilterBackend();
30
+ }
31
+ return filterBackend;
32
+ }
@@ -0,0 +1,127 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter, BaseFilterOptions } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+
6
+ export type GammaInput = [number, number, number];
7
+
8
+ /**
9
+ * Gamma filter class
10
+ * @example
11
+ * const filter = new Gamma({
12
+ * gamma: [1, 0.5, 2.1]
13
+ * });
14
+ * object.filters.push(filter);
15
+ * object.applyFilters();
16
+ */
17
+ export class Gamma extends BaseFilter {
18
+ /**
19
+ * Gamma array value, from 0.01 to 2.2.
20
+ * @param {Array} gamma
21
+ * @default
22
+ */
23
+ declare gamma: GammaInput;
24
+ declare rgbValues?: {
25
+ r: Uint8Array;
26
+ g: Uint8Array;
27
+ b: Uint8Array;
28
+ };
29
+
30
+ constructor({
31
+ gamma,
32
+ ...options
33
+ }: Partial<BaseFilterOptions> & { gamma?: GammaInput } = {}) {
34
+ super(options);
35
+ this.gamma = gamma || [1, 1, 1];
36
+ }
37
+
38
+ /**
39
+ * Apply the Gamma operation to a Uint8Array representing the pixels of an image.
40
+ *
41
+ * @param {Object} options
42
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
43
+ */
44
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
45
+ const gamma = this.gamma,
46
+ rInv = 1 / gamma[0],
47
+ gInv = 1 / gamma[1],
48
+ bInv = 1 / gamma[2];
49
+
50
+ if (!this.rgbValues) {
51
+ this.rgbValues = {
52
+ r: new Uint8Array(256),
53
+ g: new Uint8Array(256),
54
+ b: new Uint8Array(256),
55
+ };
56
+ }
57
+
58
+ // This is an optimization - pre-compute a look-up table for each color channel
59
+ // instead of performing these pow calls for each pixel in the image.
60
+ for (let i = 0; i < 256; i++) {
61
+ this.rgbValues.r[i] = Math.pow(i / 255, rInv) * 255;
62
+ this.rgbValues.g[i] = Math.pow(i / 255, gInv) * 255;
63
+ this.rgbValues.b[i] = Math.pow(i / 255, bInv) * 255;
64
+ }
65
+ for (let i = 0; i < data.length; i += 4) {
66
+ data[i] = this.rgbValues.r[data[i]];
67
+ data[i + 1] = this.rgbValues.g[data[i + 1]];
68
+ data[i + 2] = this.rgbValues.b[data[i + 2]];
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Return WebGL uniform locations for this filter's shader.
74
+ *
75
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
76
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
77
+ */
78
+ getUniformLocations(
79
+ gl: WebGLRenderingContext,
80
+ program: WebGLProgram
81
+ ): TWebGLUniformLocationMap {
82
+ return {
83
+ uGamma: gl.getUniformLocation(program, 'uGamma'),
84
+ };
85
+ }
86
+
87
+ /**
88
+ * Send data from this filter to its shader program's uniforms.
89
+ *
90
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
91
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
92
+ */
93
+ sendUniformData(
94
+ gl: WebGLRenderingContext,
95
+ uniformLocations: TWebGLUniformLocationMap
96
+ ) {
97
+ gl.uniform3fv(uniformLocations.uGamma, this.gamma);
98
+ }
99
+
100
+ static async fromObject(object: any) {
101
+ return new Gamma(object);
102
+ }
103
+ }
104
+
105
+ export const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {
106
+ type: 'Gamma',
107
+ fragmentSource: `
108
+ precision highp float;
109
+ uniform sampler2D uTexture;
110
+ uniform vec3 uGamma;
111
+ varying vec2 vTexCoord;
112
+ void main() {
113
+ vec4 color = texture2D(uTexture, vTexCoord);
114
+ vec3 correction = (1.0 / uGamma);
115
+ color.r = pow(color.r, correction.r);
116
+ color.g = pow(color.g, correction.g);
117
+ color.b = pow(color.b, correction.b);
118
+ gl_FragColor = color;
119
+ gl_FragColor.rgb *= color.a;
120
+ }
121
+ `,
122
+ mainParameter: 'gamma',
123
+ gamma: [1, 1, 1],
124
+ };
125
+
126
+ Object.assign(Gamma.prototype, gammaDefaultValues);
127
+ classRegistry.setClass(Gamma);
@@ -0,0 +1,137 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { AbstractBaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+
6
+ /**
7
+ * Grayscale image filter class
8
+ * @example
9
+ * const filter = new Grayscale();
10
+ * object.filters.push(filter);
11
+ * object.applyFilters();
12
+ */
13
+ export class Grayscale extends AbstractBaseFilter<Record<string, string>> {
14
+ declare mode: 'average' | 'lightness' | 'luminosity';
15
+
16
+ /**
17
+ * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.
18
+ *
19
+ * @param {Object} options
20
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
21
+ */
22
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
23
+ for (let i = 0, value: number; i < data.length; i += 4) {
24
+ switch (this.mode) {
25
+ case 'average':
26
+ value = (data[i] + data[i + 1] + data[i + 2]) / 3;
27
+ break;
28
+ case 'lightness':
29
+ value =
30
+ (Math.min(data[i], data[i + 1], data[i + 2]) +
31
+ Math.max(data[i], data[i + 1], data[i + 2])) /
32
+ 2;
33
+ break;
34
+ case 'luminosity':
35
+ value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];
36
+ break;
37
+ }
38
+
39
+ data[i] = value;
40
+ data[i + 1] = value;
41
+ data[i + 2] = value;
42
+ }
43
+ }
44
+
45
+ getCacheKey() {
46
+ return `${this.type}_${this.mode}`;
47
+ }
48
+
49
+ getFragmentSource() {
50
+ return this.fragmentSource[this.mode];
51
+ }
52
+
53
+ /**
54
+ * Return WebGL uniform locations for this filter's shader.
55
+ *
56
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
57
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
58
+ */
59
+ getUniformLocations(
60
+ gl: WebGLRenderingContext,
61
+ program: WebGLProgram
62
+ ): TWebGLUniformLocationMap {
63
+ return {
64
+ uMode: gl.getUniformLocation(program, 'uMode'),
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Send data from this filter to its shader program's uniforms.
70
+ *
71
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
72
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
73
+ */
74
+ sendUniformData(
75
+ gl: WebGLRenderingContext,
76
+ uniformLocations: TWebGLUniformLocationMap
77
+ ) {
78
+ const mode = 1;
79
+ gl.uniform1i(uniformLocations.uMode, mode);
80
+ }
81
+
82
+ /**
83
+ * Grayscale filter isNeutralState implementation
84
+ * The filter is never neutral
85
+ * on the image
86
+ **/
87
+ isNeutralState() {
88
+ return false;
89
+ }
90
+
91
+ static async fromObject(object: any) {
92
+ return new Grayscale(object);
93
+ }
94
+ }
95
+
96
+ export const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {
97
+ type: 'Grayscale',
98
+ fragmentSource: {
99
+ average: `
100
+ precision highp float;
101
+ uniform sampler2D uTexture;
102
+ varying vec2 vTexCoord;
103
+ void main() {
104
+ vec4 color = texture2D(uTexture, vTexCoord);
105
+ float average = (color.r + color.b + color.g) / 3.0;
106
+ gl_FragColor = vec4(average, average, average, color.a);
107
+ }
108
+ `,
109
+ lightness: `
110
+ precision highp float;
111
+ uniform sampler2D uTexture;
112
+ uniform int uMode;
113
+ varying vec2 vTexCoord;
114
+ void main() {
115
+ vec4 col = texture2D(uTexture, vTexCoord);
116
+ float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
117
+ gl_FragColor = vec4(average, average, average, col.a);
118
+ }
119
+ `,
120
+ luminosity: `
121
+ precision highp float;
122
+ uniform sampler2D uTexture;
123
+ uniform int uMode;
124
+ varying vec2 vTexCoord;
125
+ void main() {
126
+ vec4 col = texture2D(uTexture, vTexCoord);
127
+ float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
128
+ gl_FragColor = vec4(average, average, average, col.a);
129
+ }
130
+ `,
131
+ },
132
+ mode: 'average',
133
+ mainParameter: 'mode',
134
+ };
135
+
136
+ Object.assign(Grayscale.prototype, grayscaleDefaultValues);
137
+ classRegistry.setClass(Grayscale);
@@ -0,0 +1,66 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { cos } from '../util/misc/cos';
3
+ import { sin } from '../util/misc/sin';
4
+ import { ColorMatrix } from './ColorMatrix';
5
+ import type { TWebGLPipelineState, T2DPipelineState } from './typedefs';
6
+ import { classRegistry } from '../util/class_registry';
7
+
8
+ /**
9
+ * HueRotation filter class
10
+ * @example
11
+ * const filter = new HueRotation({
12
+ * rotation: -0.5
13
+ * });
14
+ * object.filters.push(filter);
15
+ * object.applyFilters();
16
+ */
17
+ // @ts-expect-error fromObject
18
+ export class HueRotation extends ColorMatrix {
19
+ /**
20
+ * HueRotation value, from -1 to 1.
21
+ */
22
+ declare rotation: number;
23
+
24
+ calculateMatrix() {
25
+ const rad = this.rotation * Math.PI,
26
+ cosine = cos(rad),
27
+ sine = sin(rad),
28
+ aThird = 1 / 3,
29
+ aThirdSqtSin = Math.sqrt(aThird) * sine,
30
+ OneMinusCos = 1 - cosine;
31
+ this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
32
+ this.matrix[0] = cosine + OneMinusCos / 3;
33
+ this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;
34
+ this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;
35
+ this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;
36
+ this.matrix[6] = cosine + aThird * OneMinusCos;
37
+ this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;
38
+ this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;
39
+ this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;
40
+ this.matrix[12] = cosine + aThird * OneMinusCos;
41
+ }
42
+
43
+ isNeutralState() {
44
+ this.calculateMatrix();
45
+ return super.isNeutralState();
46
+ }
47
+
48
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
49
+ this.calculateMatrix();
50
+ super.applyTo(options);
51
+ }
52
+
53
+ static async fromObject(object: any) {
54
+ return new HueRotation(object);
55
+ }
56
+ }
57
+
58
+ export const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>> =
59
+ {
60
+ type: 'HueRotation',
61
+ rotation: 0,
62
+ mainParameter: 'rotation',
63
+ };
64
+
65
+ Object.assign(HueRotation.prototype, hueRotationDefaultValues);
66
+ classRegistry.setClass(HueRotation);