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,217 @@
1
+ import { Color } from '../color/Color';
2
+ import { TClassProperties } from '../typedefs';
3
+ import { BaseFilter } from './BaseFilter';
4
+ import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
5
+ import { classRegistry } from '../ClassRegistry';
6
+ import { blendColorFragmentSource } from './shaders/blendColor';
7
+
8
+ type TBlendMode =
9
+ | 'multiply'
10
+ | 'add'
11
+ | 'difference'
12
+ | 'screen'
13
+ | 'subtract'
14
+ | 'darken'
15
+ | 'lighten'
16
+ | 'overlay'
17
+ | 'exclusion'
18
+ | 'tint';
19
+
20
+ export const blendColorDefaultValues: Partial<TClassProperties<BlendColor>> = {
21
+ color: '#F95C63',
22
+ mode: 'multiply',
23
+ alpha: 1,
24
+ };
25
+
26
+ /**
27
+ * Color Blend filter class
28
+ * @example
29
+ * const filter = new BlendColor({
30
+ * color: '#000',
31
+ * mode: 'multiply'
32
+ * });
33
+ *
34
+ * const filter = new BlendImage({
35
+ * image: fabricImageObject,
36
+ * mode: 'multiply',
37
+ * alpha: 0.5
38
+ * });
39
+ * object.filters.push(filter);
40
+ * object.applyFilters();
41
+ * canvas.renderAll();
42
+ */
43
+ export class BlendColor extends BaseFilter {
44
+ /**
45
+ * Color to make the blend operation with. default to a reddish color since black or white
46
+ * gives always strong result.
47
+ * @type String
48
+ * @default
49
+ **/
50
+ declare color: string;
51
+
52
+ /**
53
+ * Blend mode for the filter: one of multiply, add, difference, screen, subtract,
54
+ * darken, lighten, overlay, exclusion, tint.
55
+ * @type String
56
+ * @default
57
+ **/
58
+ declare mode: TBlendMode;
59
+
60
+ /**
61
+ * alpha value. represent the strength of the blend color operation.
62
+ * @type Number
63
+ * @default
64
+ **/
65
+ declare alpha: number;
66
+
67
+ static defaults = blendColorDefaultValues;
68
+
69
+ getCacheKey() {
70
+ return `${this.type}_${this.mode}`;
71
+ }
72
+
73
+ protected getFragmentSource(): string {
74
+ return `
75
+ precision highp float;
76
+ uniform sampler2D uTexture;
77
+ uniform vec4 uColor;
78
+ varying vec2 vTexCoord;
79
+ void main() {
80
+ vec4 color = texture2D(uTexture, vTexCoord);
81
+ gl_FragColor = color;
82
+ if (color.a > 0.0) {
83
+ ${blendColorFragmentSource[this.mode]}
84
+ }
85
+ }
86
+ `;
87
+ }
88
+
89
+ /**
90
+ * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.
91
+ *
92
+ * @param {Object} options
93
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
94
+ */
95
+ applyTo2d({ imageData: { data } }: T2DPipelineState) {
96
+ const source = new Color(this.color).getSource();
97
+ const tr = source[0] * this.alpha;
98
+ const tg = source[1] * this.alpha;
99
+ const tb = source[2] * this.alpha;
100
+ const alpha1 = 1 - this.alpha;
101
+
102
+ for (let i = 0; i < data.length; i += 4) {
103
+ const r = data[i];
104
+ const g = data[i + 1];
105
+ const b = data[i + 2];
106
+
107
+ switch (this.mode) {
108
+ case 'multiply':
109
+ data[i] = (r * tr) / 255;
110
+ data[i + 1] = (g * tg) / 255;
111
+ data[i + 2] = (b * tb) / 255;
112
+ break;
113
+ case 'screen':
114
+ data[i] = 255 - ((255 - r) * (255 - tr)) / 255;
115
+ data[i + 1] = 255 - ((255 - g) * (255 - tg)) / 255;
116
+ data[i + 2] = 255 - ((255 - b) * (255 - tb)) / 255;
117
+ break;
118
+ case 'add':
119
+ data[i] = r + tr;
120
+ data[i + 1] = g + tg;
121
+ data[i + 2] = b + tb;
122
+ break;
123
+ case 'difference':
124
+ data[i] = Math.abs(r - tr);
125
+ data[i + 1] = Math.abs(g - tg);
126
+ data[i + 2] = Math.abs(b - tb);
127
+ break;
128
+ case 'subtract':
129
+ data[i] = r - tr;
130
+ data[i + 1] = g - tg;
131
+ data[i + 2] = b - tb;
132
+ break;
133
+ case 'darken':
134
+ data[i] = Math.min(r, tr);
135
+ data[i + 1] = Math.min(g, tg);
136
+ data[i + 2] = Math.min(b, tb);
137
+ break;
138
+ case 'lighten':
139
+ data[i] = Math.max(r, tr);
140
+ data[i + 1] = Math.max(g, tg);
141
+ data[i + 2] = Math.max(b, tb);
142
+ break;
143
+ case 'overlay':
144
+ data[i] =
145
+ tr < 128
146
+ ? (2 * r * tr) / 255
147
+ : 255 - (2 * (255 - r) * (255 - tr)) / 255;
148
+ data[i + 1] =
149
+ tg < 128
150
+ ? (2 * g * tg) / 255
151
+ : 255 - (2 * (255 - g) * (255 - tg)) / 255;
152
+ data[i + 2] =
153
+ tb < 128
154
+ ? (2 * b * tb) / 255
155
+ : 255 - (2 * (255 - b) * (255 - tb)) / 255;
156
+ break;
157
+ case 'exclusion':
158
+ data[i] = tr + r - (2 * tr * r) / 255;
159
+ data[i + 1] = tg + g - (2 * tg * g) / 255;
160
+ data[i + 2] = tb + b - (2 * tb * b) / 255;
161
+ break;
162
+ case 'tint':
163
+ data[i] = tr + r * alpha1;
164
+ data[i + 1] = tg + g * alpha1;
165
+ data[i + 2] = tb + b * alpha1;
166
+ }
167
+ }
168
+ }
169
+
170
+ /**
171
+ * Return WebGL uniform locations for this filter's shader.
172
+ *
173
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
174
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
175
+ */
176
+ getUniformLocations(
177
+ gl: WebGLRenderingContext,
178
+ program: WebGLProgram
179
+ ): TWebGLUniformLocationMap {
180
+ return {
181
+ uColor: gl.getUniformLocation(program, 'uColor'),
182
+ };
183
+ }
184
+
185
+ /**
186
+ * Send data from this filter to its shader program's uniforms.
187
+ *
188
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
189
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
190
+ */
191
+ sendUniformData(
192
+ gl: WebGLRenderingContext,
193
+ uniformLocations: TWebGLUniformLocationMap
194
+ ) {
195
+ const source = new Color(this.color).getSource();
196
+ source[0] = (this.alpha * source[0]) / 255;
197
+ source[1] = (this.alpha * source[1]) / 255;
198
+ source[2] = (this.alpha * source[2]) / 255;
199
+ source[3] = this.alpha;
200
+ gl.uniform4fv(uniformLocations.uColor, source);
201
+ }
202
+
203
+ /**
204
+ * Returns object representation of an instance
205
+ * @return {Object} Object representation of an instance
206
+ */
207
+ toObject() {
208
+ return {
209
+ type: this.type,
210
+ color: this.color,
211
+ mode: this.mode,
212
+ alpha: this.alpha,
213
+ };
214
+ }
215
+ }
216
+
217
+ classRegistry.setClass(BlendColor);
@@ -0,0 +1,228 @@
1
+ import { Image } from '../shapes/Image';
2
+ import type { TClassProperties } from '../typedefs';
3
+ import { createCanvasElement } from '../util/misc/dom';
4
+ import { BaseFilter } from './BaseFilter';
5
+ import type {
6
+ T2DPipelineState,
7
+ TWebGLPipelineState,
8
+ TWebGLUniformLocationMap,
9
+ } from './typedefs';
10
+ import { WebGLFilterBackend } from './WebGLFilterBackend';
11
+ import { classRegistry } from '../ClassRegistry';
12
+ import { fragmentSource } from './shaders/blendImage';
13
+
14
+ export type TBlendImageMode = 'multiply' | 'mask';
15
+
16
+ export const blendImageDefaultValues: Partial<TClassProperties<BlendImage>> = {
17
+ mode: 'multiply',
18
+ alpha: 1,
19
+ vertexSource: `
20
+ attribute vec2 aPosition;
21
+ varying vec2 vTexCoord;
22
+ varying vec2 vTexCoord2;
23
+ uniform mat3 uTransformMatrix;
24
+ void main() {
25
+ vTexCoord = aPosition;
26
+ vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
27
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
28
+ }
29
+ `,
30
+ };
31
+
32
+ /**
33
+ * Image Blend filter class
34
+ * @example
35
+ * const filter = new filters.BlendColor({
36
+ * color: '#000',
37
+ * mode: 'multiply'
38
+ * });
39
+ *
40
+ * const filter = new BlendImage({
41
+ * image: fabricImageObject,
42
+ * mode: 'multiply',
43
+ * alpha: 0.5
44
+ * });
45
+ * object.filters.push(filter);
46
+ * object.applyFilters();
47
+ * canvas.renderAll();
48
+ */
49
+ export class BlendImage extends BaseFilter {
50
+ /**
51
+ * Color to make the blend operation with. default to a reddish color since black or white
52
+ * gives always strong result.
53
+ **/
54
+ declare image: Image;
55
+
56
+ declare mode: TBlendImageMode;
57
+
58
+ /**
59
+ * alpha value. represent the strength of the blend image operation.
60
+ * not implemented.
61
+ **/
62
+ declare alpha: number;
63
+
64
+ static defaults = blendImageDefaultValues;
65
+
66
+ getCacheKey() {
67
+ return `${this.type}_${this.mode}`;
68
+ }
69
+
70
+ getFragmentSource(): string {
71
+ return fragmentSource[this.mode];
72
+ }
73
+
74
+ applyToWebGL(options: TWebGLPipelineState) {
75
+ const gl = options.context,
76
+ texture = this.createTexture(options.filterBackend, this.image);
77
+ this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);
78
+ super.applyToWebGL(options);
79
+ this.unbindAdditionalTexture(gl, gl.TEXTURE1);
80
+ }
81
+
82
+ createTexture(backend: WebGLFilterBackend, image: Image) {
83
+ return backend.getCachedTexture(image.cacheKey, image.getElement());
84
+ }
85
+
86
+ /**
87
+ * Calculate a transformMatrix to adapt the image to blend over
88
+ * @param {Object} options
89
+ * @param {WebGLRenderingContext} options.context The GL context used for rendering.
90
+ * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.
91
+ */
92
+ calculateMatrix() {
93
+ const image = this.image,
94
+ { width, height } = image.getElement();
95
+ return [
96
+ 1 / image.scaleX,
97
+ 0,
98
+ 0,
99
+ 0,
100
+ 1 / image.scaleY,
101
+ 0,
102
+ -image.left / width,
103
+ -image.top / height,
104
+ 1,
105
+ ];
106
+ }
107
+
108
+ /**
109
+ * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.
110
+ *
111
+ * @param {Object} options
112
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
113
+ */
114
+ applyTo2d({
115
+ imageData: { data, width, height },
116
+ filterBackend: { resources },
117
+ }: T2DPipelineState) {
118
+ const image = this.image;
119
+ if (!resources.blendImage) {
120
+ resources.blendImage = createCanvasElement();
121
+ }
122
+ const canvas1 = resources.blendImage;
123
+ const context = canvas1.getContext('2d')!;
124
+ if (canvas1.width !== width || canvas1.height !== height) {
125
+ canvas1.width = width;
126
+ canvas1.height = height;
127
+ } else {
128
+ context.clearRect(0, 0, width, height);
129
+ }
130
+ context.setTransform(
131
+ image.scaleX,
132
+ 0,
133
+ 0,
134
+ image.scaleY,
135
+ image.left,
136
+ image.top
137
+ );
138
+ context.drawImage(image.getElement(), 0, 0, width, height);
139
+ const blendData = context.getImageData(0, 0, width, height).data;
140
+ for (let i = 0; i < data.length; i += 4) {
141
+ const r = data[i];
142
+ const g = data[i + 1];
143
+ const b = data[i + 2];
144
+ const a = data[i + 3];
145
+
146
+ const tr = blendData[i];
147
+ const tg = blendData[i + 1];
148
+ const tb = blendData[i + 2];
149
+ const ta = blendData[i + 3];
150
+
151
+ switch (this.mode) {
152
+ case 'multiply':
153
+ data[i] = (r * tr) / 255;
154
+ data[i + 1] = (g * tg) / 255;
155
+ data[i + 2] = (b * tb) / 255;
156
+ data[i + 3] = (a * ta) / 255;
157
+ break;
158
+ case 'mask':
159
+ data[i + 3] = ta;
160
+ break;
161
+ }
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Return WebGL uniform locations for this filter's shader.
167
+ *
168
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
169
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
170
+ */
171
+ getUniformLocations(
172
+ gl: WebGLRenderingContext,
173
+ program: WebGLProgram
174
+ ): TWebGLUniformLocationMap {
175
+ return {
176
+ uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),
177
+ uImage: gl.getUniformLocation(program, 'uImage'),
178
+ };
179
+ }
180
+
181
+ /**
182
+ * Send data from this filter to its shader program's uniforms.
183
+ *
184
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
185
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
186
+ */
187
+ sendUniformData(
188
+ gl: WebGLRenderingContext,
189
+ uniformLocations: TWebGLUniformLocationMap
190
+ ) {
191
+ const matrix = this.calculateMatrix();
192
+ gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.
193
+ gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);
194
+ }
195
+
196
+ /**
197
+ * Returns object representation of an instance
198
+ * @return {Object} Object representation of an instance
199
+ */
200
+ toObject() {
201
+ return {
202
+ type: this.type,
203
+ image: this.image && this.image.toObject(),
204
+ mode: this.mode,
205
+ alpha: this.alpha,
206
+ };
207
+ }
208
+
209
+ /**
210
+ * Create filter instance from an object representation
211
+ * @static
212
+ * @param {object} object Object to create an instance from
213
+ * @param {object} [options]
214
+ * @param {AbortSignal} [options.signal] handle aborting image loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
215
+ * @returns {Promise<BlendImage>}
216
+ */
217
+ static fromObject(
218
+ { type, image, ...filterOptions }: Record<string, any>,
219
+ options: { signal: AbortSignal }
220
+ ) {
221
+ return Image.fromObject(image, options).then(
222
+ (enlivedImage) =>
223
+ new this({ ...filterOptions, image: enlivedImage }) as BaseFilter
224
+ );
225
+ }
226
+ }
227
+
228
+ classRegistry.setClass(BlendImage);
@@ -0,0 +1,179 @@
1
+ import type { TClassProperties } from '../typedefs';
2
+ import { createCanvasElement } from '../util/misc/dom';
3
+ import { BaseFilter } from './BaseFilter';
4
+ import type {
5
+ TWebGLPipelineState,
6
+ T2DPipelineState,
7
+ TWebGLUniformLocationMap,
8
+ } from './typedefs';
9
+ import { isWebGLPipelineState } from './typedefs';
10
+ import { classRegistry } from '../ClassRegistry';
11
+ import { fragmentSource } from './shaders/blur';
12
+
13
+ export const blurDefaultValues: Partial<TClassProperties<Blur>> = {
14
+ blur: 0,
15
+ mainParameter: 'blur',
16
+ };
17
+
18
+ /**
19
+ * Blur filter class
20
+ * @example
21
+ * const filter = new Blur({
22
+ * blur: 0.5
23
+ * });
24
+ * object.filters.push(filter);
25
+ * object.applyFilters();
26
+ * canvas.renderAll();
27
+ */
28
+ export class Blur extends BaseFilter {
29
+ /**
30
+ * blur value, in percentage of image dimensions.
31
+ * specific to keep the image blur constant at different resolutions
32
+ * range between 0 and 1.
33
+ * @type Number
34
+ * @default
35
+ */
36
+ declare blur: number;
37
+
38
+ declare horizontal: boolean;
39
+ declare aspectRatio: number;
40
+
41
+ static defaults = blurDefaultValues;
42
+
43
+ getFragmentSource(): string {
44
+ return fragmentSource;
45
+ }
46
+
47
+ applyTo(options: TWebGLPipelineState | T2DPipelineState) {
48
+ if (isWebGLPipelineState(options)) {
49
+ // this aspectRatio is used to give the same blur to vertical and horizontal
50
+ this.aspectRatio = options.sourceWidth / options.sourceHeight;
51
+ options.passes++;
52
+ this._setupFrameBuffer(options);
53
+ this.horizontal = true;
54
+ this.applyToWebGL(options);
55
+ this._swapTextures(options);
56
+ this._setupFrameBuffer(options);
57
+ this.horizontal = false;
58
+ this.applyToWebGL(options);
59
+ this._swapTextures(options);
60
+ } else {
61
+ this.applyTo2d(options);
62
+ }
63
+ }
64
+
65
+ applyTo2d(options: T2DPipelineState) {
66
+ options.imageData = this.simpleBlur(options);
67
+ }
68
+
69
+ simpleBlur({
70
+ ctx,
71
+ imageData,
72
+ filterBackend: { resources },
73
+ }: T2DPipelineState) {
74
+ const { width, height } = imageData;
75
+ if (!resources.blurLayer1) {
76
+ resources.blurLayer1 = createCanvasElement();
77
+ resources.blurLayer2 = createCanvasElement();
78
+ }
79
+ const canvas1 = resources.blurLayer1!;
80
+ const canvas2 = resources.blurLayer2!;
81
+ if (canvas1.width !== width || canvas1.height !== height) {
82
+ canvas2.width = canvas1.width = width;
83
+ canvas2.height = canvas1.height = height;
84
+ }
85
+ const ctx1 = canvas1.getContext('2d')!,
86
+ ctx2 = canvas2.getContext('2d')!,
87
+ nSamples = 15,
88
+ blur = this.blur * 0.06 * 0.5;
89
+ let random, percent, j, i;
90
+
91
+ // load first canvas
92
+ ctx1.putImageData(imageData, 0, 0);
93
+ ctx2.clearRect(0, 0, width, height);
94
+
95
+ for (i = -nSamples; i <= nSamples; i++) {
96
+ random = (Math.random() - 0.5) / 4;
97
+ percent = i / nSamples;
98
+ j = blur * percent * width + random;
99
+ ctx2.globalAlpha = 1 - Math.abs(percent);
100
+ ctx2.drawImage(canvas1, j, random);
101
+ ctx1.drawImage(canvas2, 0, 0);
102
+ ctx2.globalAlpha = 1;
103
+ ctx2.clearRect(0, 0, canvas2.width, canvas2.height);
104
+ }
105
+ for (i = -nSamples; i <= nSamples; i++) {
106
+ random = (Math.random() - 0.5) / 4;
107
+ percent = i / nSamples;
108
+ j = blur * percent * height + random;
109
+ ctx2.globalAlpha = 1 - Math.abs(percent);
110
+ ctx2.drawImage(canvas1, random, j);
111
+ ctx1.drawImage(canvas2, 0, 0);
112
+ ctx2.globalAlpha = 1;
113
+ ctx2.clearRect(0, 0, canvas2.width, canvas2.height);
114
+ }
115
+ ctx.drawImage(canvas1, 0, 0);
116
+ const newImageData = ctx.getImageData(0, 0, canvas1.width, canvas1.height);
117
+ ctx1.globalAlpha = 1;
118
+ ctx1.clearRect(0, 0, canvas1.width, canvas1.height);
119
+ return newImageData;
120
+ }
121
+
122
+ /**
123
+ * Return WebGL uniform locations for this filter's shader.
124
+ *
125
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
126
+ * @param {WebGLShaderProgram} program This filter's compiled shader program.
127
+ */
128
+ getUniformLocations(
129
+ gl: WebGLRenderingContext,
130
+ program: WebGLProgram
131
+ ): TWebGLUniformLocationMap {
132
+ return {
133
+ delta: gl.getUniformLocation(program, 'uDelta'),
134
+ };
135
+ }
136
+
137
+ /**
138
+ * Send data from this filter to its shader program's uniforms.
139
+ *
140
+ * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
141
+ * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
142
+ */
143
+ sendUniformData(
144
+ gl: WebGLRenderingContext,
145
+ uniformLocations: TWebGLUniformLocationMap
146
+ ) {
147
+ const delta = this.chooseRightDelta();
148
+ gl.uniform2fv(uniformLocations.delta, delta);
149
+ }
150
+
151
+ /**
152
+ * choose right value of image percentage to blur with
153
+ * @returns {Array} a numeric array with delta values
154
+ */
155
+ chooseRightDelta() {
156
+ let blurScale = 1;
157
+ const delta = [0, 0];
158
+ if (this.horizontal) {
159
+ if (this.aspectRatio > 1) {
160
+ // image is wide, i want to shrink radius horizontal
161
+ blurScale = 1 / this.aspectRatio;
162
+ }
163
+ } else {
164
+ if (this.aspectRatio < 1) {
165
+ // image is tall, i want to shrink radius vertical
166
+ blurScale = this.aspectRatio;
167
+ }
168
+ }
169
+ const blur = blurScale * this.blur * 0.12;
170
+ if (this.horizontal) {
171
+ delta[0] = blur;
172
+ } else {
173
+ delta[1] = blur;
174
+ }
175
+ return delta;
176
+ }
177
+ }
178
+
179
+ classRegistry.setClass(Blur);
@@ -0,0 +1,94 @@
1
+ import { TClassProperties } from '../typedefs';
2
+ import { BaseFilter } from './BaseFilter';
3
+ import { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
4
+
5
+ export const myFilterDefaultValues: Partial<TClassProperties<MyFilter>> = {
6
+ myParameter: 0,
7
+ mainParameter: 'myParameter',
8
+ };
9
+
10
+ /**
11
+ * MyFilter filter class
12
+ * @example
13
+ * const filter = new MyFilter({
14
+ * add here an example of how to use your filter
15
+ * });
16
+ * object.filters.push(filter);
17
+ * object.applyFilters();
18
+ */
19
+ export class MyFilter extends BaseFilter {
20
+ /**
21
+ * MyFilter value, from -1 to 1.
22
+ * translated to -255 to 255 for 2d
23
+ * 0.0039215686 is the part of 1 that get translated to 1 in 2d
24
+ * @param {Number} myParameter
25
+ * @default
26
+ */
27
+ declare myParameter: number;
28
+
29
+ static defaults = myFilterDefaultValues;
30
+
31
+ getFragmentSource() {
32
+ return `
33
+ precision highp float;
34
+ uniform sampler2D uTexture;
35
+ uniform float uMyParameter;
36
+ varying vec2 vTexCoord;
37
+ void main() {
38
+ vec4 color = texture2D(uTexture, vTexCoord);
39
+ // add your gl code here
40
+ gl_FragColor = color;
41
+ }
42
+ `;
43
+ }
44
+ /**
45
+ * Apply the MyFilter operation to a Uint8ClampedArray representing the pixels of an image.
46
+ *
47
+ * @param {Object} options
48
+ * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
49
+ */
50
+ applyTo2d(options: T2DPipelineState) {
51
+ if (this.myParameter === 0) {
52
+ // early return if the parameter value has a neutral value
53
+ return;
54
+ }
55
+
56
+ for (let i = 0; i < options.imageData.data.length; i += 4) {
57
+ // insert here your code to modify data[i]
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
+ uMyParameter: gl.getUniformLocation(program, 'uMyParameter'),
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.uMyParameter, this.myParameter);
87
+ }
88
+
89
+ static async fromObject(object: any) {
90
+ // or overide with custom logic if your filter needs to
91
+ // deserialize something that is not a plain value
92
+ return new this(object) as BaseFilter;
93
+ }
94
+ }