fabric 5.3.0 → 6.0.0-beta3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
@@ -1,740 +0,0 @@
1
- (function(global) {
2
-
3
- 'use strict';
4
-
5
- var fabric = global.fabric || (global.fabric = { }),
6
- scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],
7
- skewMap = ['ns', 'nesw', 'ew', 'nwse'],
8
- controls = {},
9
- LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',
10
- opposite = {
11
- top: BOTTOM,
12
- bottom: TOP,
13
- left: RIGHT,
14
- right: LEFT,
15
- center: CENTER,
16
- }, radiansToDegrees = fabric.util.radiansToDegrees,
17
- sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });
18
-
19
- /**
20
- * Combine control position and object angle to find the control direction compared
21
- * to the object center.
22
- * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls
23
- * @param {fabric.Control} control the control class
24
- * @return {Number} 0 - 7 a quadrant number
25
- */
26
- function findCornerQuadrant(fabricObject, control) {
27
- var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;
28
- return Math.round((cornerAngle % 360) / 45);
29
- }
30
-
31
- function fireEvent(eventName, options) {
32
- var target = options.transform.target,
33
- canvas = target.canvas,
34
- canvasOptions = fabric.util.object.clone(options);
35
- canvasOptions.target = target;
36
- canvas && canvas.fire('object:' + eventName, canvasOptions);
37
- target.fire(eventName, options);
38
- }
39
-
40
- /**
41
- * Inspect event and fabricObject properties to understand if the scaling action
42
- * @param {Event} eventData from the user action
43
- * @param {fabric.Object} fabricObject the fabric object about to scale
44
- * @return {Boolean} true if scale is proportional
45
- */
46
- function scaleIsProportional(eventData, fabricObject) {
47
- var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,
48
- uniformIsToggled = eventData[uniScaleKey];
49
- return (canvas.uniformScaling && !uniformIsToggled) ||
50
- (!canvas.uniformScaling && uniformIsToggled);
51
- }
52
-
53
- /**
54
- * Checks if transform is centered
55
- * @param {Object} transform transform data
56
- * @return {Boolean} true if transform is centered
57
- */
58
- function isTransformCentered(transform) {
59
- return transform.originX === CENTER && transform.originY === CENTER;
60
- }
61
-
62
- /**
63
- * Inspect fabricObject to understand if the current scaling action is allowed
64
- * @param {fabric.Object} fabricObject the fabric object about to scale
65
- * @param {String} by 'x' or 'y' or ''
66
- * @param {Boolean} scaleProportionally true if we are trying to scale proportionally
67
- * @return {Boolean} true if scaling is not allowed at current conditions
68
- */
69
- function scalingIsForbidden(fabricObject, by, scaleProportionally) {
70
- var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;
71
- if (lockX && lockY) {
72
- return true;
73
- }
74
- if (!by && (lockX || lockY) && scaleProportionally) {
75
- return true;
76
- }
77
- if (lockX && by === 'x') {
78
- return true;
79
- }
80
- if (lockY && by === 'y') {
81
- return true;
82
- }
83
- return false;
84
- }
85
-
86
- /**
87
- * return the correct cursor style for the scale action
88
- * @param {Event} eventData the javascript event that is causing the scale
89
- * @param {fabric.Control} control the control that is interested in the action
90
- * @param {fabric.Object} fabricObject the fabric object that is interested in the action
91
- * @return {String} a valid css string for the cursor
92
- */
93
- function scaleCursorStyleHandler(eventData, control, fabricObject) {
94
- var notAllowed = 'not-allowed',
95
- scaleProportionally = scaleIsProportional(eventData, fabricObject),
96
- by = '';
97
- if (control.x !== 0 && control.y === 0) {
98
- by = 'x';
99
- }
100
- else if (control.x === 0 && control.y !== 0) {
101
- by = 'y';
102
- }
103
- if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {
104
- return notAllowed;
105
- }
106
- var n = findCornerQuadrant(fabricObject, control);
107
- return scaleMap[n] + '-resize';
108
- }
109
-
110
- /**
111
- * return the correct cursor style for the skew action
112
- * @param {Event} eventData the javascript event that is causing the scale
113
- * @param {fabric.Control} control the control that is interested in the action
114
- * @param {fabric.Object} fabricObject the fabric object that is interested in the action
115
- * @return {String} a valid css string for the cursor
116
- */
117
- function skewCursorStyleHandler(eventData, control, fabricObject) {
118
- var notAllowed = 'not-allowed';
119
- if (control.x !== 0 && fabricObject.lockSkewingY) {
120
- return notAllowed;
121
- }
122
- if (control.y !== 0 && fabricObject.lockSkewingX) {
123
- return notAllowed;
124
- }
125
- var n = findCornerQuadrant(fabricObject, control) % 4;
126
- return skewMap[n] + '-resize';
127
- }
128
-
129
- /**
130
- * Combine skew and scale style handlers to cover fabric standard use case
131
- * @param {Event} eventData the javascript event that is causing the scale
132
- * @param {fabric.Control} control the control that is interested in the action
133
- * @param {fabric.Object} fabricObject the fabric object that is interested in the action
134
- * @return {String} a valid css string for the cursor
135
- */
136
- function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {
137
- if (eventData[fabricObject.canvas.altActionKey]) {
138
- return controls.skewCursorStyleHandler(eventData, control, fabricObject);
139
- }
140
- return controls.scaleCursorStyleHandler(eventData, control, fabricObject);
141
- }
142
-
143
- /**
144
- * Inspect event, control and fabricObject to return the correct action name
145
- * @param {Event} eventData the javascript event that is causing the scale
146
- * @param {fabric.Control} control the control that is interested in the action
147
- * @param {fabric.Object} fabricObject the fabric object that is interested in the action
148
- * @return {String} an action name
149
- */
150
- function scaleOrSkewActionName(eventData, control, fabricObject) {
151
- var isAlternative = eventData[fabricObject.canvas.altActionKey];
152
- if (control.x === 0) {
153
- // then is scaleY or skewX
154
- return isAlternative ? 'skewX' : 'scaleY';
155
- }
156
- if (control.y === 0) {
157
- // then is scaleY or skewX
158
- return isAlternative ? 'skewY' : 'scaleX';
159
- }
160
- }
161
-
162
- /**
163
- * Find the correct style for the control that is used for rotation.
164
- * this function is very simple and it just take care of not-allowed or standard cursor
165
- * @param {Event} eventData the javascript event that is causing the scale
166
- * @param {fabric.Control} control the control that is interested in the action
167
- * @param {fabric.Object} fabricObject the fabric object that is interested in the action
168
- * @return {String} a valid css string for the cursor
169
- */
170
- function rotationStyleHandler(eventData, control, fabricObject) {
171
- if (fabricObject.lockRotation) {
172
- return 'not-allowed';
173
- }
174
- return control.cursorStyle;
175
- }
176
-
177
- function commonEventInfo(eventData, transform, x, y) {
178
- return {
179
- e: eventData,
180
- transform: transform,
181
- pointer: {
182
- x: x,
183
- y: y,
184
- }
185
- };
186
- }
187
-
188
- /**
189
- * Wrap an action handler with saving/restoring object position on the transform.
190
- * this is the code that permits to objects to keep their position while transforming.
191
- * @param {Function} actionHandler the function to wrap
192
- * @return {Function} a function with an action handler signature
193
- */
194
- function wrapWithFixedAnchor(actionHandler) {
195
- return function(eventData, transform, x, y) {
196
- var target = transform.target, centerPoint = target.getCenterPoint(),
197
- constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),
198
- actionPerformed = actionHandler(eventData, transform, x, y);
199
- target.setPositionByOrigin(constraint, transform.originX, transform.originY);
200
- return actionPerformed;
201
- };
202
- }
203
-
204
- /**
205
- * Wrap an action handler with firing an event if the action is performed
206
- * @param {Function} actionHandler the function to wrap
207
- * @return {Function} a function with an action handler signature
208
- */
209
- function wrapWithFireEvent(eventName, actionHandler) {
210
- return function(eventData, transform, x, y) {
211
- var actionPerformed = actionHandler(eventData, transform, x, y);
212
- if (actionPerformed) {
213
- fireEvent(eventName, commonEventInfo(eventData, transform, x, y));
214
- }
215
- return actionPerformed;
216
- };
217
- }
218
-
219
- /**
220
- * Transforms a point described by x and y in a distance from the top left corner of the object
221
- * bounding box.
222
- * @param {Object} transform
223
- * @param {String} originX
224
- * @param {String} originY
225
- * @param {number} x
226
- * @param {number} y
227
- * @return {Fabric.Point} the normalized point
228
- */
229
- function getLocalPoint(transform, originX, originY, x, y) {
230
- var target = transform.target,
231
- control = target.controls[transform.corner],
232
- zoom = target.canvas.getZoom(),
233
- padding = target.padding / zoom,
234
- localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);
235
- if (localPoint.x >= padding) {
236
- localPoint.x -= padding;
237
- }
238
- if (localPoint.x <= -padding) {
239
- localPoint.x += padding;
240
- }
241
- if (localPoint.y >= padding) {
242
- localPoint.y -= padding;
243
- }
244
- if (localPoint.y <= padding) {
245
- localPoint.y += padding;
246
- }
247
- localPoint.x -= control.offsetX;
248
- localPoint.y -= control.offsetY;
249
- return localPoint;
250
- }
251
-
252
- /**
253
- * Detect if the fabric object is flipped on one side.
254
- * @param {fabric.Object} target
255
- * @return {Boolean} true if one flip, but not two.
256
- */
257
- function targetHasOneFlip(target) {
258
- return target.flipX !== target.flipY;
259
- }
260
-
261
- /**
262
- * Utility function to compensate the scale factor when skew is applied on both axes
263
- * @private
264
- */
265
- function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {
266
- if (target[oppositeSkew] !== 0) {
267
- var newDim = target._getTransformedDimensions()[axis];
268
- var newValue = reference / newDim * target[scaleToCompensate];
269
- target.set(scaleToCompensate, newValue);
270
- }
271
- }
272
-
273
- /**
274
- * Action handler for skewing on the X axis
275
- * @private
276
- */
277
- function skewObjectX(eventData, transform, x, y) {
278
- var target = transform.target,
279
- // find how big the object would be, if there was no skewX. takes in account scaling
280
- dimNoSkew = target._getTransformedDimensions(0, target.skewY),
281
- localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),
282
- // the mouse is in the center of the object, and we want it to stay there.
283
- // so the object will grow twice as much as the mouse.
284
- // this makes the skew growth to localPoint * 2 - dimNoSkew.
285
- totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,
286
- currentSkew = target.skewX, newSkew;
287
- if (totalSkewSize < 2) {
288
- // let's make it easy to go back to position 0.
289
- newSkew = 0;
290
- }
291
- else {
292
- newSkew = radiansToDegrees(
293
- Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))
294
- );
295
- // now we have to find the sign of the skew.
296
- // it mostly depend on the origin of transformation.
297
- if (transform.originX === LEFT && transform.originY === BOTTOM) {
298
- newSkew = -newSkew;
299
- }
300
- if (transform.originX === RIGHT && transform.originY === TOP) {
301
- newSkew = -newSkew;
302
- }
303
- if (targetHasOneFlip(target)) {
304
- newSkew = -newSkew;
305
- }
306
- }
307
- var hasSkewed = currentSkew !== newSkew;
308
- if (hasSkewed) {
309
- var dimBeforeSkewing = target._getTransformedDimensions().y;
310
- target.set('skewX', newSkew);
311
- compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);
312
- }
313
- return hasSkewed;
314
- }
315
-
316
- /**
317
- * Action handler for skewing on the Y axis
318
- * @private
319
- */
320
- function skewObjectY(eventData, transform, x, y) {
321
- var target = transform.target,
322
- // find how big the object would be, if there was no skewX. takes in account scaling
323
- dimNoSkew = target._getTransformedDimensions(target.skewX, 0),
324
- localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),
325
- // the mouse is in the center of the object, and we want it to stay there.
326
- // so the object will grow twice as much as the mouse.
327
- // this makes the skew growth to localPoint * 2 - dimNoSkew.
328
- totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,
329
- currentSkew = target.skewY, newSkew;
330
- if (totalSkewSize < 2) {
331
- // let's make it easy to go back to position 0.
332
- newSkew = 0;
333
- }
334
- else {
335
- newSkew = radiansToDegrees(
336
- Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))
337
- );
338
- // now we have to find the sign of the skew.
339
- // it mostly depend on the origin of transformation.
340
- if (transform.originX === LEFT && transform.originY === BOTTOM) {
341
- newSkew = -newSkew;
342
- }
343
- if (transform.originX === RIGHT && transform.originY === TOP) {
344
- newSkew = -newSkew;
345
- }
346
- if (targetHasOneFlip(target)) {
347
- newSkew = -newSkew;
348
- }
349
- }
350
- var hasSkewed = currentSkew !== newSkew;
351
- if (hasSkewed) {
352
- var dimBeforeSkewing = target._getTransformedDimensions().x;
353
- target.set('skewY', newSkew);
354
- compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);
355
- }
356
- return hasSkewed;
357
- }
358
-
359
- /**
360
- * Wrapped Action handler for skewing on the Y axis, takes care of the
361
- * skew direction and determine the correct transform origin for the anchor point
362
- * @param {Event} eventData javascript event that is doing the transform
363
- * @param {Object} transform javascript object containing a series of information around the current transform
364
- * @param {number} x current mouse x position, canvas normalized
365
- * @param {number} y current mouse y position, canvas normalized
366
- * @return {Boolean} true if some change happened
367
- */
368
- function skewHandlerX(eventData, transform, x, y) {
369
- // step1 figure out and change transform origin.
370
- // if skewX > 0 and originY bottom we anchor on right
371
- // if skewX > 0 and originY top we anchor on left
372
- // if skewX < 0 and originY bottom we anchor on left
373
- // if skewX < 0 and originY top we anchor on right
374
- // if skewX is 0, we look for mouse position to understand where are we going.
375
- var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;
376
- if (target.lockSkewingX) {
377
- return false;
378
- }
379
- if (currentSkew === 0) {
380
- var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);
381
- if (localPointFromCenter.x > 0) {
382
- // we are pulling right, anchor left;
383
- originX = LEFT;
384
- }
385
- else {
386
- // we are pulling right, anchor right
387
- originX = RIGHT;
388
- }
389
- }
390
- else {
391
- if (currentSkew > 0) {
392
- originX = originY === TOP ? LEFT : RIGHT;
393
- }
394
- if (currentSkew < 0) {
395
- originX = originY === TOP ? RIGHT : LEFT;
396
- }
397
- // is the object flipped on one side only? swap the origin.
398
- if (targetHasOneFlip(target)) {
399
- originX = originX === LEFT ? RIGHT : LEFT;
400
- }
401
- }
402
-
403
- // once we have the origin, we find the anchor point
404
- transform.originX = originX;
405
- var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));
406
- return finalHandler(eventData, transform, x, y);
407
- }
408
-
409
- /**
410
- * Wrapped Action handler for skewing on the Y axis, takes care of the
411
- * skew direction and determine the correct transform origin for the anchor point
412
- * @param {Event} eventData javascript event that is doing the transform
413
- * @param {Object} transform javascript object containing a series of information around the current transform
414
- * @param {number} x current mouse x position, canvas normalized
415
- * @param {number} y current mouse y position, canvas normalized
416
- * @return {Boolean} true if some change happened
417
- */
418
- function skewHandlerY(eventData, transform, x, y) {
419
- // step1 figure out and change transform origin.
420
- // if skewY > 0 and originX left we anchor on top
421
- // if skewY > 0 and originX right we anchor on bottom
422
- // if skewY < 0 and originX left we anchor on bottom
423
- // if skewY < 0 and originX right we anchor on top
424
- // if skewY is 0, we look for mouse position to understand where are we going.
425
- var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;
426
- if (target.lockSkewingY) {
427
- return false;
428
- }
429
- if (currentSkew === 0) {
430
- var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);
431
- if (localPointFromCenter.y > 0) {
432
- // we are pulling down, anchor up;
433
- originY = TOP;
434
- }
435
- else {
436
- // we are pulling up, anchor down
437
- originY = BOTTOM;
438
- }
439
- }
440
- else {
441
- if (currentSkew > 0) {
442
- originY = originX === LEFT ? TOP : BOTTOM;
443
- }
444
- if (currentSkew < 0) {
445
- originY = originX === LEFT ? BOTTOM : TOP;
446
- }
447
- // is the object flipped on one side only? swap the origin.
448
- if (targetHasOneFlip(target)) {
449
- originY = originY === TOP ? BOTTOM : TOP;
450
- }
451
- }
452
-
453
- // once we have the origin, we find the anchor point
454
- transform.originY = originY;
455
- var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));
456
- return finalHandler(eventData, transform, x, y);
457
- }
458
-
459
- /**
460
- * Action handler for rotation and snapping, without anchor point.
461
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
462
- * @param {Event} eventData javascript event that is doing the transform
463
- * @param {Object} transform javascript object containing a series of information around the current transform
464
- * @param {number} x current mouse x position, canvas normalized
465
- * @param {number} y current mouse y position, canvas normalized
466
- * @return {Boolean} true if some change happened
467
- * @private
468
- */
469
- function rotationWithSnapping(eventData, transform, x, y) {
470
- var t = transform,
471
- target = t.target,
472
- pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);
473
-
474
- if (target.lockRotation) {
475
- return false;
476
- }
477
-
478
- var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),
479
- curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),
480
- angle = radiansToDegrees(curAngle - lastAngle + t.theta),
481
- hasRotated = true;
482
-
483
- if (target.snapAngle > 0) {
484
- var snapAngle = target.snapAngle,
485
- snapThreshold = target.snapThreshold || snapAngle,
486
- rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,
487
- leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;
488
-
489
- if (Math.abs(angle - leftAngleLocked) < snapThreshold) {
490
- angle = leftAngleLocked;
491
- }
492
- else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {
493
- angle = rightAngleLocked;
494
- }
495
- }
496
-
497
- // normalize angle to positive value
498
- if (angle < 0) {
499
- angle = 360 + angle;
500
- }
501
- angle %= 360;
502
-
503
- hasRotated = target.angle !== angle;
504
- target.angle = angle;
505
- return hasRotated;
506
- }
507
-
508
- /**
509
- * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.
510
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
511
- * @param {Event} eventData javascript event that is doing the transform
512
- * @param {Object} transform javascript object containing a series of information around the current transform
513
- * @param {number} x current mouse x position, canvas normalized
514
- * @param {number} y current mouse y position, canvas normalized
515
- * @param {Object} options additional information for scaling
516
- * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling
517
- * @return {Boolean} true if some change happened
518
- * @private
519
- */
520
- function scaleObject(eventData, transform, x, y, options) {
521
- options = options || {};
522
- var target = transform.target,
523
- lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,
524
- by = options.by, newPoint, scaleX, scaleY, dim,
525
- scaleProportionally = scaleIsProportional(eventData, target),
526
- forbidScaling = scalingIsForbidden(target, by, scaleProportionally),
527
- signX, signY, gestureScale = transform.gestureScale;
528
-
529
- if (forbidScaling) {
530
- return false;
531
- }
532
- if (gestureScale) {
533
- scaleX = transform.scaleX * gestureScale;
534
- scaleY = transform.scaleY * gestureScale;
535
- }
536
- else {
537
- newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);
538
- // use of sign: We use sign to detect change of direction of an action. sign usually change when
539
- // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling
540
- // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily
541
- // cross many time the origin point and flip the object. so we need a way to filter out the noise.
542
- // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.
543
- signX = by !== 'y' ? sign(newPoint.x) : 1;
544
- signY = by !== 'x' ? sign(newPoint.y) : 1;
545
- if (!transform.signX) {
546
- transform.signX = signX;
547
- }
548
- if (!transform.signY) {
549
- transform.signY = signY;
550
- }
551
-
552
- if (target.lockScalingFlip &&
553
- (transform.signX !== signX || transform.signY !== signY)
554
- ) {
555
- return false;
556
- }
557
-
558
- dim = target._getTransformedDimensions();
559
- // missing detection of flip and logic to switch the origin
560
- if (scaleProportionally && !by) {
561
- // uniform scaling
562
- var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),
563
- original = transform.original,
564
- originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +
565
- Math.abs(dim.y * original.scaleY / target.scaleY),
566
- scale = distance / originalDistance;
567
- scaleX = original.scaleX * scale;
568
- scaleY = original.scaleY * scale;
569
- }
570
- else {
571
- scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);
572
- scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);
573
- }
574
- // if we are scaling by center, we need to double the scale
575
- if (isTransformCentered(transform)) {
576
- scaleX *= 2;
577
- scaleY *= 2;
578
- }
579
- if (transform.signX !== signX && by !== 'y') {
580
- transform.originX = opposite[transform.originX];
581
- scaleX *= -1;
582
- transform.signX = signX;
583
- }
584
- if (transform.signY !== signY && by !== 'x') {
585
- transform.originY = opposite[transform.originY];
586
- scaleY *= -1;
587
- transform.signY = signY;
588
- }
589
- }
590
- // minScale is taken are in the setter.
591
- var oldScaleX = target.scaleX, oldScaleY = target.scaleY;
592
- if (!by) {
593
- !lockScalingX && target.set('scaleX', scaleX);
594
- !lockScalingY && target.set('scaleY', scaleY);
595
- }
596
- else {
597
- // forbidden cases already handled on top here.
598
- by === 'x' && target.set('scaleX', scaleX);
599
- by === 'y' && target.set('scaleY', scaleY);
600
- }
601
- return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;
602
- }
603
-
604
- /**
605
- * Generic scaling logic, to scale from corners either equally or freely.
606
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
607
- * @param {Event} eventData javascript event that is doing the transform
608
- * @param {Object} transform javascript object containing a series of information around the current transform
609
- * @param {number} x current mouse x position, canvas normalized
610
- * @param {number} y current mouse y position, canvas normalized
611
- * @return {Boolean} true if some change happened
612
- */
613
- function scaleObjectFromCorner(eventData, transform, x, y) {
614
- return scaleObject(eventData, transform, x, y);
615
- }
616
-
617
- /**
618
- * Scaling logic for the X axis.
619
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
620
- * @param {Event} eventData javascript event that is doing the transform
621
- * @param {Object} transform javascript object containing a series of information around the current transform
622
- * @param {number} x current mouse x position, canvas normalized
623
- * @param {number} y current mouse y position, canvas normalized
624
- * @return {Boolean} true if some change happened
625
- */
626
- function scaleObjectX(eventData, transform, x, y) {
627
- return scaleObject(eventData, transform, x, y , { by: 'x' });
628
- }
629
-
630
- /**
631
- * Scaling logic for the Y axis.
632
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
633
- * @param {Event} eventData javascript event that is doing the transform
634
- * @param {Object} transform javascript object containing a series of information around the current transform
635
- * @param {number} x current mouse x position, canvas normalized
636
- * @param {number} y current mouse y position, canvas normalized
637
- * @return {Boolean} true if some change happened
638
- */
639
- function scaleObjectY(eventData, transform, x, y) {
640
- return scaleObject(eventData, transform, x, y , { by: 'y' });
641
- }
642
-
643
- /**
644
- * Composed action handler to either scale Y or skew X
645
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
646
- * @param {Event} eventData javascript event that is doing the transform
647
- * @param {Object} transform javascript object containing a series of information around the current transform
648
- * @param {number} x current mouse x position, canvas normalized
649
- * @param {number} y current mouse y position, canvas normalized
650
- * @return {Boolean} true if some change happened
651
- */
652
- function scalingYOrSkewingX(eventData, transform, x, y) {
653
- // ok some safety needed here.
654
- if (eventData[transform.target.canvas.altActionKey]) {
655
- return controls.skewHandlerX(eventData, transform, x, y);
656
- }
657
- return controls.scalingY(eventData, transform, x, y);
658
- }
659
-
660
- /**
661
- * Composed action handler to either scale X or skew Y
662
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
663
- * @param {Event} eventData javascript event that is doing the transform
664
- * @param {Object} transform javascript object containing a series of information around the current transform
665
- * @param {number} x current mouse x position, canvas normalized
666
- * @param {number} y current mouse y position, canvas normalized
667
- * @return {Boolean} true if some change happened
668
- */
669
- function scalingXOrSkewingY(eventData, transform, x, y) {
670
- // ok some safety needed here.
671
- if (eventData[transform.target.canvas.altActionKey]) {
672
- return controls.skewHandlerY(eventData, transform, x, y);
673
- }
674
- return controls.scalingX(eventData, transform, x, y);
675
- }
676
-
677
- /**
678
- * Action handler to change textbox width
679
- * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
680
- * @param {Event} eventData javascript event that is doing the transform
681
- * @param {Object} transform javascript object containing a series of information around the current transform
682
- * @param {number} x current mouse x position, canvas normalized
683
- * @param {number} y current mouse y position, canvas normalized
684
- * @return {Boolean} true if some change happened
685
- */
686
- function changeWidth(eventData, transform, x, y) {
687
- var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),
688
- strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),
689
- multiplier = isTransformCentered(transform) ? 2 : 1,
690
- oldWidth = target.width,
691
- newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;
692
- target.set('width', Math.max(newWidth, 0));
693
- return oldWidth !== newWidth;
694
- }
695
-
696
- /**
697
- * Action handler
698
- * @private
699
- * @param {Event} eventData javascript event that is doing the transform
700
- * @param {Object} transform javascript object containing a series of information around the current transform
701
- * @param {number} x current mouse x position, canvas normalized
702
- * @param {number} y current mouse y position, canvas normalized
703
- * @return {Boolean} true if the translation occurred
704
- */
705
- function dragHandler(eventData, transform, x, y) {
706
- var target = transform.target,
707
- newLeft = x - transform.offsetX,
708
- newTop = y - transform.offsetY,
709
- moveX = !target.get('lockMovementX') && target.left !== newLeft,
710
- moveY = !target.get('lockMovementY') && target.top !== newTop;
711
- moveX && target.set('left', newLeft);
712
- moveY && target.set('top', newTop);
713
- if (moveX || moveY) {
714
- fireEvent('moving', commonEventInfo(eventData, transform, x, y));
715
- }
716
- return moveX || moveY;
717
- }
718
-
719
- controls.scaleCursorStyleHandler = scaleCursorStyleHandler;
720
- controls.skewCursorStyleHandler = skewCursorStyleHandler;
721
- controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;
722
- controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));
723
- controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));
724
- controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));
725
- controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));
726
- controls.scalingYOrSkewingX = scalingYOrSkewingX;
727
- controls.scalingXOrSkewingY = scalingXOrSkewingY;
728
- controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));
729
- controls.skewHandlerX = skewHandlerX;
730
- controls.skewHandlerY = skewHandlerY;
731
- controls.dragHandler = dragHandler;
732
- controls.scaleOrSkewActionName = scaleOrSkewActionName;
733
- controls.rotationStyleHandler = rotationStyleHandler;
734
- controls.fireEvent = fireEvent;
735
- controls.wrapWithFixedAnchor = wrapWithFixedAnchor;
736
- controls.wrapWithFireEvent = wrapWithFireEvent;
737
- controls.getLocalPoint = getLocalPoint;
738
- fabric.controlsUtils = controls;
739
-
740
- })(typeof exports !== 'undefined' ? exports : this);