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,1312 +0,0 @@
1
- (function() {
2
-
3
- var getPointer = fabric.util.getPointer,
4
- degreesToRadians = fabric.util.degreesToRadians,
5
- isTouchEvent = fabric.util.isTouchEvent;
6
-
7
- /**
8
- * Canvas class
9
- * @class fabric.Canvas
10
- * @extends fabric.StaticCanvas
11
- * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}
12
- * @see {@link fabric.Canvas#initialize} for constructor definition
13
- *
14
- * @fires object:modified at the end of a transform or any change when statefull is true
15
- * @fires object:rotating while an object is being rotated from the control
16
- * @fires object:scaling while an object is being scaled by controls
17
- * @fires object:moving while an object is being dragged
18
- * @fires object:skewing while an object is being skewed from the controls
19
- *
20
- * @fires before:transform before a transform is is started
21
- * @fires before:selection:cleared
22
- * @fires selection:cleared
23
- * @fires selection:updated
24
- * @fires selection:created
25
- *
26
- * @fires path:created after a drawing operation ends and the path is added
27
- * @fires mouse:down
28
- * @fires mouse:move
29
- * @fires mouse:up
30
- * @fires mouse:down:before on mouse down, before the inner fabric logic runs
31
- * @fires mouse:move:before on mouse move, before the inner fabric logic runs
32
- * @fires mouse:up:before on mouse up, before the inner fabric logic runs
33
- * @fires mouse:over
34
- * @fires mouse:out
35
- * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.
36
- *
37
- * @fires dragover
38
- * @fires dragenter
39
- * @fires dragleave
40
- * @fires drop:before before drop event. same native event. This is added to handle edge cases
41
- * @fires drop
42
- * @fires after:render at the end of the render process, receives the context in the callback
43
- * @fires before:render at start the render process, receives the context in the callback
44
- *
45
- */
46
- fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {
47
-
48
- /**
49
- * Constructor
50
- * @param {HTMLElement | String} el <canvas> element to initialize instance on
51
- * @param {Object} [options] Options object
52
- * @return {Object} thisArg
53
- */
54
- initialize: function(el, options) {
55
- options || (options = { });
56
- this.renderAndResetBound = this.renderAndReset.bind(this);
57
- this.requestRenderAllBound = this.requestRenderAll.bind(this);
58
- this._initStatic(el, options);
59
- this._initInteractive();
60
- this._createCacheCanvas();
61
- },
62
-
63
- /**
64
- * When true, objects can be transformed by one side (unproportionally)
65
- * when dragged on the corners that normally would not do that.
66
- * @type Boolean
67
- * @default
68
- * @since fabric 4.0 // changed name and default value
69
- */
70
- uniformScaling: true,
71
-
72
- /**
73
- * Indicates which key switches uniform scaling.
74
- * values: 'altKey', 'shiftKey', 'ctrlKey'.
75
- * If `null` or 'none' or any other string that is not a modifier key
76
- * feature is disabled.
77
- * totally wrong named. this sounds like `uniform scaling`
78
- * if Canvas.uniformScaling is true, pressing this will set it to false
79
- * and viceversa.
80
- * @since 1.6.2
81
- * @type String
82
- * @default
83
- */
84
- uniScaleKey: 'shiftKey',
85
-
86
- /**
87
- * When true, objects use center point as the origin of scale transformation.
88
- * <b>Backwards incompatibility note:</b> This property replaces "centerTransform" (Boolean).
89
- * @since 1.3.4
90
- * @type Boolean
91
- * @default
92
- */
93
- centeredScaling: false,
94
-
95
- /**
96
- * When true, objects use center point as the origin of rotate transformation.
97
- * <b>Backwards incompatibility note:</b> This property replaces "centerTransform" (Boolean).
98
- * @since 1.3.4
99
- * @type Boolean
100
- * @default
101
- */
102
- centeredRotation: false,
103
-
104
- /**
105
- * Indicates which key enable centered Transform
106
- * values: 'altKey', 'shiftKey', 'ctrlKey'.
107
- * If `null` or 'none' or any other string that is not a modifier key
108
- * feature is disabled feature disabled.
109
- * @since 1.6.2
110
- * @type String
111
- * @default
112
- */
113
- centeredKey: 'altKey',
114
-
115
- /**
116
- * Indicates which key enable alternate action on corner
117
- * values: 'altKey', 'shiftKey', 'ctrlKey'.
118
- * If `null` or 'none' or any other string that is not a modifier key
119
- * feature is disabled feature disabled.
120
- * @since 1.6.2
121
- * @type String
122
- * @default
123
- */
124
- altActionKey: 'shiftKey',
125
-
126
- /**
127
- * Indicates that canvas is interactive. This property should not be changed.
128
- * @type Boolean
129
- * @default
130
- */
131
- interactive: true,
132
-
133
- /**
134
- * Indicates whether group selection should be enabled
135
- * @type Boolean
136
- * @default
137
- */
138
- selection: true,
139
-
140
- /**
141
- * Indicates which key or keys enable multiple click selection
142
- * Pass value as a string or array of strings
143
- * values: 'altKey', 'shiftKey', 'ctrlKey'.
144
- * If `null` or empty or containing any other string that is not a modifier key
145
- * feature is disabled.
146
- * @since 1.6.2
147
- * @type String|Array
148
- * @default
149
- */
150
- selectionKey: 'shiftKey',
151
-
152
- /**
153
- * Indicates which key enable alternative selection
154
- * in case of target overlapping with active object
155
- * values: 'altKey', 'shiftKey', 'ctrlKey'.
156
- * For a series of reason that come from the general expectations on how
157
- * things should work, this feature works only for preserveObjectStacking true.
158
- * If `null` or 'none' or any other string that is not a modifier key
159
- * feature is disabled.
160
- * @since 1.6.5
161
- * @type null|String
162
- * @default
163
- */
164
- altSelectionKey: null,
165
-
166
- /**
167
- * Color of selection
168
- * @type String
169
- * @default
170
- */
171
- selectionColor: 'rgba(100, 100, 255, 0.3)', // blue
172
-
173
- /**
174
- * Default dash array pattern
175
- * If not empty the selection border is dashed
176
- * @type Array
177
- */
178
- selectionDashArray: [],
179
-
180
- /**
181
- * Color of the border of selection (usually slightly darker than color of selection itself)
182
- * @type String
183
- * @default
184
- */
185
- selectionBorderColor: 'rgba(255, 255, 255, 0.3)',
186
-
187
- /**
188
- * Width of a line used in object/group selection
189
- * @type Number
190
- * @default
191
- */
192
- selectionLineWidth: 1,
193
-
194
- /**
195
- * Select only shapes that are fully contained in the dragged selection rectangle.
196
- * @type Boolean
197
- * @default
198
- */
199
- selectionFullyContained: false,
200
-
201
- /**
202
- * Default cursor value used when hovering over an object on canvas
203
- * @type String
204
- * @default
205
- */
206
- hoverCursor: 'move',
207
-
208
- /**
209
- * Default cursor value used when moving an object on canvas
210
- * @type String
211
- * @default
212
- */
213
- moveCursor: 'move',
214
-
215
- /**
216
- * Default cursor value used for the entire canvas
217
- * @type String
218
- * @default
219
- */
220
- defaultCursor: 'default',
221
-
222
- /**
223
- * Cursor value used during free drawing
224
- * @type String
225
- * @default
226
- */
227
- freeDrawingCursor: 'crosshair',
228
-
229
- /**
230
- * Cursor value used for disabled elements ( corners with disabled action )
231
- * @type String
232
- * @since 2.0.0
233
- * @default
234
- */
235
- notAllowedCursor: 'not-allowed',
236
-
237
- /**
238
- * Default element class that's given to wrapper (div) element of canvas
239
- * @type String
240
- * @default
241
- */
242
- containerClass: 'canvas-container',
243
-
244
- /**
245
- * When true, object detection happens on per-pixel basis rather than on per-bounding-box
246
- * @type Boolean
247
- * @default
248
- */
249
- perPixelTargetFind: false,
250
-
251
- /**
252
- * Number of pixels around target pixel to tolerate (consider active) during object detection
253
- * @type Number
254
- * @default
255
- */
256
- targetFindTolerance: 0,
257
-
258
- /**
259
- * When true, target detection is skipped. Target detection will return always undefined.
260
- * click selection won't work anymore, events will fire with no targets.
261
- * if something is selected before setting it to true, it will be deselected at the first click.
262
- * area selection will still work. check the `selection` property too.
263
- * if you deactivate both, you should look into staticCanvas.
264
- * @type Boolean
265
- * @default
266
- */
267
- skipTargetFind: false,
268
-
269
- /**
270
- * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.
271
- * After mousedown, mousemove creates a shape,
272
- * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.
273
- * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}
274
- * @type Boolean
275
- * @default
276
- */
277
- isDrawingMode: false,
278
-
279
- /**
280
- * Indicates whether objects should remain in current stack position when selected.
281
- * When false objects are brought to top and rendered as part of the selection group
282
- * @type Boolean
283
- * @default
284
- */
285
- preserveObjectStacking: false,
286
-
287
- /**
288
- * Indicates the angle that an object will lock to while rotating.
289
- * @type Number
290
- * @since 1.6.7
291
- * @default
292
- */
293
- snapAngle: 0,
294
-
295
- /**
296
- * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.
297
- * When `null`, the snapThreshold will default to the snapAngle.
298
- * @type null|Number
299
- * @since 1.6.7
300
- * @default
301
- */
302
- snapThreshold: null,
303
-
304
- /**
305
- * Indicates if the right click on canvas can output the context menu or not
306
- * @type Boolean
307
- * @since 1.6.5
308
- * @default
309
- */
310
- stopContextMenu: false,
311
-
312
- /**
313
- * Indicates if the canvas can fire right click events
314
- * @type Boolean
315
- * @since 1.6.5
316
- * @default
317
- */
318
- fireRightClick: false,
319
-
320
- /**
321
- * Indicates if the canvas can fire middle click events
322
- * @type Boolean
323
- * @since 1.7.8
324
- * @default
325
- */
326
- fireMiddleClick: false,
327
-
328
- /**
329
- * Keep track of the subTargets for Mouse Events
330
- * @type fabric.Object[]
331
- */
332
- targets: [],
333
-
334
- /**
335
- * When the option is enabled, PointerEvent is used instead of MouseEvent.
336
- * @type Boolean
337
- * @default
338
- */
339
- enablePointerEvents: false,
340
-
341
- /**
342
- * Keep track of the hovered target
343
- * @type fabric.Object
344
- * @private
345
- */
346
- _hoveredTarget: null,
347
-
348
- /**
349
- * hold the list of nested targets hovered
350
- * @type fabric.Object[]
351
- * @private
352
- */
353
- _hoveredTargets: [],
354
-
355
- /**
356
- * @private
357
- */
358
- _initInteractive: function() {
359
- this._currentTransform = null;
360
- this._groupSelector = null;
361
- this._initWrapperElement();
362
- this._createUpperCanvas();
363
- this._initEventListeners();
364
-
365
- this._initRetinaScaling();
366
-
367
- this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);
368
-
369
- this.calcOffset();
370
- },
371
-
372
- /**
373
- * Divides objects in two groups, one to render immediately
374
- * and one to render as activeGroup.
375
- * @return {Array} objects to render immediately and pushes the other in the activeGroup.
376
- */
377
- _chooseObjectsToRender: function() {
378
- var activeObjects = this.getActiveObjects(),
379
- object, objsToRender, activeGroupObjects;
380
-
381
- if (activeObjects.length > 0 && !this.preserveObjectStacking) {
382
- objsToRender = [];
383
- activeGroupObjects = [];
384
- for (var i = 0, length = this._objects.length; i < length; i++) {
385
- object = this._objects[i];
386
- if (activeObjects.indexOf(object) === -1 ) {
387
- objsToRender.push(object);
388
- }
389
- else {
390
- activeGroupObjects.push(object);
391
- }
392
- }
393
- if (activeObjects.length > 1) {
394
- this._activeObject._objects = activeGroupObjects;
395
- }
396
- objsToRender.push.apply(objsToRender, activeGroupObjects);
397
- }
398
- else {
399
- objsToRender = this._objects;
400
- }
401
- return objsToRender;
402
- },
403
-
404
- /**
405
- * Renders both the top canvas and the secondary container canvas.
406
- * @return {fabric.Canvas} instance
407
- * @chainable
408
- */
409
- renderAll: function () {
410
- if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {
411
- this.clearContext(this.contextTop);
412
- this.contextTopDirty = false;
413
- }
414
- if (this.hasLostContext) {
415
- this.renderTopLayer(this.contextTop);
416
- this.hasLostContext = false;
417
- }
418
- var canvasToDrawOn = this.contextContainer;
419
- this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());
420
- return this;
421
- },
422
-
423
- renderTopLayer: function(ctx) {
424
- ctx.save();
425
- if (this.isDrawingMode && this._isCurrentlyDrawing) {
426
- this.freeDrawingBrush && this.freeDrawingBrush._render();
427
- this.contextTopDirty = true;
428
- }
429
- // we render the top context - last object
430
- if (this.selection && this._groupSelector) {
431
- this._drawSelection(ctx);
432
- this.contextTopDirty = true;
433
- }
434
- ctx.restore();
435
- },
436
-
437
- /**
438
- * Method to render only the top canvas.
439
- * Also used to render the group selection box.
440
- * @return {fabric.Canvas} thisArg
441
- * @chainable
442
- */
443
- renderTop: function () {
444
- var ctx = this.contextTop;
445
- this.clearContext(ctx);
446
- this.renderTopLayer(ctx);
447
- this.fire('after:render');
448
- return this;
449
- },
450
-
451
- /**
452
- * @private
453
- */
454
- _normalizePointer: function (object, pointer) {
455
- var m = object.calcTransformMatrix(),
456
- invertedM = fabric.util.invertTransform(m),
457
- vptPointer = this.restorePointerVpt(pointer);
458
- return fabric.util.transformPoint(vptPointer, invertedM);
459
- },
460
-
461
- /**
462
- * Returns true if object is transparent at a certain location
463
- * @param {fabric.Object} target Object to check
464
- * @param {Number} x Left coordinate
465
- * @param {Number} y Top coordinate
466
- * @return {Boolean}
467
- */
468
- isTargetTransparent: function (target, x, y) {
469
- // in case the target is the activeObject, we cannot execute this optimization
470
- // because we need to draw controls too.
471
- if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {
472
- var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),
473
- targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),
474
- targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);
475
-
476
- var isTransparent = fabric.util.isTransparent(
477
- target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);
478
-
479
- return isTransparent;
480
- }
481
-
482
- var ctx = this.contextCache,
483
- originalColor = target.selectionBackgroundColor, v = this.viewportTransform;
484
-
485
- target.selectionBackgroundColor = '';
486
-
487
- this.clearContext(ctx);
488
-
489
- ctx.save();
490
- ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);
491
- target.render(ctx);
492
- ctx.restore();
493
-
494
- target.selectionBackgroundColor = originalColor;
495
-
496
- var isTransparent = fabric.util.isTransparent(
497
- ctx, x, y, this.targetFindTolerance);
498
-
499
- return isTransparent;
500
- },
501
-
502
- /**
503
- * takes an event and determines if selection key has been pressed
504
- * @private
505
- * @param {Event} e Event object
506
- */
507
- _isSelectionKeyPressed: function(e) {
508
- var selectionKeyPressed = false;
509
-
510
- if (Array.isArray(this.selectionKey)) {
511
- selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });
512
- }
513
- else {
514
- selectionKeyPressed = e[this.selectionKey];
515
- }
516
-
517
- return selectionKeyPressed;
518
- },
519
-
520
- /**
521
- * @private
522
- * @param {Event} e Event object
523
- * @param {fabric.Object} target
524
- */
525
- _shouldClearSelection: function (e, target) {
526
- var activeObjects = this.getActiveObjects(),
527
- activeObject = this._activeObject;
528
-
529
- return (
530
- !target
531
- ||
532
- (target &&
533
- activeObject &&
534
- activeObjects.length > 1 &&
535
- activeObjects.indexOf(target) === -1 &&
536
- activeObject !== target &&
537
- !this._isSelectionKeyPressed(e))
538
- ||
539
- (target && !target.evented)
540
- ||
541
- (target &&
542
- !target.selectable &&
543
- activeObject &&
544
- activeObject !== target)
545
- );
546
- },
547
-
548
- /**
549
- * centeredScaling from object can't override centeredScaling from canvas.
550
- * this should be fixed, since object setting should take precedence over canvas.
551
- * also this should be something that will be migrated in the control properties.
552
- * as ability to define the origin of the transformation that the control provide.
553
- * @private
554
- * @param {fabric.Object} target
555
- * @param {String} action
556
- * @param {Boolean} altKey
557
- */
558
- _shouldCenterTransform: function (target, action, altKey) {
559
- if (!target) {
560
- return;
561
- }
562
-
563
- var centerTransform;
564
-
565
- if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {
566
- centerTransform = this.centeredScaling || target.centeredScaling;
567
- }
568
- else if (action === 'rotate') {
569
- centerTransform = this.centeredRotation || target.centeredRotation;
570
- }
571
-
572
- return centerTransform ? !altKey : altKey;
573
- },
574
-
575
- /**
576
- * should disappear before release 4.0
577
- * @private
578
- */
579
- _getOriginFromCorner: function(target, corner) {
580
- var origin = {
581
- x: target.originX,
582
- y: target.originY
583
- };
584
-
585
- if (corner === 'ml' || corner === 'tl' || corner === 'bl') {
586
- origin.x = 'right';
587
- }
588
- else if (corner === 'mr' || corner === 'tr' || corner === 'br') {
589
- origin.x = 'left';
590
- }
591
-
592
- if (corner === 'tl' || corner === 'mt' || corner === 'tr') {
593
- origin.y = 'bottom';
594
- }
595
- else if (corner === 'bl' || corner === 'mb' || corner === 'br') {
596
- origin.y = 'top';
597
- }
598
- return origin;
599
- },
600
-
601
- /**
602
- * @private
603
- * @param {Boolean} alreadySelected true if target is already selected
604
- * @param {String} corner a string representing the corner ml, mr, tl ...
605
- * @param {Event} e Event object
606
- * @param {fabric.Object} [target] inserted back to help overriding. Unused
607
- */
608
- _getActionFromCorner: function(alreadySelected, corner, e, target) {
609
- if (!corner || !alreadySelected) {
610
- return 'drag';
611
- }
612
- var control = target.controls[corner];
613
- return control.getActionName(e, control, target);
614
- },
615
-
616
- /**
617
- * @private
618
- * @param {Event} e Event object
619
- * @param {fabric.Object} target
620
- */
621
- _setupCurrentTransform: function (e, target, alreadySelected) {
622
- if (!target) {
623
- return;
624
- }
625
-
626
- var pointer = this.getPointer(e), corner = target.__corner,
627
- control = target.controls[corner],
628
- actionHandler = (alreadySelected && corner) ?
629
- control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,
630
- action = this._getActionFromCorner(alreadySelected, corner, e, target),
631
- origin = this._getOriginFromCorner(target, corner),
632
- altKey = e[this.centeredKey],
633
- transform = {
634
- target: target,
635
- action: action,
636
- actionHandler: actionHandler,
637
- corner: corner,
638
- scaleX: target.scaleX,
639
- scaleY: target.scaleY,
640
- skewX: target.skewX,
641
- skewY: target.skewY,
642
- // used by transation
643
- offsetX: pointer.x - target.left,
644
- offsetY: pointer.y - target.top,
645
- originX: origin.x,
646
- originY: origin.y,
647
- ex: pointer.x,
648
- ey: pointer.y,
649
- lastX: pointer.x,
650
- lastY: pointer.y,
651
- // unsure they are useful anymore.
652
- // left: target.left,
653
- // top: target.top,
654
- theta: degreesToRadians(target.angle),
655
- // end of unsure
656
- width: target.width * target.scaleX,
657
- shiftKey: e.shiftKey,
658
- altKey: altKey,
659
- original: fabric.util.saveObjectTransform(target),
660
- };
661
-
662
- if (this._shouldCenterTransform(target, action, altKey)) {
663
- transform.originX = 'center';
664
- transform.originY = 'center';
665
- }
666
- transform.original.originX = origin.x;
667
- transform.original.originY = origin.y;
668
- this._currentTransform = transform;
669
- this._beforeTransform(e);
670
- },
671
-
672
- /**
673
- * Set the cursor type of the canvas element
674
- * @param {String} value Cursor type of the canvas element.
675
- * @see http://www.w3.org/TR/css3-ui/#cursor
676
- */
677
- setCursor: function (value) {
678
- this.upperCanvasEl.style.cursor = value;
679
- },
680
-
681
- /**
682
- * @private
683
- * @param {CanvasRenderingContext2D} ctx to draw the selection on
684
- */
685
- _drawSelection: function (ctx) {
686
- var selector = this._groupSelector,
687
- viewportStart = new fabric.Point(selector.ex, selector.ey),
688
- start = fabric.util.transformPoint(viewportStart, this.viewportTransform),
689
- viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),
690
- extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),
691
- minX = Math.min(start.x, extent.x),
692
- minY = Math.min(start.y, extent.y),
693
- maxX = Math.max(start.x, extent.x),
694
- maxY = Math.max(start.y, extent.y),
695
- strokeOffset = this.selectionLineWidth / 2;
696
-
697
- if (this.selectionColor) {
698
- ctx.fillStyle = this.selectionColor;
699
- ctx.fillRect(minX, minY, maxX - minX, maxY - minY);
700
- }
701
-
702
- if (!this.selectionLineWidth || !this.selectionBorderColor) {
703
- return;
704
- }
705
- ctx.lineWidth = this.selectionLineWidth;
706
- ctx.strokeStyle = this.selectionBorderColor;
707
-
708
- minX += strokeOffset;
709
- minY += strokeOffset;
710
- maxX -= strokeOffset;
711
- maxY -= strokeOffset;
712
- // selection border
713
- fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);
714
- ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);
715
- },
716
-
717
- /**
718
- * Method that determines what object we are clicking on
719
- * the skipGroup parameter is for internal use, is needed for shift+click action
720
- * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target
721
- * or the outside part of the corner.
722
- * @param {Event} e mouse event
723
- * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through
724
- * @return {fabric.Object} the target found
725
- */
726
- findTarget: function (e, skipGroup) {
727
- if (this.skipTargetFind) {
728
- return;
729
- }
730
-
731
- var ignoreZoom = true,
732
- pointer = this.getPointer(e, ignoreZoom),
733
- activeObject = this._activeObject,
734
- aObjects = this.getActiveObjects(),
735
- activeTarget, activeTargetSubs,
736
- isTouch = isTouchEvent(e),
737
- shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;
738
-
739
- // first check current group (if one exists)
740
- // active group does not check sub targets like normal groups.
741
- // if active group just exits.
742
- this.targets = [];
743
-
744
- // if we hit the corner of an activeObject, let's return that.
745
- if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {
746
- return activeObject;
747
- }
748
- if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {
749
- return activeObject;
750
- }
751
- if (aObjects.length === 1 &&
752
- activeObject === this._searchPossibleTargets([activeObject], pointer)) {
753
- if (!this.preserveObjectStacking) {
754
- return activeObject;
755
- }
756
- else {
757
- activeTarget = activeObject;
758
- activeTargetSubs = this.targets;
759
- this.targets = [];
760
- }
761
- }
762
- var target = this._searchPossibleTargets(this._objects, pointer);
763
- if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {
764
- target = activeTarget;
765
- this.targets = activeTargetSubs;
766
- }
767
- return target;
768
- },
769
-
770
- /**
771
- * Checks point is inside the object.
772
- * @param {Object} [pointer] x,y object of point coordinates we want to check.
773
- * @param {fabric.Object} obj Object to test against
774
- * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.
775
- * @return {Boolean} true if point is contained within an area of given object
776
- * @private
777
- */
778
- _checkTarget: function(pointer, obj, globalPointer) {
779
- if (obj &&
780
- obj.visible &&
781
- obj.evented &&
782
- // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html
783
- // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html
784
- obj.containsPoint(pointer)
785
- ) {
786
- if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {
787
- var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);
788
- if (!isTransparent) {
789
- return true;
790
- }
791
- }
792
- else {
793
- return true;
794
- }
795
- }
796
- },
797
-
798
- /**
799
- * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted
800
- * @param {Array} [objects] objects array to look into
801
- * @param {Object} [pointer] x,y object of point coordinates we want to check.
802
- * @return {fabric.Object} object that contains pointer
803
- * @private
804
- */
805
- _searchPossibleTargets: function(objects, pointer) {
806
- // Cache all targets where their bounding box contains point.
807
- var target, i = objects.length, subTarget;
808
- // Do not check for currently grouped objects, since we check the parent group itself.
809
- // until we call this function specifically to search inside the activeGroup
810
- while (i--) {
811
- var objToCheck = objects[i];
812
- var pointerToUse = objToCheck.group ?
813
- this._normalizePointer(objToCheck.group, pointer) : pointer;
814
- if (this._checkTarget(pointerToUse, objToCheck, pointer)) {
815
- target = objects[i];
816
- if (target.subTargetCheck && target instanceof fabric.Group) {
817
- subTarget = this._searchPossibleTargets(target._objects, pointer);
818
- subTarget && this.targets.push(subTarget);
819
- }
820
- break;
821
- }
822
- }
823
- return target;
824
- },
825
-
826
- /**
827
- * Returns pointer coordinates without the effect of the viewport
828
- * @param {Object} pointer with "x" and "y" number values
829
- * @return {Object} object with "x" and "y" number values
830
- */
831
- restorePointerVpt: function(pointer) {
832
- return fabric.util.transformPoint(
833
- pointer,
834
- fabric.util.invertTransform(this.viewportTransform)
835
- );
836
- },
837
-
838
- /**
839
- * Returns pointer coordinates relative to canvas.
840
- * Can return coordinates with or without viewportTransform.
841
- * ignoreZoom false gives back coordinates that represent
842
- * the point clicked on canvas element.
843
- * ignoreZoom true gives back coordinates after being processed
844
- * by the viewportTransform ( sort of coordinates of what is displayed
845
- * on the canvas where you are clicking.
846
- * ignoreZoom true = HTMLElement coordinates relative to top,left
847
- * ignoreZoom false, default = fabric space coordinates, the same used for shape position
848
- * To interact with your shapes top and left you want to use ignoreZoom true
849
- * most of the time, while ignoreZoom false will give you coordinates
850
- * compatible with the object.oCoords system.
851
- * of the time.
852
- * @param {Event} e
853
- * @param {Boolean} ignoreZoom
854
- * @return {Object} object with "x" and "y" number values
855
- */
856
- getPointer: function (e, ignoreZoom) {
857
- // return cached values if we are in the event processing chain
858
- if (this._absolutePointer && !ignoreZoom) {
859
- return this._absolutePointer;
860
- }
861
- if (this._pointer && ignoreZoom) {
862
- return this._pointer;
863
- }
864
-
865
- var pointer = getPointer(e),
866
- upperCanvasEl = this.upperCanvasEl,
867
- bounds = upperCanvasEl.getBoundingClientRect(),
868
- boundsWidth = bounds.width || 0,
869
- boundsHeight = bounds.height || 0,
870
- cssScale;
871
-
872
- if (!boundsWidth || !boundsHeight ) {
873
- if ('top' in bounds && 'bottom' in bounds) {
874
- boundsHeight = Math.abs( bounds.top - bounds.bottom );
875
- }
876
- if ('right' in bounds && 'left' in bounds) {
877
- boundsWidth = Math.abs( bounds.right - bounds.left );
878
- }
879
- }
880
-
881
- this.calcOffset();
882
- pointer.x = pointer.x - this._offset.left;
883
- pointer.y = pointer.y - this._offset.top;
884
- if (!ignoreZoom) {
885
- pointer = this.restorePointerVpt(pointer);
886
- }
887
-
888
- var retinaScaling = this.getRetinaScaling();
889
- if (retinaScaling !== 1) {
890
- pointer.x /= retinaScaling;
891
- pointer.y /= retinaScaling;
892
- }
893
-
894
- if (boundsWidth === 0 || boundsHeight === 0) {
895
- // If bounds are not available (i.e. not visible), do not apply scale.
896
- cssScale = { width: 1, height: 1 };
897
- }
898
- else {
899
- cssScale = {
900
- width: upperCanvasEl.width / boundsWidth,
901
- height: upperCanvasEl.height / boundsHeight
902
- };
903
- }
904
-
905
- return {
906
- x: pointer.x * cssScale.width,
907
- y: pointer.y * cssScale.height
908
- };
909
- },
910
-
911
- /**
912
- * @private
913
- * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized
914
- */
915
- _createUpperCanvas: function () {
916
- var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/, ''),
917
- lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;
918
-
919
- // there is no need to create a new upperCanvas element if we have already one.
920
- if (upperCanvasEl) {
921
- upperCanvasEl.className = '';
922
- }
923
- else {
924
- upperCanvasEl = this._createCanvasElement();
925
- this.upperCanvasEl = upperCanvasEl;
926
- }
927
- fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);
928
-
929
- this.wrapperEl.appendChild(upperCanvasEl);
930
-
931
- this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);
932
- this._applyCanvasStyle(upperCanvasEl);
933
- this.contextTop = upperCanvasEl.getContext('2d');
934
- },
935
-
936
- /**
937
- * Returns context of top canvas where interactions are drawn
938
- * @returns {CanvasRenderingContext2D}
939
- */
940
- getTopContext: function () {
941
- return this.contextTop;
942
- },
943
-
944
- /**
945
- * @private
946
- */
947
- _createCacheCanvas: function () {
948
- this.cacheCanvasEl = this._createCanvasElement();
949
- this.cacheCanvasEl.setAttribute('width', this.width);
950
- this.cacheCanvasEl.setAttribute('height', this.height);
951
- this.contextCache = this.cacheCanvasEl.getContext('2d');
952
- },
953
-
954
- /**
955
- * @private
956
- */
957
- _initWrapperElement: function () {
958
- this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {
959
- 'class': this.containerClass
960
- });
961
- fabric.util.setStyle(this.wrapperEl, {
962
- width: this.width + 'px',
963
- height: this.height + 'px',
964
- position: 'relative'
965
- });
966
- fabric.util.makeElementUnselectable(this.wrapperEl);
967
- },
968
-
969
- /**
970
- * @private
971
- * @param {HTMLElement} element canvas element to apply styles on
972
- */
973
- _applyCanvasStyle: function (element) {
974
- var width = this.width || element.width,
975
- height = this.height || element.height;
976
-
977
- fabric.util.setStyle(element, {
978
- position: 'absolute',
979
- width: width + 'px',
980
- height: height + 'px',
981
- left: 0,
982
- top: 0,
983
- 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',
984
- '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'
985
- });
986
- element.width = width;
987
- element.height = height;
988
- fabric.util.makeElementUnselectable(element);
989
- },
990
-
991
- /**
992
- * Copy the entire inline style from one element (fromEl) to another (toEl)
993
- * @private
994
- * @param {Element} fromEl Element style is copied from
995
- * @param {Element} toEl Element copied style is applied to
996
- */
997
- _copyCanvasStyle: function (fromEl, toEl) {
998
- toEl.style.cssText = fromEl.style.cssText;
999
- },
1000
-
1001
- /**
1002
- * Returns context of canvas where object selection is drawn
1003
- * @return {CanvasRenderingContext2D}
1004
- */
1005
- getSelectionContext: function() {
1006
- return this.contextTop;
1007
- },
1008
-
1009
- /**
1010
- * Returns &lt;canvas> element on which object selection is drawn
1011
- * @return {HTMLCanvasElement}
1012
- */
1013
- getSelectionElement: function () {
1014
- return this.upperCanvasEl;
1015
- },
1016
-
1017
- /**
1018
- * Returns currently active object
1019
- * @return {fabric.Object} active object
1020
- */
1021
- getActiveObject: function () {
1022
- return this._activeObject;
1023
- },
1024
-
1025
- /**
1026
- * Returns an array with the current selected objects
1027
- * @return {fabric.Object} active object
1028
- */
1029
- getActiveObjects: function () {
1030
- var active = this._activeObject;
1031
- if (active) {
1032
- if (active.type === 'activeSelection' && active._objects) {
1033
- return active._objects.slice(0);
1034
- }
1035
- else {
1036
- return [active];
1037
- }
1038
- }
1039
- return [];
1040
- },
1041
-
1042
- /**
1043
- * @private
1044
- * @param {fabric.Object} obj Object that was removed
1045
- */
1046
- _onObjectRemoved: function(obj) {
1047
- // removing active object should fire "selection:cleared" events
1048
- if (obj === this._activeObject) {
1049
- this.fire('before:selection:cleared', { target: obj });
1050
- this._discardActiveObject();
1051
- this.fire('selection:cleared', { target: obj });
1052
- obj.fire('deselected');
1053
- }
1054
- if (obj === this._hoveredTarget){
1055
- this._hoveredTarget = null;
1056
- this._hoveredTargets = [];
1057
- }
1058
- this.callSuper('_onObjectRemoved', obj);
1059
- },
1060
-
1061
- /**
1062
- * @private
1063
- * Compares the old activeObject with the current one and fires correct events
1064
- * @param {fabric.Object} obj old activeObject
1065
- */
1066
- _fireSelectionEvents: function(oldObjects, e) {
1067
- var somethingChanged = false, objects = this.getActiveObjects(),
1068
- added = [], removed = [];
1069
- oldObjects.forEach(function(oldObject) {
1070
- if (objects.indexOf(oldObject) === -1) {
1071
- somethingChanged = true;
1072
- oldObject.fire('deselected', {
1073
- e: e,
1074
- target: oldObject
1075
- });
1076
- removed.push(oldObject);
1077
- }
1078
- });
1079
- objects.forEach(function(object) {
1080
- if (oldObjects.indexOf(object) === -1) {
1081
- somethingChanged = true;
1082
- object.fire('selected', {
1083
- e: e,
1084
- target: object
1085
- });
1086
- added.push(object);
1087
- }
1088
- });
1089
- if (oldObjects.length > 0 && objects.length > 0) {
1090
- somethingChanged && this.fire('selection:updated', {
1091
- e: e,
1092
- selected: added,
1093
- deselected: removed,
1094
- });
1095
- }
1096
- else if (objects.length > 0) {
1097
- this.fire('selection:created', {
1098
- e: e,
1099
- selected: added,
1100
- });
1101
- }
1102
- else if (oldObjects.length > 0) {
1103
- this.fire('selection:cleared', {
1104
- e: e,
1105
- deselected: removed,
1106
- });
1107
- }
1108
- },
1109
-
1110
- /**
1111
- * Sets given object as the only active object on canvas
1112
- * @param {fabric.Object} object Object to set as an active one
1113
- * @param {Event} [e] Event (passed along when firing "object:selected")
1114
- * @return {fabric.Canvas} thisArg
1115
- * @chainable
1116
- */
1117
- setActiveObject: function (object, e) {
1118
- var currentActives = this.getActiveObjects();
1119
- this._setActiveObject(object, e);
1120
- this._fireSelectionEvents(currentActives, e);
1121
- return this;
1122
- },
1123
-
1124
- /**
1125
- * This is a private method for now.
1126
- * This is supposed to be equivalent to setActiveObject but without firing
1127
- * any event. There is commitment to have this stay this way.
1128
- * This is the functional part of setActiveObject.
1129
- * @private
1130
- * @param {Object} object to set as active
1131
- * @param {Event} [e] Event (passed along when firing "object:selected")
1132
- * @return {Boolean} true if the selection happened
1133
- */
1134
- _setActiveObject: function(object, e) {
1135
- if (this._activeObject === object) {
1136
- return false;
1137
- }
1138
- if (!this._discardActiveObject(e, object)) {
1139
- return false;
1140
- }
1141
- if (object.onSelect({ e: e })) {
1142
- return false;
1143
- }
1144
- this._activeObject = object;
1145
- return true;
1146
- },
1147
-
1148
- /**
1149
- * This is a private method for now.
1150
- * This is supposed to be equivalent to discardActiveObject but without firing
1151
- * any events. There is commitment to have this stay this way.
1152
- * This is the functional part of discardActiveObject.
1153
- * @param {Event} [e] Event (passed along when firing "object:deselected")
1154
- * @param {Object} object to set as active
1155
- * @return {Boolean} true if the selection happened
1156
- * @private
1157
- */
1158
- _discardActiveObject: function(e, object) {
1159
- var obj = this._activeObject;
1160
- if (obj) {
1161
- // onDeselect return TRUE to cancel selection;
1162
- if (obj.onDeselect({ e: e, object: object })) {
1163
- return false;
1164
- }
1165
- this._activeObject = null;
1166
- }
1167
- return true;
1168
- },
1169
-
1170
- /**
1171
- * Discards currently active object and fire events. If the function is called by fabric
1172
- * as a consequence of a mouse event, the event is passed as a parameter and
1173
- * sent to the fire function for the custom events. When used as a method the
1174
- * e param does not have any application.
1175
- * @param {event} e
1176
- * @return {fabric.Canvas} thisArg
1177
- * @chainable
1178
- */
1179
- discardActiveObject: function (e) {
1180
- var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();
1181
- if (currentActives.length) {
1182
- this.fire('before:selection:cleared', { target: activeObject, e: e });
1183
- }
1184
- this._discardActiveObject(e);
1185
- this._fireSelectionEvents(currentActives, e);
1186
- return this;
1187
- },
1188
-
1189
- /**
1190
- * Clears a canvas element and removes all event listeners
1191
- * @return {fabric.Canvas} thisArg
1192
- * @chainable
1193
- */
1194
- dispose: function () {
1195
- var wrapper = this.wrapperEl;
1196
- this.removeListeners();
1197
- wrapper.removeChild(this.upperCanvasEl);
1198
- wrapper.removeChild(this.lowerCanvasEl);
1199
- this.contextCache = null;
1200
- this.contextTop = null;
1201
- ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {
1202
- fabric.util.cleanUpJsdomNode(this[element]);
1203
- this[element] = undefined;
1204
- }).bind(this));
1205
- if (wrapper.parentNode) {
1206
- wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);
1207
- }
1208
- delete this.wrapperEl;
1209
- fabric.StaticCanvas.prototype.dispose.call(this);
1210
- return this;
1211
- },
1212
-
1213
- /**
1214
- * Clears all contexts (background, main, top) of an instance
1215
- * @return {fabric.Canvas} thisArg
1216
- * @chainable
1217
- */
1218
- clear: function () {
1219
- // this.discardActiveGroup();
1220
- this.discardActiveObject();
1221
- this.clearContext(this.contextTop);
1222
- return this.callSuper('clear');
1223
- },
1224
-
1225
- /**
1226
- * Draws objects' controls (borders/controls)
1227
- * @param {CanvasRenderingContext2D} ctx Context to render controls on
1228
- */
1229
- drawControls: function(ctx) {
1230
- var activeObject = this._activeObject;
1231
-
1232
- if (activeObject) {
1233
- activeObject._renderControls(ctx);
1234
- }
1235
- },
1236
-
1237
- /**
1238
- * @private
1239
- */
1240
- _toObject: function(instance, methodName, propertiesToInclude) {
1241
- //If the object is part of the current selection group, it should
1242
- //be transformed appropriately
1243
- //i.e. it should be serialised as it would appear if the selection group
1244
- //were to be destroyed.
1245
- var originalProperties = this._realizeGroupTransformOnObject(instance),
1246
- object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);
1247
- //Undo the damage we did by changing all of its properties
1248
- this._unwindGroupTransformOnObject(instance, originalProperties);
1249
- return object;
1250
- },
1251
-
1252
- /**
1253
- * Realises an object's group transformation on it
1254
- * @private
1255
- * @param {fabric.Object} [instance] the object to transform (gets mutated)
1256
- * @returns the original values of instance which were changed
1257
- */
1258
- _realizeGroupTransformOnObject: function(instance) {
1259
- if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {
1260
- var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];
1261
- //Copy all the positionally relevant properties across now
1262
- var originalValues = {};
1263
- layoutProps.forEach(function(prop) {
1264
- originalValues[prop] = instance[prop];
1265
- });
1266
- fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());
1267
- return originalValues;
1268
- }
1269
- else {
1270
- return null;
1271
- }
1272
- },
1273
-
1274
- /**
1275
- * Restores the changed properties of instance
1276
- * @private
1277
- * @param {fabric.Object} [instance] the object to un-transform (gets mutated)
1278
- * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject
1279
- */
1280
- _unwindGroupTransformOnObject: function(instance, originalValues) {
1281
- if (originalValues) {
1282
- instance.set(originalValues);
1283
- }
1284
- },
1285
-
1286
- /**
1287
- * @private
1288
- */
1289
- _setSVGObject: function(markup, instance, reviver) {
1290
- //If the object is in a selection group, simulate what would happen to that
1291
- //object when the group is deselected
1292
- var originalProperties = this._realizeGroupTransformOnObject(instance);
1293
- this.callSuper('_setSVGObject', markup, instance, reviver);
1294
- this._unwindGroupTransformOnObject(instance, originalProperties);
1295
- },
1296
-
1297
- setViewportTransform: function (vpt) {
1298
- if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {
1299
- this._activeObject.clearContextTop();
1300
- }
1301
- fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);
1302
- }
1303
- });
1304
-
1305
- // copying static properties manually to work around Opera's bug,
1306
- // where "prototype" property is enumerable and overrides existing prototype
1307
- for (var prop in fabric.StaticCanvas) {
1308
- if (prop !== 'prototype') {
1309
- fabric.Canvas[prop] = fabric.StaticCanvas[prop];
1310
- }
1311
- }
1312
- })();