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
package/src/util/path.js DELETED
@@ -1,829 +0,0 @@
1
- (function() {
2
- var _join = Array.prototype.join,
3
- commandLengths = {
4
- m: 2,
5
- l: 2,
6
- h: 1,
7
- v: 1,
8
- c: 6,
9
- s: 4,
10
- q: 4,
11
- t: 2,
12
- a: 7
13
- },
14
- repeatedCommands = {
15
- m: 'l',
16
- M: 'L'
17
- };
18
- function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {
19
- var costh2 = fabric.util.cos(th2),
20
- sinth2 = fabric.util.sin(th2),
21
- costh3 = fabric.util.cos(th3),
22
- sinth3 = fabric.util.sin(th3),
23
- toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,
24
- toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,
25
- cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),
26
- cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),
27
- cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),
28
- cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);
29
-
30
- return ['C',
31
- cp1X, cp1Y,
32
- cp2X, cp2Y,
33
- toX, toY
34
- ];
35
- }
36
-
37
- /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp
38
- * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here
39
- * http://mozilla.org/MPL/2.0/
40
- */
41
- function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {
42
- var PI = Math.PI, th = rotateX * PI / 180,
43
- sinTh = fabric.util.sin(th),
44
- cosTh = fabric.util.cos(th),
45
- fromX = 0, fromY = 0;
46
-
47
- rx = Math.abs(rx);
48
- ry = Math.abs(ry);
49
-
50
- var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,
51
- py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,
52
- rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,
53
- pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,
54
- root = 0;
55
-
56
- if (pl < 0) {
57
- var s = Math.sqrt(1 - pl / (rx2 * ry2));
58
- rx *= s;
59
- ry *= s;
60
- }
61
- else {
62
- root = (large === sweep ? -1.0 : 1.0) *
63
- Math.sqrt( pl / (rx2 * py2 + ry2 * px2));
64
- }
65
-
66
- var cx = root * rx * py / ry,
67
- cy = -root * ry * px / rx,
68
- cx1 = cosTh * cx - sinTh * cy + toX * 0.5,
69
- cy1 = sinTh * cx + cosTh * cy + toY * 0.5,
70
- mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),
71
- dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);
72
-
73
- if (sweep === 0 && dtheta > 0) {
74
- dtheta -= 2 * PI;
75
- }
76
- else if (sweep === 1 && dtheta < 0) {
77
- dtheta += 2 * PI;
78
- }
79
-
80
- // Convert into cubic bezier segments <= 90deg
81
- var segments = Math.ceil(Math.abs(dtheta / PI * 2)),
82
- result = [], mDelta = dtheta / segments,
83
- mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),
84
- th3 = mTheta + mDelta;
85
-
86
- for (var i = 0; i < segments; i++) {
87
- result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);
88
- fromX = result[i][5];
89
- fromY = result[i][6];
90
- mTheta = th3;
91
- th3 += mDelta;
92
- }
93
- return result;
94
- }
95
-
96
- /*
97
- * Private
98
- */
99
- function calcVectorAngle(ux, uy, vx, vy) {
100
- var ta = Math.atan2(uy, ux),
101
- tb = Math.atan2(vy, vx);
102
- if (tb >= ta) {
103
- return tb - ta;
104
- }
105
- else {
106
- return 2 * Math.PI - (ta - tb);
107
- }
108
- }
109
-
110
- /**
111
- * Calculate bounding box of a beziercurve
112
- * @param {Number} x0 starting point
113
- * @param {Number} y0
114
- * @param {Number} x1 first control point
115
- * @param {Number} y1
116
- * @param {Number} x2 secondo control point
117
- * @param {Number} y2
118
- * @param {Number} x3 end of bezier
119
- * @param {Number} y3
120
- */
121
- // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.
122
- // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?
123
- function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {
124
- var argsString;
125
- if (fabric.cachesBoundsOfCurve) {
126
- argsString = _join.call(arguments);
127
- if (fabric.boundsOfCurveCache[argsString]) {
128
- return fabric.boundsOfCurveCache[argsString];
129
- }
130
- }
131
-
132
- var sqrt = Math.sqrt,
133
- min = Math.min, max = Math.max,
134
- abs = Math.abs, tvalues = [],
135
- bounds = [[], []],
136
- a, b, c, t, t1, t2, b2ac, sqrtb2ac;
137
-
138
- b = 6 * x0 - 12 * x1 + 6 * x2;
139
- a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
140
- c = 3 * x1 - 3 * x0;
141
-
142
- for (var i = 0; i < 2; ++i) {
143
- if (i > 0) {
144
- b = 6 * y0 - 12 * y1 + 6 * y2;
145
- a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
146
- c = 3 * y1 - 3 * y0;
147
- }
148
-
149
- if (abs(a) < 1e-12) {
150
- if (abs(b) < 1e-12) {
151
- continue;
152
- }
153
- t = -c / b;
154
- if (0 < t && t < 1) {
155
- tvalues.push(t);
156
- }
157
- continue;
158
- }
159
- b2ac = b * b - 4 * c * a;
160
- if (b2ac < 0) {
161
- continue;
162
- }
163
- sqrtb2ac = sqrt(b2ac);
164
- t1 = (-b + sqrtb2ac) / (2 * a);
165
- if (0 < t1 && t1 < 1) {
166
- tvalues.push(t1);
167
- }
168
- t2 = (-b - sqrtb2ac) / (2 * a);
169
- if (0 < t2 && t2 < 1) {
170
- tvalues.push(t2);
171
- }
172
- }
173
-
174
- var x, y, j = tvalues.length, jlen = j, mt;
175
- while (j--) {
176
- t = tvalues[j];
177
- mt = 1 - t;
178
- x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);
179
- bounds[0][j] = x;
180
-
181
- y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);
182
- bounds[1][j] = y;
183
- }
184
-
185
- bounds[0][jlen] = x0;
186
- bounds[1][jlen] = y0;
187
- bounds[0][jlen + 1] = x3;
188
- bounds[1][jlen + 1] = y3;
189
- var result = [
190
- {
191
- x: min.apply(null, bounds[0]),
192
- y: min.apply(null, bounds[1])
193
- },
194
- {
195
- x: max.apply(null, bounds[0]),
196
- y: max.apply(null, bounds[1])
197
- }
198
- ];
199
- if (fabric.cachesBoundsOfCurve) {
200
- fabric.boundsOfCurveCache[argsString] = result;
201
- }
202
- return result;
203
- }
204
-
205
- /**
206
- * Converts arc to a bunch of bezier curves
207
- * @param {Number} fx starting point x
208
- * @param {Number} fy starting point y
209
- * @param {Array} coords Arc command
210
- */
211
- function fromArcToBeziers(fx, fy, coords) {
212
- var rx = coords[1],
213
- ry = coords[2],
214
- rot = coords[3],
215
- large = coords[4],
216
- sweep = coords[5],
217
- tx = coords[6],
218
- ty = coords[7],
219
- segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);
220
-
221
- for (var i = 0, len = segsNorm.length; i < len; i++) {
222
- segsNorm[i][1] += fx;
223
- segsNorm[i][2] += fy;
224
- segsNorm[i][3] += fx;
225
- segsNorm[i][4] += fy;
226
- segsNorm[i][5] += fx;
227
- segsNorm[i][6] += fy;
228
- }
229
- return segsNorm;
230
- };
231
-
232
- /**
233
- * This function take a parsed SVG path and make it simpler for fabricJS logic.
234
- * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )
235
- * S converted in C, T converted in Q, A converted in C.
236
- * @param {Array} path the array of commands of a parsed svg path for fabric.Path
237
- * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path
238
- */
239
- function makePathSimpler(path) {
240
- // x and y represent the last point of the path. the previous command point.
241
- // we add them to each relative command to make it an absolute comment.
242
- // we also swap the v V h H with L, because are easier to transform.
243
- var x = 0, y = 0, len = path.length,
244
- // x1 and y1 represent the last point of the subpath. the subpath is started with
245
- // m or M command. When a z or Z command is drawn, x and y need to be resetted to
246
- // the last x1 and y1.
247
- x1 = 0, y1 = 0, current, i, converted,
248
- // previous will host the letter of the previous command, to handle S and T.
249
- // controlX and controlY will host the previous reflected control point
250
- destinationPath = [], previous, controlX, controlY;
251
- for (i = 0; i < len; ++i) {
252
- converted = false;
253
- current = path[i].slice(0);
254
- switch (current[0]) { // first letter
255
- case 'l': // lineto, relative
256
- current[0] = 'L';
257
- current[1] += x;
258
- current[2] += y;
259
- // falls through
260
- case 'L':
261
- x = current[1];
262
- y = current[2];
263
- break;
264
- case 'h': // horizontal lineto, relative
265
- current[1] += x;
266
- // falls through
267
- case 'H':
268
- current[0] = 'L';
269
- current[2] = y;
270
- x = current[1];
271
- break;
272
- case 'v': // vertical lineto, relative
273
- current[1] += y;
274
- // falls through
275
- case 'V':
276
- current[0] = 'L';
277
- y = current[1];
278
- current[1] = x;
279
- current[2] = y;
280
- break;
281
- case 'm': // moveTo, relative
282
- current[0] = 'M';
283
- current[1] += x;
284
- current[2] += y;
285
- // falls through
286
- case 'M':
287
- x = current[1];
288
- y = current[2];
289
- x1 = current[1];
290
- y1 = current[2];
291
- break;
292
- case 'c': // bezierCurveTo, relative
293
- current[0] = 'C';
294
- current[1] += x;
295
- current[2] += y;
296
- current[3] += x;
297
- current[4] += y;
298
- current[5] += x;
299
- current[6] += y;
300
- // falls through
301
- case 'C':
302
- controlX = current[3];
303
- controlY = current[4];
304
- x = current[5];
305
- y = current[6];
306
- break;
307
- case 's': // shorthand cubic bezierCurveTo, relative
308
- current[0] = 'S';
309
- current[1] += x;
310
- current[2] += y;
311
- current[3] += x;
312
- current[4] += y;
313
- // falls through
314
- case 'S':
315
- // would be sScC but since we are swapping sSc for C, we check just that.
316
- if (previous === 'C') {
317
- // calculate reflection of previous control points
318
- controlX = 2 * x - controlX;
319
- controlY = 2 * y - controlY;
320
- }
321
- else {
322
- // If there is no previous command or if the previous command was not a C, c, S, or s,
323
- // the control point is coincident with the current point
324
- controlX = x;
325
- controlY = y;
326
- }
327
- x = current[3];
328
- y = current[4];
329
- current[0] = 'C';
330
- current[5] = current[3];
331
- current[6] = current[4];
332
- current[3] = current[1];
333
- current[4] = current[2];
334
- current[1] = controlX;
335
- current[2] = controlY;
336
- // current[3] and current[4] are NOW the second control point.
337
- // we keep it for the next reflection.
338
- controlX = current[3];
339
- controlY = current[4];
340
- break;
341
- case 'q': // quadraticCurveTo, relative
342
- current[0] = 'Q';
343
- current[1] += x;
344
- current[2] += y;
345
- current[3] += x;
346
- current[4] += y;
347
- // falls through
348
- case 'Q':
349
- controlX = current[1];
350
- controlY = current[2];
351
- x = current[3];
352
- y = current[4];
353
- break;
354
- case 't': // shorthand quadraticCurveTo, relative
355
- current[0] = 'T';
356
- current[1] += x;
357
- current[2] += y;
358
- // falls through
359
- case 'T':
360
- if (previous === 'Q') {
361
- // calculate reflection of previous control point
362
- controlX = 2 * x - controlX;
363
- controlY = 2 * y - controlY;
364
- }
365
- else {
366
- // If there is no previous command or if the previous command was not a Q, q, T or t,
367
- // assume the control point is coincident with the current point
368
- controlX = x;
369
- controlY = y;
370
- }
371
- current[0] = 'Q';
372
- x = current[1];
373
- y = current[2];
374
- current[1] = controlX;
375
- current[2] = controlY;
376
- current[3] = x;
377
- current[4] = y;
378
- break;
379
- case 'a':
380
- current[0] = 'A';
381
- current[6] += x;
382
- current[7] += y;
383
- // falls through
384
- case 'A':
385
- converted = true;
386
- destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));
387
- x = current[6];
388
- y = current[7];
389
- break;
390
- case 'z':
391
- case 'Z':
392
- x = x1;
393
- y = y1;
394
- break;
395
- default:
396
- }
397
- if (!converted) {
398
- destinationPath.push(current);
399
- }
400
- previous = current[0];
401
- }
402
- return destinationPath;
403
- };
404
-
405
- /**
406
- * Calc length from point x1,y1 to x2,y2
407
- * @param {Number} x1 starting point x
408
- * @param {Number} y1 starting point y
409
- * @param {Number} x2 starting point x
410
- * @param {Number} y2 starting point y
411
- * @return {Number} length of segment
412
- */
413
- function calcLineLength(x1, y1, x2, y2) {
414
- return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
415
- }
416
-
417
- // functions for the Cubic beizer
418
- // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350
419
- function CB1(t) {
420
- return t * t * t;
421
- }
422
- function CB2(t) {
423
- return 3 * t * t * (1 - t);
424
- }
425
- function CB3(t) {
426
- return 3 * t * (1 - t) * (1 - t);
427
- }
428
- function CB4(t) {
429
- return (1 - t) * (1 - t) * (1 - t);
430
- }
431
-
432
- function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {
433
- return function(pct) {
434
- var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);
435
- return {
436
- x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,
437
- y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4
438
- };
439
- };
440
- }
441
-
442
- function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {
443
- return function (pct) {
444
- var invT = 1 - pct,
445
- tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +
446
- (3 * pct * pct * (p4x - p3x)),
447
- tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +
448
- (3 * pct * pct * (p4y - p3y));
449
- return Math.atan2(tangentY, tangentX);
450
- };
451
- }
452
-
453
- function QB1(t) {
454
- return t * t;
455
- }
456
-
457
- function QB2(t) {
458
- return 2 * t * (1 - t);
459
- }
460
-
461
- function QB3(t) {
462
- return (1 - t) * (1 - t);
463
- }
464
-
465
- function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {
466
- return function(pct) {
467
- var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);
468
- return {
469
- x: p3x * c1 + p2x * c2 + p1x * c3,
470
- y: p3y * c1 + p2y * c2 + p1y * c3
471
- };
472
- };
473
- }
474
-
475
- function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {
476
- return function (pct) {
477
- var invT = 1 - pct,
478
- tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),
479
- tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));
480
- return Math.atan2(tangentY, tangentX);
481
- };
482
- }
483
-
484
-
485
- // this will run over a path segment ( a cubic or quadratic segment) and approximate it
486
- // with 100 segemnts. This will good enough to calculate the length of the curve
487
- function pathIterator(iterator, x1, y1) {
488
- var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;
489
- for (perc = 1; perc <= 100; perc += 1) {
490
- p = iterator(perc / 100);
491
- tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);
492
- tempP = p;
493
- }
494
- return tmpLen;
495
- }
496
-
497
- /**
498
- * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1
499
- * that correspond to that pixels run over the path.
500
- * The percentage will be then used to find the correct point on the canvas for the path.
501
- * @param {Array} segInfo fabricJS collection of information on a parsed path
502
- * @param {Number} distance from starting point, in pixels.
503
- * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;
504
- */
505
- function findPercentageForDistance(segInfo, distance) {
506
- var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },
507
- p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;
508
- // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100
509
- // the path
510
- while (tmpLen < distance && nextStep > 0.0001) {
511
- p = iterator(perc);
512
- lastPerc = perc;
513
- nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);
514
- // compare tmpLen each cycle with distance, decide next perc to test.
515
- if ((nextLen + tmpLen) > distance) {
516
- // we discard this step and we make smaller steps.
517
- perc -= nextStep;
518
- nextStep /= 2;
519
- }
520
- else {
521
- tempP = p;
522
- perc += nextStep;
523
- tmpLen += nextLen;
524
- }
525
- }
526
- p.angle = angleFinder(lastPerc);
527
- return p;
528
- }
529
-
530
- /**
531
- * Run over a parsed and simplifed path and extrac some informations.
532
- * informations are length of each command and starting point
533
- * @param {Array} path fabricJS parsed path commands
534
- * @return {Array} path commands informations
535
- */
536
- function getPathSegmentsInfo(path) {
537
- var totalLength = 0, len = path.length, current,
538
- //x2 and y2 are the coords of segment start
539
- //x1 and y1 are the coords of the current point
540
- x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;
541
- for (var i = 0; i < len; i++) {
542
- current = path[i];
543
- tempInfo = {
544
- x: x1,
545
- y: y1,
546
- command: current[0],
547
- };
548
- switch (current[0]) { //first letter
549
- case 'M':
550
- tempInfo.length = 0;
551
- x2 = x1 = current[1];
552
- y2 = y1 = current[2];
553
- break;
554
- case 'L':
555
- tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);
556
- x1 = current[1];
557
- y1 = current[2];
558
- break;
559
- case 'C':
560
- iterator = getPointOnCubicBezierIterator(
561
- x1,
562
- y1,
563
- current[1],
564
- current[2],
565
- current[3],
566
- current[4],
567
- current[5],
568
- current[6]
569
- );
570
- angleFinder = getTangentCubicIterator(
571
- x1,
572
- y1,
573
- current[1],
574
- current[2],
575
- current[3],
576
- current[4],
577
- current[5],
578
- current[6]
579
- );
580
- tempInfo.iterator = iterator;
581
- tempInfo.angleFinder = angleFinder;
582
- tempInfo.length = pathIterator(iterator, x1, y1);
583
- x1 = current[5];
584
- y1 = current[6];
585
- break;
586
- case 'Q':
587
- iterator = getPointOnQuadraticBezierIterator(
588
- x1,
589
- y1,
590
- current[1],
591
- current[2],
592
- current[3],
593
- current[4]
594
- );
595
- angleFinder = getTangentQuadraticIterator(
596
- x1,
597
- y1,
598
- current[1],
599
- current[2],
600
- current[3],
601
- current[4]
602
- );
603
- tempInfo.iterator = iterator;
604
- tempInfo.angleFinder = angleFinder;
605
- tempInfo.length = pathIterator(iterator, x1, y1);
606
- x1 = current[3];
607
- y1 = current[4];
608
- break;
609
- case 'Z':
610
- case 'z':
611
- // we add those in order to ease calculations later
612
- tempInfo.destX = x2;
613
- tempInfo.destY = y2;
614
- tempInfo.length = calcLineLength(x1, y1, x2, y2);
615
- x1 = x2;
616
- y1 = y2;
617
- break;
618
- }
619
- totalLength += tempInfo.length;
620
- info.push(tempInfo);
621
- }
622
- info.push({ length: totalLength, x: x1, y: y1 });
623
- return info;
624
- }
625
-
626
- function getPointOnPath(path, distance, infos) {
627
- if (!infos) {
628
- infos = getPathSegmentsInfo(path);
629
- }
630
- var i = 0;
631
- while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {
632
- distance -= infos[i].length;
633
- i++;
634
- }
635
- // var distance = infos[infos.length - 1] * perc;
636
- var segInfo = infos[i], segPercent = distance / segInfo.length,
637
- command = segInfo.command, segment = path[i], info;
638
-
639
- switch (command) {
640
- case 'M':
641
- return { x: segInfo.x, y: segInfo.y, angle: 0 };
642
- case 'Z':
643
- case 'z':
644
- info = new fabric.Point(segInfo.x, segInfo.y).lerp(
645
- new fabric.Point(segInfo.destX, segInfo.destY),
646
- segPercent
647
- );
648
- info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);
649
- return info;
650
- case 'L':
651
- info = new fabric.Point(segInfo.x, segInfo.y).lerp(
652
- new fabric.Point(segment[1], segment[2]),
653
- segPercent
654
- );
655
- info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);
656
- return info;
657
- case 'C':
658
- return findPercentageForDistance(segInfo, distance);
659
- case 'Q':
660
- return findPercentageForDistance(segInfo, distance);
661
- }
662
- }
663
-
664
- /**
665
- *
666
- * @param {string} pathString
667
- * @return {(string|number)[][]} An array of SVG path commands
668
- * @example <caption>Usage</caption>
669
- * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [
670
- * ['M', 3, 4],
671
- * ['Q', 3, 5, 2, 1, 4, 0],
672
- * ['Q', 9, 12, 2, 1, 4, 0],
673
- * ];
674
- *
675
- */
676
- function parsePath(pathString) {
677
- var result = [],
678
- coords = [],
679
- currentPath,
680
- parsed,
681
- re = fabric.rePathCommand,
682
- rNumber = '[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*',
683
- rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,
684
- rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',
685
- rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +
686
- rNumberCommaWsp + '?(' + rNumber + ')',
687
- regArcArgumentSequence = new RegExp(rArcSeq, 'g'),
688
- match,
689
- coordsStr,
690
- // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)
691
- path;
692
- if (!pathString || !pathString.match) {
693
- return result;
694
- }
695
- path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);
696
-
697
- for (var i = 0, coordsParsed, len = path.length; i < len; i++) {
698
- currentPath = path[i];
699
-
700
- coordsStr = currentPath.slice(1).trim();
701
- coords.length = 0;
702
-
703
- var command = currentPath.charAt(0);
704
- coordsParsed = [command];
705
-
706
- if (command.toLowerCase() === 'a') {
707
- // arcs have special flags that apparently don't require spaces so handle special
708
- for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {
709
- for (var j = 1; j < args.length; j++) {
710
- coords.push(args[j]);
711
- }
712
- }
713
- }
714
- else {
715
- while ((match = re.exec(coordsStr))) {
716
- coords.push(match[0]);
717
- }
718
- }
719
-
720
- for (var j = 0, jlen = coords.length; j < jlen; j++) {
721
- parsed = parseFloat(coords[j]);
722
- if (!isNaN(parsed)) {
723
- coordsParsed.push(parsed);
724
- }
725
- }
726
-
727
- var commandLength = commandLengths[command.toLowerCase()],
728
- repeatedCommand = repeatedCommands[command] || command;
729
-
730
- if (coordsParsed.length - 1 > commandLength) {
731
- for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {
732
- result.push([command].concat(coordsParsed.slice(k, k + commandLength)));
733
- command = repeatedCommand;
734
- }
735
- }
736
- else {
737
- result.push(coordsParsed);
738
- }
739
- }
740
-
741
- return result;
742
- };
743
-
744
- /**
745
- *
746
- * Converts points to a smooth SVG path
747
- * @param {{ x: number,y: number }[]} points Array of points
748
- * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.
749
- * @return {(string|number)[][]} An array of SVG path commands
750
- */
751
- function getSmoothPathFromPoints(points, correction) {
752
- var path = [], i,
753
- p1 = new fabric.Point(points[0].x, points[0].y),
754
- p2 = new fabric.Point(points[1].x, points[1].y),
755
- len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;
756
- correction = correction || 0;
757
-
758
- if (manyPoints) {
759
- multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;
760
- multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;
761
- }
762
- path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);
763
- for (i = 1; i < len; i++) {
764
- if (!p1.eq(p2)) {
765
- var midPoint = p1.midPointFrom(p2);
766
- // p1 is our bezier control point
767
- // midpoint is our endpoint
768
- // start point is p(i-1) value.
769
- path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);
770
- }
771
- p1 = points[i];
772
- if ((i + 1) < points.length) {
773
- p2 = points[i + 1];
774
- }
775
- }
776
- if (manyPoints) {
777
- multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;
778
- multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;
779
- }
780
- path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);
781
- return path;
782
- }
783
- /**
784
- * Transform a path by transforming each segment.
785
- * it has to be a simplified path or it won't work.
786
- * WARNING: this depends from pathOffset for correct operation
787
- * @param {Array} path fabricJS parsed and simplified path commands
788
- * @param {Array} transform matrix that represent the transformation
789
- * @param {Object} [pathOffset] the fabric.Path pathOffset
790
- * @param {Number} pathOffset.x
791
- * @param {Number} pathOffset.y
792
- * @returns {Array} the transformed path
793
- */
794
- function transformPath(path, transform, pathOffset) {
795
- if (pathOffset) {
796
- transform = fabric.util.multiplyTransformMatrices(
797
- transform,
798
- [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]
799
- );
800
- }
801
- return path.map(function(pathSegment) {
802
- var newSegment = pathSegment.slice(0), point = {};
803
- for (var i = 1; i < pathSegment.length - 1; i += 2) {
804
- point.x = pathSegment[i];
805
- point.y = pathSegment[i + 1];
806
- point = fabric.util.transformPoint(point, transform);
807
- newSegment[i] = point.x;
808
- newSegment[i + 1] = point.y;
809
- }
810
- return newSegment;
811
- });
812
- }
813
-
814
- /**
815
- * Join path commands to go back to svg format
816
- * @param {Array} pathData fabricJS parsed path commands
817
- * @return {String} joined path 'M 0 0 L 20 30'
818
- */
819
- fabric.util.joinPath = function(pathData) {
820
- return pathData.map(function (segment) { return segment.join(' '); }).join(' ');
821
- };
822
- fabric.util.parsePath = parsePath;
823
- fabric.util.makePathSimpler = makePathSimpler;
824
- fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;
825
- fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;
826
- fabric.util.getBoundsOfCurve = getBoundsOfCurve;
827
- fabric.util.getPointOnPath = getPointOnPath;
828
- fabric.util.transformPath = transformPath;
829
- })();