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
@@ -1,64 +1,63 @@
1
- /**
2
- * @namespace fabric.Image.filters
3
- * @memberOf fabric.Image
4
- * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}
5
- * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}
6
- */
7
- fabric.Image = fabric.Image || { };
8
- fabric.Image.filters = fabric.Image.filters || { };
9
-
10
- /**
11
- * Root filter class from which all filter classes inherit from
12
- * @class fabric.Image.filters.BaseFilter
13
- * @memberOf fabric.Image.filters
14
- */
15
- fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {
1
+ import { createCanvasElement } from '../util/misc/dom';
2
+ import type {
3
+ T2DPipelineState,
4
+ TWebGLAttributeLocationMap,
5
+ TWebGLPipelineState,
6
+ TWebGLProgramCacheItem,
7
+ TWebGLUniformLocationMap,
8
+ } from './typedefs';
9
+ import { isWebGLPipelineState } from './typedefs';
10
+ import { WebGLPrecision, webGLProbe } from './WebGLProbe';
16
11
 
12
+ const highPsourceCode = `precision ${WebGLPrecision.high} float`;
13
+
14
+ export type AbstractBaseFilterOptions<T> = {
15
+ mainParameter: string;
16
+ vertexSource: string;
17
+ fragmentSource: T;
18
+ };
19
+
20
+ export type BaseFilterOptions = AbstractBaseFilterOptions<string>;
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
23
+ export interface AnyFilter
24
+ extends AbstractBaseFilter<string | Record<string, string>> {}
25
+
26
+ export abstract class AbstractBaseFilter<T> {
17
27
  /**
18
28
  * Filter type
19
29
  * @param {String} type
20
30
  * @default
21
31
  */
22
- type: 'BaseFilter',
32
+ declare type: string;
23
33
 
24
34
  /**
25
35
  * Array of attributes to send with buffers. do not modify
26
36
  * @private
27
37
  */
38
+ declare vertexSource: string;
28
39
 
29
- vertexSource: 'attribute vec2 aPosition;\n' +
30
- 'varying vec2 vTexCoord;\n' +
31
- 'void main() {\n' +
32
- 'vTexCoord = aPosition;\n' +
33
- 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n' +
34
- '}',
35
-
36
- fragmentSource: 'precision highp float;\n' +
37
- 'varying vec2 vTexCoord;\n' +
38
- 'uniform sampler2D uTexture;\n' +
39
- 'void main() {\n' +
40
- 'gl_FragColor = texture2D(uTexture, vTexCoord);\n' +
41
- '}',
40
+ declare fragmentSource: T;
42
41
 
43
42
  /**
44
- * Constructor
45
- * @param {Object} [options] Options object
43
+ * Name of the parameter that can be changed in the filter.
44
+ * Some filters have more than one parameter and there is no
45
+ * mainParameter
46
+ * @private
46
47
  */
47
- initialize: function(options) {
48
- if (options) {
49
- this.setOptions(options);
50
- }
51
- },
48
+ declare mainParameter?: keyof this;
52
49
 
53
50
  /**
54
- * Sets filter's properties from options
51
+ * Constructor
55
52
  * @param {Object} [options] Options object
56
53
  */
57
- setOptions: function(options) {
58
- for (var prop in options) {
59
- this[prop] = options[prop];
60
- }
61
- },
54
+ constructor(
55
+ options: Partial<AbstractBaseFilterOptions<T>> & Record<string, any> = {}
56
+ ) {
57
+ Object.assign(this, options);
58
+ }
59
+
60
+ abstract getFragmentSource(): string;
62
61
 
63
62
  /**
64
63
  * Compile this filter's shader program.
@@ -67,59 +66,66 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
67
66
  * @param {String} fragmentSource fragmentShader source for compilation
68
67
  * @param {String} vertexSource vertexShader source for compilation
69
68
  */
70
- createProgram: function(gl, fragmentSource, vertexSource) {
71
- fragmentSource = fragmentSource || this.fragmentSource;
72
- vertexSource = vertexSource || this.vertexSource;
73
- if (fabric.webGlPrecision !== 'highp'){
69
+ createProgram(
70
+ gl: WebGLRenderingContext,
71
+ fragmentSource: string = this.getFragmentSource(),
72
+ vertexSource: string = this.vertexSource
73
+ ) {
74
+ if (
75
+ webGLProbe.webGLPrecision &&
76
+ webGLProbe.webGLPrecision !== WebGLPrecision.high
77
+ ) {
74
78
  fragmentSource = fragmentSource.replace(
75
- /precision highp float/g,
76
- 'precision ' + fabric.webGlPrecision + ' float'
79
+ new RegExp(highPsourceCode, 'g'),
80
+ highPsourceCode.replace(WebGLPrecision.high, webGLProbe.webGLPrecision)
77
81
  );
78
82
  }
79
- var vertexShader = gl.createShader(gl.VERTEX_SHADER);
83
+ const vertexShader = gl.createShader(gl.VERTEX_SHADER);
84
+ const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
85
+ const program = gl.createProgram();
86
+
87
+ if (!vertexShader || !fragmentShader || !program) {
88
+ throw new Error('Vertex, fragment shader or program creation error');
89
+ }
80
90
  gl.shaderSource(vertexShader, vertexSource);
81
91
  gl.compileShader(vertexShader);
82
92
  if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
83
93
  throw new Error(
84
- // eslint-disable-next-line prefer-template
85
- 'Vertex shader compile error for ' + this.type + ': ' +
86
- gl.getShaderInfoLog(vertexShader)
94
+ `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(
95
+ vertexShader
96
+ )}`
87
97
  );
88
98
  }
89
99
 
90
- var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
91
100
  gl.shaderSource(fragmentShader, fragmentSource);
92
101
  gl.compileShader(fragmentShader);
93
102
  if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
94
103
  throw new Error(
95
- // eslint-disable-next-line prefer-template
96
- 'Fragment shader compile error for ' + this.type + ': ' +
97
- gl.getShaderInfoLog(fragmentShader)
104
+ `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(
105
+ fragmentShader
106
+ )}`
98
107
  );
99
108
  }
100
109
 
101
- var program = gl.createProgram();
102
110
  gl.attachShader(program, vertexShader);
103
111
  gl.attachShader(program, fragmentShader);
104
112
  gl.linkProgram(program);
105
113
  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
106
114
  throw new Error(
107
115
  // eslint-disable-next-line prefer-template
108
- 'Shader link error for "${this.type}" ' +
109
- gl.getProgramInfoLog(program)
116
+ 'Shader link error for "${this.type}" ' + gl.getProgramInfoLog(program)
110
117
  );
111
118
  }
112
119
 
113
- var attributeLocations = this.getAttributeLocations(gl, program);
114
- var uniformLocations = this.getUniformLocations(gl, program) || { };
120
+ const uniformLocations = this.getUniformLocations(gl, program) || {};
115
121
  uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');
116
122
  uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');
117
123
  return {
118
- program: program,
119
- attributeLocations: attributeLocations,
120
- uniformLocations: uniformLocations
124
+ program,
125
+ attributeLocations: this.getAttributeLocations(gl, program),
126
+ uniformLocations,
121
127
  };
122
- },
128
+ }
123
129
 
