fabric 5.3.0 → 6.0.0-beta3

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