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
@@ -0,0 +1,380 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ import { halfPI } from '../constants';
3
+ import {
4
+ ControlActionHandler,
5
+ TPointerEvent,
6
+ TransformActionHandler,
7
+ } from '../EventTypeDefs';
8
+ import { Point } from '../Point';
9
+ import type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';
10
+ import { TDegree, TMat2D } from '../typedefs';
11
+ import { cos } from '../util/misc/cos';
12
+ import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
13
+ import { sin } from '../util/misc/sin';
14
+ import {
15
+ ControlRenderingStyleOverride,
16
+ renderCircleControl,
17
+ renderSquareControl,
18
+ } from './controlRendering';
19
+
20
+ export class Control {
21
+ /**
22
+ * keep track of control visibility.
23
+ * mainly for backward compatibility.
24
+ * if you do not want to see a control, you can remove it
25
+ * from the control set.
26
+ * @type {Boolean}
27
+ * @default true
28
+ */
29
+ visible = true;
30
+
31
+ /**
32
+ * Name of the action that the control will likely execute.
33
+ * This is optional. FabricJS uses to identify what the user is doing for some
34
+ * extra optimizations. If you are writing a custom control and you want to know
35
+ * somewhere else in the code what is going on, you can use this string here.
36
+ * you can also provide a custom getActionName if your control run multiple actions
37
+ * depending on some external state.
38
+ * default to scale since is the most common, used on 4 corners by default
39
+ * @type {String}
40
+ * @default 'scale'
41
+ */
42
+ actionName = 'scale';
43
+
44
+ /**
45
+ * Drawing angle of the control.
46
+ * NOT used for now, but name marked as needed for internal logic
47
+ * example: to reuse the same drawing function for different rotated controls
48
+ * @type {Number}
49
+ * @default 0
50
+ */
51
+ angle = 0;
52
+
53
+ /**
54
+ * Relative position of the control. X
55
+ * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities
56
+ * of the bounding box.
57
+ * @type {Number}
58
+ * @default 0
59
+ */
60
+ x = 0;
61
+
62
+ /**
63
+ * Relative position of the control. Y
64
+ * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities
65
+ * of the bounding box.
66
+ * @type {Number}
67
+ * @default 0
68
+ */
69
+ y = 0;
70
+
71
+ /**
72
+ * Horizontal offset of the control from the defined position. In pixels
73
+ * Positive offset moves the control to the right, negative to the left.
74
+ * It used when you want to have position of control that does not scale with
75
+ * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on
76
+ * the boundind box, with an offset of 30 pixels vertically. Those 30 pixels will
77
+ * stay 30 pixels no matter how the object is big. Another example is having 2
78
+ * controls in the corner, that stay in the same position when the object scale.
79
+ * of the bounding box.
80
+ * @type {Number}
81
+ * @default 0
82
+ */
83
+ offsetX = 0;
84
+
85
+ /**
86
+ * Vertical offset of the control from the defined position. In pixels
87
+ * Positive offset moves the control to the bottom, negative to the top.
88
+ * @type {Number}
89
+ * @default 0
90
+ */
91
+ offsetY = 0;
92
+
93
+ /**
94
+ * Sets the length of the control. If null, defaults to object's cornerSize.
95
+ * Expects both sizeX and sizeY to be set when set.
96
+ * @type {?Number}
97
+ * @default null
98
+ */
99
+ sizeX: number | null = null;
100
+
101
+ /**
102
+ * Sets the height of the control. If null, defaults to object's cornerSize.
103
+ * Expects both sizeX and sizeY to be set when set.
104
+ * @type {?Number}
105
+ * @default null
106
+ */
107
+ sizeY: number | null = null;
108
+
109
+ /**
110
+ * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.
111
+ * Expects both touchSizeX and touchSizeY to be set when set.
112
+ * @type {?Number}
113
+ * @default null
114
+ */
115
+ touchSizeX: number | null = null;
116
+
117
+ /**
118
+ * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.
119
+ * Expects both touchSizeX and touchSizeY to be set when set.
120
+ * @type {?Number}
121
+ * @default null
122
+ */
123
+ touchSizeY: number | null = null;
124
+
125
+ /**
126
+ * Css cursor style to display when the control is hovered.
127
+ * if the method `cursorStyleHandler` is provided, this property is ignored.
128
+ * @type {String}
129
+ * @default 'crosshair'
130
+ */
131
+ cursorStyle = 'crosshair';
132
+
133
+ /**
134
+ * If controls has an offsetY or offsetX, draw a line that connects
135
+ * the control to the bounding box
136
+ * @type {Boolean}
137
+ * @default false
138
+ */
139
+ withConnection = false;
140
+
141
+ constructor(options: Partial<Control>) {
142
+ Object.assign(this, options);
143
+ }
144
+
145
+ /**
146
+ * The control actionHandler, provide one to handle action ( control being moved )
147
+ * @param {Event} eventData the native mouse event
148
+ * @param {Transform} transformData properties of the current transform
149
+ * @param {Number} x x position of the cursor
150
+ * @param {Number} y y position of the cursor
151
+ * @return {Boolean} true if the action/event modified the object
152
+ */
153
+ declare actionHandler: TransformActionHandler;
154
+
155
+ /**
156
+ * The control handler for mouse down, provide one to handle mouse down on control
157
+ * @param {Event} eventData the native mouse event
158
+ * @param {Transform} transformData properties of the current transform
159
+ * @param {Number} x x position of the cursor
160
+ * @param {Number} y y position of the cursor
161
+ * @return {Boolean} true if the action/event modified the object
162
+ */
163
+ declare mouseDownHandler?: ControlActionHandler;
164
+
165
+ /**
166
+ * The control mouseUpHandler, provide one to handle an effect on mouse up.
167
+ * @param {Event} eventData the native mouse event
168
+ * @param {Transform} transformData properties of the current transform
169
+ * @param {Number} x x position of the cursor
170
+ * @param {Number} y y position of the cursor
171
+ * @return {Boolean} true if the action/event modified the object
172
+ */
173
+ declare mouseUpHandler?: ControlActionHandler;
174
+
175
+ /**
176
+ * Returns control actionHandler
177
+ * @param {Event} eventData the native mouse event
178
+ * @param {FabricObject} fabricObject on which the control is displayed
179
+ * @param {Control} control control for which the action handler is being asked
180
+ * @return {Function} the action handler
181
+ */
182
+ getActionHandler(
183
+ eventData: TPointerEvent,
184
+ fabricObject: InteractiveFabricObject,
185
+ control: Control
186
+ ): TransformActionHandler | undefined {
187
+ return this.actionHandler;
188
+ }
189
+
190
+ /**
191
+ * Returns control mouseDown handler
192
+ * @param {Event} eventData the native mouse event
193
+ * @param {FabricObject} fabricObject on which the control is displayed
194
+ * @param {Control} control control for which the action handler is being asked
195
+ * @return {Function} the action handler
196
+ */
197
+ getMouseDownHandler(
198
+ eventData: TPointerEvent,
199
+ fabricObject: InteractiveFabricObject,
200
+ control: Control
201
+ ): ControlActionHandler | undefined {
202
+ return this.mouseDownHandler;
203
+ }
204
+
205
+ /**
206
+ * Returns control mouseUp handler.
207
+ * During actions the fabricObject or the control can be of different obj
208
+ * @param {Event} eventData the native mouse event
209
+ * @param {FabricObject} fabricObject on which the control is displayed
210
+ * @param {Control} control control for which the action handler is being asked
211
+ * @return {Function} the action handler
212
+ */
213
+ getMouseUpHandler(
214
+ eventData: TPointerEvent,
215
+ fabricObject: InteractiveFabricObject,
216
+ control: Control
217
+ ): ControlActionHandler | undefined {
218
+ return this.mouseUpHandler;
219
+ }
220
+
221
+ /**
222
+ * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate
223
+ * function you can pass one in the constructor
224
+ * the cursorStyle property
225
+ * @param {Event} eventData the native mouse event
226
+ * @param {Control} control the current control ( likely this)
227
+ * @param {FabricObject} object on which the control is displayed
228
+ * @return {String}
229
+ */
230
+ cursorStyleHandler(
231
+ eventData: TPointerEvent,
232
+ control: Control,
233
+ fabricObject: InteractiveFabricObject
234
+ ) {
235
+ return control.cursorStyle;
236
+ }
237
+
238
+ /**
239
+ * Returns the action name. The basic implementation just return the actionName property.
240
+ * @param {Event} eventData the native mouse event
241
+ * @param {Control} control the current control ( likely this)
242
+ * @param {FabricObject} object on which the control is displayed
243
+ * @return {String}
244
+ */
245
+ getActionName(
246
+ eventData: TPointerEvent,
247
+ control: Control,
248
+ fabricObject: InteractiveFabricObject
249
+ ) {
250
+ return control.actionName;
251
+ }
252
+
253
+ /**
254
+ * Returns controls visibility
255
+ * @param {FabricObject} object on which the control is displayed
256
+ * @param {String} controlKey key where the control is memorized on the
257
+ * @return {Boolean}
258
+ */
259
+ getVisibility(fabricObject: InteractiveFabricObject, controlKey: string) {
260
+ return fabricObject._controlsVisibility?.[controlKey] ?? this.visible;
261
+ }
262
+
263
+ /**
264
+ * Sets controls visibility
265
+ * @param {Boolean} visibility for the object
266
+ * @return {Void}
267
+ */
268
+ setVisibility(
269
+ visibility: boolean,
270
+ name: string,
271
+ fabricObject: InteractiveFabricObject
272
+ ) {
273
+ this.visible = visibility;
274
+ }
275
+
276
+ positionHandler(
277
+ dim: Point,
278
+ finalMatrix: TMat2D,
279
+ fabricObject: InteractiveFabricObject,
280
+ currentControl: Control
281
+ ) {
282
+ return new Point(
283
+ this.x * dim.x + this.offsetX,
284
+ this.y * dim.y + this.offsetY
285
+ ).transform(finalMatrix);
286
+ }
287
+
288
+ /**
289
+ * Returns the coords for this control based on object values.
290
+ * @param {Number} objectAngle angle from the fabric object holding the control
291
+ * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if
292
+ * isTouch is true)
293
+ * @param {Number} centerX x coordinate where the control center should be
294
+ * @param {Number} centerY y coordinate where the control center should be
295
+ * @param {boolean} isTouch true if touch corner, false if normal corner
296
+ */
297
+ calcCornerCoords(
298
+ objectAngle: TDegree,
299
+ objectCornerSize: number,
300
+ centerX: number,
301
+ centerY: number,
302
+ isTouch: boolean
303
+ ) {
304
+ let cosHalfOffset, sinHalfOffset, cosHalfOffsetComp, sinHalfOffsetComp;
305
+ const xSize = isTouch ? this.touchSizeX : this.sizeX,
306
+ ySize = isTouch ? this.touchSizeY : this.sizeY;
307
+ if (xSize && ySize && xSize !== ySize) {
308
+ // handle rectangular corners
309
+ const controlTriangleAngle = Math.atan2(ySize, xSize);
310
+ const cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;
311
+ const newTheta = controlTriangleAngle - degreesToRadians(objectAngle);
312
+ const newThetaComp =
313
+ halfPI - controlTriangleAngle - degreesToRadians(objectAngle);
314
+ cosHalfOffset = cornerHypotenuse * cos(newTheta);
315
+ sinHalfOffset = cornerHypotenuse * sin(newTheta);
316
+ // use complementary angle for two corners
317
+ cosHalfOffsetComp = cornerHypotenuse * cos(newThetaComp);
318
+ sinHalfOffsetComp = cornerHypotenuse * sin(newThetaComp);
319
+ } else {
320
+ // handle square corners
321
+ // use default object corner size unless size is defined
322
+ const cornerSize = xSize && ySize ? xSize : objectCornerSize;
323
+ const cornerHypotenuse = cornerSize * Math.SQRT1_2;
324
+ // complementary angles are equal since they're both 45 degrees
325
+ const newTheta = degreesToRadians(45 - objectAngle);
326
+ cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * cos(newTheta);
327
+ sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * sin(newTheta);
328
+ }
329
+
330
+ return {
331
+ tl: new Point(centerX - sinHalfOffsetComp, centerY - cosHalfOffsetComp),
332
+ tr: new Point(centerX + cosHalfOffset, centerY - sinHalfOffset),
333
+ bl: new Point(centerX - cosHalfOffset, centerY + sinHalfOffset),
334
+ br: new Point(centerX + sinHalfOffsetComp, centerY + cosHalfOffsetComp),
335
+ };
336
+ }
337
+
338
+ /**
339
+ * Render function for the control.
340
+ * When this function runs the context is unscaled. unrotate. Just retina scaled.
341
+ * all the functions will have to translate to the point left,top before starting Drawing
342
+ * if they want to draw a control where the position is detected.
343
+ * left and top are the result of the positionHandler function
344
+ * @param {RenderingContext2D} ctx the context where the control will be drawn
345
+ * @param {Number} left position of the canvas where we are about to render the control.
346
+ * @param {Number} top position of the canvas where we are about to render the control.
347
+ * @param {Object} styleOverride
348
+ * @param {FabricObject} fabricObject the object where the control is about to be rendered
349
+ */
350
+ render(
351
+ ctx: CanvasRenderingContext2D,
352
+ left: number,
353
+ top: number,
354
+ styleOverride: ControlRenderingStyleOverride | undefined,
355
+ fabricObject: InteractiveFabricObject
356
+ ) {
357
+ styleOverride = styleOverride || {};
358
+ switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {
359
+ case 'circle':
360
+ renderCircleControl.call(
361
+ this,
362
+ ctx,
363
+ left,
364
+ top,
365
+ styleOverride,
366
+ fabricObject
367
+ );
368
+ break;
369
+ default:
370
+ renderSquareControl.call(
371
+ this,
372
+ ctx,
373
+ left,
374
+ top,
375
+ styleOverride,
376
+ fabricObject
377
+ );
378
+ }
379
+ }
380
+ }
@@ -0,0 +1,52 @@
1
+ import { TransformActionHandler } from '../EventTypeDefs';
2
+ import { getLocalPoint, isTransformCentered } from './util';
3
+ import { wrapWithFireEvent } from './wrapWithFireEvent';
4
+ import { wrapWithFixedAnchor } from './wrapWithFixedAnchor';
5
+
6
+ /**
7
+ * Action handler to change object's width
8
+ * Needs to be wrapped with `wrapWithFixedAnchor` to be effective
9
+ * @param {Event} eventData javascript event that is doing the transform
10
+ * @param {Object} transform javascript object containing a series of information around the current transform
11
+ * @param {number} x current mouse x position, canvas normalized
12
+ * @param {number} y current mouse y position, canvas normalized
13
+ * @return {Boolean} true if some change happened
14
+ */
15
+ export const changeObjectWidth: TransformActionHandler = (
16
+ eventData,
17
+ transform,
18
+ x,
19
+ y
20
+ ) => {
21
+ const localPoint = getLocalPoint(
22
+ transform,
23
+ transform.originX,
24
+ transform.originY,
25
+ x,
26
+ y
27
+ );
28
+ // make sure the control changes width ONLY from it's side of target
29
+ if (
30
+ transform.originX === 'center' ||
31
+ (transform.originX === 'right' && localPoint.x < 0) ||
32
+ (transform.originX === 'left' && localPoint.x > 0)
33
+ ) {
34
+ const { target } = transform,
35
+ strokePadding =
36
+ target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),
37
+ multiplier = isTransformCentered(transform) ? 2 : 1,
38
+ oldWidth = target.width,
39
+ newWidth = Math.ceil(
40
+ Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding
41
+ );
42
+ target.set('width', Math.max(newWidth, 0));
43
+ // check against actual target width in case `newWidth` was rejected
44
+ return oldWidth !== target.width;
45
+ }
46
+ return false;
47
+ };
48
+
49
+ export const changeWidth = wrapWithFireEvent(
50
+ 'resizing',
51
+ wrapWithFixedAnchor(changeObjectWidth)
52
+ );
@@ -0,0 +1,105 @@
1
+ import { changeWidth } from './changeWidth';
2
+ import { Control } from './Control';
3
+ import { rotationStyleHandler, rotationWithSnapping } from './rotate';
4
+ import { scaleCursorStyleHandler, scalingEqually } from './scale';
5
+ import {
6
+ scaleOrSkewActionName,
7
+ scaleSkewCursorStyleHandler,
8
+ scalingXOrSkewingY,
9
+ scalingYOrSkewingX,
10
+ } from './scaleSkew';
11
+
12
+ // use this function if you want to generate new controls for every instance
13
+ export const createObjectDefaultControls = () => ({
14
+ ml: new Control({
15
+ x: -0.5,
16
+ y: 0,
17
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
18
+ actionHandler: scalingXOrSkewingY,
19
+ getActionName: scaleOrSkewActionName,
20
+ }),
21
+
22
+ mr: new Control({
23
+ x: 0.5,
24
+ y: 0,
25
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
26
+ actionHandler: scalingXOrSkewingY,
27
+ getActionName: scaleOrSkewActionName,
28
+ }),
29
+
30
+ mb: new Control({
31
+ x: 0,
32
+ y: 0.5,
33
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
34
+ actionHandler: scalingYOrSkewingX,
35
+ getActionName: scaleOrSkewActionName,
36
+ }),
37
+
38
+ mt: new Control({
39
+ x: 0,
40
+ y: -0.5,
41
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
42
+ actionHandler: scalingYOrSkewingX,
43
+ getActionName: scaleOrSkewActionName,
44
+ }),
45
+
46
+ tl: new Control({
47
+ x: -0.5,
48
+ y: -0.5,
49
+ cursorStyleHandler: scaleCursorStyleHandler,
50
+ actionHandler: scalingEqually,
51
+ }),
52
+
53
+ tr: new Control({
54
+ x: 0.5,
55
+ y: -0.5,
56
+ cursorStyleHandler: scaleCursorStyleHandler,
57
+ actionHandler: scalingEqually,
58
+ }),
59
+
60
+ bl: new Control({
61
+ x: -0.5,
62
+ y: 0.5,
63
+ cursorStyleHandler: scaleCursorStyleHandler,
64
+ actionHandler: scalingEqually,
65
+ }),
66
+
67
+ br: new Control({
68
+ x: 0.5,
69
+ y: 0.5,
70
+ cursorStyleHandler: scaleCursorStyleHandler,
71
+ actionHandler: scalingEqually,
72
+ }),
73
+
74
+ mtr: new Control({
75
+ x: 0,
76
+ y: -0.5,
77
+ actionHandler: rotationWithSnapping,
78
+ cursorStyleHandler: rotationStyleHandler,
79
+ offsetY: -40,
80
+ withConnection: true,
81
+ actionName: 'rotate',
82
+ }),
83
+ });
84
+
85
+ export const createResizeControls = () => ({
86
+ mr: new Control({
87
+ x: 0.5,
88
+ y: 0,
89
+ actionHandler: changeWidth,
90
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
91
+ actionName: 'resizing',
92
+ }),
93
+ ml: new Control({
94
+ x: -0.5,
95
+ y: 0,
96
+ actionHandler: changeWidth,
97
+ cursorStyleHandler: scaleSkewCursorStyleHandler,
98
+ actionName: 'resizing',
99
+ }),
100
+ });
101
+
102
+ export const createTextboxDefaultControls = () => ({
103
+ ...createObjectDefaultControls(),
104
+ ...createResizeControls(),
105
+ });
@@ -0,0 +1,138 @@
1
+ import { twoMathPi } from '../constants';
2
+ import type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';
3
+ import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
4
+ import type { Control } from './Control';
5
+
6
+ export type ControlRenderingStyleOverride = Partial<
7
+ Pick<
8
+ InteractiveFabricObject,
9
+ | 'cornerStyle'
10
+ | 'cornerSize'
11
+ | 'cornerColor'
12
+ | 'cornerStrokeColor'
13
+ | 'cornerDashArray'
14
+ | 'transparentCorners'
15
+ >
16
+ >;
17
+
18
+ export type ControlRenderer = (
19
+ ctx: CanvasRenderingContext2D,
20
+ left: number,
21
+ top: number,
22
+ styleOverride: ControlRenderingStyleOverride,
23
+ fabricObject: InteractiveFabricObject
24
+ ) => void;
25
+
26
+ /**
27
+ * Render a round control, as per fabric features.
28
+ * This function is written to respect object properties like transparentCorners, cornerSize
29
+ * cornerColor, cornerStrokeColor
30
+ * plus the addition of offsetY and offsetX.
31
+ * @param {CanvasRenderingContext2D} ctx context to render on
32
+ * @param {Number} left x coordinate where the control center should be
33
+ * @param {Number} top y coordinate where the control center should be
34
+ * @param {Object} styleOverride override for FabricObject controls style
35
+ * @param {FabricObject} fabricObject the fabric object for which we are rendering controls
36
+ */
37
+ export function renderCircleControl(
38
+ this: Control,
39
+ ctx: CanvasRenderingContext2D,
40
+ left: number,
41
+ top: number,
42
+ styleOverride: ControlRenderingStyleOverride,
43
+ fabricObject: InteractiveFabricObject
44
+ ) {
45
+ styleOverride = styleOverride || {};
46
+ const xSize =
47
+ this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,
48
+ ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,
49
+ transparentCorners =
50
+ typeof styleOverride.transparentCorners !== 'undefined'
51
+ ? styleOverride.transparentCorners
52
+ : fabricObject.transparentCorners,
53
+ methodName = transparentCorners ? 'stroke' : 'fill',
54
+ stroke =
55
+ !transparentCorners &&
56
+ (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);
57
+ let myLeft = left,
58
+ myTop = top,
59
+ size;
60
+ ctx.save();
61
+ ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';
62
+ ctx.strokeStyle =
63
+ styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';
64
+ // TODO: use proper ellipse code.
65
+ if (xSize > ySize) {
66
+ size = xSize;
67
+ ctx.scale(1.0, ySize / xSize);
68
+ myTop = (top * xSize) / ySize;
69
+ } else if (ySize > xSize) {
70
+ size = ySize;
71
+ ctx.scale(xSize / ySize, 1.0);
72
+ myLeft = (left * ySize) / xSize;
73
+ } else {
74
+ size = xSize;
75
+ }
76
+ // this is still wrong
77
+ ctx.lineWidth = 1;
78
+ ctx.beginPath();
79
+ ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);
80
+ ctx[methodName]();
81
+ if (stroke) {
82
+ ctx.stroke();
83
+ }
84
+ ctx.restore();
85
+ }
86
+
87
+ /**
88
+ * Render a square control, as per fabric features.
89
+ * This function is written to respect object properties like transparentCorners, cornerSize
90
+ * cornerColor, cornerStrokeColor
91
+ * plus the addition of offsetY and offsetX.
92
+ * @param {CanvasRenderingContext2D} ctx context to render on
93
+ * @param {Number} left x coordinate where the control center should be
94
+ * @param {Number} top y coordinate where the control center should be
95
+ * @param {Object} styleOverride override for FabricObject controls style
96
+ * @param {FabricObject} fabricObject the fabric object for which we are rendering controls
97
+ */
98
+ export function renderSquareControl(
99
+ this: Control,
100
+ ctx: CanvasRenderingContext2D,
101
+ left: number,
102
+ top: number,
103
+ styleOverride: ControlRenderingStyleOverride,
104
+ fabricObject: InteractiveFabricObject
105
+ ) {
106
+ styleOverride = styleOverride || {};
107
+ const xSize =
108
+ this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,
109
+ ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,
110
+ transparentCorners =
111
+ typeof styleOverride.transparentCorners !== 'undefined'
112
+ ? styleOverride.transparentCorners
113
+ : fabricObject.transparentCorners,
114
+ methodName = transparentCorners ? 'stroke' : 'fill',
115
+ stroke =
116
+ !transparentCorners &&
117
+ (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),
118
+ xSizeBy2 = xSize / 2,
119
+ ySizeBy2 = ySize / 2;
120
+ ctx.save();
121
+ ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';
122
+ ctx.strokeStyle =
123
+ styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';
124
+ // this is still wrong
125
+ ctx.lineWidth = 1;
126
+ ctx.translate(left, top);
127
+ // angle is relative to canvas plane
128
+ const angle = fabricObject.getTotalAngle();
129
+ ctx.rotate(degreesToRadians(angle));
130
+ // this does not work, and fixed with ( && ) does not make sense.
131
+ // to have real transparent corners we need the controls on upperCanvas
132
+ // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);
133
+ ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);
134
+ if (stroke) {
135
+ ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);
136
+ }
137
+ ctx.restore();
138
+ }
@@ -0,0 +1,31 @@
1
+ import { TransformActionHandler } from '../EventTypeDefs';
2
+ import { fireEvent } from '../util/fireEvent';
3
+ import { commonEventInfo, isLocked } from './util';
4
+
5
+ /**
6
+ * Action handler
7
+ * @private
8
+ * @param {Event} eventData javascript event that is doing the transform
9
+ * @param {Object} transform javascript object containing a series of information around the current transform
10
+ * @param {number} x current mouse x position, canvas normalized
11
+ * @param {number} y current mouse y position, canvas normalized
12
+ * @return {Boolean} true if the translation occurred
13
+ */
14
+ export const dragHandler: TransformActionHandler = (
15
+ eventData,
16
+ transform,
17
+ x,
18
+ y
19
+ ) => {
20
+ const { target, offsetX, offsetY } = transform,
21
+ newLeft = x - offsetX,
22
+ newTop = y - offsetY,
23
+ moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,
24
+ moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;
25
+ moveX && target.set('left', newLeft);
26
+ moveY && target.set('top', newTop);
27
+ if (moveX || moveY) {
28
+ fireEvent('moving', commonEventInfo(eventData, transform, x, y));
29
+ }
30
+ return moveX || moveY;
31
+ };