124
130
  /**
125
131
  * Return a map of attribute names to WebGLAttributeLocation objects.
@@ -128,11 +134,14 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
128
134
  * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.
129
135
  * @returns {Object} A map of attribute names to attribute locations.
130
136
  */
131
- getAttributeLocations: function(gl, program) {
137
+ getAttributeLocations(
138
+ gl: WebGLRenderingContext,
139
+ program: WebGLProgram
140
+ ): TWebGLAttributeLocationMap {
132
141
  return {
133
142
  aPosition: gl.getAttribLocation(program, 'aPosition'),
134
143
  };
135
- },
144
+ }
136
145
 
137
146
  /**
138
147
  * Return a map of uniform names to WebGLUniformLocation objects.
@@ -143,10 +152,10 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
143
152
  * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.
144
153
  * @returns {Object} A map of uniform names to uniform locations.
145
154
  */
146
- getUniformLocations: function (/* gl, program */) {
147
- // in case i do not need any special uniform i need to return an empty object
148
- return { };
149
- },
155
+ abstract getUniformLocations(
156
+ gl: WebGLRenderingContext,
157
+ program: WebGLProgram
158
+ ): TWebGLUniformLocationMap;
150
159
 
151
160
  /**
152
161
  * Send attribute data from this filter to its shader program on the GPU.
@@ -154,41 +163,53 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
154
163
  * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
155
164
  * @param {Object} attributeLocations A map of shader attribute names to their locations.
156
165
  */
