fabric 5.3.0 → 6.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
@@ -0,0 +1,184 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/convolute';
6
+
7
+ export const convoluteDefaultValues: Partial<TClassProperties<Convolute>> = {
8
+ opaque: false,
9
+ matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],
10
+ };
11
+
12
+ /**
13
+ * Adapted from <a href="http://www.html5rocks.com/en/tutorials/canvas/imagefilters/">html5rocks article</a>
14
+ * @example <caption>Sharpen filter</caption>
15
+ * const filter = new Convolute({
16
+ * matrix: [ 0, -1, 0,
17
+ * -1, 5, -1,
18
+ * 0, -1, 0 ]
19
+ * });
20
+ * object.filters.push(filter);
21
+ * object.applyFilters();
22
+ * canvas.renderAll();
23
+ * @example <caption>Blur filter</caption>
24
+ * const filter = new Convolute({
25
+ * matrix: [ 1/9, 1/9, 1/9,
26
+ * 1/9, 1/9, 1/9,
27
+ * 1/9, 1/9, 1/9 ]
28
+ * });
29
+ * object.filters.push(filter);
30
+ * object.applyFilters();
31
+ * canvas.renderAll();
32
+ * @example <caption>Emboss filter</caption>
33
+ * const filter = new Convolute({
34
+ * matrix: [ 1, 1, 1,
35
+ * 1, 0.7, -1,
36
+ * -1, -1, -1 ]
37
+ * });
38
+ * object.filters.push(filter);
39
+ * object.applyFilters();
40
+ * canvas.renderAll();
41
+ * @example <caption>Emboss filter with opaqueness</caption>
42
+ * const filter = new Convolute({
43
+ * opaque: true,
44
+ * matrix: [ 1, 1, 1,
45
+ * 1, 0.7, -1,
46
+ * -1, -1, -1 ]
47
+ * });
48
+ * object.filters.push(filter);
49
+ * object.applyFilters();
50
+ * canvas.renderAll();
51
+ */
52
+ export class Convolute extends BaseFilter {
53
+ /*
54
+ * Opaque value (true/false)
55
+ */
56
+ declare opaque: boolean;
57
+
58
+ /*
59
+ * matrix for the filter, max 9x9
60
+ */
61
+ declare matrix: number[];
62
+
63
+ static defaults = convoluteDefaultValues;
64
+
65
+ getCacheKey() {
66
+ return `${this.type}_${Math.sqrt(this.matrix.length)}_${
67
+ this.opaque ? 1 : 0
68
+ }` as keyof typeof fragmentSource;
69
+ }
70
+
71
+ getFragmentSource() {
72
+ return fragmentSource[this.getCacheKey()];
73
+ }
74
+
75
+ /**
76
+ * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.
77
+ *
78
+ * @param {Object} options
79
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
80
+ */
81
+ applyTo2d(options: T2DPipelineState) {
82
+ const imageData = options.imageData,
83
+ data = imageData.data,
84
+ weights = this.matrix,
85
+ side = Math.round(Math.sqrt(weights.length)),
86
+ halfSide = Math.floor(side / 2),
87
+ sw = imageData.width,
88
+ sh = imageData.height,
89
+ output = options.ctx.createImageData(sw, sh),
90
+ dst = output.data,
91
+ // go through the destination image pixels
92
+ alphaFac = this.opaque ? 1 : 0;
93
+ let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;
94
+
95
+ for (y = 0; y < sh; y++) {
96
+ for (x = 0; x < sw; x++) {
97
+ dstOff = (y * sw + x) * 4;
98
+ // calculate the weighed sum of the source image pixels that
99
+ // fall under the convolution matrix
100
+ r = 0;
101
+ g = 0;
102
+ b = 0;
103
+ a = 0;
104
+
105
+ for (cy = 0; cy < side; cy++) {
106
+ for (cx = 0; cx < side; cx++) {
107
+ scy = y + cy - halfSide;
108
+ scx = x + cx - halfSide;
109
+
110
+ // eslint-disable-next-line max-depth
111
+ if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {
112
+ continue;
113
+ }
114
+
115
+ srcOff = (scy * sw + scx) * 4;
116
+ wt = weights[cy * side + cx];
117
+
118
+ r += data[srcOff] * wt;
119
+ g += data[srcOff + 1] * wt;
120
+ b += data[srcOff + 2] * wt;
121
+ // eslint-disable-next-line max-depth
122
+ if (!alphaFac) {
123
+ a += data[srcOff + 3] * wt;
124
+ }
125
+ }
126
+ }
127
+ dst[dstOff] = r;
128
+ dst[dstOff + 1] = g;
129
+ dst[dstOff + 2] = b;
130
+ if (!alphaFac) {
131
+ dst[dstOff + 3] = a;
132
+ } else {
133
+ dst[dstOff + 3] = data[dstOff + 3];
134
+ }
135
+ }
136
+ }
137
+ options.imageData = output;
138
+ }
139
+
140
+ /**
141
+ * Return WebGL uniform locations for this filter's shader.
142
+ *
143
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
144
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
145
+ */
146
+ getUniformLocations(
147
+ gl: WebGLRenderingContext,
148
+ program: WebGLProgram
149
+ ): TWebGLUniformLocationMap {
150
+ return {
151
+ uMatrix: gl.getUniformLocation(program, 'uMatrix'),
152
+ uOpaque: gl.getUniformLocation(program, 'uOpaque'),
153
+ uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),
154
+ uSize: gl.getUniformLocation(program, 'uSize'),
155
+ };
156
+ }
157
+
158
+ /**
159
+ * Send data from this filter to its shader program's uniforms.
160
+ *
161
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
162
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
163
+ */
164
+ sendUniformData(
165
+ gl: WebGLRenderingContext,
166
+ uniformLocations: TWebGLUniformLocationMap
167
+ ) {
168
+ gl.uniform1fv(uniformLocations.uMatrix, this.matrix);
169
+ }
170
+
171
+ /**
172
+ * Returns object representation of an instance
173
+ * @return {Object} Object representation of an instance
174
+ */
175
+ toObject() {
176
+ return {
177
+ ...super.toObject(),
178
+ opaque: this.opaque,
179
+ matrix: [...this.matrix],
180
+ };
181
+ }
182
+ }
183
+
184
+ classRegistry.setClass(Convolute);
@@ -0,0 +1,34 @@
1
+ import { config } from '../config';
2
+ import { getEnv } from '../env';
3
+ import { createCanvasElement } from '../util/misc/dom';
4
+ import { Canvas2dFilterBackend } from './Canvas2dFilterBackend';
5
+ import { WebGLFilterBackend } from './WebGLFilterBackend';
6
+
7
+ export type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;
8
+
9
+ let filterBackend: FilterBackend;
10
+
11
+ /**
12
+ * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend
13
+ */
14
+ export function initFilterBackend(): FilterBackend {
15
+ const { WebGLProbe } = getEnv();
16
+ WebGLProbe.queryWebGL(createCanvasElement());
17
+ if (config.enableGLFiltering && WebGLProbe.isSupported(config.textureSize)) {
18
+ return new WebGLFilterBackend({ tileSize: config.textureSize });
19
+ } else {
20
+ return new Canvas2dFilterBackend();
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Get the current fabricJS filter backend or initialize one if not available yet
26
+ * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),
27
+ * pass `false` to get the backend ref without mutating it
28
+ */
29
+ export function getFilterBackend(strict = true): FilterBackend {
30
+ if (!filterBackend && strict) {
31
+ filterBackend = initFilterBackend();
32
+ }
33
+ return filterBackend;
34
+ }
@@ -0,0 +1,11 @@
1
+ export enum GLPrecision {
2
+ low = 'lowp',
3
+ medium = 'mediump',
4
+ high = 'highp',
5
+ }
6
+
7
+ export abstract class GLProbe {
8
+ declare GLPrecision: GLPrecision | undefined;
9
+ abstract queryWebGL(canvas: HTMLCanvasElement): void;
10
+ abstract isSupported(textureSize: number): boolean;
11
+ }
@@ -0,0 +1,15 @@
1
+ import { GLProbe } from './GLProbe';
2
+
3
+ /**
4
+ * @todo GL rendering in node is possible:
5
+ * - https://github.com/stackgl/headless-gl
6
+ * - https://github.com/akira-cn/node-canvas-webgl
7
+ */
8
+ export class NodeGLProbe extends GLProbe {
9
+ queryWebGL() {
10
+ // noop
11
+ }
12
+ isSupported() {
13
+ return false;
14
+ }
15
+ }
@@ -0,0 +1,46 @@
1
+ import { GLPrecision, GLProbe } from './GLProbe';
2
+
3
+ /**
4
+ * Lazy initialize WebGL constants
5
+ */
6
+ export class WebGLProbe extends GLProbe {
7
+ declare maxTextureSize?: number;
8
+
9
+ /**
10
+ * Tests if webgl supports certain precision
11
+ * @param {WebGL} Canvas WebGL context to test on
12
+ * @param {GLPrecision} Precision to test can be any of following
13
+ * @returns {Boolean} Whether the user's browser WebGL supports given precision.
14
+ */
15
+ private testPrecision(
16
+ gl: WebGLRenderingContext,
17
+ precision: GLPrecision
18
+ ): boolean {
19
+ const fragmentSource = `precision ${precision} float;\nvoid main(){}`;
20
+ const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
21
+ if (!fragmentShader) {
22
+ return false;
23
+ }
24
+ gl.shaderSource(fragmentShader, fragmentSource);
25
+ gl.compileShader(fragmentShader);
26
+ return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);
27
+ }
28
+
29
+ /**
30
+ * query browser for WebGL
31
+ */
32
+ queryWebGL(canvas: HTMLCanvasElement) {
33
+ const gl = canvas.getContext('webgl');
34
+ if (gl) {
35
+ this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
36
+ this.GLPrecision = Object.values(GLPrecision).find((precision) =>
37
+ this.testPrecision(gl, precision)
38
+ );
39
+ console.log(`fabric: max texture size ${this.maxTextureSize}`);
40
+ }
41
+ }
42
+
43
+ isSupported(textureSize: number) {
44
+ return !!this.maxTextureSize && this.maxTextureSize >= textureSize;
45
+ }
46
+ }
@@ -0,0 +1,110 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/gamma';
6
+ export type GammaInput = [number, number, number];
7
+
8
+ export const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {
9
+ mainParameter: 'gamma',
10
+ gamma: [1, 1, 1],
11
+ };
12
+
13
+ /**
14
+ * Gamma filter class
15
+ * @example
16
+ * const filter = new Gamma({
17
+ * gamma: [1, 0.5, 2.1]
18
+ * });
19
+ * object.filters.push(filter);
20
+ * object.applyFilters();
21
+ */
22
+ export class Gamma extends BaseFilter {
23
+ /**
24
+ * Gamma array value, from 0.01 to 2.2.
25
+ * @param {Array} gamma
26
+ * @default
27
+ */
28
+ declare gamma: GammaInput;
29
+ declare rgbValues?: {
30
+ r: Uint8Array;
31
+ g: Uint8Array;
32
+ b: Uint8Array;
33
+ };
34
+
35
+ static defaults = gammaDefaultValues;
36
+
37
+ getFragmentSource() {
38
+ return fragmentSource;
39
+ }
40
+
41
+ constructor({ gamma = [1, 1, 1], ...options }: { gamma?: GammaInput } = {}) {
42
+ super(options);
43
+ this.gamma = gamma;
44
+ }
45
+
46
+ /**
47
+ * Apply the Gamma operation to a Uint8Array representing the pixels of an image.
48
+ *
49
+ * @param {Object} options
50
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
51
+ */
52
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
53
+ const gamma = this.gamma,
54
+ rInv = 1 / gamma[0],
55
+ gInv = 1 / gamma[1],
56
+ bInv = 1 / gamma[2];
57
+
58
+ if (!this.rgbValues) {
59
+ this.rgbValues = {
60
+ r: new Uint8Array(256),
61
+ g: new Uint8Array(256),
62
+ b: new Uint8Array(256),
63
+ };
64
+ }
65
+
66
+ // This is an optimization - pre-compute a look-up table for each color channel
67
+ // instead of performing these pow calls for each pixel in the image.
68
+ const rgb = this.rgbValues;
69
+ for (let i = 0; i < 256; i++) {
70
+ rgb.r[i] = Math.pow(i / 255, rInv) * 255;
71
+ rgb.g[i] = Math.pow(i / 255, gInv) * 255;
72
+ rgb.b[i] = Math.pow(i / 255, bInv) * 255;
73
+ }
74
+ for (let i = 0; i < data.length; i += 4) {
75
+ data[i] = rgb.r[data[i]];
76
+ data[i + 1] = rgb.g[data[i + 1]];
77
+ data[i + 2] = rgb.b[data[i + 2]];
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Return WebGL uniform locations for this filter's shader.
83
+ *
84
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
85
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
86
+ */
87
+ getUniformLocations(
88
+ gl: WebGLRenderingContext,
89
+ program: WebGLProgram
90
+ ): TWebGLUniformLocationMap {
91
+ return {
92
+ uGamma: gl.getUniformLocation(program, 'uGamma'),
93
+ };
94
+ }
95
+
96
+ /**
97
+ * Send data from this filter to its shader program's uniforms.
98
+ *
99
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
100
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
101
+ */
102
+ sendUniformData(
103
+ gl: WebGLRenderingContext,
104
+ uniformLocations: TWebGLUniformLocationMap
105
+ ) {
106
+ gl.uniform3fv(uniformLocations.uGamma, this.gamma);
107
+ }
108
+ }
109
+
110
+ classRegistry.setClass(Gamma);
@@ -0,0 +1,102 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/grayscale';
6
+
7
+ export type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';
8
+
9
+ export const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {
10
+ mode: 'average',
11
+ mainParameter: 'mode',
12
+ };
13
+
14
+ /**
15
+ * Grayscale image filter class
16
+ * @example
17
+ * const filter = new Grayscale();
18
+ * object.filters.push(filter);
19
+ * object.applyFilters();
20
+ */
21
+ export class Grayscale extends BaseFilter {
22
+ declare mode: TGrayscaleMode;
23
+
24
+ static defaults = grayscaleDefaultValues;
25
+
26
+ /**
27
+ * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.
28
+ *
29
+ * @param {Object} options
30
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
31
+ */
32
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
33
+ for (let i = 0, value: number; i < data.length; i += 4) {
34
+ switch (this.mode) {
35
+ case 'average':
36
+ value = (data[i] + data[i + 1] + data[i + 2]) / 3;
37
+ break;
38
+ case 'lightness':
39
+ value =
40
+ (Math.min(data[i], data[i + 1], data[i + 2]) +
41
+ Math.max(data[i], data[i + 1], data[i + 2])) /
42
+ 2;
43
+ break;
44
+ case 'luminosity':
45
+ value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];
46
+ break;
47
+ }
48
+
49
+ data[i] = value;
50
+ data[i + 1] = value;
51
+ data[i + 2] = value;
52
+ }
53
+ }
54
+
55
+ getCacheKey() {
56
+ return `${this.type}_${this.mode}`;
57
+ }
58
+
59
+ getFragmentSource() {
60
+ return fragmentSource[this.mode];
61
+ }
62
+
63
+ /**
64
+ * Return WebGL uniform locations for this filter's shader.
65
+ *
66
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
67
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
68
+ */
69
+ getUniformLocations(
70
+ gl: WebGLRenderingContext,
71
+ program: WebGLProgram
72
+ ): TWebGLUniformLocationMap {
73
+ return {
74
+ uMode: gl.getUniformLocation(program, 'uMode'),
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Send data from this filter to its shader program's uniforms.
80
+ *
81
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
82
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
83
+ */
84
+ sendUniformData(
85
+ gl: WebGLRenderingContext,
86
+ uniformLocations: TWebGLUniformLocationMap
87
+ ) {
88
+ const mode = 1;
89
+ gl.uniform1i(uniformLocations.uMode, mode);
90
+ }
91
+
92
+ /**
93
+ * Grayscale filter isNeutralState implementation
94
+ * The filter is never neutral
95
+ * on the image
96
+ **/
97
+ isNeutralState() {
98
+ return false;
99
+ }
100
+ }
101
+
102
+ classRegistry.setClass(Grayscale);
@@ -0,0 +1,62 @@
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 '../ClassRegistry';
7
+
8
+ export const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>> =
9
+ {
10
+ rotation: 0,
11
+ mainParameter: 'rotation',
12
+ };
13
+
14
+ /**
15
+ * HueRotation filter class
16
+ * @example
17
+ * const filter = new HueRotation({
18
+ * rotation: -0.5
19
+ * });
20
+ * object.filters.push(filter);
21
+ * object.applyFilters();
22
+ */
23
+ // @ts-expect-error some babbling about mainParameter
24
+ export class HueRotation extends ColorMatrix {
25
+ /**
26
+ * HueRotation value, from -1 to 1.
27
+ */
28
+ declare rotation: number;
29
+
30
+ static defaults = hueRotationDefaultValues;
31
+
32
+ calculateMatrix() {
33
+ const rad = this.rotation * Math.PI,
34
+ cosine = cos(rad),
35
+ sine = sin(rad),
36
+ aThird = 1 / 3,
37
+ aThirdSqtSin = Math.sqrt(aThird) * sine,
38
+ OneMinusCos = 1 - cosine;
39
+ this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
40
+ this.matrix[0] = cosine + OneMinusCos / 3;
41
+ this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;
42
+ this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;
43
+ this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;
44
+ this.matrix[6] = cosine + aThird * OneMinusCos;
45
+ this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;
46
+ this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;
47
+ this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;
48
+ this.matrix[12] = cosine + aThird * OneMinusCos;
49
+ }
50
+
51
+ isNeutralState() {
52
+ this.calculateMatrix();
53
+ return super.isNeutralState();
54
+ }
55
+
56
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
57
+ this.calculateMatrix();
58
+ super.applyTo(options);
59
+ }
60
+ }
61
+
62
+ classRegistry.setClass(HueRotation);
@@ -0,0 +1,99 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../ClassRegistry';
5
+ import { fragmentSource } from './shaders/invert';
6
+
7
+ export const invertDefaultValues: Partial<TClassProperties<Invert>> = {
8
+ alpha: false,
9
+ invert: true,
10
+ mainParameter: 'invert',
11
+ };
12
+
13
+ /**
14
+ * @example
15
+ * const filter = new Invert();
16
+ * object.filters.push(filter);
17
+ * object.applyFilters(canvas.renderAll.bind(canvas));
18
+ */
19
+ export class Invert extends BaseFilter {
20
+ /**
21
+ * Invert also alpha.
22
+ * @param {Boolean} alpha
23
+ * @default
24
+ **/
25
+ declare alpha: boolean;
26
+
27
+ /**
28
+ * Filter invert. if false, does nothing
29
+ * @param {Boolean} invert
30
+ * @default
31
+ */
32
+ declare invert: boolean;
33
+
34
+ static defaults = invertDefaultValues;
35
+
36
+ /**
37
+ * Apply the Invert operation to a Uint8Array representing the pixels of an image.
38
+ *
39
+ * @param {Object} options
40
+ * @param {ImageData} options.imageData The Uint8Array to be filtered.
41
+ */
42
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
43
+ for (let i = 0; i < data.length; i += 4) {
44
+ data[i] = 255 - data[i];
45
+ data[i + 1] = 255 - data[i + 1];
46
+ data[i + 2] = 255 - data[i + 2];
47
+
48
+ if (this.alpha) {
49
+ data[i + 3] = 255 - data[i + 3];
50
+ }
51
+ }
52
+ }
53
+
54
+ protected getFragmentSource(): string {
55
+ return fragmentSource;
56
+ }
57
+
58
+ /**
59
+ * Invert filter isNeutralState implementation
60
+ * Used only in image applyFilters to discard filters that will not have an effect
61
+ * on the image
62
+ * @param {Object} options
63
+ **/
64
+ isNeutralState() {
65
+ return !this.invert;
66
+ }
67
+
68
+ /**
69
+ * Return WebGL uniform locations for this filter's shader.
70
+ *
71
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
72
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
73
+ */
74
+ getUniformLocations(
75
+ gl: WebGLRenderingContext,
76
+ program: WebGLProgram
77
+ ): TWebGLUniformLocationMap {
78
+ return {
79
+ uInvert: gl.getUniformLocation(program, 'uInvert'),
80
+ uAlpha: gl.getUniformLocation(program, 'uAlpha'),
81
+ };
82
+ }
83
+
84
+ /**
85
+ * Send data from this filter to its shader program's uniforms.
86
+ *
87
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
88
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
89
+ */
90
+ sendUniformData(
91
+ gl: WebGLRenderingContext,
92
+ uniformLocations: TWebGLUniformLocationMap
93
+ ) {
94
+ gl.uniform1i(uniformLocations.uInvert, Number(this.invert));
95
+ gl.uniform1i(uniformLocations.uAlpha, Number(this.alpha));
96
+ }
97
+ }
98
+
99
+ classRegistry.setClass(Invert);