fabric 5.3.0 → 6.0.0-beta10

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