157
- sendAttributeData: function(gl, attributeLocations, aPositionData) {
158
- var attributeLocation = attributeLocations.aPosition;
159
- var buffer = gl.createBuffer();
166
+ sendAttributeData(
167
+ gl: WebGLRenderingContext,
168
+ attributeLocations: Record<string, number>,
169
+ aPositionData: Float32Array
170
+ ) {
171
+ const attributeLocation = attributeLocations.aPosition;
172
+ const buffer = gl.createBuffer();
160
173
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
161
174
  gl.enableVertexAttribArray(attributeLocation);
162
175
  gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);
163
176
  gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);
164
- },
177
+ }
165
178
 
166
- _setupFrameBuffer: function(options) {
167
- var gl = options.context, width, height;
179
+ _setupFrameBuffer(options: TWebGLPipelineState) {
180
+ const gl = options.context;
168
181
  if (options.passes > 1) {
169
- width = options.destinationWidth;
170
- height = options.destinationHeight;
182
+ const width = options.destinationWidth;
183
+ const height = options.destinationHeight;
171
184
  if (options.sourceWidth !== width || options.sourceHeight !== height) {
172
185
  gl.deleteTexture(options.targetTexture);
173
- options.targetTexture = options.filterBackend.createTexture(gl, width, height);
186
+ options.targetTexture = options.filterBackend.createTexture(
187
+ gl,
188
+ width,
189
+ height
190
+ );
174
191
  }
175
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
176
- options.targetTexture, 0);
177
- }
178
- else {
192
+ gl.framebufferTexture2D(
193
+ gl.FRAMEBUFFER,
194
+ gl.COLOR_ATTACHMENT0,
195
+ gl.TEXTURE_2D,
196
+ options.targetTexture,
197
+ 0
198
+ );
199
+ } else {
179
200
  // draw last filter on canvas and not to framebuffer.
180
201
  gl.bindFramebuffer(gl.FRAMEBUFFER, null);
181
202
  gl.finish();
182
203
  }
183
- },
204
+ }
184
205
 
185
- _swapTextures: function(options) {
206
+ _swapTextures(options: TWebGLPipelineState) {
186
207
  options.passes--;
187
208
  options.pass++;
188
- var temp = options.targetTexture;
209
+ const temp = options.targetTexture;
189
210
  options.targetTexture = options.sourceTexture;
190
211
  options.sourceTexture = temp;
191
- },
212
+ }
192
213
 
193
214
  /**
194
215
  * Generic isNeutral implementation for one parameter based filters.
@@ -197,26 +218,24 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
197
218
  * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )
198
219
  * @param {Object} options
199
220
  **/
