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,974 +0,0 @@
1
- (function() {
2
-
3
- var addListener = fabric.util.addListener,
4
- removeListener = fabric.util.removeListener,
5
- RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,
6
- addEventOptions = { passive: false };
7
-
8
- function checkClick(e, value) {
9
- return e.button && (e.button === value - 1);
10
- }
11
-
12
- fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {
13
-
14
- /**
15
- * Contains the id of the touch event that owns the fabric transform
16
- * @type Number
17
- * @private
18
- */
19
- mainTouchId: null,
20
-
21
- /**
22
- * Adds mouse listeners to canvas
23
- * @private
24
- */
25
- _initEventListeners: function () {
26
- // in case we initialized the class twice. This should not happen normally
27
- // but in some kind of applications where the canvas element may be changed
28
- // this is a workaround to having double listeners.
29
- this.removeListeners();
30
- this._bindEvents();
31
- this.addOrRemove(addListener, 'add');
32
- },
33
-
34
- /**
35
- * return an event prefix pointer or mouse.
36
- * @private
37
- */
38
- _getEventPrefix: function () {
39
- return this.enablePointerEvents ? 'pointer' : 'mouse';
40
- },
41
-
42
- addOrRemove: function(functor, eventjsFunctor) {
43
- var canvasElement = this.upperCanvasEl,
44
- eventTypePrefix = this._getEventPrefix();
45
- functor(fabric.window, 'resize', this._onResize);
46
- functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);
47
- functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
48
- functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);
49
- functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);
50
- functor(canvasElement, 'wheel', this._onMouseWheel);
51
- functor(canvasElement, 'contextmenu', this._onContextMenu);
52
- functor(canvasElement, 'dblclick', this._onDoubleClick);
53
- functor(canvasElement, 'dragover', this._onDragOver);
54
- functor(canvasElement, 'dragenter', this._onDragEnter);
55
- functor(canvasElement, 'dragleave', this._onDragLeave);
56
- functor(canvasElement, 'drop', this._onDrop);
57
- if (!this.enablePointerEvents) {
58
- functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);
59
- }
60
- if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {
61
- eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);
62
- eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);
63
- eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);
64
- eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);
65
- eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);
66
- }
67
- },
68
-
69
- /**
70
- * Removes all event listeners
71
- */
72
- removeListeners: function() {
73
- this.addOrRemove(removeListener, 'remove');
74
- // if you dispose on a mouseDown, before mouse up, you need to clean document to...
75
- var eventTypePrefix = this._getEventPrefix();
76
- removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
77
- removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
78
- removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
79
- removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
80
- },
81
-
82
- /**
83
- * @private
84
- */
85
- _bindEvents: function() {
86
- if (this.eventsBound) {
87
- // for any reason we pass here twice we do not want to bind events twice.
88
- return;
89
- }
90
- this._onMouseDown = this._onMouseDown.bind(this);
91
- this._onTouchStart = this._onTouchStart.bind(this);
92
- this._onMouseMove = this._onMouseMove.bind(this);
93
- this._onMouseUp = this._onMouseUp.bind(this);
94
- this._onTouchEnd = this._onTouchEnd.bind(this);
95
- this._onResize = this._onResize.bind(this);
96
- this._onGesture = this._onGesture.bind(this);
97
- this._onDrag = this._onDrag.bind(this);
98
- this._onShake = this._onShake.bind(this);
99
- this._onLongPress = this._onLongPress.bind(this);
100
- this._onOrientationChange = this._onOrientationChange.bind(this);
101
- this._onMouseWheel = this._onMouseWheel.bind(this);
102
- this._onMouseOut = this._onMouseOut.bind(this);
103
- this._onMouseEnter = this._onMouseEnter.bind(this);
104
- this._onContextMenu = this._onContextMenu.bind(this);
105
- this._onDoubleClick = this._onDoubleClick.bind(this);
106
- this._onDragOver = this._onDragOver.bind(this);
107
- this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');
108
- this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');
109
- this._onDrop = this._onDrop.bind(this);
110
- this.eventsBound = true;
111
- },
112
-
113
- /**
114
- * @private
115
- * @param {Event} [e] Event object fired on Event.js gesture
116
- * @param {Event} [self] Inner Event object
117
- */
118
- _onGesture: function(e, self) {
119
- this.__onTransformGesture && this.__onTransformGesture(e, self);
120
- },
121
-
122
- /**
123
- * @private
124
- * @param {Event} [e] Event object fired on Event.js drag
125
- * @param {Event} [self] Inner Event object
126
- */
127
- _onDrag: function(e, self) {
128
- this.__onDrag && this.__onDrag(e, self);
129
- },
130
-
131
- /**
132
- * @private
133
- * @param {Event} [e] Event object fired on wheel event
134
- */
135
- _onMouseWheel: function(e) {
136
- this.__onMouseWheel(e);
137
- },
138
-
139
- /**
140
- * @private
141
- * @param {Event} e Event object fired on mousedown
142
- */
143
- _onMouseOut: function(e) {
144
- var target = this._hoveredTarget;
145
- this.fire('mouse:out', { target: target, e: e });
146
- this._hoveredTarget = null;
147
- target && target.fire('mouseout', { e: e });
148
-
149
- var _this = this;
150
- this._hoveredTargets.forEach(function(_target){
151
- _this.fire('mouse:out', { target: target, e: e });
152
- _target && target.fire('mouseout', { e: e });
153
- });
154
- this._hoveredTargets = [];
155
- },
156
-
157
- /**
158
- * @private
159
- * @param {Event} e Event object fired on mouseenter
160
- */
161
- _onMouseEnter: function(e) {
162
- // This find target and consequent 'mouse:over' is used to
163
- // clear old instances on hovered target.
164
- // calling findTarget has the side effect of killing target.__corner.
165
- // as a short term fix we are not firing this if we are currently transforming.
166
- // as a long term fix we need to separate the action of finding a target with the
167
- // side effects we added to it.
168
- if (!this._currentTransform && !this.findTarget(e)) {
169
- this.fire('mouse:over', { target: null, e: e });
170
- this._hoveredTarget = null;
171
- this._hoveredTargets = [];
172
- }
173
- },
174
-
175
- /**
176
- * @private
177
- * @param {Event} [e] Event object fired on Event.js orientation change
178
- * @param {Event} [self] Inner Event object
179
- */
180
- _onOrientationChange: function(e, self) {
181
- this.__onOrientationChange && this.__onOrientationChange(e, self);
182
- },
183
-
184
- /**
185
- * @private
186
- * @param {Event} [e] Event object fired on Event.js shake
187
- * @param {Event} [self] Inner Event object
188
- */
189
- _onShake: function(e, self) {
190
- this.__onShake && this.__onShake(e, self);
191
- },
192
-
193
- /**
194
- * @private
195
- * @param {Event} [e] Event object fired on Event.js shake
196
- * @param {Event} [self] Inner Event object
197
- */
198
- _onLongPress: function(e, self) {
199
- this.__onLongPress && this.__onLongPress(e, self);
200
- },
201
-
202
- /**
203
- * prevent default to allow drop event to be fired
204
- * @private
205
- * @param {Event} [e] Event object fired on Event.js shake
206
- */
207
- _onDragOver: function(e) {
208
- e.preventDefault();
209
- var target = this._simpleEventHandler('dragover', e);
210
- this._fireEnterLeaveEvents(target, e);
211
- },
212
-
213
- /**
214
- * `drop:before` is a an event that allow you to schedule logic
215
- * before the `drop` event. Prefer `drop` event always, but if you need
216
- * to run some drop-disabling logic on an event, since there is no way
217
- * to handle event handlers ordering, use `drop:before`
218
- * @param {Event} e
219
- */
220
- _onDrop: function (e) {
221
- this._simpleEventHandler('drop:before', e);
222
- return this._simpleEventHandler('drop', e);
223
- },
224
-
225
- /**
226
- * @private
227
- * @param {Event} e Event object fired on mousedown
228
- */
229
- _onContextMenu: function (e) {
230
- if (this.stopContextMenu) {
231
- e.stopPropagation();
232
- e.preventDefault();
233
- }
234
- return false;
235
- },
236
-
237
- /**
238
- * @private
239
- * @param {Event} e Event object fired on mousedown
240
- */
241
- _onDoubleClick: function (e) {
242
- this._cacheTransformEventData(e);
243
- this._handleEvent(e, 'dblclick');
244
- this._resetTransformEventData(e);
245
- },
246
-
247
- /**
248
- * Return a the id of an event.
249
- * returns either the pointerId or the identifier or 0 for the mouse event
250
- * @private
251
- * @param {Event} evt Event object
252
- */
253
- getPointerId: function(evt) {
254
- var changedTouches = evt.changedTouches;
255
-
256
- if (changedTouches) {
257
- return changedTouches[0] && changedTouches[0].identifier;
258
- }
259
-
260
- if (this.enablePointerEvents) {
261
- return evt.pointerId;
262
- }
263
-
264
- return -1;
265
- },
266
-
267
- /**
268
- * Determines if an event has the id of the event that is considered main
269
- * @private
270
- * @param {evt} event Event object
271
- */
272
- _isMainEvent: function(evt) {
273
- if (evt.isPrimary === true) {
274
- return true;
275
- }
276
- if (evt.isPrimary === false) {
277
- return false;
278
- }
279
- if (evt.type === 'touchend' && evt.touches.length === 0) {
280
- return true;
281
- }
282
- if (evt.changedTouches) {
283
- return evt.changedTouches[0].identifier === this.mainTouchId;
284
- }
285
- return true;
286
- },
287
-
288
- /**
289
- * @private
290
- * @param {Event} e Event object fired on mousedown
291
- */
292
- _onTouchStart: function(e) {
293
- e.preventDefault();
294
- if (this.mainTouchId === null) {
295
- this.mainTouchId = this.getPointerId(e);
296
- }
297
- this.__onMouseDown(e);
298
- this._resetTransformEventData();
299
- var canvasElement = this.upperCanvasEl,
300
- eventTypePrefix = this._getEventPrefix();
301
- addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
302
- addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
303
- // Unbind mousedown to prevent double triggers from touch devices
304
- removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);
305
- },
306
-
307
- /**
308
- * @private
309
- * @param {Event} e Event object fired on mousedown
310
- */
311
- _onMouseDown: function (e) {
312
- this.__onMouseDown(e);
313
- this._resetTransformEventData();
314
- var canvasElement = this.upperCanvasEl,
315
- eventTypePrefix = this._getEventPrefix();
316
- removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
317
- addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
318
- addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
319
- },
320
-
321
- /**
322
- * @private
323
- * @param {Event} e Event object fired on mousedown
324
- */
325
- _onTouchEnd: function(e) {
326
- if (e.touches.length > 0) {
327
- // if there are still touches stop here
328
- return;
329
- }
330
- this.__onMouseUp(e);
331
- this._resetTransformEventData();
332
- this.mainTouchId = null;
333
- var eventTypePrefix = this._getEventPrefix();
334
- removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
335
- removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
336
- var _this = this;
337
- if (this._willAddMouseDown) {
338
- clearTimeout(this._willAddMouseDown);
339
- }
340
- this._willAddMouseDown = setTimeout(function() {
341
- // Wait 400ms before rebinding mousedown to prevent double triggers
342
- // from touch devices
343
- addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);
344
- _this._willAddMouseDown = 0;
345
- }, 400);
346
- },
347
-
348
- /**
349
- * @private
350
- * @param {Event} e Event object fired on mouseup
351
- */
352
- _onMouseUp: function (e) {
353
- this.__onMouseUp(e);
354
- this._resetTransformEventData();
355
- var canvasElement = this.upperCanvasEl,
356
- eventTypePrefix = this._getEventPrefix();
357
- if (this._isMainEvent(e)) {
358
- removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
359
- removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
360
- addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
361
- }
362
- },
363
-
364
- /**
365
- * @private
366
- * @param {Event} e Event object fired on mousemove
367
- */
368
- _onMouseMove: function (e) {
369
- !this.allowTouchScrolling && e.preventDefault && e.preventDefault();
370
- this.__onMouseMove(e);
371
- },
372
-
373
- /**
374
- * @private
375
- */
376
- _onResize: function () {
377
- this.calcOffset();
378
- },
379
-
380
- /**
381
- * Decides whether the canvas should be redrawn in mouseup and mousedown events.
382
- * @private
383
- * @param {Object} target
384
- */
385
- _shouldRender: function(target) {
386
- var activeObject = this._activeObject;
387
-
388
- if (
389
- !!activeObject !== !!target ||
390
- (activeObject && target && (activeObject !== target))
391
- ) {
392
- // this covers: switch of target, from target to no target, selection of target
393
- // multiSelection with key and mouse
394
- return true;
395
- }
396
- else if (activeObject && activeObject.isEditing) {
397
- // if we mouse up/down over a editing textbox a cursor change,
398
- // there is no need to re render
399
- return false;
400
- }
401
- return false;
402
- },
403
-
404
- /**
405
- * Method that defines the actions when mouse is released on canvas.
406
- * The method resets the currentTransform parameters, store the image corner
407
- * position in the image object and render the canvas on top.
408
- * @private
409
- * @param {Event} e Event object fired on mouseup
410
- */
411
- __onMouseUp: function (e) {
412
- var target, transform = this._currentTransform,
413
- groupSelector = this._groupSelector, shouldRender = false,
414
- isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));
415
- this._cacheTransformEventData(e);
416
- target = this._target;
417
- this._handleEvent(e, 'up:before');
418
- // if right/middle click just fire events and return
419
- // target undefined will make the _handleEvent search the target
420
- if (checkClick(e, RIGHT_CLICK)) {
421
- if (this.fireRightClick) {
422
- this._handleEvent(e, 'up', RIGHT_CLICK, isClick);
423
- }
424
- return;
425
- }
426
-
427
- if (checkClick(e, MIDDLE_CLICK)) {
428
- if (this.fireMiddleClick) {
429
- this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);
430
- }
431
- this._resetTransformEventData();
432
- return;
433
- }
434
-
435
- if (this.isDrawingMode && this._isCurrentlyDrawing) {
436
- this._onMouseUpInDrawingMode(e);
437
- return;
438
- }
439
-
440
- if (!this._isMainEvent(e)) {
441
- return;
442
- }
443
- if (transform) {
444
- this._finalizeCurrentTransform(e);
445
- shouldRender = transform.actionPerformed;
446
- }
447
- if (!isClick) {
448
- var targetWasActive = target === this._activeObject;
449
- this._maybeGroupObjects(e);
450
- if (!shouldRender) {
451
- shouldRender = (
452
- this._shouldRender(target) ||
453
- (!targetWasActive && target === this._activeObject)
454
- );
455
- }
456
- }
457
- var corner, pointer;
458
- if (target) {
459
- corner = target._findTargetCorner(
460
- this.getPointer(e, true),
461
- fabric.util.isTouchEvent(e)
462
- );
463
- if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {
464
- this.setActiveObject(target, e);
465
- shouldRender = true;
466
- }
467
- else {
468
- var control = target.controls[corner],
469
- mouseUpHandler = control && control.getMouseUpHandler(e, target, control);
470
- if (mouseUpHandler) {
471
- pointer = this.getPointer(e);
472
- mouseUpHandler(e, transform, pointer.x, pointer.y);
473
- }
474
- }
475
- target.isMoving = false;
476
- }
477
- // if we are ending up a transform on a different control or a new object
478
- // fire the original mouse up from the corner that started the transform
479
- if (transform && (transform.target !== target || transform.corner !== corner)) {
480
- var originalControl = transform.target && transform.target.controls[transform.corner],
481
- originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);
482
- pointer = pointer || this.getPointer(e);
483
- originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);
484
- }
485
- this._setCursorFromEvent(e, target);
486
- this._handleEvent(e, 'up', LEFT_CLICK, isClick);
487
- this._groupSelector = null;
488
- this._currentTransform = null;
489
- // reset the target information about which corner is selected
490
- target && (target.__corner = 0);
491
- if (shouldRender) {
492
- this.requestRenderAll();
493
- }
494
- else if (!isClick) {
495
- this.renderTop();
496
- }
497
- },
498
-
499
- /**
500
- * @private
501
- * Handle event firing for target and subtargets
502
- * @param {Event} e event from mouse
503
- * @param {String} eventType event to fire (up, down or move)
504
- * @return {Fabric.Object} target return the the target found, for internal reasons.
505
- */
506
- _simpleEventHandler: function(eventType, e) {
507
- var target = this.findTarget(e),
508
- targets = this.targets,
509
- options = {
510
- e: e,
511
- target: target,
512
- subTargets: targets,
513
- };
514
- this.fire(eventType, options);
515
- target && target.fire(eventType, options);
516
- if (!targets) {
517
- return target;
518
- }
519
- for (var i = 0; i < targets.length; i++) {
520
- targets[i].fire(eventType, options);
521
- }
522
- return target;
523
- },
524
-
525
- /**
526
- * @private
527
- * Handle event firing for target and subtargets
528
- * @param {Event} e event from mouse
529
- * @param {String} eventType event to fire (up, down or move)
530
- * @param {fabric.Object} targetObj receiving event
531
- * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right
532
- * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.
533
- */
534
- _handleEvent: function(e, eventType, button, isClick) {
535
- var target = this._target,
536
- targets = this.targets || [],
537
- options = {
538
- e: e,
539
- target: target,
540
- subTargets: targets,
541
- button: button || LEFT_CLICK,
542
- isClick: isClick || false,
543
- pointer: this._pointer,
544
- absolutePointer: this._absolutePointer,
545
- transform: this._currentTransform
546
- };
547
- if (eventType === 'up') {
548
- options.currentTarget = this.findTarget(e);
549
- options.currentSubTargets = this.targets;
550
- }
551
- this.fire('mouse:' + eventType, options);
552
- target && target.fire('mouse' + eventType, options);
553
- for (var i = 0; i < targets.length; i++) {
554
- targets[i].fire('mouse' + eventType, options);
555
- }
556
- },
557
-
558
- /**
559
- * @private
560
- * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event
561
- */
562
- _finalizeCurrentTransform: function(e) {
563
-
564
- var transform = this._currentTransform,
565
- target = transform.target,
566
- options = {
567
- e: e,
568
- target: target,
569
- transform: transform,
570
- action: transform.action,
571
- };
572
-
573
- if (target._scaling) {
574
- target._scaling = false;
575
- }
576
-
577
- target.setCoords();
578
-
579
- if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {
580
- this._fire('modified', options);
581
- }
582
- },
583
-
584
- /**
585
- * @private
586
- * @param {Event} e Event object fired on mousedown
587
- */
588
- _onMouseDownInDrawingMode: function(e) {
589
- this._isCurrentlyDrawing = true;
590
- if (this.getActiveObject()) {
591
- this.discardActiveObject(e).requestRenderAll();
592
- }
593
- var pointer = this.getPointer(e);
594
- this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });
595
- this._handleEvent(e, 'down');
596
- },
597
-
598
- /**
599
- * @private
600
- * @param {Event} e Event object fired on mousemove
601
- */
602
- _onMouseMoveInDrawingMode: function(e) {
603
- if (this._isCurrentlyDrawing) {
604
- var pointer = this.getPointer(e);
605
- this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });
606
- }
607
- this.setCursor(this.freeDrawingCursor);
608
- this._handleEvent(e, 'move');
609
- },
610
-
611
- /**
612
- * @private
613
- * @param {Event} e Event object fired on mouseup
614
- */
615
- _onMouseUpInDrawingMode: function(e) {
616
- var pointer = this.getPointer(e);
617
- this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });
618
- this._handleEvent(e, 'up');
619
- },
620
-
621
- /**
622
- * Method that defines the actions when mouse is clicked on canvas.
623
- * The method inits the currentTransform parameters and renders all the
624
- * canvas so the current image can be placed on the top canvas and the rest
625
- * in on the container one.
626
- * @private
627
- * @param {Event} e Event object fired on mousedown
628
- */
629
- __onMouseDown: function (e) {
630
- this._cacheTransformEventData(e);
631
- this._handleEvent(e, 'down:before');
632
- var target = this._target;
633
- // if right click just fire events
634
- if (checkClick(e, RIGHT_CLICK)) {
635
- if (this.fireRightClick) {
636
- this._handleEvent(e, 'down', RIGHT_CLICK);
637
- }
638
- return;
639
- }
640
-
641
- if (checkClick(e, MIDDLE_CLICK)) {
642
- if (this.fireMiddleClick) {
643
- this._handleEvent(e, 'down', MIDDLE_CLICK);
644
- }
645
- return;
646
- }
647
-
648
- if (this.isDrawingMode) {
649
- this._onMouseDownInDrawingMode(e);
650
- return;
651
- }
652
-
653
- if (!this._isMainEvent(e)) {
654
- return;
655
- }
656
-
657
- // ignore if some object is being transformed at this moment
658
- if (this._currentTransform) {
659
- return;
660
- }
661
-
662
- var pointer = this._pointer;
663
- // save pointer for check in __onMouseUp event
664
- this._previousPointer = pointer;
665
- var shouldRender = this._shouldRender(target),
666
- shouldGroup = this._shouldGroup(e, target);
667
- if (this._shouldClearSelection(e, target)) {
668
- this.discardActiveObject(e);
669
- }
670
- else if (shouldGroup) {
671
- this._handleGrouping(e, target);
672
- target = this._activeObject;
673
- }
674
-
675
- if (this.selection && (!target ||
676
- (!target.selectable && !target.isEditing && target !== this._activeObject))) {
677
- this._groupSelector = {
678
- ex: this._absolutePointer.x,
679
- ey: this._absolutePointer.y,
680
- top: 0,
681
- left: 0
682
- };
683
- }
684
-
685
- if (target) {
686
- var alreadySelected = target === this._activeObject;
687
- if (target.selectable && target.activeOn === 'down') {
688
- this.setActiveObject(target, e);
689
- }
690
- var corner = target._findTargetCorner(
691
- this.getPointer(e, true),
692
- fabric.util.isTouchEvent(e)
693
- );
694
- target.__corner = corner;
695
- if (target === this._activeObject && (corner || !shouldGroup)) {
696
- this._setupCurrentTransform(e, target, alreadySelected);
697
- var control = target.controls[corner],
698
- pointer = this.getPointer(e),
699
- mouseDownHandler = control && control.getMouseDownHandler(e, target, control);
700
- if (mouseDownHandler) {
701
- mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);
702
- }
703
- }
704
- }
705
- this._handleEvent(e, 'down');
706
- // we must renderAll so that we update the visuals
707
- (shouldRender || shouldGroup) && this.requestRenderAll();
708
- },
709
-
710
- /**
711
- * reset cache form common information needed during event processing
712
- * @private
713
- */
714
- _resetTransformEventData: function() {
715
- this._target = null;
716
- this._pointer = null;
717
- this._absolutePointer = null;
718
- },
719
-
720
- /**
721
- * Cache common information needed during event processing
722
- * @private
723
- * @param {Event} e Event object fired on event
724
- */
725
- _cacheTransformEventData: function(e) {
726
- // reset in order to avoid stale caching
727
- this._resetTransformEventData();
728
- this._pointer = this.getPointer(e, true);
729
- this._absolutePointer = this.restorePointerVpt(this._pointer);
730
- this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;
731
- },
732
-
733
- /**
734
- * @private
735
- */
736
- _beforeTransform: function(e) {
737
- var t = this._currentTransform;
738
- this.stateful && t.target.saveState();
739
- this.fire('before:transform', {
740
- e: e,
741
- transform: t,
742
- });
743
- },
744
-
745
- /**
746
- * Method that defines the actions when mouse is hovering the canvas.
747
- * The currentTransform parameter will define whether the user is rotating/scaling/translating
748
- * an image or neither of them (only hovering). A group selection is also possible and would cancel
749
- * all any other type of action.
750
- * In case of an image transformation only the top canvas will be rendered.
751
- * @private
752
- * @param {Event} e Event object fired on mousemove
753
- */
754
- __onMouseMove: function (e) {
755
- this._handleEvent(e, 'move:before');
756
- this._cacheTransformEventData(e);
757
- var target, pointer;
758
-
759
- if (this.isDrawingMode) {
760
- this._onMouseMoveInDrawingMode(e);
761
- return;
762
- }
763
-
764
- if (!this._isMainEvent(e)) {
765
- return;
766
- }
767
-
768
- var groupSelector = this._groupSelector;
769
-
770
- // We initially clicked in an empty area, so we draw a box for multiple selection
771
- if (groupSelector) {
772
- pointer = this._absolutePointer;
773
-
774
- groupSelector.left = pointer.x - groupSelector.ex;
775
- groupSelector.top = pointer.y - groupSelector.ey;
776
-
777
- this.renderTop();
778
- }
779
- else if (!this._currentTransform) {
780
- target = this.findTarget(e) || null;
781
- this._setCursorFromEvent(e, target);
782
- this._fireOverOutEvents(target, e);
783
- }
784
- else {
785
- this._transformObject(e);
786
- }
787
- this._handleEvent(e, 'move');
788
- this._resetTransformEventData();
789
- },
790
-
791
- /**
792
- * Manage the mouseout, mouseover events for the fabric object on the canvas
793
- * @param {Fabric.Object} target the target where the target from the mousemove event
794
- * @param {Event} e Event object fired on mousemove
795
- * @private
796
- */
797
- _fireOverOutEvents: function(target, e) {
798
- var _hoveredTarget = this._hoveredTarget,
799
- _hoveredTargets = this._hoveredTargets, targets = this.targets,
800
- length = Math.max(_hoveredTargets.length, targets.length);
801
-
802
- this.fireSyntheticInOutEvents(target, e, {
803
- oldTarget: _hoveredTarget,
804
- evtOut: 'mouseout',
805
- canvasEvtOut: 'mouse:out',
806
- evtIn: 'mouseover',
807
- canvasEvtIn: 'mouse:over',
808
- });
809
- for (var i = 0; i < length; i++){
810
- this.fireSyntheticInOutEvents(targets[i], e, {
811
- oldTarget: _hoveredTargets[i],
812
- evtOut: 'mouseout',
813
- evtIn: 'mouseover',
814
- });
815
- }
816
- this._hoveredTarget = target;
817
- this._hoveredTargets = this.targets.concat();
818
- },
819
-
820
- /**
821
- * Manage the dragEnter, dragLeave events for the fabric objects on the canvas
822
- * @param {Fabric.Object} target the target where the target from the onDrag event
823
- * @param {Event} e Event object fired on ondrag
824
- * @private
825
- */
826
- _fireEnterLeaveEvents: function(target, e) {
827
- var _draggedoverTarget = this._draggedoverTarget,
828
- _hoveredTargets = this._hoveredTargets, targets = this.targets,
829
- length = Math.max(_hoveredTargets.length, targets.length);
830
-
831
- this.fireSyntheticInOutEvents(target, e, {
832
- oldTarget: _draggedoverTarget,
833
- evtOut: 'dragleave',
834
- evtIn: 'dragenter',
835
- });
836
- for (var i = 0; i < length; i++) {
837
- this.fireSyntheticInOutEvents(targets[i], e, {
838
- oldTarget: _hoveredTargets[i],
839
- evtOut: 'dragleave',
840
- evtIn: 'dragenter',
841
- });
842
- }
843
- this._draggedoverTarget = target;
844
- },
845
-
846
- /**
847
- * Manage the synthetic in/out events for the fabric objects on the canvas
848
- * @param {Fabric.Object} target the target where the target from the supported events
849
- * @param {Event} e Event object fired
850
- * @param {Object} config configuration for the function to work
851
- * @param {String} config.targetName property on the canvas where the old target is stored
852
- * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out
853
- * @param {String} config.evtOut name of the event to fire for out
854
- * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in
855
- * @param {String} config.evtIn name of the event to fire for in
856
- * @private
857
- */
858
- fireSyntheticInOutEvents: function(target, e, config) {
859
- var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,
860
- targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;
861
- if (targetChanged) {
862
- inOpt = { e: e, target: target, previousTarget: oldTarget };
863
- outOpt = { e: e, target: oldTarget, nextTarget: target };
864
- }
865
- inFires = target && targetChanged;
866
- outFires = oldTarget && targetChanged;
867
- if (outFires) {
868
- canvasEvtOut && this.fire(canvasEvtOut, outOpt);
869
- oldTarget.fire(config.evtOut, outOpt);
870
- }
871
- if (inFires) {
872
- canvasEvtIn && this.fire(canvasEvtIn, inOpt);
873
- target.fire(config.evtIn, inOpt);
874
- }
875
- },
876
-
877
- /**
878
- * Method that defines actions when an Event Mouse Wheel
879
- * @param {Event} e Event object fired on mouseup
880
- */
881
- __onMouseWheel: function(e) {
882
- this._cacheTransformEventData(e);
883
- this._handleEvent(e, 'wheel');
884
- this._resetTransformEventData();
885
- },
886
-
887
- /**
888
- * @private
889
- * @param {Event} e Event fired on mousemove
890
- */
891
- _transformObject: function(e) {
892
- var pointer = this.getPointer(e),
893
- transform = this._currentTransform;
894
-
895
- transform.reset = false;
896
- transform.shiftKey = e.shiftKey;
897
- transform.altKey = e[this.centeredKey];
898
-
899
- this._performTransformAction(e, transform, pointer);
900
- transform.actionPerformed && this.requestRenderAll();
901
- },
902
-
903
- /**
904
- * @private
905
- */
906
- _performTransformAction: function(e, transform, pointer) {
907
- var x = pointer.x,
908
- y = pointer.y,
909
- action = transform.action,
910
- actionPerformed = false,
911
- actionHandler = transform.actionHandler;
912
- // this object could be created from the function in the control handlers
913
-
914
-
915
- if (actionHandler) {
916
- actionPerformed = actionHandler(e, transform, x, y);
917
- }
918
- if (action === 'drag' && actionPerformed) {
919
- transform.target.isMoving = true;
920
- this.setCursor(transform.target.moveCursor || this.moveCursor);
921
- }
922
- transform.actionPerformed = transform.actionPerformed || actionPerformed;
923
- },
924
-
925
- /**
926
- * @private
927
- */
928
- _fire: fabric.controlsUtils.fireEvent,
929
-
930
- /**
931
- * Sets the cursor depending on where the canvas is being hovered.
932
- * Note: very buggy in Opera
933
- * @param {Event} e Event object
934
- * @param {Object} target Object that the mouse is hovering, if so.
935
- */
936
- _setCursorFromEvent: function (e, target) {
937
- if (!target) {
938
- this.setCursor(this.defaultCursor);
939
- return false;
940
- }
941
- var hoverCursor = target.hoverCursor || this.hoverCursor,
942
- activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?
943
- this._activeObject : null,
944
- // only show proper corner when group selection is not active
945
- corner = (!activeSelection || !activeSelection.contains(target))
946
- // here we call findTargetCorner always with undefined for the touch parameter.
947
- // we assume that if you are using a cursor you do not need to interact with
948
- // the bigger touch area.
949
- && target._findTargetCorner(this.getPointer(e, true));
950
-
951
- if (!corner) {
952
- if (target.subTargetCheck){
953
- // hoverCursor should come from top-most subTarget,
954
- // so we walk the array backwards
955
- this.targets.concat().reverse().map(function(_target){
956
- hoverCursor = _target.hoverCursor || hoverCursor;
957
- });
958
- }
959
- this.setCursor(hoverCursor);
960
- }
961
- else {
962
- this.setCursor(this.getCornerCursor(corner, target, e));
963
- }
964
- },
965
-
966
- /**
967
- * @private
968
- */
969
- getCornerCursor: function(corner, target, e) {
970
- var control = target.controls[corner];
971
- return control.cursorStyleHandler(e, control, target);
972
- }
973
- });
974
- })();