fabric 5.3.0-browser → 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 +142 -88
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,540 @@
1
+ // @ts-nocheck
2
+ import { getEnv } from '../env';
3
+ import type { TClassProperties } from '../typedefs';
4
+ import { BaseFilter } from './BaseFilter';
5
+ import type { T2DPipelineState, TWebGLPipelineState } from './typedefs';
6
+ import { isWebGLPipelineState } from './typedefs';
7
+ import { classRegistry } from '../util/class_registry';
8
+
9
+ /**
10
+ * Resize image filter class
11
+ * @example
12
+ * const filter = new Resize();
13
+ * object.filters.push(filter);
14
+ * object.applyFilters(canvas.renderAll.bind(canvas));
15
+ */
16
+ export class Resize extends BaseFilter {
17
+ /**
18
+ * Resize type
19
+ * for webgl resizeType is just lanczos, for canvas2d can be:
20
+ * bilinear, hermite, sliceHack, lanczos.
21
+ * @default
22
+ */
23
+ declare resizeType: 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';
24
+
25
+ /**
26
+ * Scale factor for resizing, x axis
27
+ * @param {Number} scaleX
28
+ * @default
29
+ */
30
+ declare scaleX: number;
31
+
32
+ /**
33
+ * Scale factor for resizing, y axis
34
+ * @param {Number} scaleY
35
+ * @default
36
+ */
37
+ declare scaleY: number;
38
+
39
+ /**
40
+ * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos
41
+ * @param {Number} lanczosLobes
42
+ * @default
43
+ */
44
+ declare lanczosLobes: number;
45
+
46
+ declare fragmentSourceTOP: string;
47
+
48
+ /**
49
+ * Return WebGL uniform locations for this filter's shader.
50
+ *
51
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
52
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
53
+ */
54
+ getUniformLocations(gl, program) {
55
+ return {
56
+ uDelta: gl.getUniformLocation(program, 'uDelta'),
57
+ uTaps: gl.getUniformLocation(program, 'uTaps'),
58
+ };
59
+ }
60
+
61
+ /**
62
+ * Send data from this filter to its shader program's uniforms.
63
+ *
64
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
65
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
66
+ */
67
+ sendUniformData(gl, uniformLocations) {
68
+ gl.uniform2fv(
69
+ uniformLocations.uDelta,
70
+ this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]
71
+ );
72
+ gl.uniform1fv(uniformLocations.uTaps, this.taps);
73
+ }
74
+
75
+ getFilterWindow() {
76
+ const scale = this.tempScale;
77
+ return Math.ceil(this.lanczosLobes / scale);
78
+ }
79
+
80
+ getCacheKey(): string {
81
+ const filterWindow = this.getFilterWindow();
82
+ return `${this.type}_${filterWindow}`;
83
+ }
84
+
85
+ getFragmentSource(): string {
86
+ const filterWindow = this.getFilterWindow();
87
+ return this.generateShader(filterWindow);
88
+ }
89
+
90
+ getTaps() {
91
+ const lobeFunction = this.lanczosCreate(this.lanczosLobes),
92
+ scale = this.tempScale,
93
+ filterWindow = this.getFilterWindow(),
94
+ taps = new Array(filterWindow);
95
+ for (let i = 1; i <= filterWindow; i++) {
96
+ taps[i - 1] = lobeFunction(i * scale);
97
+ }
98
+ return taps;
99
+ }
100
+
101
+ /**
102
+ * Generate vertex and shader sources from the necessary steps numbers
103
+ * @param {Number} filterWindow
104
+ */
105
+ generateShader(filterWindow: number) {
106
+ const offsets = new Array(filterWindow);
107
+ for (let i = 1; i <= filterWindow; i++) {
108
+ offsets[i - 1] = `${i}.0 * uDelta`;
109
+ }
110
+ return `
111
+ ${this.fragmentSourceTOP}
112
+ uniform float uTaps[${filterWindow}];
113
+ void main() {
114
+ vec4 color = texture2D(uTexture, vTexCoord);
115
+ float sum = 1.0;
116
+ ${offsets
117
+ .map(
118
+ (offset, i) => `
119
+ color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];
120
+ sum += 2.0 * uTaps[${i}];
121
+ `
122
+ )
123
+ .join('\n')}
124
+ gl_FragColor = color / sum;
125
+ }
126
+ `;
127
+ }
128
+
129
+ /**
130
+ * Apply the resize filter to the image
131
+ * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.
132
+ *
133
+ * @param {Object} options
134
+ * @param {Number} options.passes The number of filters remaining to be executed
135
+ * @param {Boolean} options.webgl Whether to use webgl to render the filter.
136
+ * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.
137
+ * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.
138
+ * @param {WebGLRenderingContext} options.context The GL context used for rendering.
139
+ * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
140
+ */
141
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
142
+ if (isWebGLPipelineState(options)) {
143
+ options.passes++;
144
+ this.width = options.sourceWidth;
145
+ this.horizontal = true;
146
+ this.dW = Math.round(this.width * this.scaleX);
147
+ this.dH = options.sourceHeight;
148
+ this.tempScale = this.dW / this.width;
149
+ this.taps = this.getTaps();
150
+ options.destinationWidth = this.dW;
151
+ this._setupFrameBuffer(options);
152
+ this.applyToWebGL(options);
153
+ this._swapTextures(options);
154
+ options.sourceWidth = options.destinationWidth;
155
+
156
+ this.height = options.sourceHeight;
157
+ this.horizontal = false;
158
+ this.dH = Math.round(this.height * this.scaleY);
159
+ this.tempScale = this.dH / this.height;
160
+ this.taps = this.getTaps();
161
+ options.destinationHeight = this.dH;
162
+ this._setupFrameBuffer(options);
163
+ this.applyToWebGL(options);
164
+ this._swapTextures(options);
165
+ options.sourceHeight = options.destinationHeight;
166
+ } else {
167
+ this.applyTo2d(options);
168
+ }
169
+ }
170
+
171
+ isNeutralState() {
172
+ return this.scaleX === 1 && this.scaleY === 1;
173
+ }
174
+
175
+ lanczosCreate(lobes: number) {
176
+ return (x: number) => {
177
+ if (x >= lobes || x <= -lobes) {
178
+ return 0.0;
179
+ }
180
+ if (x < 1.1920929e-7 && x > -1.1920929e-7) {
181
+ return 1.0;
182
+ }
183
+ x *= Math.PI;
184
+ const xx = x / lobes;
185
+ return ((Math.sin(x) / x) * Math.sin(xx)) / xx;
186
+ };
187
+ }
188
+
189
+ applyTo2d(options: T2DPipelineState) {
190
+ const imageData = options.imageData,
191
+ scaleX = this.scaleX,
192
+ scaleY = this.scaleY;
193
+
194
+ this.rcpScaleX = 1 / scaleX;
195
+ this.rcpScaleY = 1 / scaleY;
196
+
197
+ let oW = imageData.width,
198
+ oH = imageData.height,
199
+ dW = Math.round(oW * scaleX),
200
+ dH = Math.round(oH * scaleY),
201
+ newData;
202
+
203
+ if (this.resizeType === 'sliceHack') {
204
+ newData = this.sliceByTwo(options, oW, oH, dW, dH);
205
+ } else if (this.resizeType === 'hermite') {
206
+ newData = this.hermiteFastResize(options, oW, oH, dW, dH);
207
+ } else if (this.resizeType === 'bilinear') {
208
+ newData = this.bilinearFiltering(options, oW, oH, dW, dH);
209
+ } else if (this.resizeType === 'lanczos') {
210
+ newData = this.lanczosResize(options, oW, oH, dW, dH);
211
+ }
212
+ options.imageData = newData;
213
+ }
214
+
215
+ /**
216
+ * Filter sliceByTwo
217
+ * @param {Object} canvasEl Canvas element to apply filter to
218
+ * @param {Number} oW Original Width
219
+ * @param {Number} oH Original Height
220
+ * @param {Number} dW Destination Width
221
+ * @param {Number} dH Destination Height
222
+ * @returns {ImageData}
223
+ */
224
+ sliceByTwo(
225
+ options: T2DPipelineState,
226
+ oW: number,
227
+ oH: number,
228
+ dW: number,
229
+ dH: number
230
+ ) {
231
+ let imageData = options.imageData,
232
+ mult = 0.5,
233
+ doneW = false,
234
+ doneH = false,
235
+ stepW = oW * mult,
236
+ stepH = oH * mult,
237
+ resources = options.filterBackend.resources,
238
+ sX = 0,
239
+ sY = 0,
240
+ dX = oW,
241
+ dY = 0;
242
+ if (!resources.sliceByTwo) {
243
+ resources.sliceByTwo = getEnv().document.createElement('canvas');
244
+ }
245
+ const tmpCanvas = resources.sliceByTwo;
246
+ if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {
247
+ tmpCanvas.width = oW * 1.5;
248
+ tmpCanvas.height = oH;
249
+ }
250
+ const ctx = tmpCanvas.getContext('2d');
251
+ ctx.clearRect(0, 0, oW * 1.5, oH);
252
+ ctx.putImageData(imageData, 0, 0);
253
+
254
+ dW = Math.floor(dW);
255
+ dH = Math.floor(dH);
256
+
257
+ while (!doneW || !doneH) {
258
+ oW = stepW;
259
+ oH = stepH;
260
+ if (dW < Math.floor(stepW * mult)) {
261
+ stepW = Math.floor(stepW * mult);
262
+ } else {
263
+ stepW = dW;
264
+ doneW = true;
265
+ }
266
+ if (dH < Math.floor(stepH * mult)) {
267
+ stepH = Math.floor(stepH * mult);
268
+ } else {
269
+ stepH = dH;
270
+ doneH = true;
271
+ }
272
+ ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);
273
+ sX = dX;
274
+ sY = dY;
275
+ dY += stepH;
276
+ }
277
+ return ctx.getImageData(sX, sY, dW, dH);
278
+ }
279
+
280
+ /**
281
+ * Filter lanczosResize
282
+ * @param {Object} canvasEl Canvas element to apply filter to
283
+ * @param {Number} oW Original Width
284
+ * @param {Number} oH Original Height
285
+ * @param {Number} dW Destination Width
286
+ * @param {Number} dH Destination Height
287
+ * @returns {ImageData}
288
+ */
289
+ lanczosResize(
290
+ options: T2DPipelineState,
291
+ oW: number,
292
+ oH: number,
293
+ dW: number,
294
+ dH: number
295
+ ) {
296
+ function process(u) {
297
+ let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;
298
+ center.x = (u + 0.5) * ratioX;
299
+ icenter.x = Math.floor(center.x);
300
+ for (v = 0; v < dH; v++) {
301
+ center.y = (v + 0.5) * ratioY;
302
+ icenter.y = Math.floor(center.y);
303
+ a = 0;
304
+ red = 0;
305
+ green = 0;
306
+ blue = 0;
307
+ alpha = 0;
308
+ for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {
309
+ if (i < 0 || i >= oW) {
310
+ continue;
311
+ }
312
+ fX = Math.floor(1000 * Math.abs(i - center.x));
313
+ if (!cacheLanc[fX]) {
314
+ cacheLanc[fX] = {};
315
+ }
316
+ for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {
317
+ if (j < 0 || j >= oH) {
318
+ continue;
319
+ }
320
+ fY = Math.floor(1000 * Math.abs(j - center.y));
321
+ if (!cacheLanc[fX][fY]) {
322
+ cacheLanc[fX][fY] = lanczos(
323
+ Math.sqrt(
324
+ Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2)
325
+ ) / 1000
326
+ );
327
+ }
328
+ weight = cacheLanc[fX][fY];
329
+ if (weight > 0) {
330
+ idx = (j * oW + i) * 4;
331
+ a += weight;
332
+ red += weight * srcData[idx];
333
+ green += weight * srcData[idx + 1];
334
+ blue += weight * srcData[idx + 2];
335
+ alpha += weight * srcData[idx + 3];
336
+ }
337
+ }
338
+ }
339
+ idx = (v * dW + u) * 4;
340
+ destData[idx] = red / a;
341
+ destData[idx + 1] = green / a;
342
+ destData[idx + 2] = blue / a;
343
+ destData[idx + 3] = alpha / a;
344
+ }
345
+
346
+ if (++u < dW) {
347
+ return process(u);
348
+ } else {
349
+ return destImg;
350
+ }
351
+ }
352
+
353
+ const srcData = options.imageData.data,
354
+ destImg = options.ctx.createImageData(dW, dH),
355
+ destData = destImg.data,
356
+ lanczos = this.lanczosCreate(this.lanczosLobes),
357
+ ratioX = this.rcpScaleX,
358
+ ratioY = this.rcpScaleY,
359
+ rcpRatioX = 2 / this.rcpScaleX,
360
+ rcpRatioY = 2 / this.rcpScaleY,
361
+ range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),
362
+ range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),
363
+ cacheLanc = {},
364
+ center = {},
365
+ icenter = {};
366
+
367
+ return process(0);
368
+ }
369
+
370
+ /**
371
+ * bilinearFiltering
372
+ * @param {Object} canvasEl Canvas element to apply filter to
373
+ * @param {Number} oW Original Width
374
+ * @param {Number} oH Original Height
375
+ * @param {Number} dW Destination Width
376
+ * @param {Number} dH Destination Height
377
+ * @returns {ImageData}
378
+ */
379
+ bilinearFiltering(
380
+ options: T2DPipelineState,
381
+ oW: number,
382
+ oH: number,
383
+ dW: number,
384
+ dH: number
385
+ ) {
386
+ let a,
387
+ b,
388
+ c,
389
+ d,
390
+ x,
391
+ y,
392
+ i,
393
+ j,
394
+ xDiff,
395
+ yDiff,
396
+ chnl,
397
+ color,
398
+ offset = 0,
399
+ origPix,
400
+ ratioX = this.rcpScaleX,
401
+ ratioY = this.rcpScaleY,
402
+ w4 = 4 * (oW - 1),
403
+ img = options.imageData,
404
+ pixels = img.data,
405
+ destImage = options.ctx.createImageData(dW, dH),
406
+ destPixels = destImage.data;
407
+ for (i = 0; i < dH; i++) {
408
+ for (j = 0; j < dW; j++) {
409
+ x = Math.floor(ratioX * j);
410
+ y = Math.floor(ratioY * i);
411
+ xDiff = ratioX * j - x;
412
+ yDiff = ratioY * i - y;
413
+ origPix = 4 * (y * oW + x);
414
+
415
+ for (chnl = 0; chnl < 4; chnl++) {
416
+ a = pixels[origPix + chnl];
417
+ b = pixels[origPix + 4 + chnl];
418
+ c = pixels[origPix + w4 + chnl];
419
+ d = pixels[origPix + w4 + 4 + chnl];
420
+ color =
421
+ a * (1 - xDiff) * (1 - yDiff) +
422
+ b * xDiff * (1 - yDiff) +
423
+ c * yDiff * (1 - xDiff) +
424
+ d * xDiff * yDiff;
425
+ destPixels[offset++] = color;
426
+ }
427
+ }
428
+ }
429
+ return destImage;
430
+ }
431
+
432
+ /**
433
+ * hermiteFastResize
434
+ * @param {Object} canvasEl Canvas element to apply filter to
435
+ * @param {Number} oW Original Width
436
+ * @param {Number} oH Original Height
437
+ * @param {Number} dW Destination Width
438
+ * @param {Number} dH Destination Height
439
+ * @returns {ImageData}
440
+ */
441
+ hermiteFastResize(
442
+ options: T2DPipelineState,
443
+ oW: number,
444
+ oH: number,
445
+ dW: number,
446
+ dH: number
447
+ ) {
448
+ const ratioW = this.rcpScaleX,
449
+ ratioH = this.rcpScaleY,
450
+ ratioWHalf = Math.ceil(ratioW / 2),
451
+ ratioHHalf = Math.ceil(ratioH / 2),
452
+ img = options.imageData,
453
+ data = img.data,
454
+ img2 = options.ctx.createImageData(dW, dH),
455
+ data2 = img2.data;
456
+ for (let j = 0; j < dH; j++) {
457
+ for (let i = 0; i < dW; i++) {
458
+ let x2 = (i + j * dW) * 4,
459
+ weight = 0,
460
+ weights = 0,
461
+ weightsAlpha = 0,
462
+ gxR = 0,
463
+ gxG = 0,
464
+ gxB = 0,
465
+ gxA = 0,
466
+ centerY = (j + 0.5) * ratioH;
467
+ for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {
468
+ const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,
469
+ centerX = (i + 0.5) * ratioW,
470
+ w0 = dy * dy;
471
+ for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {
472
+ let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf,
473
+ w = Math.sqrt(w0 + dx * dx);
474
+ /* eslint-disable max-depth */
475
+ if (w > 1 && w < -1) {
476
+ continue;
477
+ }
478
+ //hermite filter
479
+ weight = 2 * w * w * w - 3 * w * w + 1;
480
+ if (weight > 0) {
481
+ dx = 4 * (xx + yy * oW);
482
+ //alpha
483
+ gxA += weight * data[dx + 3];
484
+ weightsAlpha += weight;
485
+ //colors
486
+ if (data[dx + 3] < 255) {
487
+ weight = (weight * data[dx + 3]) / 250;
488
+ }
489
+ gxR += weight * data[dx];
490
+ gxG += weight * data[dx + 1];
491
+ gxB += weight * data[dx + 2];
492
+ weights += weight;
493
+ }
494
+ /* eslint-enable max-depth */
495
+ }
496
+ }
497
+ data2[x2] = gxR / weights;
498
+ data2[x2 + 1] = gxG / weights;
499
+ data2[x2 + 2] = gxB / weights;
500
+ data2[x2 + 3] = gxA / weightsAlpha;
501
+ }
502
+ }
503
+ return img2;
504
+ }
505
+
506
+ /**
507
+ * Returns object representation of an instance
508
+ * @return {Object} Object representation of an instance
509
+ */
510
+ toObject() {
511
+ return {
512
+ type: this.type,
513
+ scaleX: this.scaleX,
514
+ scaleY: this.scaleY,
515
+ resizeType: this.resizeType,
516
+ lanczosLobes: this.lanczosLobes,
517
+ };
518
+ }
519
+
520
+ static async fromObject(object: any) {
521
+ return new Resize(object);
522
+ }
523
+ }
524
+
525
+ export const resizeDefaultValues: Partial<TClassProperties<Resize>> = {
526
+ type: 'Resize',
527
+ resizeType: 'hermite',
528
+ scaleX: 1,
529
+ scaleY: 1,
530
+ lanczosLobes: 3,
531
+ fragmentSourceTOP: `
532
+ precision highp float;
533
+ uniform sampler2D uTexture;
534
+ uniform vec2 uDelta;
535
+ varying vec2 vTexCoord;
536
+ `,
537
+ };
538
+
539
+ Object.assign(Resize.prototype, resizeDefaultValues);
540
+ classRegistry.setClass(Resize);
@@ -0,0 +1,100 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+ import { classRegistry } from '../util/class_registry';
5
+
6
+ /**
7
+ * Saturate filter class
8
+ * @example
9
+ * const filter = new Saturation({
10
+ * saturation: 1
11
+ * });
12
+ * object.filters.push(filter);
13
+ * object.applyFilters();
14
+ */
15
+ export class Saturation extends BaseFilter {
16
+ /**
17
+ * Saturation value, from -1 to 1.
18
+ * Increases/decreases the color saturation.
19
+ * A value of 0 has no effect.
20
+ *
21
+ * @param {Number} saturation
22
+ * @default
23
+ */
24
+ declare saturation: number;
25
+
26
+ /**
27
+ * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.
28
+ *
29
+ * @param {Object} options
30
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
31
+ */
32
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
33
+ if (this.saturation === 0) {
34
+ return;
35
+ }
36
+ const adjust = -this.saturation;
37
+ for (let i = 0; i < data.length; i += 4) {
38
+ const max = Math.max(data[i], data[i + 1], data[i + 2]);
39
+ data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;
40
+ data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;
41
+ data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Return WebGL uniform locations for this filter's shader.
47
+ *
48
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
49
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
50
+ */
51
+ getUniformLocations(
52
+ gl: WebGLRenderingContext,
53
+ program: WebGLProgram
54
+ ): TWebGLUniformLocationMap {
55
+ return {
56
+ uSaturation: gl.getUniformLocation(program, 'uSaturation'),
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Send data from this filter to its shader program's uniforms.
62
+ *
63
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
64
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
65
+ */
66
+ sendUniformData(
67
+ gl: WebGLRenderingContext,
68
+ uniformLocations: TWebGLUniformLocationMap
69
+ ) {
70
+ gl.uniform1f(uniformLocations.uSaturation, -this.saturation);
71
+ }
72
+
73
+ static async fromObject(object: any) {
74
+ return new Saturation(object);
75
+ }
76
+ }
77
+
78
+ export const saturationDefaultValues: Partial<TClassProperties<Saturation>> = {
79
+ type: 'Saturation',
80
+ fragmentSource: `
81
+ precision highp float;
82
+ uniform sampler2D uTexture;
83
+ uniform float uSaturation;
84
+ varying vec2 vTexCoord;
85
+ void main() {
86
+ vec4 color = texture2D(uTexture, vTexCoord);
87
+ float rgMax = max(color.r, color.g);
88
+ float rgbMax = max(rgMax, color.b);
89
+ color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
90
+ color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
91
+ color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
92
+ gl_FragColor = color;
93
+ }
94
+ `,
95
+ saturation: 0,
96
+ mainParameter: 'saturation',
97
+ };
98
+
99
+ Object.assign(Saturation.prototype, saturationDefaultValues);
100
+ classRegistry.setClass(Saturation);