200
- isNeutralState: function(/* options */) {
201
- var main = this.mainParameter,
202
- _class = fabric.Image.filters[this.type].prototype;
221
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
222
+ isNeutralState(options?: any): boolean {
223
+ const main = this.mainParameter,
224
+ // @ts-ignore ts you are lying
225
+ proto = this.__proto__;
203
226
  if (main) {
204
- if (Array.isArray(_class[main])) {
205
- for (var i = _class[main].length; i--;) {
206
- if (this[main][i] !== _class[main][i]) {
207
- return false;
208
- }
209
- }
210
- return true;
211
- }
212
- else {
213
- return _class[main] === this[main];
227
+ if (Array.isArray(proto[main]) && Array.isArray(this[main])) {
228
+ return proto[main].every(
229
+ // @ts-ignore requires some kind of dynamic type thing, or delete, or leave it ignored
230
+ (value: any, i: number) => value === this[main][i]
231
+ );
232
+ } else {
233
+ return proto[main] === this[main];
214
234
  }
215
- }
216
- else {
235
+ } else {
217
236
  return false;
218
237
  }
219
- },
238
+ }
220
239
 
221
240
  /**
222
241
  * Apply this filter to the input image data provided.
@@ -231,29 +250,36 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
231
250
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
232
251
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
233
252
  */
234
- applyTo: function(options) {
235
- if (options.webgl) {
253
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
254
+ if (isWebGLPipelineState(options)) {
236
255
  this._setupFrameBuffer(options);
237
256
  this.applyToWebGL(options);
238
257
  this._swapTextures(options);
239
- }
240
- else {
258
+ } else {
241
259
  this.applyTo2d(options);
242
260
  }
243
- },
261
+ }
262
+
263
+ abstract applyTo2d(options: T2DPipelineState): void;
264
+
265
+ getCacheKey() {
266
+ return this.type;
267
+ }
244
268
 
245
269
  /**
246
270
  * Retrieves the cached shader.
247
271
  * @param {Object} options
248
272
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
249
273
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
274
+ * @return {WebGLProgram} the compiled program shader
250
275
  */
251
- retrieveShader: function(options) {
252
- if (!options.programCache.hasOwnProperty(this.type)) {
253
- options.programCache[this.type] = this.createProgram(options.context);
276
+ retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {
277
+ const key = this.getCacheKey();
278
+ if (!options.programCache[key]) {
279
+ options.programCache[key] = this.createProgram(options.context);
254
280
  }
255
- return options.programCache[this.type];
256
- },
281
+ return options.programCache[key];
282
+ }
257
283
 
258
284
  /**
259
285
  * Apply this filter using webgl.
@@ -267,13 +293,12 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
267
293
  * @param {WebGLRenderingContext} options.context The GL context used for rendering.
268
294
  * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
269
295
  */
270
- applyToWebGL: function(options) {
271
- var gl = options.context;
272
- var shader = this.retrieveShader(options);
296
+ applyToWebGL(options: TWebGLPipelineState) {
297
+ const gl = options.context;
298
+ const shader = this.retrieveShader(options);
273
299
  if (options.pass === 0 && options.originalTexture) {
274
300
  gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);
275
- }
276
- else {
301
+ } else {
277
302
  gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);
278
303
  }
279
304
  gl.useProgram(shader.program);
@@ -285,28 +310,34 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
285
310
  this.sendUniformData(gl, shader.uniformLocations);
286
311
  gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);
287
312
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
288
- },
313
+ }
289
314
 
290
- bindAdditionalTexture: function(gl, texture, textureUnit) {
315
+ bindAdditionalTexture(
316
+ gl: WebGLRenderingContext,
317
+ texture: WebGLTexture,
318
+ textureUnit: number
319
+ ) {
291
320
  gl.activeTexture(textureUnit);
292
321
  gl.bindTexture(gl.TEXTURE_2D, texture);
293
322
  // reset active texture to 0 as usual
294
323
  gl.activeTexture(gl.TEXTURE0);
295
- },
324
+ }
296
325
 
