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
@@ -1,97 +0,0 @@
1
- language: node_js
2
-
3
- node_js:
4
- - "12"
5
-
6
- addons:
7
- apt:
8
- packages:
9
- - libgif-dev
10
- - libpng-dev
11
- - libpango1.0-dev
12
- - libjpeg8-dev
13
- - librsvg2-dev
14
- - libcairo2-dev
15
-
16
- stages:
17
- - Linting and Building
18
- - Unit Tests
19
- - Visual Tests
20
- - Extra OS
21
-
22
- cache:
23
- directories:
24
- - node_modules
25
-
26
- env:
27
- global:
28
- - LAUNCHER=Node
29
-
30
- jobs:
31
- fast_finish: true
32
- allow_failures:
33
- - env: CANFAIL=TRUE
34
- - env: LAUNCHER=Node CANFAIL=TRUE
35
- include:
36
- - stage: Linting and Building
37
- env: STEP=LINT
38
- install: npm install eslint@4.7.x
39
- script: 'npm run lint && npm run lint_tests'
40
- addons:
41
- apt:
42
- packages: # avoid installing packages
43
- - stage: Linting and Building
44
- env: STEP=BUILD
45
- install: npm install uglify-js@3.3.x
46
- script: 'npm run build'
47
- addons:
48
- apt:
49
- packages: # avoid installing packages
50
- - stage: Unit Tests
51
- env: LAUNCHER=Chrome
52
- script: npm run build:fast && testem ci --port 8080 -f testem.json -l $LAUNCHER
53
- addons:
54
- apt:
55
- packages: # avoid installing packages
56
- - stage: Unit Tests
57
- env: LAUNCHER=Firefox
58
- script: npm run build:fast && testem ci --port 8080 -f testem.json -l $LAUNCHER
59
- addons:
60
- apt:
61
- packages: # avoid installing packages
62
- - stage: Unit Tests
63
- env: LAUNCHER=Node
64
- node_js: "14"
65
- - stage: Unit Tests
66
- env: LAUNCHER=Node
67
- node_js: "12"
68
- - stage: Visual Tests
69
- env: LAUNCHER=Node
70
- node_js: "12"
71
- script: npm run build:fast && npm run test:visual
72
- - stage: Visual Tests
73
- env: LAUNCHER=Chrome
74
- script: npm run build:fast && testem ci --port 8080 -f testem-visual.json -l $LAUNCHER
75
- addons:
76
- apt:
77
- packages: # avoid installing packages
78
- - stage: Visual Tests
79
- env: LAUNCHER=Firefox
80
- script: npm run build:fast && testem ci --port 8080 -f testem-visual.json -l $LAUNCHER
81
- addons:
82
- apt:
83
- packages: # avoid installing packages
84
- # - stage: Extra OS
85
- # env: CANFAIL=TRUE
86
- # node_js: "10"
87
- # script: npm run build:fast && npm run test:visual
88
- # before_install: brew upgrade giflib && brew install pkg-config cairo pango libpng jpeg librsvg
89
- # os: osx
90
- # - stage: Extra OS
91
- # env: CANFAIL=TRUE
92
- # node_js: "10"
93
- # script: npm run build:fast && npm run test:visual
94
- # os: windows
95
- script: npm run build:fast && npm run test
96
-
97
- dist: bionic
@@ -1,144 +0,0 @@
1
- /**
2
- * CircleBrush class
3
- * @class fabric.CircleBrush
4
- */
5
- fabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {
6
-
7
- /**
8
- * Width of a brush
9
- * @type Number
10
- * @default
11
- */
12
- width: 10,
13
-
14
- /**
15
- * Constructor
16
- * @param {fabric.Canvas} canvas
17
- * @return {fabric.CircleBrush} Instance of a circle brush
18
- */
19
- initialize: function(canvas) {
20
- this.canvas = canvas;
21
- this.points = [];
22
- },
23
-
24
- /**
25
- * Invoked inside on mouse down and mouse move
26
- * @param {Object} pointer
27
- */
28
- drawDot: function(pointer) {
29
- var point = this.addPoint(pointer),
30
- ctx = this.canvas.contextTop;
31
- this._saveAndTransform(ctx);
32
- this.dot(ctx, point);
33
- ctx.restore();
34
- },
35
-
36
- dot: function(ctx, point) {
37
- ctx.fillStyle = point.fill;
38
- ctx.beginPath();
39
- ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);
40
- ctx.closePath();
41
- ctx.fill();
42
- },
43
-
44
- /**
45
- * Invoked on mouse down
46
- */
47
- onMouseDown: function(pointer) {
48
- this.points.length = 0;
49
- this.canvas.clearContext(this.canvas.contextTop);
50
- this._setShadow();
51
- this.drawDot(pointer);
52
- },
53
-
54
- /**
55
- * Render the full state of the brush
56
- * @private
57
- */
58
- _render: function() {
59
- var ctx = this.canvas.contextTop, i, len,
60
- points = this.points;
61
- this._saveAndTransform(ctx);
62
- for (i = 0, len = points.length; i < len; i++) {
63
- this.dot(ctx, points[i]);
64
- }
65
- ctx.restore();
66
- },
67
-
68
- /**
69
- * Invoked on mouse move
70
- * @param {Object} pointer
71
- */
72
- onMouseMove: function(pointer) {
73
- if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {
74
- return;
75
- }
76
- if (this.needsFullRender()) {
77
- this.canvas.clearContext(this.canvas.contextTop);
78
- this.addPoint(pointer);
79
- this._render();
80
- }
81
- else {
82
- this.drawDot(pointer);
83
- }
84
- },
85
-
86
- /**
87
- * Invoked on mouse up
88
- */
89
- onMouseUp: function() {
90
- var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;
91
- this.canvas.renderOnAddRemove = false;
92
-
93
- var circles = [];
94
-
95
- for (i = 0, len = this.points.length; i < len; i++) {
96
- var point = this.points[i],
97
- circle = new fabric.Circle({
98
- radius: point.radius,
99
- left: point.x,
100
- top: point.y,
101
- originX: 'center',
102
- originY: 'center',
103
- fill: point.fill
104
- });
105
-
106
- this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));
107
-
108
- circles.push(circle);
109
- }
110
- var group = new fabric.Group(circles);
111
- group.canvas = this.canvas;
112
-
113
- this.canvas.fire('before:path:created', { path: group });
114
- this.canvas.add(group);
115
- this.canvas.fire('path:created', { path: group });
116
-
117
- this.canvas.clearContext(this.canvas.contextTop);
118
- this._resetShadow();
119
- this.canvas.renderOnAddRemove = originalRenderOnAddRemove;
120
- this.canvas.requestRenderAll();
121
- },
122
-
123
- /**
124
- * @param {Object} pointer
125
- * @return {fabric.Point} Just added pointer point
126
- */
127
- addPoint: function(pointer) {
128
- var pointerPoint = new fabric.Point(pointer.x, pointer.y),
129
-
130
- circleRadius = fabric.util.getRandomInt(
131
- Math.max(0, this.width - 20), this.width + 20) / 2,
132
-
133
- circleColor = new fabric.Color(this.color)
134
- .setAlpha(fabric.util.getRandomInt(0, 100) / 100)
135
- .toRgba();
136
-
137
- pointerPoint.radius = circleRadius;
138
- pointerPoint.fill = circleColor;
139
-
140
- this.points.push(pointerPoint);
141
-
142
- return pointerPoint;
143
- }
144
- });
@@ -1,61 +0,0 @@
1
- /**
2
- * PatternBrush class
3
- * @class fabric.PatternBrush
4
- * @extends fabric.BaseBrush
5
- */
6
- fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {
7
-
8
- getPatternSrc: function() {
9
-
10
- var dotWidth = 20,
11
- dotDistance = 5,
12
- patternCanvas = fabric.util.createCanvasElement(),
13
- patternCtx = patternCanvas.getContext('2d');
14
-
15
- patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;
16
-
17
- patternCtx.fillStyle = this.color;
18
- patternCtx.beginPath();
19
- patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);
20
- patternCtx.closePath();
21
- patternCtx.fill();
22
-
23
- return patternCanvas;
24
- },
25
-
26
- getPatternSrcFunction: function() {
27
- return String(this.getPatternSrc).replace('this.color', '"' + this.color + '"');
28
- },
29
-
30
- /**
31
- * Creates "pattern" instance property
32
- * @param {CanvasRenderingContext2D} ctx
33
- */
34
- getPattern: function(ctx) {
35
- return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');
36
- },
37
-
38
- /**
39
- * Sets brush styles
40
- * @param {CanvasRenderingContext2D} ctx
41
- */
42
- _setBrushStyles: function(ctx) {
43
- this.callSuper('_setBrushStyles', ctx);
44
- ctx.strokeStyle = this.getPattern(ctx);
45
- },
46
-
47
- /**
48
- * Creates path
49
- */
50
- createPath: function(pathData) {
51
- var path = this.callSuper('createPath', pathData),
52
- topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);
53
-
54
- path.stroke = new fabric.Pattern({
55
- source: this.source || this.getPatternSrcFunction(),
56
- offsetX: -topLeft.x,
57
- offsetY: -topLeft.y
58
- });
59
- return path;
60
- }
61
- });
@@ -1,310 +0,0 @@
1
- (function() {
2
- /**
3
- * PencilBrush class
4
- * @class fabric.PencilBrush
5
- * @extends fabric.BaseBrush
6
- */
7
- fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {
8
-
9
- /**
10
- * Discard points that are less than `decimate` pixel distant from each other
11
- * @type Number
12
- * @default 0.4
13
- */
14
- decimate: 0.4,
15
-
16
- /**
17
- * Draws a straight line between last recorded point to current pointer
18
- * Used for `shift` functionality
19
- *
20
- * @type boolean
21
- * @default false
22
- */
23
- drawStraightLine: false,
24
-
25
- /**
26
- * The event modifier key that makes the brush draw a straight line.
27
- * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.
28
- * @type {'altKey' | 'shiftKey' | 'ctrlKey' | 'none' | undefined | null}
29
- */
30
- straightLineKey: 'shiftKey',
31
-
32
- /**
33
- * Constructor
34
- * @param {fabric.Canvas} canvas
35
- * @return {fabric.PencilBrush} Instance of a pencil brush
36
- */
37
- initialize: function(canvas) {
38
- this.canvas = canvas;
39
- this._points = [];
40
- },
41
-
42
- needsFullRender: function () {
43
- return this.callSuper('needsFullRender') || this._hasStraightLine;
44
- },
45
-
46
- /**
47
- * Invoked inside on mouse down and mouse move
48
- * @param {Object} pointer
49
- */
50
- _drawSegment: function (ctx, p1, p2) {
51
- var midPoint = p1.midPointFrom(p2);
52
- ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);
53
- return midPoint;
54
- },
55
-
56
- /**
57
- * Invoked on mouse down
58
- * @param {Object} pointer
59
- */
60
- onMouseDown: function(pointer, options) {
61
- if (!this.canvas._isMainEvent(options.e)) {
62
- return;
63
- }
64
- this.drawStraightLine = options.e[this.straightLineKey];
65
- this._prepareForDrawing(pointer);
66
- // capture coordinates immediately
67
- // this allows to draw dots (when movement never occurs)
68
- this._captureDrawingPath(pointer);
69
- this._render();
70
- },
71
-
72
- /**
73
- * Invoked on mouse move
74
- * @param {Object} pointer
75
- */
76
- onMouseMove: function(pointer, options) {
77
- if (!this.canvas._isMainEvent(options.e)) {
78
- return;
79
- }
80
- this.drawStraightLine = options.e[this.straightLineKey];
81
- if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {
82
- return;
83
- }
84
- if (this._captureDrawingPath(pointer) && this._points.length > 1) {
85
- if (this.needsFullRender()) {
86
- // redraw curve
87
- // clear top canvas
88
- this.canvas.clearContext(this.canvas.contextTop);
89
- this._render();
90
- }
91
- else {
92
- var points = this._points, length = points.length, ctx = this.canvas.contextTop;
93
- // draw the curve update
94
- this._saveAndTransform(ctx);
95
- if (this.oldEnd) {
96
- ctx.beginPath();
97
- ctx.moveTo(this.oldEnd.x, this.oldEnd.y);
98
- }
99
- this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);
100
- ctx.stroke();
101
- ctx.restore();
102
- }
103
- }
104
- },
105
-
106
- /**
107
- * Invoked on mouse up
108
- */
109
- onMouseUp: function(options) {
110
- if (!this.canvas._isMainEvent(options.e)) {
111
- return true;
112
- }
113
- this.drawStraightLine = false;
114
- this.oldEnd = undefined;
115
- this._finalizeAndAddPath();
116
- return false;
117
- },
118
-
119
- /**
120
- * @private
121
- * @param {Object} pointer Actual mouse position related to the canvas.
122
- */
123
- _prepareForDrawing: function(pointer) {
124
-
125
- var p = new fabric.Point(pointer.x, pointer.y);
126
-
127
- this._reset();
128
- this._addPoint(p);
129
- this.canvas.contextTop.moveTo(p.x, p.y);
130
- },
131
-
132
- /**
133
- * @private
134
- * @param {fabric.Point} point Point to be added to points array
135
- */
136
- _addPoint: function(point) {
137
- if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {
138
- return false;
139
- }
140
- if (this.drawStraightLine && this._points.length > 1) {
141
- this._hasStraightLine = true;
142
- this._points.pop();
143
- }
144
- this._points.push(point);
145
- return true;
146
- },
147
-
148
- /**
149
- * Clear points array and set contextTop canvas style.
150
- * @private
151
- */
152
- _reset: function() {
153
- this._points = [];
154
- this._setBrushStyles(this.canvas.contextTop);
155
- this._setShadow();
156
- this._hasStraightLine = false;
157
- },
158
-
159
- /**
160
- * @private
161
- * @param {Object} pointer Actual mouse position related to the canvas.
162
- */
163
- _captureDrawingPath: function(pointer) {
164
- var pointerPoint = new fabric.Point(pointer.x, pointer.y);
165
- return this._addPoint(pointerPoint);
166
- },
167
-
168
- /**
169
- * Draw a smooth path on the topCanvas using quadraticCurveTo
170
- * @private
171
- * @param {CanvasRenderingContext2D} [ctx]
172
- */
173
- _render: function(ctx) {
174
- var i, len,
175
- p1 = this._points[0],
176
- p2 = this._points[1];
177
- ctx = ctx || this.canvas.contextTop;
178
- this._saveAndTransform(ctx);
179
- ctx.beginPath();
180
- //if we only have 2 points in the path and they are the same
181
- //it means that the user only clicked the canvas without moving the mouse
182
- //then we should be drawing a dot. A path isn't drawn between two identical dots
183
- //that's why we set them apart a bit
184
- if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {
185
- var width = this.width / 1000;
186
- p1 = new fabric.Point(p1.x, p1.y);
187
- p2 = new fabric.Point(p2.x, p2.y);
188
- p1.x -= width;
189
- p2.x += width;
190
- }
191
- ctx.moveTo(p1.x, p1.y);
192
-
193
- for (i = 1, len = this._points.length; i < len; i++) {
194
- // we pick the point between pi + 1 & pi + 2 as the
195
- // end point and p1 as our control point.
196
- this._drawSegment(ctx, p1, p2);
197
- p1 = this._points[i];
198
- p2 = this._points[i + 1];
199
- }
200
- // Draw last line as a straight line while
201
- // we wait for the next point to be able to calculate
202
- // the bezier control point
203
- ctx.lineTo(p1.x, p1.y);
204
- ctx.stroke();
205
- ctx.restore();
206
- },
207
-
208
- /**
209
- * Converts points to SVG path
210
- * @param {Array} points Array of points
211
- * @return {(string|number)[][]} SVG path commands
212
- */
213
- convertPointsToSVGPath: function (points) {
214
- var correction = this.width / 1000;
215
- return fabric.util.getSmoothPathFromPoints(points, correction);
216
- },
217
-
218
- /**
219
- * @private
220
- * @param {(string|number)[][]} pathData SVG path commands
221
- * @returns {boolean}
222
- */
223
- _isEmptySVGPath: function (pathData) {
224
- var pathString = fabric.util.joinPath(pathData);
225
- return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';
226
- },
227
-
228
- /**
229
- * Creates fabric.Path object to add on canvas
230
- * @param {(string|number)[][]} pathData Path data
231
- * @return {fabric.Path} Path to add on canvas
232
- */
233
- createPath: function(pathData) {
234
- var path = new fabric.Path(pathData, {
235
- fill: null,
236
- stroke: this.color,
237
- strokeWidth: this.width,
238
- strokeLineCap: this.strokeLineCap,
239
- strokeMiterLimit: this.strokeMiterLimit,
240
- strokeLineJoin: this.strokeLineJoin,
241
- strokeDashArray: this.strokeDashArray,
242
- });
243
- if (this.shadow) {
244
- this.shadow.affectStroke = true;
245
- path.shadow = new fabric.Shadow(this.shadow);
246
- }
247
-
248
- return path;
249
- },
250
-
251
- /**
252
- * Decimate points array with the decimate value
253
- */
254
- decimatePoints: function(points, distance) {
255
- if (points.length <= 2) {
256
- return points;
257
- }
258
- var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),
259
- i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],
260
- cDistance;
261
- for (i = 1; i < l - 1; i++) {
262
- cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);
263
- if (cDistance >= adjustedDistance) {
264
- lastPoint = points[i];
265
- newPoints.push(lastPoint);
266
- }
267
- }
268
- /**
269
- * Add the last point from the original line to the end of the array.
270
- * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.
271
- */
272
- newPoints.push(points[l]);
273
- return newPoints;
274
- },
275
-
276
- /**
277
- * On mouseup after drawing the path on contextTop canvas
278
- * we use the points captured to create an new fabric path object
279
- * and add it to the fabric canvas.
280
- */
281
- _finalizeAndAddPath: function() {
282
- var ctx = this.canvas.contextTop;
283
- ctx.closePath();
284
- if (this.decimate) {
285
- this._points = this.decimatePoints(this._points, this.decimate);
286
- }
287
- var pathData = this.convertPointsToSVGPath(this._points);
288
- if (this._isEmptySVGPath(pathData)) {
289
- // do not create 0 width/height paths, as they are
290
- // rendered inconsistently across browsers
291
- // Firefox 4, for example, renders a dot,
292
- // whereas Chrome 10 renders nothing
293
- this.canvas.requestRenderAll();
294
- return;
295
- }
296
-
297
- var path = this.createPath(pathData);
298
- this.canvas.clearContext(this.canvas.contextTop);
299
- this.canvas.fire('before:path:created', { path: path });
300
- this.canvas.add(path);
301
- this.canvas.requestRenderAll();
302
- path.setCoords();
303
- this._resetShadow();
304
-
305
-
306
- // fire event 'path' created
307
- this.canvas.fire('path:created', { path: path });
308
- }
309
- });
310
- })();