fabric 5.3.0 → 6.0.0-beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -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
- })();