297
- unbindAdditionalTexture: function(gl, textureUnit) {
326
+ unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {
298
327
  gl.activeTexture(textureUnit);
299
328
  gl.bindTexture(gl.TEXTURE_2D, null);
300
329
  gl.activeTexture(gl.TEXTURE0);
301
- },
330
+ }
302
331
 
303
- getMainParameter: function() {
304
- return this[this.mainParameter];
305
- },
332
+ getMainParameter() {
333
+ return this.mainParameter ? this[this.mainParameter] : undefined;
334
+ }
306
335
 
307
- setMainParameter: function(value) {
308
- this[this.mainParameter] = value;
309
- },
336
+ setMainParameter(value: any) {
337
+ if (this.mainParameter) {
338
+ this[this.mainParameter] = value;
339
+ }
340
+ }
310
341
 
311
342
  /**
312
343
  * Send uniform data from this filter to its shader program on the GPU.
@@ -316,47 +347,68 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag
316
347
  * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.
317
348
  * @param {Object} uniformLocations A map of shader uniform names to their locations.
318
349
  */
319
- sendUniformData: function(/* gl, uniformLocations */) {
320
- // Intentionally left blank. Override me in subclasses.
321
- },
350
+ abstract sendUniformData(
351
+ gl: WebGLRenderingContext,
352
+ uniformLocations: TWebGLUniformLocationMap
353
+ ): void;
322
354
 
323
355
  /**
324
356
  * If needed by a 2d filter, this functions can create an helper canvas to be used
325
357
  * remember that options.targetCanvas is available for use till end of chain.
326
358
  */
327
- createHelpLayer: function(options) {
359
+ createHelpLayer(options: T2DPipelineState) {
328
360
  if (!options.helpLayer) {
329
- var helpLayer = document.createElement('canvas');
361
+ const helpLayer = createCanvasElement();
330
362
  helpLayer.width = options.sourceWidth;
331
363
  helpLayer.height = options.sourceHeight;
332
364
  options.helpLayer = helpLayer;
333
365
  }
334
- },
366
+ }
335
367
 
336
368
  /**
337
369
  * Returns object representation of an instance
338
370
  * @return {Object} Object representation of an instance
339
371
  */
340
- toObject: function() {
341
- var object = { type: this.type }, mainP = this.mainParameter;
342
- if (mainP) {
343
- object[mainP] = this[mainP];
344
- }
345
- return object;
346
- },
372
+ toObject() {
373
+ const mainP = this.mainParameter;
374
+ return {
375
+ type: this.type,
376
+ ...(mainP ? { [mainP]: this[mainP] } : {}),
377
+ };
378
+ }
347
379
 
348
380
  /**
349
381
  * Returns a JSON representation of an instance
350
382
  * @return {Object} JSON
351
383
  */
352
- toJSON: function() {
384
+ toJSON() {
353
385
  // delegate, not alias
354
386
  return this.toObject();
355
387
  }
388
+ }
389
+
390
+ export abstract class BaseFilter extends AbstractBaseFilter<string> {
391
+ getFragmentSource() {
392
+ return this.fragmentSource;
393
+ }
394
+ }
395
+
396
+ Object.assign(AbstractBaseFilter.prototype, {
397
+ vertexSource: `
398
+ attribute vec2 aPosition;
399
+ varying vec2 vTexCoord;
400
+ void main() {
401
+ vTexCoord = aPosition;
402
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
403
+ }`,
356
404
  });
357
405
 
358
- fabric.Image.filters.BaseFilter.fromObject = function(object, callback) {
359
- var filter = new fabric.Image.filters[object.type](object);
360
- callback && callback(filter);
361
- return filter;
362
- };
406
+ Object.assign(BaseFilter.prototype, {
407
+ fragmentSource: `
408
+ ${highPsourceCode};
409
+ varying vec2 vTexCoord;
410
+ uniform sampler2D uTexture;
411
+ void main() {
412
+ gl_FragColor = texture2D(uTexture, vTexCoord);
413
+ }`,
414
+ });