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,526 +0,0 @@
1
- (function() {
2
-
3
- function parseDecoration(object) {
4
- if (object.textDecoration) {
5
- object.textDecoration.indexOf('underline') > -1 && (object.underline = true);
6
- object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);
7
- object.textDecoration.indexOf('overline') > -1 && (object.overline = true);
8
- delete object.textDecoration;
9
- }
10
- }
11
-
12
- /**
13
- * IText class (introduced in <b>v1.4</b>) Events are also fired with "text:"
14
- * prefix when observing canvas.
15
- * @class fabric.IText
16
- * @extends fabric.Text
17
- * @mixes fabric.Observable
18
- *
19
- * @fires changed
20
- * @fires selection:changed
21
- * @fires editing:entered
22
- * @fires editing:exited
23
- *
24
- * @return {fabric.IText} thisArg
25
- * @see {@link fabric.IText#initialize} for constructor definition
26
- *
27
- * <p>Supported key combinations:</p>
28
- * <pre>
29
- * Move cursor: left, right, up, down
30
- * Select character: shift + left, shift + right
31
- * Select text vertically: shift + up, shift + down
32
- * Move cursor by word: alt + left, alt + right
33
- * Select words: shift + alt + left, shift + alt + right
34
- * Move cursor to line start/end: cmd + left, cmd + right or home, end
35
- * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end
36
- * Jump to start/end of text: cmd + up, cmd + down
37
- * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown
38
- * Delete character: backspace
39
- * Delete word: alt + backspace
40
- * Delete line: cmd + backspace
41
- * Forward delete: delete
42
- * Copy text: ctrl/cmd + c
43
- * Paste text: ctrl/cmd + v
44
- * Cut text: ctrl/cmd + x
45
- * Select entire text: ctrl/cmd + a
46
- * Quit editing tab or esc
47
- * </pre>
48
- *
49
- * <p>Supported mouse/touch combination</p>
50
- * <pre>
51
- * Position cursor: click/touch
52
- * Create selection: click/touch & drag
53
- * Create selection: click & shift + click
54
- * Select word: double click
55
- * Select line: triple click
56
- * </pre>
57
- */
58
- fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable, /** @lends fabric.IText.prototype */ {
59
-
60
- /**
61
- * Type of an object
62
- * @type String
63
- * @default
64
- */
65
- type: 'i-text',
66
-
67
- /**
68
- * Index where text selection starts (or where cursor is when there is no selection)
69
- * @type Number
70
- * @default
71
- */
72
- selectionStart: 0,
73
-
74
- /**
75
- * Index where text selection ends
76
- * @type Number
77
- * @default
78
- */
79
- selectionEnd: 0,
80
-
81
- /**
82
- * Color of text selection
83
- * @type String
84
- * @default
85
- */
86
- selectionColor: 'rgba(17,119,255,0.3)',
87
-
88
- /**
89
- * Indicates whether text is in editing mode
90
- * @type Boolean
91
- * @default
92
- */
93
- isEditing: false,
94
-
95
- /**
96
- * Indicates whether a text can be edited
97
- * @type Boolean
98
- * @default
99
- */
100
- editable: true,
101
-
102
- /**
103
- * Border color of text object while it's in editing mode
104
- * @type String
105
- * @default
106
- */
107
- editingBorderColor: 'rgba(102,153,255,0.25)',
108
-
109
- /**
110
- * Width of cursor (in px)
111
- * @type Number
112
- * @default
113
- */
114
- cursorWidth: 2,
115
-
116
- /**
117
- * Color of text cursor color in editing mode.
118
- * if not set (default) will take color from the text.
119
- * if set to a color value that fabric can understand, it will
120
- * be used instead of the color of the text at the current position.
121
- * @type String
122
- * @default
123
- */
124
- cursorColor: '',
125
-
126
- /**
127
- * Delay between cursor blink (in ms)
128
- * @type Number
129
- * @default
130
- */
131
- cursorDelay: 1000,
132
-
133
- /**
134
- * Duration of cursor fadein (in ms)
135
- * @type Number
136
- * @default
137
- */
138
- cursorDuration: 600,
139
-
140
- /**
141
- * Indicates whether internal text char widths can be cached
142
- * @type Boolean
143
- * @default
144
- */
145
- caching: true,
146
-
147
- /**
148
- * DOM container to append the hiddenTextarea.
149
- * An alternative to attaching to the document.body.
150
- * Useful to reduce laggish redraw of the full document.body tree and
151
- * also with modals event capturing that won't let the textarea take focus.
152
- * @type HTMLElement
153
- * @default
154
- */
155
- hiddenTextareaContainer: null,
156
-
157
- /**
158
- * @private
159
- */
160
- _reSpace: /\s|\n/,
161
-
162
- /**
163
- * @private
164
- */
165
- _currentCursorOpacity: 0,
166
-
167
- /**
168
- * @private
169
- */
170
- _selectionDirection: null,
171
-
172
- /**
173
- * @private
174
- */
175
- _abortCursorAnimation: false,
176
-
177
- /**
178
- * @private
179
- */
180
- __widthOfSpace: [],
181
-
182
- /**
183
- * Helps determining when the text is in composition, so that the cursor
184
- * rendering is altered.
185
- */
186
- inCompositionMode: false,
187
-
188
- /**
189
- * Constructor
190
- * @param {String} text Text string
191
- * @param {Object} [options] Options object
192
- * @return {fabric.IText} thisArg
193
- */
194
- initialize: function(text, options) {
195
- this.callSuper('initialize', text, options);
196
- this.initBehavior();
197
- },
198
-
199
- /**
200
- * Sets selection start (left boundary of a selection)
201
- * @param {Number} index Index to set selection start to
202
- */
203
- setSelectionStart: function(index) {
204
- index = Math.max(index, 0);
205
- this._updateAndFire('selectionStart', index);
206
- },
207
-
208
- /**
209
- * Sets selection end (right boundary of a selection)
210
- * @param {Number} index Index to set selection end to
211
- */
212
- setSelectionEnd: function(index) {
213
- index = Math.min(index, this.text.length);
214
- this._updateAndFire('selectionEnd', index);
215
- },
216
-
217
- /**
218
- * @private
219
- * @param {String} property 'selectionStart' or 'selectionEnd'
220
- * @param {Number} index new position of property
221
- */
222
- _updateAndFire: function(property, index) {
223
- if (this[property] !== index) {
224
- this._fireSelectionChanged();
225
- this[property] = index;
226
- }
227
- this._updateTextarea();
228
- },
229
-
230
- /**
231
- * Fires the even of selection changed
232
- * @private
233
- */
234
- _fireSelectionChanged: function() {
235
- this.fire('selection:changed');
236
- this.canvas && this.canvas.fire('text:selection:changed', { target: this });
237
- },
238
-
239
- /**
240
- * Initialize text dimensions. Render all text on given context
241
- * or on a offscreen canvas to get the text width with measureText.
242
- * Updates this.width and this.height with the proper values.
243
- * Does not return dimensions.
244
- * @private
245
- */
246
- initDimensions: function() {
247
- this.isEditing && this.initDelayedCursor();
248
- this.clearContextTop();
249
- this.callSuper('initDimensions');
250
- },
251
-
252
- /**
253
- * @private
254
- * @param {CanvasRenderingContext2D} ctx Context to render on
255
- */
256
- render: function(ctx) {
257
- this.clearContextTop();
258
- this.callSuper('render', ctx);
259
- // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor
260
- // the correct position but not at every cursor animation.
261
- this.cursorOffsetCache = { };
262
- this.renderCursorOrSelection();
263
- },
264
-
265
- /**
266
- * @private
267
- * @param {CanvasRenderingContext2D} ctx Context to render on
268
- */
269
- _render: function(ctx) {
270
- this.callSuper('_render', ctx);
271
- },
272
-
273
- /**
274
- * Prepare and clean the contextTop
275
- */
276
- clearContextTop: function(skipRestore) {
277
- if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {
278
- return;
279
- }
280
- var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform;
281
- ctx.save();
282
- ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);
283
- this.transform(ctx);
284
- this._clearTextArea(ctx);
285
- skipRestore || ctx.restore();
286
- },
287
- /**
288
- * Renders cursor or selection (depending on what exists)
289
- * it does on the contextTop. If contextTop is not available, do nothing.
290
- */
291
- renderCursorOrSelection: function() {
292
- if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {
293
- return;
294
- }
295
- var boundaries = this._getCursorBoundaries(),
296
- ctx = this.canvas.contextTop;
297
- this.clearContextTop(true);
298
- if (this.selectionStart === this.selectionEnd) {
299
- this.renderCursor(boundaries, ctx);
300
- }
301
- else {
302
- this.renderSelection(boundaries, ctx);
303
- }
304
- ctx.restore();
305
- },
306
-
307
- _clearTextArea: function(ctx) {
308
- // we add 4 pixel, to be sure to do not leave any pixel out
309
- var width = this.width + 4, height = this.height + 4;
310
- ctx.clearRect(-width / 2, -height / 2, width, height);
311
- },
312
-
313
- /**
314
- * Returns cursor boundaries (left, top, leftOffset, topOffset)
315
- * @private
316
- * @param {Array} chars Array of characters
317
- * @param {String} typeOfBoundaries
318
- */
319
- _getCursorBoundaries: function(position) {
320
-
321
- // left/top are left/top of entire text box
322
- // leftOffset/topOffset are offset from that left/top point of a text box
323
-
324
- if (typeof position === 'undefined') {
325
- position = this.selectionStart;
326
- }
327
-
328
- var left = this._getLeftOffset(),
329
- top = this._getTopOffset(),
330
- offsets = this._getCursorBoundariesOffsets(position);
331
- return {
332
- left: left,
333
- top: top,
334
- leftOffset: offsets.left,
335
- topOffset: offsets.top
336
- };
337
- },
338
-
339
- /**
340
- * @private
341
- */
342
- _getCursorBoundariesOffsets: function(position) {
343
- if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {
344
- return this.cursorOffsetCache;
345
- }
346
- var lineLeftOffset,
347
- lineIndex,
348
- charIndex,
349
- topOffset = 0,
350
- leftOffset = 0,
351
- boundaries,
352
- cursorPosition = this.get2DCursorLocation(position);
353
- charIndex = cursorPosition.charIndex;
354
- lineIndex = cursorPosition.lineIndex;
355
- for (var i = 0; i < lineIndex; i++) {
356
- topOffset += this.getHeightOfLine(i);
357
- }
358
- lineLeftOffset = this._getLineLeftOffset(lineIndex);
359
- var bound = this.__charBounds[lineIndex][charIndex];
360
- bound && (leftOffset = bound.left);
361
- if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {
362
- leftOffset -= this._getWidthOfCharSpacing();
363
- }
364
- boundaries = {
365
- top: topOffset,
366
- left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),
367
- };
368
- if (this.direction === 'rtl') {
369
- boundaries.left *= -1;
370
- }
371
- this.cursorOffsetCache = boundaries;
372
- return this.cursorOffsetCache;
373
- },
374
-
375
- /**
376
- * Renders cursor
377
- * @param {Object} boundaries
378
- * @param {CanvasRenderingContext2D} ctx transformed context to draw on
379
- */
380
- renderCursor: function(boundaries, ctx) {
381
- var cursorLocation = this.get2DCursorLocation(),
382
- lineIndex = cursorLocation.lineIndex,
383
- charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,
384
- charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),
385
- multiplier = this.scaleX * this.canvas.getZoom(),
386
- cursorWidth = this.cursorWidth / multiplier,
387
- topOffset = boundaries.topOffset,
388
- dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');
389
- topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight
390
- - charHeight * (1 - this._fontSizeFraction);
391
-
392
- if (this.inCompositionMode) {
393
- this.renderSelection(boundaries, ctx);
394
- }
395
- ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');
396
- ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;
397
- ctx.fillRect(
398
- boundaries.left + boundaries.leftOffset - cursorWidth / 2,
399
- topOffset + boundaries.top + dy,
400
- cursorWidth,
401
- charHeight);
402
- },
403
-
404
- /**
405
- * Renders text selection
406
- * @param {Object} boundaries Object with left/top/leftOffset/topOffset
407
- * @param {CanvasRenderingContext2D} ctx transformed context to draw on
408
- */
409
- renderSelection: function(boundaries, ctx) {
410
-
411
- var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,
412
- selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,
413
- isJustify = this.textAlign.indexOf('justify') !== -1,
414
- start = this.get2DCursorLocation(selectionStart),
415
- end = this.get2DCursorLocation(selectionEnd),
416
- startLine = start.lineIndex,
417
- endLine = end.lineIndex,
418
- startChar = start.charIndex < 0 ? 0 : start.charIndex,
419
- endChar = end.charIndex < 0 ? 0 : end.charIndex;
420
-
421
- for (var i = startLine; i <= endLine; i++) {
422
- var lineOffset = this._getLineLeftOffset(i) || 0,
423
- lineHeight = this.getHeightOfLine(i),
424
- realLineHeight = 0, boxStart = 0, boxEnd = 0;
425
-
426
- if (i === startLine) {
427
- boxStart = this.__charBounds[startLine][startChar].left;
428
- }
429
- if (i >= startLine && i < endLine) {
430
- boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?
431
- }
432
- else if (i === endLine) {
433
- if (endChar === 0) {
434
- boxEnd = this.__charBounds[endLine][endChar].left;
435
- }
436
- else {
437
- var charSpacing = this._getWidthOfCharSpacing();
438
- boxEnd = this.__charBounds[endLine][endChar - 1].left
439
- + this.__charBounds[endLine][endChar - 1].width - charSpacing;
440
- }
441
- }
442
- realLineHeight = lineHeight;
443
- if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {
444
- lineHeight /= this.lineHeight;
445
- }
446
- var drawStart = boundaries.left + lineOffset + boxStart,
447
- drawWidth = boxEnd - boxStart,
448
- drawHeight = lineHeight, extraTop = 0;
449
- if (this.inCompositionMode) {
450
- ctx.fillStyle = this.compositionColor || 'black';
451
- drawHeight = 1;
452
- extraTop = lineHeight;
453
- }
454
- else {
455
- ctx.fillStyle = this.selectionColor;
456
- }
457
- if (this.direction === 'rtl') {
458
- drawStart = this.width - drawStart - drawWidth;
459
- }
460
- ctx.fillRect(
461
- drawStart,
462
- boundaries.top + boundaries.topOffset + extraTop,
463
- drawWidth,
464
- drawHeight);
465
- boundaries.topOffset += realLineHeight;
466
- }
467
- },
468
-
469
- /**
470
- * High level function to know the height of the cursor.
471
- * the currentChar is the one that precedes the cursor
472
- * Returns fontSize of char at the current cursor
473
- * Unused from the library, is for the end user
474
- * @return {Number} Character font size
475
- */
476
- getCurrentCharFontSize: function() {
477
- var cp = this._getCurrentCharIndex();
478
- return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');
479
- },
480
-
481
- /**
482
- * High level function to know the color of the cursor.
483
- * the currentChar is the one that precedes the cursor
484
- * Returns color (fill) of char at the current cursor
485
- * if the text object has a pattern or gradient for filler, it will return that.
486
- * Unused by the library, is for the end user
487
- * @return {String | fabric.Gradient | fabric.Pattern} Character color (fill)
488
- */
489
- getCurrentCharColor: function() {
490
- var cp = this._getCurrentCharIndex();
491
- return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');
492
- },
493
-
494
- /**
495
- * Returns the cursor position for the getCurrent.. functions
496
- * @private
497
- */
498
- _getCurrentCharIndex: function() {
499
- var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),
500
- charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;
501
- return { l: cursorPosition.lineIndex, c: charIndex };
502
- }
503
- });
504
-
505
- /**
506
- * Returns fabric.IText instance from an object representation
507
- * @static
508
- * @memberOf fabric.IText
509
- * @param {Object} object Object to create an instance from
510
- * @param {function} [callback] invoked with new instance as argument
511
- */
512
- fabric.IText.fromObject = function(object, callback) {
513
- var styles = fabric.util.stylesFromArray(object.styles, object.text);
514
- //copy object to prevent mutation
515
- var objCopy = Object.assign({}, object, { styles: styles });
516
- parseDecoration(objCopy);
517
- if (objCopy.styles) {
518
- for (var i in objCopy.styles) {
519
- for (var j in objCopy.styles[i]) {
520
- parseDecoration(objCopy.styles[i][j]);
521
- }
522
- }
523
- }
524
- fabric.Object._fromObject('IText', objCopy, callback, 'text');
525
- };
526
- })();