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,764 +0,0 @@
1
- (function(global) {
2
-
3
- 'use strict';
4
-
5
- var extend = fabric.util.object.extend;
6
-
7
- if (!global.fabric) {
8
- global.fabric = { };
9
- }
10
-
11
- if (global.fabric.Image) {
12
- fabric.warn('fabric.Image is already defined.');
13
- return;
14
- }
15
-
16
- /**
17
- * Image class
18
- * @class fabric.Image
19
- * @extends fabric.Object
20
- * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}
21
- * @see {@link fabric.Image#initialize} for constructor definition
22
- */
23
- fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {
24
-
25
- /**
26
- * Type of an object
27
- * @type String
28
- * @default
29
- */
30
- type: 'image',
31
-
32
- /**
33
- * Width of a stroke.
34
- * For image quality a stroke multiple of 2 gives better results.
35
- * @type Number
36
- * @default
37
- */
38
- strokeWidth: 0,
39
-
40
- /**
41
- * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.
42
- * This allows for relative urls as image src.
43
- * @since 2.7.0
44
- * @type Boolean
45
- * @default
46
- */
47
- srcFromAttribute: false,
48
-
49
- /**
50
- * private
51
- * contains last value of scaleX to detect
52
- * if the Image got resized after the last Render
53
- * @type Number
54
- */
55
- _lastScaleX: 1,
56
-
57
- /**
58
- * private
59
- * contains last value of scaleY to detect
60
- * if the Image got resized after the last Render
61
- * @type Number
62
- */
63
- _lastScaleY: 1,
64
-
65
- /**
66
- * private
67
- * contains last value of scaling applied by the apply filter chain
68
- * @type Number
69
- */
70
- _filterScalingX: 1,
71
-
72
- /**
73
- * private
74
- * contains last value of scaling applied by the apply filter chain
75
- * @type Number
76
- */
77
- _filterScalingY: 1,
78
-
79
- /**
80
- * minimum scale factor under which any resizeFilter is triggered to resize the image
81
- * 0 will disable the automatic resize. 1 will trigger automatically always.
82
- * number bigger than 1 are not implemented yet.
83
- * @type Number
84
- */
85
- minimumScaleTrigger: 0.5,
86
-
87
- /**
88
- * List of properties to consider when checking if
89
- * state of an object is changed ({@link fabric.Object#hasStateChanged})
90
- * as well as for history (undo/redo) purposes
91
- * @type Array
92
- */
93
- stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),
94
-
95
- /**
96
- * List of properties to consider when checking if cache needs refresh
97
- * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single
98
- * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty
99
- * and refreshed at the next render
100
- * @type Array
101
- */
102
- cacheProperties: fabric.Object.prototype.cacheProperties.concat('cropX', 'cropY'),
103
-
104
- /**
105
- * key used to retrieve the texture representing this image
106
- * @since 2.0.0
107
- * @type String
108
- * @default
109
- */
110
- cacheKey: '',
111
-
112
- /**
113
- * Image crop in pixels from original image size.
114
- * @since 2.0.0
115
- * @type Number
116
- * @default
117
- */
118
- cropX: 0,
119
-
120
- /**
121
- * Image crop in pixels from original image size.
122
- * @since 2.0.0
123
- * @type Number
124
- * @default
125
- */
126
- cropY: 0,
127
-
128
- /**
129
- * Indicates whether this canvas will use image smoothing when painting this image.
130
- * Also influence if the cacheCanvas for this image uses imageSmoothing
131
- * @since 4.0.0-beta.11
132
- * @type Boolean
133
- * @default
134
- */
135
- imageSmoothing: true,
136
-
137
- /**
138
- * Constructor
139
- * Image can be initialized with any canvas drawable or a string.
140
- * The string should be a url and will be loaded as an image.
141
- * Canvas and Image element work out of the box, while videos require extra code to work.
142
- * Please check video element events for seeking.
143
- * @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element
144
- * @param {Object} [options] Options object
145
- * @param {function} [callback] callback function to call after eventual filters applied.
146
- * @return {fabric.Image} thisArg
147
- */
148
- initialize: function(element, options) {
149
- options || (options = { });
150
- this.filters = [];
151
- this.cacheKey = 'texture' + fabric.Object.__uid++;
152
- this.callSuper('initialize', options);
153
- this._initElement(element, options);
154
- },
155
-
156
- /**
157
- * Returns image element which this instance if based on
158
- * @return {HTMLImageElement} Image element
159
- */
160
- getElement: function() {
161
- return this._element || {};
162
- },
163
-
164
- /**
165
- * Sets image element for this instance to a specified one.
166
- * If filters defined they are applied to new image.
167
- * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.
168
- * @param {HTMLImageElement} element
169
- * @param {Object} [options] Options object
170
- * @return {fabric.Image} thisArg
171
- * @chainable
172
- */
173
- setElement: function(element, options) {
174
- this.removeTexture(this.cacheKey);
175
- this.removeTexture(this.cacheKey + '_filtered');
176
- this._element = element;
177
- this._originalElement = element;
178
- this._initConfig(options);
179
- if (this.filters.length !== 0) {
180
- this.applyFilters();
181
- }
182
- // resizeFilters work on the already filtered copy.
183
- // we need to apply resizeFilters AFTER normal filters.
184
- // applyResizeFilters is run more often than normal filters
185
- // and is triggered by user interactions rather than dev code
186
- if (this.resizeFilter) {
187
- this.applyResizeFilters();
188
- }
189
- return this;
190
- },
191
-
192
- /**
193
- * Delete a single texture if in webgl mode
194
- */
195
- removeTexture: function(key) {
196
- var backend = fabric.filterBackend;
197
- if (backend && backend.evictCachesForKey) {
198
- backend.evictCachesForKey(key);
199
- }
200
- },
201
-
202
- /**
203
- * Delete textures, reference to elements and eventually JSDOM cleanup
204
- */
205
- dispose: function () {
206
- this.callSuper('dispose');
207
- this.removeTexture(this.cacheKey);
208
- this.removeTexture(this.cacheKey + '_filtered');
209
- this._cacheContext = undefined;
210
- ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {
211
- fabric.util.cleanUpJsdomNode(this[element]);
212
- this[element] = undefined;
213
- }).bind(this));
214
- },
215
-
216
- /**
217
- * Get the crossOrigin value (of the corresponding image element)
218
- */
219
- getCrossOrigin: function() {
220
- return this._originalElement && (this._originalElement.crossOrigin || null);
221
- },
222
-
223
- /**
224
- * Returns original size of an image
225
- * @return {Object} Object with "width" and "height" properties
226
- */
227
- getOriginalSize: function() {
228
- var element = this.getElement();
229
- return {
230
- width: element.naturalWidth || element.width,
231
- height: element.naturalHeight || element.height
232
- };
233
- },
234
-
235
- /**
236
- * @private
237
- * @param {CanvasRenderingContext2D} ctx Context to render on
238
- */
239
- _stroke: function(ctx) {
240
- if (!this.stroke || this.strokeWidth === 0) {
241
- return;
242
- }
243
- var w = this.width / 2, h = this.height / 2;
244
- ctx.beginPath();
245
- ctx.moveTo(-w, -h);
246
- ctx.lineTo(w, -h);
247
- ctx.lineTo(w, h);
248
- ctx.lineTo(-w, h);
249
- ctx.lineTo(-w, -h);
250
- ctx.closePath();
251
- },
252
-
253
- /**
254
- * Returns object representation of an instance
255
- * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
256
- * @return {Object} Object representation of an instance
257
- */
258
- toObject: function(propertiesToInclude) {
259
- var filters = [];
260
-
261
- this.filters.forEach(function(filterObj) {
262
- if (filterObj) {
263
- filters.push(filterObj.toObject());
264
- }
265
- });
266
- var object = extend(
267
- this.callSuper(
268
- 'toObject',
269
- ['cropX', 'cropY'].concat(propertiesToInclude)
270
- ), {
271
- src: this.getSrc(),
272
- crossOrigin: this.getCrossOrigin(),
273
- filters: filters,
274
- });
275
- if (this.resizeFilter) {
276
- object.resizeFilter = this.resizeFilter.toObject();
277
- }
278
- return object;
279
- },
280
-
281
- /**
282
- * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.
283
- * @return {Boolean}
284
- */
285
- hasCrop: function() {
286
- return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;
287
- },
288
-
289
- /* _TO_SVG_START_ */
290
- /**
291
- * Returns svg representation of an instance
292
- * @return {Array} an array of strings with the specific svg representation
293
- * of the instance
294
- */
295
- _toSVG: function() {
296
- var svgString = [], imageMarkup = [], strokeSvg, element = this._element,
297
- x = -this.width / 2, y = -this.height / 2, clipPath = '', imageRendering = '';
298
- if (!element) {
299
- return [];
300
- }
301
- if (this.hasCrop()) {
302
- var clipPathId = fabric.Object.__uid++;
303
- svgString.push(
304
- '<clipPath id="imageCrop_' + clipPathId + '">\n',
305
- '\t<rect x="' + x + '" y="' + y + '" width="' + this.width + '" height="' + this.height + '" />\n',
306
- '</clipPath>\n'
307
- );
308
- clipPath = ' clip-path="url(#imageCrop_' + clipPathId + ')" ';
309
- }
310
- if (!this.imageSmoothing) {
311
- imageRendering = '" image-rendering="optimizeSpeed';
312
- }
313
- imageMarkup.push('\t<image ', 'COMMON_PARTS', 'xlink:href="', this.getSvgSrc(true),
314
- '" x="', x - this.cropX, '" y="', y - this.cropY,
315
- // we're essentially moving origin of transformation from top/left corner to the center of the shape
316
- // by wrapping it in container <g> element with actual transformation, then offsetting object to the top/left
317
- // so that object's center aligns with container's left/top
318
- '" width="', element.width || element.naturalWidth,
319
- '" height="', element.height || element.height,
320
- imageRendering,
321
- '"', clipPath,
322
- '></image>\n');
323
-
324
- if (this.stroke || this.strokeDashArray) {
325
- var origFill = this.fill;
326
- this.fill = null;
327
- strokeSvg = [
328
- '\t<rect ',
329
- 'x="', x, '" y="', y,
330
- '" width="', this.width, '" height="', this.height,
331
- '" style="', this.getSvgStyles(),
332
- '"/>\n'
333
- ];
334
- this.fill = origFill;
335
- }
336
- if (this.paintFirst !== 'fill') {
337
- svgString = svgString.concat(strokeSvg, imageMarkup);
338
- }
339
- else {
340
- svgString = svgString.concat(imageMarkup, strokeSvg);
341
- }
342
- return svgString;
343
- },
344
- /* _TO_SVG_END_ */
345
-
346
- /**
347
- * Returns source of an image
348
- * @param {Boolean} filtered indicates if the src is needed for svg
349
- * @return {String} Source of an image
350
- */
351
- getSrc: function(filtered) {
352
- var element = filtered ? this._element : this._originalElement;
353
- if (element) {
354
- if (element.toDataURL) {
355
- return element.toDataURL();
356
- }
357
-
358
- if (this.srcFromAttribute) {
359
- return element.getAttribute('src');
360
- }
361
- else {
362
- return element.src;
363
- }
364
- }
365
- else {
366
- return this.src || '';
367
- }
368
- },
369
-
370
- /**
371
- * Sets source of an image
372
- * @param {String} src Source string (URL)
373
- * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)
374
- * @param {Object} [options] Options object
375
- * @param {String} [options.crossOrigin] crossOrigin value (one of "", "anonymous", "use-credentials")
376
- * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes
377
- * @return {fabric.Image} thisArg
378
- * @chainable
379
- */
380
- setSrc: function(src, callback, options) {
381
- fabric.util.loadImage(src, function(img, isError) {
382
- this.setElement(img, options);
383
- this._setWidthHeight();
384
- callback && callback(this, isError);
385
- }, this, options && options.crossOrigin);
386
- return this;
387
- },
388
-
389
- /**
390
- * Returns string representation of an instance
391
- * @return {String} String representation of an instance
392
- */
393
- toString: function() {
394
- return '#<fabric.Image: { src: "' + this.getSrc() + '" }>';
395
- },
396
-
397
- applyResizeFilters: function() {
398
- var filter = this.resizeFilter,
399
- minimumScale = this.minimumScaleTrigger,
400
- objectScale = this.getTotalObjectScaling(),
401
- scaleX = objectScale.scaleX,
402
- scaleY = objectScale.scaleY,
403
- elementToFilter = this._filteredEl || this._originalElement;
404
- if (this.group) {
405
- this.set('dirty', true);
406
- }
407
- if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {
408
- this._element = elementToFilter;
409
- this._filterScalingX = 1;
410
- this._filterScalingY = 1;
411
- this._lastScaleX = scaleX;
412
- this._lastScaleY = scaleY;
413
- return;
414
- }
415
- if (!fabric.filterBackend) {
416
- fabric.filterBackend = fabric.initFilterBackend();
417
- }
418
- var canvasEl = fabric.util.createCanvasElement(),
419
- cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,
420
- sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;
421
- canvasEl.width = sourceWidth;
422
- canvasEl.height = sourceHeight;
423
- this._element = canvasEl;
424
- this._lastScaleX = filter.scaleX = scaleX;
425
- this._lastScaleY = filter.scaleY = scaleY;
426
- fabric.filterBackend.applyFilters(
427
- [filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);
428
- this._filterScalingX = canvasEl.width / this._originalElement.width;
429
- this._filterScalingY = canvasEl.height / this._originalElement.height;
430
- },
431
-
432
- /**
433
- * Applies filters assigned to this image (from "filters" array) or from filter param
434
- * @method applyFilters
435
- * @param {Array} filters to be applied
436
- * @param {Boolean} forResizing specify if the filter operation is a resize operation
437
- * @return {thisArg} return the fabric.Image object
438
- * @chainable
439
- */
440
- applyFilters: function(filters) {
441
-
442
- filters = filters || this.filters || [];
443
- filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });
444
- this.set('dirty', true);
445
-
446
- // needs to clear out or WEBGL will not resize correctly
447
- this.removeTexture(this.cacheKey + '_filtered');
448
-
449
- if (filters.length === 0) {
450
- this._element = this._originalElement;
451
- this._filteredEl = null;
452
- this._filterScalingX = 1;
453
- this._filterScalingY = 1;
454
- return this;
455
- }
456
-
457
- var imgElement = this._originalElement,
458
- sourceWidth = imgElement.naturalWidth || imgElement.width,
459
- sourceHeight = imgElement.naturalHeight || imgElement.height;
460
-
461
- if (this._element === this._originalElement) {
462
- // if the element is the same we need to create a new element
463
- var canvasEl = fabric.util.createCanvasElement();
464
- canvasEl.width = sourceWidth;
465
- canvasEl.height = sourceHeight;
466
- this._element = canvasEl;
467
- this._filteredEl = canvasEl;
468
- }
469
- else {
470
- // clear the existing element to get new filter data
471
- // also dereference the eventual resized _element
472
- this._element = this._filteredEl;
473
- this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);
474
- // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y
475
- this._lastScaleX = 1;
476
- this._lastScaleY = 1;
477
- }
478
- if (!fabric.filterBackend) {
479
- fabric.filterBackend = fabric.initFilterBackend();
480
- }
481
- fabric.filterBackend.applyFilters(
482
- filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);
483
- if (this._originalElement.width !== this._element.width ||
484
- this._originalElement.height !== this._element.height) {
485
- this._filterScalingX = this._element.width / this._originalElement.width;
486
- this._filterScalingY = this._element.height / this._originalElement.height;
487
- }
488
- return this;
489
- },
490
-
491
- /**
492
- * @private
493
- * @param {CanvasRenderingContext2D} ctx Context to render on
494
- */
495
- _render: function(ctx) {
496
- fabric.util.setImageSmoothing(ctx, this.imageSmoothing);
497
- if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {
498
- this.applyResizeFilters();
499
- }
500
- this._stroke(ctx);
501
- this._renderPaintInOrder(ctx);
502
- },
503
-
504
- /**
505
- * Paint the cached copy of the object on the target context.
506
- * it will set the imageSmoothing for the draw operation
507
- * @param {CanvasRenderingContext2D} ctx Context to render on
508
- */
509
- drawCacheOnCanvas: function(ctx) {
510
- fabric.util.setImageSmoothing(ctx, this.imageSmoothing);
511
- fabric.Object.prototype.drawCacheOnCanvas.call(this, ctx);
512
- },
513
-
514
- /**
515
- * Decide if the object should cache or not. Create its own cache level
516
- * needsItsOwnCache should be used when the object drawing method requires
517
- * a cache step. None of the fabric classes requires it.
518
- * Generally you do not cache objects in groups because the group outside is cached.
519
- * This is the special image version where we would like to avoid caching where possible.
520
- * Essentially images do not benefit from caching. They may require caching, and in that
521
- * case we do it. Also caching an image usually ends in a loss of details.
522
- * A full performance audit should be done.
523
- * @return {Boolean}
524
- */
525
- shouldCache: function() {
526
- return this.needsItsOwnCache();
527
- },
528
-
529
- _renderFill: function(ctx) {
530
- var elementToDraw = this._element;
531
- if (!elementToDraw) {
532
- return;
533
- }
534
- var scaleX = this._filterScalingX, scaleY = this._filterScalingY,
535
- w = this.width, h = this.height, min = Math.min, max = Math.max,
536
- // crop values cannot be lesser than 0.
537
- cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),
538
- elWidth = elementToDraw.naturalWidth || elementToDraw.width,
539
- elHeight = elementToDraw.naturalHeight || elementToDraw.height,
540
- sX = cropX * scaleX,
541
- sY = cropY * scaleY,
542
- // the width height cannot exceed element width/height, starting from the crop offset.
543
- sW = min(w * scaleX, elWidth - sX),
544
- sH = min(h * scaleY, elHeight - sY),
545
- x = -w / 2, y = -h / 2,
546
- maxDestW = min(w, elWidth / scaleX - cropX),
547
- maxDestH = min(h, elHeight / scaleY - cropY);
548
-
549
- elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);
550
- },
551
-
552
- /**
553
- * needed to check if image needs resize
554
- * @private
555
- */
556
- _needsResize: function() {
557
- var scale = this.getTotalObjectScaling();
558
- return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);
559
- },
560
-
561
- /**
562
- * @private
563
- */
564
- _resetWidthHeight: function() {
565
- this.set(this.getOriginalSize());
566
- },
567
-
568
- /**
569
- * The Image class's initialization method. This method is automatically
570
- * called by the constructor.
571
- * @private
572
- * @param {HTMLImageElement|String} element The element representing the image
573
- * @param {Object} [options] Options object
574
- */
575
- _initElement: function(element, options) {
576
- this.setElement(fabric.util.getById(element), options);
577
- fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);
578
- },
579
-
580
- /**
581
- * @private
582
- * @param {Object} [options] Options object
583
- */
584
- _initConfig: function(options) {
585
- options || (options = { });
586
- this.setOptions(options);
587
- this._setWidthHeight(options);
588
- },
589
-
590
- /**
591
- * @private
592
- * @param {Array} filters to be initialized
593
- * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created
594
- */
595
- _initFilters: function(filters, callback) {
596
- if (filters && filters.length) {
597
- fabric.util.enlivenObjects(filters, function(enlivenedObjects) {
598
- callback && callback(enlivenedObjects);
599
- }, 'fabric.Image.filters');
600
- }
601
- else {
602
- callback && callback();
603
- }
604
- },
605
-
606
- /**
607
- * @private
608
- * Set the width and the height of the image object, using the element or the
609
- * options.
610
- * @param {Object} [options] Object with width/height properties
611
- */
612
- _setWidthHeight: function(options) {
613
- options || (options = { });
614
- var el = this.getElement();
615
- this.width = options.width || el.naturalWidth || el.width || 0;
616
- this.height = options.height || el.naturalHeight || el.height || 0;
617
- },
618
-
619
- /**
620
- * Calculate offset for center and scale factor for the image in order to respect
621
- * the preserveAspectRatio attribute
622
- * @private
623
- * @return {Object}
624
- */
625
- parsePreserveAspectRatioAttribute: function() {
626
- var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),
627
- rWidth = this._element.width, rHeight = this._element.height,
628
- scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,
629
- offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };
630
- if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {
631
- if (pAR.meetOrSlice === 'meet') {
632
- scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);
633
- offset = (pWidth - rWidth * scaleX) / 2;
634
- if (pAR.alignX === 'Min') {
635
- offsetLeft = -offset;
636
- }
637
- if (pAR.alignX === 'Max') {
638
- offsetLeft = offset;
639
- }
640
- offset = (pHeight - rHeight * scaleY) / 2;
641
- if (pAR.alignY === 'Min') {
642
- offsetTop = -offset;
643
- }
644
- if (pAR.alignY === 'Max') {
645
- offsetTop = offset;
646
- }
647
- }
648
- if (pAR.meetOrSlice === 'slice') {
649
- scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);
650
- offset = rWidth - pWidth / scaleX;
651
- if (pAR.alignX === 'Mid') {
652
- cropX = offset / 2;
653
- }
654
- if (pAR.alignX === 'Max') {
655
- cropX = offset;
656
- }
657
- offset = rHeight - pHeight / scaleY;
658
- if (pAR.alignY === 'Mid') {
659
- cropY = offset / 2;
660
- }
661
- if (pAR.alignY === 'Max') {
662
- cropY = offset;
663
- }
664
- rWidth = pWidth / scaleX;
665
- rHeight = pHeight / scaleY;
666
- }
667
- }
668
- else {
669
- scaleX = pWidth / rWidth;
670
- scaleY = pHeight / rHeight;
671
- }
672
- return {
673
- width: rWidth,
674
- height: rHeight,
675
- scaleX: scaleX,
676
- scaleY: scaleY,
677
- offsetLeft: offsetLeft,
678
- offsetTop: offsetTop,
679
- cropX: cropX,
680
- cropY: cropY
681
- };
682
- }
683
- });
684
-
685
- /**
686
- * Default CSS class name for canvas
687
- * @static
688
- * @type String
689
- * @default
690
- */
691
- fabric.Image.CSS_CANVAS = 'canvas-img';
692
-
693
- /**
694
- * Alias for getSrc
695
- * @static
696
- */
697
- fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;
698
-
699
- /**
700
- * Creates an instance of fabric.Image from its object representation
701
- * @static
702
- * @param {Object} object Object to create an instance from
703
- * @param {Function} callback Callback to invoke when an image instance is created
704
- */
705
- fabric.Image.fromObject = function(_object, callback) {
706
- var object = fabric.util.object.clone(_object);
707
- fabric.util.loadImage(object.src, function(img, isError) {
708
- if (isError) {
709
- callback && callback(null, true);
710
- return;
711
- }
712
- fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {
713
- object.filters = filters || [];
714
- fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {
715
- object.resizeFilter = resizeFilters[0];
716
- fabric.util.enlivenObjectEnlivables(object, object, function () {
717
- var image = new fabric.Image(img, object);
718
- callback(image, false);
719
- });
720
- });
721
- });
722
- }, null, object.crossOrigin);
723
- };
724
-
725
- /**
726
- * Creates an instance of fabric.Image from an URL string
727
- * @static
728
- * @param {String} url URL to create an image from
729
- * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.
730
- * @param {Object} [imgOptions] Options object
731
- */
732
- fabric.Image.fromURL = function(url, callback, imgOptions) {
733
- fabric.util.loadImage(url, function(img, isError) {
734
- callback && callback(new fabric.Image(img, imgOptions), isError);
735
- }, null, imgOptions && imgOptions.crossOrigin);
736
- };
737
-
738
- /* _FROM_SVG_START_ */
739
- /**
740
- * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})
741
- * @static
742
- * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}
743
- */
744
- fabric.Image.ATTRIBUTE_NAMES =
745
- fabric.SHARED_ATTRIBUTES.concat(
746
- 'x y width height preserveAspectRatio xlink:href crossOrigin image-rendering'.split(' ')
747
- );
748
-
749
- /**
750
- * Returns {@link fabric.Image} instance from an SVG element
751
- * @static
752
- * @param {SVGElement} element Element to parse
753
- * @param {Object} [options] Options object
754
- * @param {Function} callback Callback to execute when fabric.Image object is created
755
- * @return {fabric.Image} Instance of fabric.Image
756
- */
757
- fabric.Image.fromElement = function(element, callback, options) {
758
- var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);
759
- fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,
760
- extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));
761
- };
762
- /* _FROM_SVG_END_ */
763
-
764
- })(typeof exports !== 'undefined' ? exports : this);