@visactor/vrender-core 0.21.14 → 0.22.0-vstory.10

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 (394) hide show
  1. package/cjs/animate/Ticker/default-ticker.d.ts +2 -0
  2. package/cjs/animate/Ticker/default-ticker.js +7 -1
  3. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  4. package/cjs/animate/animate.js +2 -2
  5. package/cjs/animate/animate.js.map +1 -1
  6. package/cjs/animate/custom-animate.js +15 -27
  7. package/cjs/animate/custom-animate.js.map +1 -1
  8. package/cjs/animate/easing-func.d.ts +1 -0
  9. package/cjs/animate/easing-func.js +16 -0
  10. package/cjs/animate/easing-func.js.map +1 -0
  11. package/cjs/animate/easing.d.ts +4 -0
  12. package/cjs/animate/easing.js +24 -1
  13. package/cjs/animate/easing.js.map +1 -1
  14. package/cjs/animate/index.d.ts +1 -0
  15. package/cjs/animate/index.js +1 -1
  16. package/cjs/animate/index.js.map +1 -1
  17. package/cjs/canvas/util.js +1 -2
  18. package/cjs/common/3d-interceptor.js +2 -1
  19. package/cjs/common/bezier-utils.d.ts +3 -0
  20. package/cjs/common/bezier-utils.js +17 -2
  21. package/cjs/common/bezier-utils.js.map +1 -1
  22. package/cjs/common/custom-path2d.d.ts +4 -0
  23. package/cjs/common/custom-path2d.js +43 -11
  24. package/cjs/common/custom-path2d.js.map +1 -1
  25. package/cjs/common/inversify/container.js +6 -9
  26. package/cjs/common/inversify/container.js.map +1 -1
  27. package/cjs/common/render-area.d.ts +4 -0
  28. package/cjs/common/render-area.js +76 -17
  29. package/cjs/common/render-area.js.map +1 -1
  30. package/cjs/common/render-command-list.js +2 -1
  31. package/cjs/common/render-curve.d.ts +1 -1
  32. package/cjs/common/render-curve.js.map +1 -1
  33. package/cjs/common/segment/curve/arc.d.ts +4 -1
  34. package/cjs/common/segment/curve/arc.js +10 -1
  35. package/cjs/common/segment/curve/arc.js.map +1 -1
  36. package/cjs/common/segment/curve/base.d.ts +4 -1
  37. package/cjs/common/segment/curve/base.js.map +1 -1
  38. package/cjs/common/segment/curve/cubic-bezier.d.ts +5 -1
  39. package/cjs/common/segment/curve/cubic-bezier.js +24 -3
  40. package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
  41. package/cjs/common/segment/curve/curve-context.js +5 -4
  42. package/cjs/common/segment/curve/curve-context.js.map +1 -1
  43. package/cjs/common/segment/curve/ellipse.d.ts +4 -1
  44. package/cjs/common/segment/curve/ellipse.js +9 -0
  45. package/cjs/common/segment/curve/ellipse.js.map +1 -1
  46. package/cjs/common/segment/curve/line.d.ts +4 -1
  47. package/cjs/common/segment/curve/line.js +18 -0
  48. package/cjs/common/segment/curve/line.js.map +1 -1
  49. package/cjs/common/segment/curve/move.d.ts +4 -1
  50. package/cjs/common/segment/curve/move.js +9 -0
  51. package/cjs/common/segment/curve/move.js.map +1 -1
  52. package/cjs/common/segment/curve/path.d.ts +2 -1
  53. package/cjs/common/segment/curve/path.js +5 -2
  54. package/cjs/common/segment/curve/path.js.map +1 -1
  55. package/cjs/common/segment/curve/quadratic-bezier.d.ts +6 -2
  56. package/cjs/common/segment/curve/quadratic-bezier.js +23 -5
  57. package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
  58. package/cjs/common/segment/step.js +1 -1
  59. package/cjs/common/segment/step.js.map +1 -1
  60. package/cjs/common/shape/rect.d.ts +1 -1
  61. package/cjs/common/shape/rect.js +30 -25
  62. package/cjs/common/shape/rect.js.map +1 -1
  63. package/cjs/common/store.js +1 -1
  64. package/cjs/core/contributions/env/base-contribution.d.ts +2 -0
  65. package/cjs/core/contributions/env/base-contribution.js +6 -0
  66. package/cjs/core/contributions/env/base-contribution.js.map +1 -1
  67. package/cjs/core/contributions/textMeasure/AtextMeasure.js +0 -10
  68. package/cjs/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
  69. package/cjs/core/global.d.ts +2 -3
  70. package/cjs/core/global.js +7 -7
  71. package/cjs/core/global.js.map +1 -1
  72. package/cjs/graphic/builtin-symbol/rect.d.ts +2 -1
  73. package/cjs/graphic/builtin-symbol/rect.js +28 -0
  74. package/cjs/graphic/builtin-symbol/rect.js.map +1 -1
  75. package/cjs/graphic/builtin-symbol/utils.d.ts +2 -1
  76. package/cjs/graphic/builtin-symbol/utils.js +5 -0
  77. package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
  78. package/cjs/graphic/config.js +20 -5
  79. package/cjs/graphic/config.js.map +1 -1
  80. package/cjs/graphic/graphic.d.ts +1 -1
  81. package/cjs/graphic/graphic.js +20 -6
  82. package/cjs/graphic/graphic.js.map +1 -1
  83. package/cjs/graphic/group.js +1 -1
  84. package/cjs/graphic/group.js.map +1 -1
  85. package/cjs/graphic/line.js +2 -2
  86. package/cjs/graphic/line.js.map +1 -1
  87. package/cjs/graphic/richtext/line.js +13 -1
  88. package/cjs/graphic/richtext/line.js.map +1 -1
  89. package/cjs/graphic/richtext/paragraph.d.ts +9 -1
  90. package/cjs/graphic/richtext/paragraph.js +49 -5
  91. package/cjs/graphic/richtext/paragraph.js.map +1 -1
  92. package/cjs/graphic/richtext/utils.d.ts +4 -0
  93. package/cjs/graphic/richtext/utils.js +23 -10
  94. package/cjs/graphic/richtext/utils.js.map +1 -1
  95. package/cjs/graphic/richtext/wrapper.d.ts +1 -0
  96. package/cjs/graphic/richtext/wrapper.js +1 -1
  97. package/cjs/graphic/richtext/wrapper.js.map +1 -1
  98. package/cjs/graphic/richtext.d.ts +8 -2
  99. package/cjs/graphic/richtext.js +43 -4
  100. package/cjs/graphic/richtext.js.map +1 -1
  101. package/cjs/index.d.ts +2 -0
  102. package/cjs/index.js +2 -1
  103. package/cjs/index.js.map +1 -1
  104. package/cjs/interface/animate.d.ts +5 -39
  105. package/cjs/interface/animate.js.map +1 -1
  106. package/cjs/interface/color.js.map +1 -1
  107. package/cjs/interface/context.d.ts +1 -0
  108. package/cjs/interface/context.js.map +1 -1
  109. package/cjs/interface/global.d.ts +4 -1
  110. package/cjs/interface/global.js.map +1 -1
  111. package/cjs/interface/graphic/group.d.ts +1 -0
  112. package/cjs/interface/graphic/group.js.map +1 -1
  113. package/cjs/interface/graphic/image.d.ts +1 -0
  114. package/cjs/interface/graphic/image.js.map +1 -1
  115. package/cjs/interface/graphic/path.d.ts +1 -0
  116. package/cjs/interface/graphic/path.js.map +1 -1
  117. package/cjs/interface/graphic/rect.d.ts +1 -0
  118. package/cjs/interface/graphic/rect.js.map +1 -1
  119. package/cjs/interface/graphic/richText.d.ts +13 -0
  120. package/cjs/interface/graphic/richText.js.map +1 -1
  121. package/cjs/interface/graphic/symbol.d.ts +2 -0
  122. package/cjs/interface/graphic/symbol.js.map +1 -1
  123. package/cjs/interface/graphic.d.ts +12 -3
  124. package/cjs/interface/graphic.js.map +1 -1
  125. package/cjs/interface/path.d.ts +5 -0
  126. package/cjs/interface/path.js.map +1 -1
  127. package/cjs/interface/picker.d.ts +13 -0
  128. package/cjs/interface/picker.js.map +1 -1
  129. package/cjs/picker/constants.d.ts +2 -0
  130. package/cjs/picker/constants.js +3 -2
  131. package/cjs/picker/constants.js.map +1 -1
  132. package/cjs/picker/pick-interceptor.d.ts +7 -2
  133. package/cjs/picker/pick-interceptor.js +19 -2
  134. package/cjs/picker/pick-interceptor.js.map +1 -1
  135. package/cjs/picker/pick-modules.js +7 -4
  136. package/cjs/picker/pick-modules.js.map +1 -1
  137. package/cjs/picker/picker-service.d.ts +4 -2
  138. package/cjs/picker/picker-service.js +13 -12
  139. package/cjs/picker/picker-service.js.map +1 -1
  140. package/cjs/plugins/builtin-plugin/edit-module.d.ts +17 -6
  141. package/cjs/plugins/builtin-plugin/edit-module.js +128 -42
  142. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
  143. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +1 -0
  144. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +3 -0
  145. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +1 -0
  146. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +91 -32
  147. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +517 -193
  148. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  149. package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
  150. package/cjs/render/contributions/render/area-render.d.ts +1 -1
  151. package/cjs/render/contributions/render/area-render.js +36 -16
  152. package/cjs/render/contributions/render/area-render.js.map +1 -1
  153. package/cjs/render/contributions/render/base-render.d.ts +1 -0
  154. package/cjs/render/contributions/render/base-render.js +20 -2
  155. package/cjs/render/contributions/render/base-render.js.map +1 -1
  156. package/cjs/render/contributions/render/contributions/base-contribution-render.d.ts +7 -1
  157. package/cjs/render/contributions/render/contributions/base-contribution-render.js +16 -8
  158. package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  159. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js +29 -2
  160. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  161. package/cjs/render/contributions/render/contributions/group-contribution-render.js +8 -3
  162. package/cjs/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  163. package/cjs/render/contributions/render/contributions/image-contribution-render.d.ts +1 -1
  164. package/cjs/render/contributions/render/contributions/image-contribution-render.js +2 -2
  165. package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  166. package/cjs/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  167. package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  168. package/cjs/render/contributions/render/contributions/symbol-contribution-render.d.ts +8 -1
  169. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +30 -2
  170. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  171. package/cjs/render/contributions/render/contributions/text-contribution-render.js +5 -3
  172. package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  173. package/cjs/render/contributions/render/draw-contribution.js +3 -3
  174. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  175. package/cjs/render/contributions/render/group-render.js +2 -2
  176. package/cjs/render/contributions/render/group-render.js.map +1 -1
  177. package/cjs/render/contributions/render/image-render.js +3 -3
  178. package/cjs/render/contributions/render/image-render.js.map +1 -1
  179. package/cjs/render/contributions/render/line-render.js +31 -9
  180. package/cjs/render/contributions/render/line-render.js.map +1 -1
  181. package/cjs/render/contributions/render/path-render.js.map +1 -1
  182. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  183. package/cjs/render/contributions/render/rect-render.js +2 -2
  184. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  185. package/cjs/render/contributions/render/richtext-render.js +1 -1
  186. package/cjs/render/contributions/render/richtext-render.js.map +1 -1
  187. package/cjs/render/contributions/render/symbol-render.js +15 -13
  188. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  189. package/cjs/render/contributions/render/utils.d.ts +1 -2
  190. package/cjs/render/contributions/render/utils.js +4 -20
  191. package/cjs/render/contributions/render/utils.js.map +1 -1
  192. package/cjs/resource-loader/loader.js +1 -1
  193. package/cjs/resource-loader/loader.js.map +1 -1
  194. package/dist/index.es.js +9073 -7513
  195. package/es/animate/Ticker/default-ticker.d.ts +2 -0
  196. package/es/animate/Ticker/default-ticker.js +7 -1
  197. package/es/animate/Ticker/default-ticker.js.map +1 -1
  198. package/es/animate/animate.js +4 -5
  199. package/es/animate/animate.js.map +1 -1
  200. package/es/animate/custom-animate.js +15 -27
  201. package/es/animate/custom-animate.js.map +1 -1
  202. package/es/animate/easing-func.d.ts +1 -0
  203. package/es/animate/easing-func.js +10 -0
  204. package/es/animate/easing-func.js.map +1 -0
  205. package/es/animate/easing.d.ts +4 -0
  206. package/es/animate/easing.js +24 -1
  207. package/es/animate/easing.js.map +1 -1
  208. package/es/animate/index.d.ts +1 -0
  209. package/es/animate/index.js +2 -0
  210. package/es/animate/index.js.map +1 -1
  211. package/es/canvas/util.js +1 -2
  212. package/es/common/3d-interceptor.js +2 -1
  213. package/es/common/bezier-utils.d.ts +3 -0
  214. package/es/common/bezier-utils.js +14 -0
  215. package/es/common/bezier-utils.js.map +1 -1
  216. package/es/common/custom-path2d.d.ts +4 -0
  217. package/es/common/custom-path2d.js +44 -12
  218. package/es/common/custom-path2d.js.map +1 -1
  219. package/es/common/inversify/container.js +6 -9
  220. package/es/common/inversify/container.js.map +1 -1
  221. package/es/common/render-area.d.ts +4 -0
  222. package/es/common/render-area.js +77 -18
  223. package/es/common/render-area.js.map +1 -1
  224. package/es/common/render-command-list.js +2 -1
  225. package/es/common/render-curve.d.ts +1 -1
  226. package/es/common/render-curve.js.map +1 -1
  227. package/es/common/segment/curve/arc.d.ts +4 -1
  228. package/es/common/segment/curve/arc.js +10 -1
  229. package/es/common/segment/curve/arc.js.map +1 -1
  230. package/es/common/segment/curve/base.d.ts +4 -1
  231. package/es/common/segment/curve/base.js.map +1 -1
  232. package/es/common/segment/curve/cubic-bezier.d.ts +5 -1
  233. package/es/common/segment/curve/cubic-bezier.js +22 -1
  234. package/es/common/segment/curve/cubic-bezier.js.map +1 -1
  235. package/es/common/segment/curve/curve-context.js +6 -3
  236. package/es/common/segment/curve/curve-context.js.map +1 -1
  237. package/es/common/segment/curve/ellipse.d.ts +4 -1
  238. package/es/common/segment/curve/ellipse.js +9 -0
  239. package/es/common/segment/curve/ellipse.js.map +1 -1
  240. package/es/common/segment/curve/line.d.ts +4 -1
  241. package/es/common/segment/curve/line.js +18 -0
  242. package/es/common/segment/curve/line.js.map +1 -1
  243. package/es/common/segment/curve/move.d.ts +4 -1
  244. package/es/common/segment/curve/move.js +9 -0
  245. package/es/common/segment/curve/move.js.map +1 -1
  246. package/es/common/segment/curve/path.d.ts +2 -1
  247. package/es/common/segment/curve/path.js +5 -2
  248. package/es/common/segment/curve/path.js.map +1 -1
  249. package/es/common/segment/curve/quadratic-bezier.d.ts +6 -2
  250. package/es/common/segment/curve/quadratic-bezier.js +28 -5
  251. package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
  252. package/es/common/segment/step.js +1 -1
  253. package/es/common/segment/step.js.map +1 -1
  254. package/es/common/shape/rect.d.ts +1 -1
  255. package/es/common/shape/rect.js +30 -25
  256. package/es/common/shape/rect.js.map +1 -1
  257. package/es/common/store.js +1 -1
  258. package/es/core/contributions/env/base-contribution.d.ts +2 -0
  259. package/es/core/contributions/env/base-contribution.js +6 -0
  260. package/es/core/contributions/env/base-contribution.js.map +1 -1
  261. package/es/core/contributions/textMeasure/AtextMeasure.js +0 -10
  262. package/es/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
  263. package/es/core/global.d.ts +2 -3
  264. package/es/core/global.js +7 -8
  265. package/es/core/global.js.map +1 -1
  266. package/es/graphic/builtin-symbol/rect.d.ts +2 -1
  267. package/es/graphic/builtin-symbol/rect.js +28 -0
  268. package/es/graphic/builtin-symbol/rect.js.map +1 -1
  269. package/es/graphic/builtin-symbol/utils.d.ts +2 -1
  270. package/es/graphic/builtin-symbol/utils.js +5 -0
  271. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  272. package/es/graphic/config.js +20 -5
  273. package/es/graphic/config.js.map +1 -1
  274. package/es/graphic/graphic.d.ts +1 -1
  275. package/es/graphic/graphic.js +20 -6
  276. package/es/graphic/graphic.js.map +1 -1
  277. package/es/graphic/group.js +1 -1
  278. package/es/graphic/group.js.map +1 -1
  279. package/es/graphic/line.js +2 -2
  280. package/es/graphic/line.js.map +1 -1
  281. package/es/graphic/richtext/line.js +13 -1
  282. package/es/graphic/richtext/line.js.map +1 -1
  283. package/es/graphic/richtext/paragraph.d.ts +9 -1
  284. package/es/graphic/richtext/paragraph.js +49 -5
  285. package/es/graphic/richtext/paragraph.js.map +1 -1
  286. package/es/graphic/richtext/utils.d.ts +4 -0
  287. package/es/graphic/richtext/utils.js +19 -6
  288. package/es/graphic/richtext/utils.js.map +1 -1
  289. package/es/graphic/richtext/wrapper.d.ts +1 -0
  290. package/es/graphic/richtext/wrapper.js +1 -1
  291. package/es/graphic/richtext/wrapper.js.map +1 -1
  292. package/es/graphic/richtext.d.ts +8 -2
  293. package/es/graphic/richtext.js +43 -5
  294. package/es/graphic/richtext.js.map +1 -1
  295. package/es/index.d.ts +2 -0
  296. package/es/index.js +4 -0
  297. package/es/index.js.map +1 -1
  298. package/es/interface/animate.d.ts +5 -39
  299. package/es/interface/animate.js.map +1 -1
  300. package/es/interface/color.js.map +1 -1
  301. package/es/interface/context.d.ts +1 -0
  302. package/es/interface/context.js.map +1 -1
  303. package/es/interface/global.d.ts +4 -1
  304. package/es/interface/global.js.map +1 -1
  305. package/es/interface/graphic/group.d.ts +1 -0
  306. package/es/interface/graphic/group.js.map +1 -1
  307. package/es/interface/graphic/image.d.ts +1 -0
  308. package/es/interface/graphic/image.js.map +1 -1
  309. package/es/interface/graphic/path.d.ts +1 -0
  310. package/es/interface/graphic/path.js.map +1 -1
  311. package/es/interface/graphic/rect.d.ts +1 -0
  312. package/es/interface/graphic/rect.js.map +1 -1
  313. package/es/interface/graphic/richText.d.ts +13 -0
  314. package/es/interface/graphic/richText.js.map +1 -1
  315. package/es/interface/graphic/symbol.d.ts +2 -0
  316. package/es/interface/graphic/symbol.js.map +1 -1
  317. package/es/interface/graphic.d.ts +12 -3
  318. package/es/interface/graphic.js.map +1 -1
  319. package/es/interface/path.d.ts +5 -0
  320. package/es/interface/path.js.map +1 -1
  321. package/es/interface/picker.d.ts +13 -0
  322. package/es/interface/picker.js.map +1 -1
  323. package/es/picker/constants.d.ts +2 -0
  324. package/es/picker/constants.js +4 -0
  325. package/es/picker/constants.js.map +1 -1
  326. package/es/picker/pick-interceptor.d.ts +7 -2
  327. package/es/picker/pick-interceptor.js +19 -1
  328. package/es/picker/pick-interceptor.js.map +1 -1
  329. package/es/picker/pick-modules.js +5 -3
  330. package/es/picker/pick-modules.js.map +1 -1
  331. package/es/picker/picker-service.d.ts +4 -2
  332. package/es/picker/picker-service.js +13 -13
  333. package/es/picker/picker-service.js.map +1 -1
  334. package/es/plugins/builtin-plugin/edit-module.d.ts +17 -6
  335. package/es/plugins/builtin-plugin/edit-module.js +123 -40
  336. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  337. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +1 -0
  338. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +3 -0
  339. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +1 -0
  340. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +91 -32
  341. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +516 -189
  342. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  343. package/es/render/contributions/render/arc3d-render.js.map +1 -1
  344. package/es/render/contributions/render/area-render.d.ts +1 -1
  345. package/es/render/contributions/render/area-render.js +36 -16
  346. package/es/render/contributions/render/area-render.js.map +1 -1
  347. package/es/render/contributions/render/base-render.d.ts +1 -0
  348. package/es/render/contributions/render/base-render.js +21 -2
  349. package/es/render/contributions/render/base-render.js.map +1 -1
  350. package/es/render/contributions/render/contributions/base-contribution-render.d.ts +7 -1
  351. package/es/render/contributions/render/contributions/base-contribution-render.js +16 -8
  352. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  353. package/es/render/contributions/render/contributions/base-texture-contribution-render.js +29 -2
  354. package/es/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  355. package/es/render/contributions/render/contributions/group-contribution-render.js +8 -3
  356. package/es/render/contributions/render/contributions/group-contribution-render.js.map +1 -1
  357. package/es/render/contributions/render/contributions/image-contribution-render.d.ts +1 -1
  358. package/es/render/contributions/render/contributions/image-contribution-render.js +2 -2
  359. package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  360. package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  361. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  362. package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +8 -1
  363. package/es/render/contributions/render/contributions/symbol-contribution-render.js +26 -0
  364. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  365. package/es/render/contributions/render/contributions/text-contribution-render.js +5 -3
  366. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  367. package/es/render/contributions/render/draw-contribution.js +4 -5
  368. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  369. package/es/render/contributions/render/group-render.js +2 -2
  370. package/es/render/contributions/render/group-render.js.map +1 -1
  371. package/es/render/contributions/render/image-render.js +3 -2
  372. package/es/render/contributions/render/image-render.js.map +1 -1
  373. package/es/render/contributions/render/line-render.js +31 -9
  374. package/es/render/contributions/render/line-render.js.map +1 -1
  375. package/es/render/contributions/render/path-render.js.map +1 -1
  376. package/es/render/contributions/render/polygon-render.js.map +1 -1
  377. package/es/render/contributions/render/rect-render.js +2 -2
  378. package/es/render/contributions/render/rect-render.js.map +1 -1
  379. package/es/render/contributions/render/richtext-render.js +1 -1
  380. package/es/render/contributions/render/richtext-render.js.map +1 -1
  381. package/es/render/contributions/render/symbol-render.js +16 -14
  382. package/es/render/contributions/render/symbol-render.js.map +1 -1
  383. package/es/render/contributions/render/utils.d.ts +1 -2
  384. package/es/render/contributions/render/utils.js +0 -18
  385. package/es/render/contributions/render/utils.js.map +1 -1
  386. package/es/resource-loader/loader.js +1 -1
  387. package/es/resource-loader/loader.js.map +1 -1
  388. package/package.json +2 -2
  389. package/cjs/common/inversify/annotation/optional.d.ts +0 -2
  390. package/cjs/common/inversify/annotation/optional.js +0 -14
  391. package/cjs/common/inversify/annotation/optional.js.map +0 -1
  392. package/es/common/inversify/annotation/optional.d.ts +0 -2
  393. package/es/common/inversify/annotation/optional.js +0 -12
  394. package/es/common/inversify/annotation/optional.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/contributions/textMeasure/AtextMeasure.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAGnC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAKvB,SAAS,CAAC,OAAqB,EAAE,GAAY;QAC3C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAES,gCAAgC,CAAC,IAAY,EAAE,OAAwB,EAAE,UAAoB;QACrG,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAES,6BAA6B,CAAC,IAAY,EAAE,OAAwB,EAAE,UAAoB;QAClG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAES,iBAAiB,CAAC,OAAwC,EAAE,OAAwB;QAC5F,IACG,OAAe,CAAC,uBAAuB,IAAI,IAAI;YAC/C,OAAe,CAAC,wBAAwB,IAAI,IAAI;YAChD,OAAe,CAAC,qBAAqB,IAAI,IAAI;YAC7C,OAAe,CAAC,sBAAsB,IAAI,IAAI,EAC/C;YACA,OAAO,GAAG;gBACR,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;YACF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;YACzE,OAAe,CAAC,uBAAuB,GAAG,MAAM,CAAC;YACjD,OAAe,CAAC,wBAAwB,GAAG,OAAO,CAAC;YACnD,OAAe,CAAC,qBAAqB,GAAG,MAAM,CAAC;YAC/C,OAAe,CAAC,sBAAsB,GAAG,OAAO,CAAC;SACnD;QACD,IAAK,OAAe,CAAC,qBAAqB,IAAI,IAAI,IAAK,OAAe,CAAC,sBAAsB,IAAI,IAAI,EAAE;YACrG,OAAO,GAAG;gBACR,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,uBAAuB,EAAG,OAAe,CAAC,uBAAuB;gBACjE,wBAAwB,EAAG,OAAe,CAAC,wBAAwB;gBACnE,qBAAqB,EAAG,OAAe,CAAC,qBAAqB;gBAC7D,sBAAsB,EAAG,OAAe,CAAC,sBAAsB;aAChE,CAAC;YACF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;YACvE,OAAe,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAC7C,OAAe,CAAC,sBAAsB,GAAG,KAAK,CAAC;SACjD;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAGS,QAAQ,CAChB,IAAY,EACZ,EAAE,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAmB;QAG7D,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACpD;QACD,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;YAC1D,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAOD,gBAAgB,CAAC,IAAY,EAAE,OAAwB,EAAE,WAA6C;QACpG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;SAC3C;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAMD,sBAAsB,CACpB,IAAY,EACZ,OAAwB,EACxB,WAA6C;QAE7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;SAC3C;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClF,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,0BAA0B,CAAC,IAAY,EAAE,OAAwB,EAAE,WAA6C;QAC9G,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;SACxD;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrF,OAAO;YACL,IAAI,EAAG,WAAmB,CAAC,qBAAqB;YAChD,KAAK,EAAG,WAAmB,CAAC,sBAAsB;SACnD,CAAC;IACJ,CAAC;IAOD,sBAAsB,CACpB,IAAY,EACZ,OAAwB,EACxB,WAA6C;;QAE7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,MAAA,OAAO,CAAC,QAAQ,mCAAI,gBAAgB,CAAC,QAAQ,CAAC;SACtD;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,GAAG,CAAE,WAAmB,CAAC,uBAAuB,GAAI,WAAmB,CAAC,wBAAwB,CAAC,CAAC;IAChH,CAAC;IAED,uBAAuB,CAAC,IAAY,EAAE,OAAwB,EAAE,WAA6C;QAC3G,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;SACtD;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrF,OAAO;YACL,MAAM,EAAG,WAAmB,CAAC,uBAAuB;YACpD,OAAO,EAAG,WAAmB,CAAC,wBAAwB;SACvD,CAAC;IACJ,CAAC;IAOD,sBAAsB,CACpB,IAAY,EACZ,OAAwB,EACxB,WAA6C;;QAE7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,MAAA,OAAO,CAAC,QAAQ,mCAAI,gBAAgB,CAAC,QAAQ,CAAC;SACtD;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxF,OAAO,IAAI,CAAC,GAAG,CAAE,WAAmB,CAAC,qBAAqB,GAAI,WAAmB,CAAC,sBAAsB,CAAC,CAAC;IAC5G,CAAC;IAED,uBAAuB,CAAC,IAAY,EAAE,OAAwB,EAAE,WAA6C;QAC3G,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;SACtD;QACD,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrF,OAAO;YACL,MAAM,EAAG,WAAmB,CAAC,qBAAqB;YAClD,OAAO,EAAG,WAAmB,CAAC,sBAAsB;SACrD,CAAC;IACJ,CAAC;IAES,+BAA+B,CAAC,OAAwB;;QAChE,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,gBAAgB,CAAC,QAAQ,CAAC;QAC/D,OAAO;YACL,MAAM,EAAE,IAAI,GAAG,QAAQ;YACvB,OAAO,EAAE,IAAI,GAAG,QAAQ;SACzB,CAAC;IAuBJ,CAAC;IAES,iCAAiC,CAAC,OAAwB;;QAClE,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,gBAAgB,CAAC,QAAQ,CAAC;QAC/D,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAE9B,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC1B,OAAO;gBACL,IAAI,EAAE,QAAQ,GAAG,CAAC;gBAClB,KAAK,EAAE,QAAQ,GAAG,CAAC;aACpB,CAAC;SACH;aAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;YACvD,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,CAAC;aACT,CAAC;SACH;QACD,OAAO;YACL,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;IAED,+BAA+B,CAC7B,IAAY,EACZ,OAAwB,EACxB,IAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,uCACK,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,KAChD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,IACzC;SACH;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEvE,IAAI,IAAI,KAAK,eAAe,CAAC,cAAc,EAAE;YAC3C,OAAO;gBACL,MAAM,EAAG,GAAW,CAAC,uBAAuB;gBAC5C,OAAO,EAAG,GAAW,CAAC,wBAAwB;gBAC9C,KAAK,EAAG,GAAW,CAAC,KAAK;aAC1B,CAAC;SACH;aAAM,IAAI,IAAI,KAAK,eAAe,CAAC,QAAQ,EAAE;YAC5C,uCACK,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,KAChD,KAAK,EAAG,GAAW,CAAC,KAAK,IACzB;SACH;aAAM,IAAI,IAAI,KAAK,eAAe,CAAC,YAAY,EAAE;YAShD,IAAI,MAAM,GAAI,GAAW,CAAC,qBAAqB,CAAC;YAChD,IAAI,OAAO,GAAI,GAAW,CAAC,sBAAsB,CAAC;YAElD,IAAK,GAAW,CAAC,wBAAwB,IAAI,OAAO,GAAI,GAAW,CAAC,wBAAwB,EAAE;gBAC5F,MAAM,KAAK,GAAI,GAAW,CAAC,wBAAwB,GAAG,OAAO,CAAC;gBAC9D,OAAO,IAAI,KAAK,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC;aACjB;iBAAM,IAAK,GAAW,CAAC,uBAAuB,IAAI,MAAM,GAAI,GAAW,CAAC,uBAAuB,EAAE;gBAChG,MAAM,KAAK,GAAI,GAAW,CAAC,uBAAuB,GAAG,MAAM,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC;gBAChB,OAAO,IAAI,KAAK,CAAC;aAClB;YACD,OAAO;gBACL,MAAM;gBACN,OAAO;gBACP,KAAK,EAAG,GAAW,CAAC,KAAK;aAC1B,CAAC;SACH;QACD,OAAO;YACL,MAAM,EAAG,GAAW,CAAC,uBAAuB;YAC5C,OAAO,EAAG,GAAW,CAAC,wBAAwB;YAC9C,KAAK,EAAG,GAAW,CAAC,KAAK;SAC1B,CAAC;IACJ,CAAC;IAOD,WAAW,CAAC,IAAY,EAAE,OAAwB;QAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACrC;QACD,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB,CACd,YAAmE,EACnE,OAAwB,EACxB,KAAa,EACb,SAAkB;QAKlB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACnC;QACD,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAElC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAA0D,EAAE,CAAC;QACtE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE;gBAC1C,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B;iBAAM;gBACL,MAAM;aACP;SACF;QACD,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAC/B,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EACpB,OAAO,EACP,KAAK,GAAG,MAAM,EACd,CAAC,EACD,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAC/B,KAAK,EACL,KAAK,CACN,CAAC;YACF,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACxD,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;oBAClB,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;iBAC5B;gBACD,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBACnD,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC1C,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;gBACvB,IAAI,KAAK,KAAK,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBACpD,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;iBACnE;aACF;YACD,GAAG,CAAC,IAAI,iCAAM,YAAY,CAAC,CAAC,CAAC,KAAE,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,IAAG,CAAC;YAChF,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC;SAC5B;QAED,OAAO;YACL,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,MAAM;SACd,CAAC;IACJ,CAAC;IAQD,QAAQ,CACN,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,SAAkB,EAClB,YAAsB;QAMtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrC;QACD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,GAAG,KAAK,EAAE;YAClB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpF,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YAClC,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC5D,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;oBAC1B,IAAY,CAAC,WAAW,GAAG,KAAK,CAAC;oBAClC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;iBACzB;gBACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aACvD;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAIO,SAAS,CACf,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,OAAe,EACf,QAAgB,EAChB,QAAoC,EACpC,MAAsB;QAEtB,IAAI,IAAqD,CAAC;QAC1D,IAAI,QAAQ,KAAK,OAAO,EAAE;YACxB,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7C;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;SAC3E;aAAM;YACL,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClE,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;SAC7C;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,CAClB,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,OAAe,EACf,QAAgB;QAGhB,IAAI,OAAO,KAAK,QAAQ,EAAE;YACxB,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,wBAAwB,IAAI,KAAK,OAAO,KAAK,QAAQ,EAAE,CAAC,CAAC;YAEnF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAChD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;SACzE;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,GAAG,KAAK,EAAE;YAEpB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;gBACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9B;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAEzC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC/B;YAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACpE;aAAM,IAAI,QAAQ,GAAG,KAAK,EAAE;YAE3B,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;aACnE;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YAE7C,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1C;YAED,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;SACrE;QAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAEO,cAAc,CACpB,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,OAAe,EACf,QAAgB;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,GAAG,KAAK,EAAE;YAEpB,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;gBACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC9B;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEnD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC/B;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1E;aAAM,IAAI,QAAQ,GAAG,KAAK,EAAE;YAE3B,IAAI,SAAS,IAAI,CAAC,EAAE;gBAClB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;aACnE;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEvD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,IAAI,KAAK,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC1C;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACtE;QAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAEO,eAAe,CACrB,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,IAAY,EACZ,KAAa,EACb,KAAa,EACb,MAAc,EACd,MAAc;QAEd,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,YAAY,GAAG,MAAM,GAAG,KAAK,EAAE;YACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;SAC/C;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,YAAY,GAAG,aAAa,GAAG,KAAK,EAAE;YACxC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAAC;SACnE;QACD,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,MAAM,GAAG,CAAC,CACX,CAAC;IACJ,CAAC;IAED,0BAA0B,CACxB,YAAmE,EACnE,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAkB,EAClB,cAA0C;QAK1C,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACvE;QACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACnC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9E,IACE,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YAClD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EACzG;YACA,OAAO,MAAM,CAAC;SACf;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,WAAW,GAAG,KAAK,EAAE;YACvB,OAAO,MAAM,CAAC;SACf;QAED,KAAK,IAAI,WAAW,CAAC;QAErB,IAAI,GAAG,CAAC;QACR,IAAI,cAAc,KAAK,OAAO,EAAE;YAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC/D,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACzE,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACpD,CAAC,CAAC,OAAO,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YACH,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;SACtB;aAAM,IAAI,cAAc,KAAK,QAAQ,EAAE;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;YACnF,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;YAExF,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1F,GAAG,GAAG;gBACJ,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK;aACtC,CAAC;SACH;aAAM;YACL,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACrE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;SACJ;QACD,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kBAAkB,CAChB,YAIG;QAEH,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,uCACK,CAAC,KACJ,IAAI,EAAE,CAAC,IACP;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAChB,IAAY,EACZ,OAAwB,EACxB,KAAa,EACb,MAAc,EACd,SAAkB,EAClB,QAAoC,EACpC,cAAuB,KAAK;QAK5B,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SACvD;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,IAAI,MAAM,IAAI,KAAK,EAAE;YACnC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,WAAW,GAAG,KAAK,EAAE;YACvB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC9B;QACD,IAAI,WAAW,IAAI,MAAM,GAAG,WAAW,IAAI,KAAK,EAAE;YAChD,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;SAC5D;QACD,KAAK,IAAI,WAAW,CAAC;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAGxF,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;aACvD;SACF;aAAM,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;SAC7B;QACD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAO,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA9qBY,YAAY;IADxB,UAAU,EAAE;GACA,YAAY,CA8qBxB;SA9qBY,YAAY","file":"AtextMeasure.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport type { IGraphicUtil } from '../../../interface/core';\nimport type { ICanvas, IContext2d, EnvType } from '../../../interface';\nimport { MeasureModeEnum } from '../../../interface';\nimport type { TextOptionsType, ITextMeasure } from '../../../interface/text';\nimport { DefaultTextAttribute, DefaultTextStyle } from '../../../graphic/config';\nimport { testLetter } from '../../../graphic/richtext/utils';\nimport { Logger } from '@visactor/vutils';\n\n@injectable()\nexport class ATextMeasure implements ITextMeasure {\n release: (...params: any) => void;\n protected canvas?: ICanvas;\n protected context?: IContext2d | null;\n\n configure(service: IGraphicUtil, env: EnvType): void {\n this.canvas = service.canvas;\n this.context = service.context;\n service.bindTextMeasure(this);\n }\n\n protected _measureTextWithoutAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean) {\n this.context.setTextStyleWithoutAlignBaseline(options);\n const metrics = this.context.measureText(text);\n\n return compatible ? this.compatibleMetrics(metrics, options) : metrics;\n }\n\n protected _measureTextWithAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean) {\n this.context.setTextStyle(options);\n const metrics = this.context.measureText(text);\n\n return compatible ? this.compatibleMetrics(metrics, options) : metrics;\n }\n\n protected compatibleMetrics(metrics: TextMetrics | { width: number }, options: TextOptionsType) {\n if (\n (metrics as any).actualBoundingBoxAscent == null ||\n (metrics as any).actualBoundingBoxDescent == null ||\n (metrics as any).fontBoundingBoxAscent == null ||\n (metrics as any).fontBoundingBoxDescent == null\n ) {\n metrics = {\n width: metrics.width\n };\n const { ascent, descent } = this.measureTextBoundADscentEstimate(options);\n (metrics as any).actualBoundingBoxAscent = ascent;\n (metrics as any).actualBoundingBoxDescent = descent;\n (metrics as any).fontBoundingBoxAscent = ascent;\n (metrics as any).fontBoundingBoxDescent = descent;\n }\n if ((metrics as any).actualBoundingBoxLeft == null || (metrics as any).actualBoundingBoxRight == null) {\n metrics = {\n width: metrics.width,\n actualBoundingBoxAscent: (metrics as any).actualBoundingBoxAscent,\n actualBoundingBoxDescent: (metrics as any).actualBoundingBoxDescent,\n fontBoundingBoxAscent: (metrics as any).fontBoundingBoxAscent,\n fontBoundingBoxDescent: (metrics as any).fontBoundingBoxDescent\n };\n const { left, right } = this.measureTextBoundLeftRightEstimate(options);\n (metrics as any).actualBoundingBoxLeft = left;\n (metrics as any).actualBoundingBoxRight = right;\n }\n return metrics;\n }\n\n // 估算文字长度\n protected estimate(\n text: string,\n { fontSize = DefaultTextAttribute.fontSize }: TextOptionsType\n ): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options);\n return textMeasure.width;\n }\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextBoundsWidth(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options);\n return textMeasure.width;\n }\n\n measureTextBoundsLeftRight(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundLeftRightEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n left: (textMeasure as any).actualBoundingBoxLeft,\n right: (textMeasure as any).actualBoundingBoxRight\n };\n }\n\n /**\n * 获取text像素高度,基于actualBoundingBoxAscent和actualBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextPixelHeight(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options, true);\n return Math.abs((textMeasure as any).actualBoundingBoxAscent - (textMeasure as any).actualBoundingBoxDescent);\n }\n\n measureTextPixelADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundADscentEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n ascent: (textMeasure as any).actualBoundingBoxAscent,\n descent: (textMeasure as any).actualBoundingBoxDescent\n };\n }\n\n /**\n * 获取text包围盒的高度,基于fontBoundingBoxAscent和fontBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextBoundHieght(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options, true);\n return Math.abs((textMeasure as any).fontBoundingBoxAscent - (textMeasure as any).fontBoundingBoxDescent);\n }\n\n measureTextBoundADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundADscentEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n ascent: (textMeasure as any).fontBoundingBoxAscent,\n descent: (textMeasure as any).fontBoundingBoxDescent\n };\n }\n\n protected measureTextBoundADscentEstimate(options: TextOptionsType) {\n const fontSize = options.fontSize ?? DefaultTextStyle.fontSize;\n return {\n ascent: 0.79 * fontSize,\n descent: 0.21 * fontSize\n };\n // const { textBaseline } = options;\n // if (textBaseline === 'bottom') {\n // return {\n // ascent: fontSize,\n // descent: 0\n // };\n // } else if (textBaseline === 'middle') {\n // return {\n // ascent: fontSize / 2,\n // descent: fontSize / 2\n // };\n // } else if (textBaseline === 'alphabetic') {\n // return {\n // ascent: 0.79 * fontSize,\n // descent: 0.21 * fontSize\n // };\n // }\n\n // return {\n // ascent: 0,\n // descent: fontSize\n // };\n }\n\n protected measureTextBoundLeftRightEstimate(options: TextOptionsType) {\n const fontSize = options.fontSize ?? DefaultTextStyle.fontSize;\n const { textAlign } = options;\n\n if (textAlign === 'center') {\n return {\n left: fontSize / 2,\n right: fontSize / 2\n };\n } else if (textAlign === 'right' || textAlign === 'end') {\n return {\n left: fontSize,\n right: 0\n };\n }\n return {\n left: 0,\n right: fontSize\n };\n }\n\n measureTextPixelADscentAndWidth(\n text: string,\n options: TextOptionsType,\n mode: MeasureModeEnum\n ): { width: number; ascent: number; descent: number } {\n if (!this.context) {\n return {\n ...this.measureTextBoundADscentEstimate(options),\n width: this.estimate(text, options).width\n };\n }\n const out = this._measureTextWithoutAlignBaseline(text, options, true);\n\n if (mode === MeasureModeEnum.actualBounding) {\n return {\n ascent: (out as any).actualBoundingBoxAscent,\n descent: (out as any).actualBoundingBoxDescent,\n width: (out as any).width\n };\n } else if (mode === MeasureModeEnum.estimate) {\n return {\n ...this.measureTextBoundADscentEstimate(options),\n width: (out as any).width\n };\n } else if (mode === MeasureModeEnum.fontBounding) {\n // const { lineHeight = options.fontSize } = options;\n // let ratio = 1;\n // if (lineHeight) {\n // const fontBoundingHeight = (out as any).fontBoundingBoxAscent + (out as any).fontBoundingBoxDescent;\n // ratio = lineHeight / fontBoundingHeight;\n // }\n // 避免二次矫正,应当保证所有字符组合的基线都一样,否则fontBounding就失去意义了\n // 但如果超出边界了,就只能进行二次矫正\n let ascent = (out as any).fontBoundingBoxAscent;\n let descent = (out as any).fontBoundingBoxDescent;\n // 只能一边超出,都超出的话目前无法矫正,因为行高不能超\n if ((out as any).actualBoundingBoxDescent && descent < (out as any).actualBoundingBoxDescent) {\n const delta = (out as any).actualBoundingBoxDescent - descent;\n descent += delta;\n ascent -= delta;\n } else if ((out as any).actualBoundingBoxAscent && ascent < (out as any).actualBoundingBoxAscent) {\n const delta = (out as any).actualBoundingBoxAscent - ascent;\n ascent += delta;\n descent -= delta;\n }\n return {\n ascent,\n descent,\n width: (out as any).width\n };\n }\n return {\n ascent: (out as any).actualBoundingBoxAscent,\n descent: (out as any).actualBoundingBoxDescent,\n width: (out as any).width\n };\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n if (!this.context) {\n return this.estimate(text, options);\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n return this.context.measureText(text);\n }\n\n clipTextVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n const { fontSize = 12 } = options;\n // 计算每一个区域的width\n verticalList.forEach(item => {\n item.width = item.direction === 0 ? fontSize : this.measureTextWidth(item.text, options);\n });\n const out: { text: string; width?: number; direction: number }[] = [];\n let length = 0;\n let i = 0;\n for (; i < verticalList.length; i++) {\n if (length + verticalList[i].width < width) {\n length += verticalList[i].width;\n out.push(verticalList[i]);\n } else {\n break;\n }\n }\n if (verticalList[i] && verticalList[i].text.length > 1) {\n const clipedData = this._clipText(\n verticalList[i].text,\n options,\n width - length,\n 0,\n verticalList[i].text.length - 1,\n 'end',\n false\n );\n if (wordBreak && clipedData.str !== verticalList[i].text) {\n let text = '';\n let length = 0;\n for (let j = 0; j < i; j++) {\n const item = verticalList[j];\n text += item.text;\n length += item.text.length;\n }\n text += verticalList[i].text;\n const totalLength = length + clipedData.str.length;\n let index = testLetter(text, totalLength);\n index = index - length;\n if (index !== clipedData.str.length - 1) {\n clipedData.str = clipedData.str.substring(0, index);\n clipedData.width = this.measureTextWidth(clipedData.str, options);\n }\n }\n out.push({ ...verticalList[i], text: clipedData.str, width: clipedData.width });\n length += clipedData.width;\n }\n\n return {\n verticalList: out,\n width: length\n };\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n wordBreak: boolean,\n keepAllBreak?: boolean\n ): {\n str: string;\n width: number;\n wordBreaked?: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n const data = this._clipText(text, options, width, 0, text.length - 1, 'end', false);\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n let index = testLetter(text, data.str.length, keepAllBreak);\n if (index !== data.str.length) {\n if (index > data.str.length) {\n (data as any).wordBreaked = index;\n index = data.str.length;\n }\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n return data;\n }\n\n // 二分法找到最佳宽\n // TODO: 后续考虑代码合并\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number,\n position: 'start' | 'end' | 'middle',\n suffix: string | false\n ): { str: string; width: number; result?: string } {\n let data: { str: string; width: number; result?: string };\n if (position === 'start') {\n data = this._clipTextStart(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = suffix + data.str);\n } else if (position === 'middle') {\n const d = this._clipTextMiddle(text, options, width, '', '', 0, 0, 1);\n data = { str: 'none', width: d.width, result: d.left + suffix + d.right };\n } else {\n data = this._clipTextEnd(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = data.str + suffix);\n }\n return data;\n }\n\n private _clipTextEnd(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n // 添加退出条件,如果leftIdx和rightIdx相等,那么就返回这个字符串(理论上这时出问题了)\n if (leftIdx === rightIdx) {\n Logger.getInstance().warn(`【_clipTextEnd】不应该走到这里${text}, ${leftIdx}, ${rightIdx}`);\n // console.warn(`【_clipTextEnd】不应该走到这里${text}, ${leftIdx}, ${rightIdx}`);\n const subText = text.substring(0, rightIdx + 1);\n return { str: subText, width: this.measureTextWidth(subText, options) };\n }\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextEnd(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextEnd(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextStart(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.ceil((leftIdx + rightIdx) / 2);\n const subText = text.substring(middleIdx - 1, text.length);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(middleIdx, text.length);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextStart(text, options, width, middleIdx, text.length);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx <= 0) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(middleIdx - 2, text.length);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextStart(text, options, width, leftIdx, middleIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextMiddle(\n text: string,\n options: TextOptionsType,\n width: number,\n left: string,\n right: string,\n leftW: number,\n rightW: number,\n buffer: number\n ): { left: string; right: string; width: number } {\n const subLeftText = text.substring(0, buffer);\n const strLeftWidth = this.measureTextWidth(subLeftText, options);\n if (strLeftWidth + rightW > width) {\n return { left, right, width: leftW + rightW };\n }\n const subRightText = text.substring(text.length - buffer, text.length);\n const strRightWidth = this.measureTextWidth(subRightText, options);\n if (strLeftWidth + strRightWidth > width) {\n return { left: subLeftText, right, width: strLeftWidth + rightW };\n }\n return this._clipTextMiddle(\n text,\n options,\n width,\n subLeftText,\n subRightText,\n strLeftWidth,\n strRightWidth,\n buffer + 1\n );\n }\n\n clipTextWithSuffixVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n suffixPosition: 'start' | 'end' | 'middle'\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (suffix === '') {\n return this.clipTextVertical(verticalList, options, width, wordBreak);\n }\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n\n const output = this.clipTextVertical(verticalList, options, width, wordBreak);\n if (\n output.verticalList.length === verticalList.length &&\n output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width\n ) {\n return output;\n }\n\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return output;\n }\n\n width -= suffixWidth;\n\n let out;\n if (suffixPosition === 'start') {\n const nextVerticalList = this.revertVerticalList(verticalList);\n out = this.clipTextVertical(nextVerticalList, options, width, wordBreak);\n const v = this.revertVerticalList(out.verticalList);\n v.unshift({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n out.verticalList = v;\n } else if (suffixPosition === 'middle') {\n const leftOut = this.clipTextVertical(verticalList, options, width / 2, wordBreak);\n const nextVerticalList = this.revertVerticalList(verticalList);\n const rightOut = this.clipTextVertical(nextVerticalList, options, width / 2, wordBreak);\n // 添加suffix\n leftOut.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n this.revertVerticalList(rightOut.verticalList).forEach(v => leftOut.verticalList.push(v));\n out = {\n verticalList: leftOut.verticalList,\n width: leftOut.width + rightOut.width\n };\n } else {\n out = this.clipTextVertical(verticalList, options, width, wordBreak);\n out.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n }\n out.width += suffixWidth;\n return out;\n }\n\n revertVerticalList(\n verticalList: {\n text: string;\n width?: number;\n direction: number;\n }[]\n ) {\n return verticalList.reverse().map(l => {\n const t = l.text.split('').reverse().join('');\n return {\n ...l,\n text: t\n };\n });\n }\n\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n position: 'start' | 'end' | 'middle',\n forceSuffix: boolean = false\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width, wordBreak);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (!forceSuffix && length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n if (forceSuffix && length + suffixWidth <= width) {\n return { str: text + suffix, width: length + suffixWidth };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1, position, suffix);\n\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.result = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n } else if (forceSuffix && data.str === text) {\n data.result = text + suffix;\n }\n data.str = data.result!;\n data.width += suffixWidth;\n return data;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/contributions/textMeasure/AtextMeasure.ts"],"names":[],"mappings":"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","file":"AtextMeasure.js","sourcesContent":["import { injectable } from '../../../common/inversify-lite';\nimport type { IGraphicUtil } from '../../../interface/core';\nimport type { ICanvas, IContext2d, EnvType } from '../../../interface';\nimport { MeasureModeEnum } from '../../../interface';\nimport type { TextOptionsType, ITextMeasure } from '../../../interface/text';\nimport { DefaultTextAttribute, DefaultTextStyle } from '../../../graphic/config';\nimport { testLetter } from '../../../graphic/richtext/utils';\nimport { Logger } from '@visactor/vutils';\n\n@injectable()\nexport class ATextMeasure implements ITextMeasure {\n release: (...params: any) => void;\n protected canvas?: ICanvas;\n protected context?: IContext2d | null;\n\n configure(service: IGraphicUtil, env: EnvType): void {\n this.canvas = service.canvas;\n this.context = service.context;\n service.bindTextMeasure(this);\n }\n\n protected _measureTextWithoutAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean) {\n this.context.setTextStyleWithoutAlignBaseline(options);\n const metrics = this.context.measureText(text);\n\n return compatible ? this.compatibleMetrics(metrics, options) : metrics;\n }\n\n protected _measureTextWithAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean) {\n this.context.setTextStyle(options);\n const metrics = this.context.measureText(text);\n\n return compatible ? this.compatibleMetrics(metrics, options) : metrics;\n }\n\n protected compatibleMetrics(metrics: TextMetrics | { width: number }, options: TextOptionsType) {\n if (\n (metrics as any).actualBoundingBoxAscent == null ||\n (metrics as any).actualBoundingBoxDescent == null ||\n (metrics as any).fontBoundingBoxAscent == null ||\n (metrics as any).fontBoundingBoxDescent == null\n ) {\n const { ascent, descent } = this.measureTextBoundADscentEstimate(options);\n (metrics as any).actualBoundingBoxAscent = ascent;\n (metrics as any).actualBoundingBoxDescent = descent;\n (metrics as any).fontBoundingBoxAscent = ascent;\n (metrics as any).fontBoundingBoxDescent = descent;\n }\n if ((metrics as any).actualBoundingBoxLeft == null || (metrics as any).actualBoundingBoxRight == null) {\n const { left, right } = this.measureTextBoundLeftRightEstimate(options);\n (metrics as any).actualBoundingBoxLeft = left;\n (metrics as any).actualBoundingBoxRight = right;\n }\n return metrics;\n }\n\n // 估算文字长度\n protected estimate(\n text: string,\n { fontSize = DefaultTextAttribute.fontSize }: TextOptionsType\n ): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextWidth(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options);\n return textMeasure.width;\n }\n /**\n * 获取text宽度,measureText.width\n * @param text\n * @param options\n */\n measureTextBoundsWidth(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return this.estimate(text, options).width;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options);\n return textMeasure.width;\n }\n\n measureTextBoundsLeftRight(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundLeftRightEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n left: (textMeasure as any).actualBoundingBoxLeft,\n right: (textMeasure as any).actualBoundingBoxRight\n };\n }\n\n /**\n * 获取text像素高度,基于actualBoundingBoxAscent和actualBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextPixelHeight(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options, true);\n return Math.abs((textMeasure as any).actualBoundingBoxAscent - (textMeasure as any).actualBoundingBoxDescent);\n }\n\n measureTextPixelADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundADscentEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n ascent: (textMeasure as any).actualBoundingBoxAscent,\n descent: (textMeasure as any).actualBoundingBoxDescent\n };\n }\n\n /**\n * 获取text包围盒的高度,基于fontBoundingBoxAscent和fontBoundingBoxDescent\n * @param text\n * @param options\n */\n measureTextBoundHieght(\n text: string,\n options: TextOptionsType,\n textMeasure?: TextMetrics | { width: number }\n ): number {\n if (!this.context) {\n return options.fontSize ?? DefaultTextStyle.fontSize;\n }\n textMeasure = textMeasure ?? this._measureTextWithoutAlignBaseline(text, options, true);\n return Math.abs((textMeasure as any).fontBoundingBoxAscent - (textMeasure as any).fontBoundingBoxDescent);\n }\n\n measureTextBoundADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | { width: number }) {\n if (!this.context) {\n return this.measureTextBoundADscentEstimate(options);\n }\n textMeasure = textMeasure ?? this._measureTextWithAlignBaseline(text, options, true);\n return {\n ascent: (textMeasure as any).fontBoundingBoxAscent,\n descent: (textMeasure as any).fontBoundingBoxDescent\n };\n }\n\n protected measureTextBoundADscentEstimate(options: TextOptionsType) {\n const fontSize = options.fontSize ?? DefaultTextStyle.fontSize;\n return {\n ascent: 0.79 * fontSize,\n descent: 0.21 * fontSize\n };\n // const { textBaseline } = options;\n // if (textBaseline === 'bottom') {\n // return {\n // ascent: fontSize,\n // descent: 0\n // };\n // } else if (textBaseline === 'middle') {\n // return {\n // ascent: fontSize / 2,\n // descent: fontSize / 2\n // };\n // } else if (textBaseline === 'alphabetic') {\n // return {\n // ascent: 0.79 * fontSize,\n // descent: 0.21 * fontSize\n // };\n // }\n\n // return {\n // ascent: 0,\n // descent: fontSize\n // };\n }\n\n protected measureTextBoundLeftRightEstimate(options: TextOptionsType) {\n const fontSize = options.fontSize ?? DefaultTextStyle.fontSize;\n const { textAlign } = options;\n\n if (textAlign === 'center') {\n return {\n left: fontSize / 2,\n right: fontSize / 2\n };\n } else if (textAlign === 'right' || textAlign === 'end') {\n return {\n left: fontSize,\n right: 0\n };\n }\n return {\n left: 0,\n right: fontSize\n };\n }\n\n measureTextPixelADscentAndWidth(\n text: string,\n options: TextOptionsType,\n mode: MeasureModeEnum\n ): { width: number; ascent: number; descent: number } {\n if (!this.context) {\n return {\n ...this.measureTextBoundADscentEstimate(options),\n width: this.estimate(text, options).width\n };\n }\n const out = this._measureTextWithoutAlignBaseline(text, options, true);\n\n if (mode === MeasureModeEnum.actualBounding) {\n return {\n ascent: (out as any).actualBoundingBoxAscent,\n descent: (out as any).actualBoundingBoxDescent,\n width: (out as any).width\n };\n } else if (mode === MeasureModeEnum.estimate) {\n return {\n ...this.measureTextBoundADscentEstimate(options),\n width: (out as any).width\n };\n } else if (mode === MeasureModeEnum.fontBounding) {\n // const { lineHeight = options.fontSize } = options;\n // let ratio = 1;\n // if (lineHeight) {\n // const fontBoundingHeight = (out as any).fontBoundingBoxAscent + (out as any).fontBoundingBoxDescent;\n // ratio = lineHeight / fontBoundingHeight;\n // }\n // 避免二次矫正,应当保证所有字符组合的基线都一样,否则fontBounding就失去意义了\n // 但如果超出边界了,就只能进行二次矫正\n let ascent = (out as any).fontBoundingBoxAscent;\n let descent = (out as any).fontBoundingBoxDescent;\n // 只能一边超出,都超出的话目前无法矫正,因为行高不能超\n if ((out as any).actualBoundingBoxDescent && descent < (out as any).actualBoundingBoxDescent) {\n const delta = (out as any).actualBoundingBoxDescent - descent;\n descent += delta;\n ascent -= delta;\n } else if ((out as any).actualBoundingBoxAscent && ascent < (out as any).actualBoundingBoxAscent) {\n const delta = (out as any).actualBoundingBoxAscent - ascent;\n ascent += delta;\n descent -= delta;\n }\n return {\n ascent,\n descent,\n width: (out as any).width\n };\n }\n return {\n ascent: (out as any).actualBoundingBoxAscent,\n descent: (out as any).actualBoundingBoxDescent,\n width: (out as any).width\n };\n }\n\n /**\n * 获取text测量对象\n * @param text\n * @param options\n */\n measureText(text: string, options: TextOptionsType): TextMetrics | { width: number } {\n if (!this.context) {\n return this.estimate(text, options);\n }\n this.context.setTextStyleWithoutAlignBaseline(options);\n return this.context.measureText(text);\n }\n\n clipTextVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n wordBreak: boolean\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n const { fontSize = 12 } = options;\n // 计算每一个区域的width\n verticalList.forEach(item => {\n item.width = item.direction === 0 ? fontSize : this.measureTextWidth(item.text, options);\n });\n const out: { text: string; width?: number; direction: number }[] = [];\n let length = 0;\n let i = 0;\n for (; i < verticalList.length; i++) {\n if (length + verticalList[i].width < width) {\n length += verticalList[i].width;\n out.push(verticalList[i]);\n } else {\n break;\n }\n }\n if (verticalList[i] && verticalList[i].text.length > 1) {\n const clipedData = this._clipText(\n verticalList[i].text,\n options,\n width - length,\n 0,\n verticalList[i].text.length - 1,\n 'end',\n false\n );\n if (wordBreak && clipedData.str !== verticalList[i].text) {\n let text = '';\n let length = 0;\n for (let j = 0; j < i; j++) {\n const item = verticalList[j];\n text += item.text;\n length += item.text.length;\n }\n text += verticalList[i].text;\n const totalLength = length + clipedData.str.length;\n let index = testLetter(text, totalLength);\n index = index - length;\n if (index !== clipedData.str.length - 1) {\n clipedData.str = clipedData.str.substring(0, index);\n clipedData.width = this.measureTextWidth(clipedData.str, options);\n }\n }\n out.push({ ...verticalList[i], text: clipedData.str, width: clipedData.width });\n length += clipedData.width;\n }\n\n return {\n verticalList: out,\n width: length\n };\n }\n\n /**\n * 将文本裁剪到width宽\n * @param text\n * @param options\n * @param width\n */\n clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n wordBreak: boolean,\n keepAllBreak?: boolean\n ): {\n str: string;\n width: number;\n wordBreaked?: number;\n } {\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n let length = this.measureTextWidth(text, options);\n if (length <= width) {\n return { str: text, width: length };\n }\n length = this.measureTextWidth(text[0], options);\n if (length > width) {\n return { str: '', width: 0 };\n }\n const data = this._clipText(text, options, width, 0, text.length - 1, 'end', false);\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n let index = testLetter(text, data.str.length, keepAllBreak);\n if (index !== data.str.length) {\n if (index > data.str.length) {\n (data as any).wordBreaked = index;\n index = data.str.length;\n }\n data.str = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n }\n return data;\n }\n\n // 二分法找到最佳宽\n // TODO: 后续考虑代码合并\n private _clipText(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number,\n position: 'start' | 'end' | 'middle',\n suffix: string | false\n ): { str: string; width: number; result?: string } {\n let data: { str: string; width: number; result?: string };\n if (position === 'start') {\n data = this._clipTextStart(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = suffix + data.str);\n } else if (position === 'middle') {\n const d = this._clipTextMiddle(text, options, width, '', '', 0, 0, 1);\n data = { str: 'none', width: d.width, result: d.left + suffix + d.right };\n } else {\n data = this._clipTextEnd(text, options, width, leftIdx, rightIdx);\n suffix && (data.result = data.str + suffix);\n }\n return data;\n }\n\n private _clipTextEnd(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n // 添加退出条件,如果leftIdx和rightIdx相等,那么就返回这个字符串(理论上这时出问题了)\n if (leftIdx === rightIdx) {\n Logger.getInstance().warn(`【_clipTextEnd】不应该走到这里${text}, ${leftIdx}, ${rightIdx}`);\n // console.warn(`【_clipTextEnd】不应该走到这里${text}, ${leftIdx}, ${rightIdx}`);\n const subText = text.substring(0, rightIdx + 1);\n return { str: subText, width: this.measureTextWidth(subText, options) };\n }\n const middleIdx = Math.floor((leftIdx + rightIdx) / 2);\n const subText = text.substring(0, middleIdx + 1);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(0, middleIdx);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextEnd(text, options, width, leftIdx, middleIdx);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx >= text.length - 1) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(0, middleIdx + 2);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextEnd(text, options, width, middleIdx, rightIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextStart(\n text: string,\n options: TextOptionsType,\n width: number,\n leftIdx: number,\n rightIdx: number\n ): { str: string; width: number } {\n const middleIdx = Math.ceil((leftIdx + rightIdx) / 2);\n const subText = text.substring(middleIdx - 1, text.length);\n const strWidth = this.measureTextWidth(subText, options);\n let length: number;\n if (strWidth > width) {\n // 如果字符串的宽度大于限制宽度\n if (subText.length <= 1) {\n return { str: '', width: 0 };\n } // 如果子字符串长度小于1,而且大于给定宽的话,返回空字符串\n // 先判断是不是左侧的那个字符\n const str = text.substring(middleIdx, text.length);\n // 如果到左侧的字符小于或等于width,那么说明就是左侧的字符\n length = this.measureTextWidth(str, options);\n if (length <= width) {\n return { str, width: length };\n }\n // 返回leftIdx到middleIdx\n return this._clipTextStart(text, options, width, middleIdx, text.length);\n } else if (strWidth < width) {\n // 如果字符串的宽度小于限制宽度\n if (middleIdx <= 0) {\n return { str: text, width: this.measureTextWidth(text, options) };\n } // 如果已经到结尾了,返回text\n // 先判断是不是右侧的那个字符\n const str = text.substring(middleIdx - 2, text.length);\n // 如果到右侧的字符大于或等于width,那么说明就是这个字符串\n length = this.measureTextWidth(str, options);\n if (length >= width) {\n return { str: subText, width: strWidth };\n }\n // 返回middleIdx到rightIdx\n return this._clipTextStart(text, options, width, leftIdx, middleIdx);\n }\n // 如果相同,那么就找到text\n return { str: subText, width: strWidth };\n }\n\n private _clipTextMiddle(\n text: string,\n options: TextOptionsType,\n width: number,\n left: string,\n right: string,\n leftW: number,\n rightW: number,\n buffer: number\n ): { left: string; right: string; width: number } {\n const subLeftText = text.substring(0, buffer);\n const strLeftWidth = this.measureTextWidth(subLeftText, options);\n if (strLeftWidth + rightW > width) {\n return { left, right, width: leftW + rightW };\n }\n const subRightText = text.substring(text.length - buffer, text.length);\n const strRightWidth = this.measureTextWidth(subRightText, options);\n if (strLeftWidth + strRightWidth > width) {\n return { left: subLeftText, right, width: strLeftWidth + rightW };\n }\n return this._clipTextMiddle(\n text,\n options,\n width,\n subLeftText,\n subRightText,\n strLeftWidth,\n strRightWidth,\n buffer + 1\n );\n }\n\n clipTextWithSuffixVertical(\n verticalList: { text: string; width?: number; direction: number }[],\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n suffixPosition: 'start' | 'end' | 'middle'\n ): {\n verticalList: { text: string; width?: number; direction: number }[];\n width: number;\n } {\n if (suffix === '') {\n return this.clipTextVertical(verticalList, options, width, wordBreak);\n }\n if (verticalList.length === 0) {\n return { verticalList, width: 0 };\n }\n\n const output = this.clipTextVertical(verticalList, options, width, wordBreak);\n if (\n output.verticalList.length === verticalList.length &&\n output.verticalList[output.verticalList.length - 1].width === verticalList[verticalList.length - 1].width\n ) {\n return output;\n }\n\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return output;\n }\n\n width -= suffixWidth;\n\n let out;\n if (suffixPosition === 'start') {\n const nextVerticalList = this.revertVerticalList(verticalList);\n out = this.clipTextVertical(nextVerticalList, options, width, wordBreak);\n const v = this.revertVerticalList(out.verticalList);\n v.unshift({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n out.verticalList = v;\n } else if (suffixPosition === 'middle') {\n const leftOut = this.clipTextVertical(verticalList, options, width / 2, wordBreak);\n const nextVerticalList = this.revertVerticalList(verticalList);\n const rightOut = this.clipTextVertical(nextVerticalList, options, width / 2, wordBreak);\n // 添加suffix\n leftOut.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n this.revertVerticalList(rightOut.verticalList).forEach(v => leftOut.verticalList.push(v));\n out = {\n verticalList: leftOut.verticalList,\n width: leftOut.width + rightOut.width\n };\n } else {\n out = this.clipTextVertical(verticalList, options, width, wordBreak);\n out.verticalList.push({\n text: suffix,\n direction: 1,\n width: suffixWidth\n });\n }\n out.width += suffixWidth;\n return out;\n }\n\n revertVerticalList(\n verticalList: {\n text: string;\n width?: number;\n direction: number;\n }[]\n ) {\n return verticalList.reverse().map(l => {\n const t = l.text.split('').reverse().join('');\n return {\n ...l,\n text: t\n };\n });\n }\n\n clipTextWithSuffix(\n text: string,\n options: TextOptionsType,\n width: number,\n suffix: string,\n wordBreak: boolean,\n position: 'start' | 'end' | 'middle',\n forceSuffix: boolean = false\n ): {\n str: string;\n width: number;\n } {\n if (suffix === '') {\n return this.clipText(text, options, width, wordBreak);\n }\n if (text.length === 0) {\n return { str: '', width: 0 };\n }\n const length = this.measureTextWidth(text, options);\n if (!forceSuffix && length <= width) {\n return { str: text, width: length };\n }\n const suffixWidth = this.measureTextWidth(suffix, options);\n if (suffixWidth > width) {\n return { str: '', width: 0 };\n }\n if (forceSuffix && length + suffixWidth <= width) {\n return { str: text + suffix, width: length + suffixWidth };\n }\n width -= suffixWidth;\n const data = this._clipText(text, options, width, 0, text.length - 1, position, suffix);\n\n // 如果需要文字截断\n if (wordBreak && data.str !== text) {\n const index = testLetter(text, data.str.length);\n if (index !== data.str.length) {\n data.result = text.substring(0, index);\n data.width = this.measureTextWidth(data.str, options);\n }\n } else if (forceSuffix && data.str === text) {\n data.result = text + suffix;\n }\n data.str = data.result!;\n data.width += suffixWidth;\n return data;\n }\n}\n"]}
@@ -6,11 +6,8 @@ export declare class DefaultGlobal implements IGlobal {
6
6
  private _env;
7
7
  private _isSafari?;
8
8
  private _isChrome?;
9
- private _isImageAnonymous?;
10
9
  get env(): EnvType;
11
10
  private envContribution;
12
- get isImageAnonymous(): boolean;
13
- set isImageAnonymous(isImageAnonymous: boolean);
14
11
  get devicePixelRatio(): number;
15
12
  get supportEvent(): boolean;
16
13
  set supportEvent(support: boolean);
@@ -83,4 +80,6 @@ export declare class DefaultGlobal implements IGlobal {
83
80
  top: number;
84
81
  left: number;
85
82
  };
83
+ isMacOS(): boolean;
84
+ copyToClipBoard(text: string): Promise<void>;
86
85
  }
package/es/core/global.js CHANGED
@@ -50,12 +50,6 @@ let DefaultGlobal = class {
50
50
  get env() {
51
51
  return this._env;
52
52
  }
53
- get isImageAnonymous() {
54
- return this._isImageAnonymous;
55
- }
56
- set isImageAnonymous(isImageAnonymous) {
57
- this._isImageAnonymous = isImageAnonymous;
58
- }
59
53
  get devicePixelRatio() {
60
54
  return this._env || this.setEnv("browser"), this.envContribution.getDevicePixelRatio();
61
55
  }
@@ -90,8 +84,7 @@ let DefaultGlobal = class {
90
84
  this._env || this.setEnv("browser"), this.envContribution.applyStyles = support;
91
85
  }
92
86
  constructor(contributions) {
93
- this.contributions = contributions, this._isImageAnonymous = !0, this.id = Generator.GenAutoIncrementId(),
94
- this.hooks = {
87
+ this.contributions = contributions, this.id = Generator.GenAutoIncrementId(), this.hooks = {
95
88
  onSetEnv: new SyncHook([ "lastEnv", "env", "global" ])
96
89
  }, this.measureTextMethod = "native", this.optimizeVisible = !1;
97
90
  }
@@ -212,6 +205,12 @@ let DefaultGlobal = class {
212
205
  getElementTopLeft(dom, baseWindow = !1) {
213
206
  return this._env || this.setEnv("browser"), this.envContribution.getElementTopLeft(dom, baseWindow);
214
207
  }
208
+ isMacOS() {
209
+ return this._env || this.setEnv("browser"), this.envContribution.isMacOS();
210
+ }
211
+ copyToClipBoard(text) {
212
+ return this._env || this.setEnv("browser"), this.envContribution.copyToClipBoard(text);
213
+ }
215
214
  };
216
215
 
217
216
  DefaultGlobal = __decorate([ injectable(), __param(0, inject(ContributionProvider)), __param(0, named(EnvContribution)), __metadata("design:paramtypes", [ Object ]) ], DefaultGlobal);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/global.ts"],"names":[],"mappings":"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","file":"global.js","sourcesContent":["import { inject, injectable, named } from '../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n CreateDOMParamsType,\n EnvType,\n IContributionProvider,\n ICreateCanvasParams,\n IEnvContribution,\n IEnvParamsMap,\n IGlobal,\n ISyncHook\n} from '../interface';\nimport { SyncHook } from '../tapable';\nimport { EnvContribution } from '../constants';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { container } from '../container';\nimport { Generator } from '../common/generator';\n\nconst defaultEnv: EnvType = 'browser';\n@injectable()\nexport class DefaultGlobal implements IGlobal {\n readonly id: number;\n private _env: EnvType;\n private _isSafari?: boolean;\n private _isChrome?: boolean;\n private _isImageAnonymous?: boolean = true;\n get env(): EnvType {\n return this._env;\n }\n private envContribution: IEnvContribution;\n\n get isImageAnonymous(): boolean {\n return this._isImageAnonymous;\n }\n\n set isImageAnonymous(isImageAnonymous: boolean) {\n this._isImageAnonymous = isImageAnonymous;\n }\n\n get devicePixelRatio(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDevicePixelRatio();\n }\n\n get supportEvent(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportEvent;\n }\n\n set supportEvent(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportEvent = support;\n }\n\n get supportsTouchEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsTouchEvents;\n }\n\n set supportsTouchEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsTouchEvents = support;\n }\n\n get supportsPointerEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsPointerEvents;\n }\n\n set supportsPointerEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsPointerEvents = support;\n }\n\n get supportsMouseEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsMouseEvents;\n }\n\n set supportsMouseEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsMouseEvents = support;\n }\n\n get applyStyles(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.applyStyles;\n }\n\n set applyStyles(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.applyStyles = support;\n }\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n\n envParams?: any;\n declare measureTextMethod: 'native' | 'simple' | 'quick';\n declare hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n constructor(\n // todo: 不需要创建,动态获取就行?\n @inject(ContributionProvider)\n @named(EnvContribution)\n protected readonly contributions: IContributionProvider<IEnvContribution>\n ) {\n this.id = Generator.GenAutoIncrementId();\n this.hooks = {\n onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global'])\n };\n this.measureTextMethod = 'native';\n this.optimizeVisible = false;\n }\n\n protected bindContribution(params?: any): void | Promise<any> {\n const promiseArr: any[] = [];\n this.contributions.getContributions().forEach(contribution => {\n const data = contribution.configure(this, params);\n if ((data as any) && (data as any).then) {\n promiseArr.push(data);\n }\n });\n if (promiseArr.length) {\n return Promise.all(promiseArr);\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDynamicCanvasCount();\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getStaticCanvasCount();\n }\n\n /**\n * 设置当前环境\n * @param env\n * @param params 环境参数\n * 默认重复设置不生效,但如果params.force为true那么每次设置env都会重复执行初始化逻辑\n * @returns\n */\n setEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n // 如果环境设置过了,但是没有设置force为true,就直接跳过\n if (!(params && params.force === true) && this._env === env) {\n return;\n }\n this.deactiveCurrentEnv();\n return this.activeEnv(env, params);\n }\n\n protected deactiveCurrentEnv() {\n this.envContribution && this.envContribution.release();\n }\n\n protected activeEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n const lastEnv = this._env;\n this._env = env;\n const data = this.bindContribution(params);\n if (data && data.then) {\n return data.then(() => {\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n });\n }\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n }\n\n setActiveEnvContribution(contribution: IEnvContribution) {\n this.envContribution = contribution;\n }\n\n createCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createCanvas(params);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createOffscreenCanvas(params);\n }\n\n releaseCanvas(canvas: HTMLCanvasElement | string | any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.releaseCanvas(canvas);\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.dispatchEvent(event);\n }\n\n getRequestAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getRequestAnimationFrame();\n }\n\n getCancelAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getCancelAnimationFrame();\n }\n\n getElementById(str: string): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getElementById) {\n return null;\n }\n return this.envContribution.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getRootElement) {\n return null;\n }\n return this.envContribution.getRootElement();\n }\n\n getDocument(): Document | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getDocument) {\n return null;\n }\n return this.envContribution.getDocument();\n }\n\n mapToCanvasPoint(event: any, domElement?: any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.mapToCanvasPoint) {\n return null;\n }\n return this.envContribution.mapToCanvasPoint(event, domElement);\n }\n\n loadImage(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadImage(url);\n }\n\n loadSvg(str: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadSvg(str);\n }\n\n loadJson(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadJson(url);\n }\n\n loadArrayBuffer(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadArrayBuffer(url);\n }\n\n loadBlob(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadBlob(url);\n }\n\n async loadFont(name: string, source: string | BinaryData, descriptors?: FontFaceDescriptors) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadFont(name, source, descriptors);\n }\n\n isChrome(): boolean {\n if (this._isChrome != null) {\n return this._isChrome;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isChrome = this._env === 'browser' && navigator.userAgent.indexOf('Chrome') > -1;\n return this._isChrome;\n }\n\n isSafari(): boolean {\n if (this._isSafari != null) {\n return this._isSafari;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isSafari =\n this._env === 'browser' && /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n return this._isSafari;\n }\n\n getNativeAABBBounds(dom: string | HTMLElement | any): IAABBBoundsLike {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getNativeAABBBounds(dom);\n }\n\n removeDom(dom: HTMLElement): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.removeDom(dom);\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.createDom(params);\n }\n\n updateDom(dom: HTMLElement, params: CreateDOMParamsType): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.updateDom(dom, params);\n }\n\n getElementTop(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTop(dom, baseWindow);\n }\n getElementLeft(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementLeft(dom, baseWindow);\n }\n getElementTopLeft(dom: any, baseWindow: boolean = false): { top: number; left: number } {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTopLeft(dom, baseWindow);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/global.ts"],"names":[],"mappings":"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","file":"global.js","sourcesContent":["import { inject, injectable, named } from '../common/inversify-lite';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n CreateDOMParamsType,\n EnvType,\n IContributionProvider,\n ICreateCanvasParams,\n IEnvContribution,\n IEnvParamsMap,\n IGlobal,\n ISyncHook\n} from '../interface';\nimport { SyncHook } from '../tapable';\nimport { EnvContribution } from '../constants';\nimport type { IAABBBoundsLike } from '@visactor/vutils';\nimport { container } from '../container';\nimport { Generator } from '../common/generator';\n\nconst defaultEnv: EnvType = 'browser';\n@injectable()\nexport class DefaultGlobal implements IGlobal {\n readonly id: number;\n private _env: EnvType;\n private _isSafari?: boolean;\n private _isChrome?: boolean;\n get env(): EnvType {\n return this._env;\n }\n private envContribution: IEnvContribution;\n\n get devicePixelRatio(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDevicePixelRatio();\n }\n\n get supportEvent(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportEvent;\n }\n\n set supportEvent(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportEvent = support;\n }\n\n get supportsTouchEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsTouchEvents;\n }\n\n set supportsTouchEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsTouchEvents = support;\n }\n\n get supportsPointerEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsPointerEvents;\n }\n\n set supportsPointerEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsPointerEvents = support;\n }\n\n get supportsMouseEvents(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.supportsMouseEvents;\n }\n\n set supportsMouseEvents(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.supportsMouseEvents = support;\n }\n\n get applyStyles(): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.applyStyles;\n }\n\n set applyStyles(support: boolean) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n this.envContribution.applyStyles = support;\n }\n\n // 是否在不显示canvas的时候停止绘图操作,默认false\n optimizeVisible: boolean;\n\n envParams?: any;\n declare measureTextMethod: 'native' | 'simple' | 'quick';\n declare hooks: {\n onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>;\n };\n\n constructor(\n // todo: 不需要创建,动态获取就行?\n @inject(ContributionProvider)\n @named(EnvContribution)\n protected readonly contributions: IContributionProvider<IEnvContribution>\n ) {\n this.id = Generator.GenAutoIncrementId();\n this.hooks = {\n onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global'])\n };\n this.measureTextMethod = 'native';\n this.optimizeVisible = false;\n }\n\n protected bindContribution(params?: any): void | Promise<any> {\n const promiseArr: any[] = [];\n this.contributions.getContributions().forEach(contribution => {\n const data = contribution.configure(this, params);\n if ((data as any) && (data as any).then) {\n promiseArr.push(data);\n }\n });\n if (promiseArr.length) {\n return Promise.all(promiseArr);\n }\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getDynamicCanvasCount();\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getStaticCanvasCount();\n }\n\n /**\n * 设置当前环境\n * @param env\n * @param params 环境参数\n * 默认重复设置不生效,但如果params.force为true那么每次设置env都会重复执行初始化逻辑\n * @returns\n */\n setEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n // 如果环境设置过了,但是没有设置force为true,就直接跳过\n if (!(params && params.force === true) && this._env === env) {\n return;\n }\n this.deactiveCurrentEnv();\n return this.activeEnv(env, params);\n }\n\n protected deactiveCurrentEnv() {\n this.envContribution && this.envContribution.release();\n }\n\n protected activeEnv(env: EnvType, params?: IEnvParamsMap[EnvType]): void | Promise<any> {\n const lastEnv = this._env;\n this._env = env;\n const data = this.bindContribution(params);\n if (data && data.then) {\n return data.then(() => {\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n });\n }\n this.envParams = params;\n this.hooks.onSetEnv.call(lastEnv, env, this);\n }\n\n setActiveEnvContribution(contribution: IEnvContribution) {\n this.envContribution = contribution;\n }\n\n createCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createCanvas(params);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.createOffscreenCanvas(params);\n }\n\n releaseCanvas(canvas: HTMLCanvasElement | string | any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.releaseCanvas(canvas);\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.addEventListener(type, listener, options);\n }\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.removeEventListener(type, listener, options);\n }\n dispatchEvent(event: any): boolean {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.dispatchEvent(event);\n }\n\n getRequestAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getRequestAnimationFrame();\n }\n\n getCancelAnimationFrame() {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n return this.envContribution.getCancelAnimationFrame();\n }\n\n getElementById(str: string): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getElementById) {\n return null;\n }\n return this.envContribution.getElementById(str);\n }\n\n getRootElement(): HTMLElement | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getRootElement) {\n return null;\n }\n return this.envContribution.getRootElement();\n }\n\n getDocument(): Document | null {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.getDocument) {\n return null;\n }\n return this.envContribution.getDocument();\n }\n\n mapToCanvasPoint(event: any, domElement?: any) {\n if (!this._env) {\n this.setEnv(defaultEnv);\n }\n if (!this.envContribution.mapToCanvasPoint) {\n return null;\n }\n return this.envContribution.mapToCanvasPoint(event, domElement);\n }\n\n loadImage(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadImage(url);\n }\n\n loadSvg(str: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadSvg(str);\n }\n\n loadJson(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadJson(url);\n }\n\n loadArrayBuffer(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadArrayBuffer(url);\n }\n\n loadBlob(url: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadBlob(url);\n }\n\n async loadFont(name: string, source: string | BinaryData, descriptors?: FontFaceDescriptors) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.loadFont(name, source, descriptors);\n }\n\n isChrome(): boolean {\n if (this._isChrome != null) {\n return this._isChrome;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isChrome = this._env === 'browser' && navigator.userAgent.indexOf('Chrome') > -1;\n return this._isChrome;\n }\n\n isSafari(): boolean {\n if (this._isSafari != null) {\n return this._isSafari;\n }\n if (!this._env) {\n this.setEnv('browser');\n }\n this._isSafari =\n this._env === 'browser' && /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);\n return this._isSafari;\n }\n\n getNativeAABBBounds(dom: string | HTMLElement | any): IAABBBoundsLike {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getNativeAABBBounds(dom);\n }\n\n removeDom(dom: HTMLElement): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.removeDom(dom);\n }\n\n createDom(params: CreateDOMParamsType): HTMLElement | null {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.createDom(params);\n }\n\n updateDom(dom: HTMLElement, params: CreateDOMParamsType): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.updateDom(dom, params);\n }\n\n getElementTop(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTop(dom, baseWindow);\n }\n getElementLeft(dom: any, baseWindow: boolean = false): number {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementLeft(dom, baseWindow);\n }\n getElementTopLeft(dom: any, baseWindow: boolean = false): { top: number; left: number } {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.getElementTopLeft(dom, baseWindow);\n }\n\n isMacOS(): boolean {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.isMacOS();\n }\n\n copyToClipBoard(text: string) {\n if (!this._env) {\n this.setEnv('browser');\n }\n return this.envContribution.copyToClipBoard(text);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { IContext2d, SymbolType, ISymbolClass } from '../../interface';
1
+ import type { IContext2d, SymbolType, ISymbolClass, ICustomPath2D, IPath2D } from '../../interface';
2
2
  import { BaseSymbol } from './base';
3
3
  export declare function rectSizeArray(ctx: IContext2d, size: [number, number], x: number, y: number): boolean;
4
4
  export declare function rectSize(ctx: IContext2d, size: number, x: number, y: number): boolean;
@@ -6,6 +6,7 @@ export declare class RectSymbol extends BaseSymbol implements ISymbolClass {
6
6
  type: SymbolType;
7
7
  pathStr: string;
8
8
  draw(ctx: IContext2d, size: number | [number, number], x: number, y: number): boolean;
9
+ drawWithClipRange(ctx: IPath2D, size: number | [number, number], x: number, y: number, clipRange: number, z?: number, cb?: (p: ICustomPath2D, a: any) => void): boolean;
9
10
  drawOffset(ctx: IContext2d, size: number | [number, number], x: number, y: number, offset: number): boolean;
10
11
  }
11
12
  declare const _default: RectSymbol;
@@ -18,6 +18,34 @@ export class RectSymbol extends BaseSymbol {
18
18
  draw(ctx, size, x, y) {
19
19
  return isNumber(size) ? rectSize(ctx, size, x, y) : rectSizeArray(ctx, size, x, y);
20
20
  }
21
+ drawWithClipRange(ctx, size, x, y, clipRange, z, cb) {
22
+ isNumber(size) && (size = [ size, size / 2 ]);
23
+ const drawLength = 2 * (size[0] + size[1]) * clipRange, points = [ {
24
+ x: x + size[0] / 2,
25
+ y: y - size[1] / 2
26
+ }, {
27
+ x: x + size[0] / 2,
28
+ y: y + size[1] / 2
29
+ }, {
30
+ x: x - size[0] / 2,
31
+ y: y + size[1] / 2
32
+ }, {
33
+ x: x - size[0] / 2,
34
+ y: y - size[1] / 2
35
+ } ];
36
+ let currLength = 0, lastP = points[3];
37
+ ctx.moveTo(lastP.x, lastP.y);
38
+ for (let i = 0; i < points.length; i++) {
39
+ const p = points[i], len = Math.sqrt((p.x - lastP.x) * (p.x - lastP.x) + (p.y - lastP.y) * (p.y - lastP.y));
40
+ if (currLength + len > drawLength) {
41
+ const dx = (p.x - lastP.x) * (drawLength - currLength) / len, dy = (p.y - lastP.y) * (drawLength - currLength) / len;
42
+ ctx.lineTo(lastP.x + dx, lastP.y + dy);
43
+ break;
44
+ }
45
+ ctx.lineTo(p.x, p.y), lastP = p, currLength += len;
46
+ }
47
+ return !1;
48
+ }
21
49
  drawOffset(ctx, size, x, y, offset) {
22
50
  return isNumber(size) ? rectSize(ctx, size + 2 * offset, x, y) : rectSizeArray(ctx, [ size[0] + 2 * offset, size[1] + 2 * offset ], x, y);
23
51
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/builtin-symbol/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAiCpC,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,IAAsB,EAAE,CAAS,EAAE,CAAS;IACzF,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAe,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS;IAC1E,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACE,SAAI,GAAe,MAAM,CAAC;QAC1B,YAAO,GAAW,mDAAmD,CAAC;IAiBxE,CAAC;IAfC,IAAI,CAAC,GAAe,EAAE,IAA+B,EAAE,CAAS,EAAE,CAAS;QACzE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAGxC,CAAC;IAED,UAAU,CAAC,GAAe,EAAE,IAA+B,EAAE,CAAS,EAAE,CAAS,EAAE,MAAc;QAC/F,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;CACF;AAED,eAAe,IAAI,UAAU,EAAE,CAAC","file":"rect.js","sourcesContent":["import type { IBounds } from '@visactor/vutils';\nimport { isNumber } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function rectSizeArray(ctx: IContext2d, size: [number, number], x: number, y: number) {\n ctx.rect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);\n return false;\n}\n\nexport function rectSize(ctx: IContext2d, size: number, x: number, y: number) {\n const w = size;\n const h = size / 2;\n ctx.rect(x - w / 2, y - h / 2, w, h);\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class RectSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'rect';\n pathStr: string = 'M -0.5,0.25 L 0.5,0.25 L 0.5,-0.25,L -0.5,-0.25 Z';\n\n draw(ctx: IContext2d, size: number | [number, number], x: number, y: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size, x, y);\n }\n return rectSizeArray(ctx, size, x, y);\n // const rectSize: [number, number] = ? [size, size] : size;\n // return rect(ctx, rectSize, x, y);\n }\n\n drawOffset(ctx: IContext2d, size: number | [number, number], x: number, y: number, offset: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size + 2 * offset, x, y);\n }\n return rectSizeArray(ctx, [size[0] + 2 * offset, size[1] + 2 * offset], x, y);\n }\n}\n\nexport default new RectSymbol();\n"]}
1
+ {"version":3,"sources":["../src/graphic/builtin-symbol/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAiCpC,MAAM,UAAU,aAAa,CAAC,GAAe,EAAE,IAAsB,EAAE,CAAS,EAAE,CAAS;IACzF,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAe,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS;IAC1E,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACE,SAAI,GAAe,MAAM,CAAC;QAC1B,YAAO,GAAW,mDAAmD,CAAC;IAyDxE,CAAC;IAvDC,IAAI,CAAC,GAAe,EAAE,IAA+B,EAAE,CAAS,EAAE,CAAS;QACzE,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAClC;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAGxC,CAAC;IAED,iBAAiB,CACf,GAAY,EACZ,IAA+B,EAC/B,CAAS,EACT,CAAS,EACT,SAAiB,EACjB,CAAU,EACV,EAAuC;QAEvC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;SACzB;QACD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;QAC3C,MAAM,MAAM,GAAG;YACb,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC1C,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC1C,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC1C,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;SAC3C,CAAC;QACF,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,UAAU,GAAG,GAAG,GAAG,UAAU,EAAE;gBACjC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC/D,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC/D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvC,MAAM;aACP;iBAAM;gBACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aACtB;YACD,KAAK,GAAG,CAAC,CAAC;YACV,UAAU,IAAI,GAAG,CAAC;SACnB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,GAAe,EAAE,IAA+B,EAAE,CAAS,EAAE,CAAS,EAAE,MAAc;QAC/F,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;QACD,OAAO,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;CACF;AAED,eAAe,IAAI,UAAU,EAAE,CAAC","file":"rect.js","sourcesContent":["import type { IBounds } from '@visactor/vutils';\nimport { isNumber } from '@visactor/vutils';\nimport type { IContext2d, SymbolType, ISymbolClass, ICustomPath2D, IPath2D } from '../../interface';\nimport { BaseSymbol } from './base';\n\n/**\n * 部分源码参考 https://github.com/vega/vega/blob/main/packages/vega-scenegraph/src/path/symbols.js\n * Copyright (c) 2015-2023, University of Washington Interactive Data Lab\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n 3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\n FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nexport function rectSizeArray(ctx: IContext2d, size: [number, number], x: number, y: number) {\n ctx.rect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);\n return false;\n}\n\nexport function rectSize(ctx: IContext2d, size: number, x: number, y: number) {\n const w = size;\n const h = size / 2;\n ctx.rect(x - w / 2, y - h / 2, w, h);\n return false;\n}\n\n// 以中心为锚点,size为circle外接正方形的面积\nexport class RectSymbol extends BaseSymbol implements ISymbolClass {\n type: SymbolType = 'rect';\n pathStr: string = 'M -0.5,0.25 L 0.5,0.25 L 0.5,-0.25,L -0.5,-0.25 Z';\n\n draw(ctx: IContext2d, size: number | [number, number], x: number, y: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size, x, y);\n }\n return rectSizeArray(ctx, size, x, y);\n // const rectSize: [number, number] = ? [size, size] : size;\n // return rect(ctx, rectSize, x, y);\n }\n\n drawWithClipRange(\n ctx: IPath2D,\n size: number | [number, number],\n x: number,\n y: number,\n clipRange: number,\n z?: number,\n cb?: (p: ICustomPath2D, a: any) => void\n ) {\n if (isNumber(size)) {\n size = [size, size / 2];\n }\n const totalLength = (size[0] + size[1]) * 2;\n const drawLength = totalLength * clipRange;\n const points = [\n { x: x + size[0] / 2, y: y - size[1] / 2 },\n { x: x + size[0] / 2, y: y + size[1] / 2 },\n { x: x - size[0] / 2, y: y + size[1] / 2 },\n { x: x - size[0] / 2, y: y - size[1] / 2 }\n ];\n let currLength = 0;\n let lastP = points[3];\n ctx.moveTo(lastP.x, lastP.y);\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n const len = Math.sqrt((p.x - lastP.x) * (p.x - lastP.x) + (p.y - lastP.y) * (p.y - lastP.y));\n if (currLength + len > drawLength) {\n const dx = ((p.x - lastP.x) * (drawLength - currLength)) / len;\n const dy = ((p.y - lastP.y) * (drawLength - currLength)) / len;\n ctx.lineTo(lastP.x + dx, lastP.y + dy);\n break;\n } else {\n ctx.lineTo(p.x, p.y);\n }\n lastP = p;\n currLength += len;\n }\n return false;\n }\n\n drawOffset(ctx: IContext2d, size: number | [number, number], x: number, y: number, offset: number) {\n if (isNumber(size)) {\n return rectSize(ctx, size + 2 * offset, x, y);\n }\n return rectSizeArray(ctx, [size[0] + 2 * offset, size[1] + 2 * offset], x, y);\n }\n}\n\nexport default new RectSymbol();\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type IBounds } from '@visactor/vutils';
2
- import type { IContext2d, ICustomPath2D, IGraphicAttribute, ISymbolClass } from '../../interface';
2
+ import type { IContext2d, ICustomPath2D, IGraphicAttribute, IPath2D, ISymbolClass } from '../../interface';
3
3
  export declare class CustomSymbolClass implements ISymbolClass {
4
4
  type: string;
5
5
  path: ICustomPath2D;
@@ -16,5 +16,6 @@ export declare class CustomSymbolClass implements ISymbolClass {
16
16
  drawOffset(ctx: IContext2d, size: number, x: number, y: number, offset: number, z?: number, cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void): boolean;
17
17
  draw(ctx: IContext2d, size: number, x: number, y: number, z?: number, cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void): boolean;
18
18
  protected parseSize(size: number | [number, number]): number;
19
+ drawWithClipRange(ctx: IPath2D, size: number, x: number, y: number, clipRange: number, z?: number, cb?: (p: ICustomPath2D, a: any) => void): boolean;
19
20
  bounds(size: number, bounds: IBounds): void;
20
21
  }
@@ -22,6 +22,11 @@ export class CustomSymbolClass {
22
22
  parseSize(size) {
23
23
  return isNumber(size) ? size : Math.min(size[0], size[1]);
24
24
  }
25
+ drawWithClipRange(ctx, size, x, y, clipRange, z, cb) {
26
+ return size = this.parseSize(size), this.isSvg ? !!this.svgCache && (this.svgCache.forEach((item => {
27
+ item.path.drawWithClipRange(ctx, size, x, y, clipRange), cb && cb(item.path, item.attribute);
28
+ })), !1) : (this.path.drawWithClipRange(ctx, size, x, y, clipRange), !1);
29
+ }
25
30
  bounds(size, bounds) {
26
31
  if (size = this.parseSize(size), this.isSvg) {
27
32
  if (!this.svgCache) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/builtin-symbol/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { isArray, type IBounds, AABBBounds, isNumber } from '@visactor/vutils';\nimport { renderCommandList } from '../../common/render-command-list';\nimport type { IContext2d, ICustomPath2D, IGraphicAttribute, ISymbolClass } from '../../interface';\n\nconst tempBounds = new AABBBounds();\nexport class CustomSymbolClass implements ISymbolClass {\n type: string;\n path: ICustomPath2D;\n pathStr: string = '';\n isSvg: boolean;\n svgCache?: { path: ICustomPath2D; attribute: Partial<IGraphicAttribute> }[];\n\n constructor(\n type: string,\n path: ICustomPath2D | { path: ICustomPath2D; attribute: Partial<IGraphicAttribute> }[],\n isSvg: boolean = false\n ) {\n this.type = type;\n if (isArray(path)) {\n this.svgCache = path;\n } else {\n this.path = path;\n }\n this.isSvg = isSvg;\n }\n\n drawOffset(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n offset: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void\n ) {\n size = this.parseSize(size);\n if (this.isSvg) {\n if (!this.svgCache) {\n return false;\n }\n this.svgCache.forEach(item => {\n ctx.beginPath();\n renderCommandList(item.path.commandList, ctx, x, y, size, size);\n cb && cb(item.path, item.attribute);\n });\n return false;\n }\n renderCommandList(this.path.commandList, ctx, x, y, size + offset, size + offset);\n return false;\n }\n\n draw(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void\n ) {\n size = this.parseSize(size);\n return this.drawOffset(ctx, size, x, y, 0, z, cb);\n }\n\n protected parseSize(size: number | [number, number]): number {\n return isNumber(size) ? size : Math.min(size[0], size[1]);\n }\n\n bounds(size: number, bounds: IBounds) {\n size = this.parseSize(size);\n if (this.isSvg) {\n if (!this.svgCache) {\n return;\n }\n bounds.clear();\n this.svgCache.forEach(({ path }) => {\n tempBounds.x1 = path.bounds.x1 * size;\n tempBounds.y1 = path.bounds.y1 * size;\n tempBounds.x2 = path.bounds.x2 * size;\n tempBounds.y2 = path.bounds.y2 * size;\n bounds.union(tempBounds);\n });\n return;\n }\n if (!this.path.bounds) {\n return;\n }\n bounds.x1 = this.path.bounds.x1 * size;\n bounds.y1 = this.path.bounds.y1 * size;\n bounds.x2 = this.path.bounds.x2 * size;\n bounds.y2 = this.path.bounds.y2 * size;\n }\n}\n\n// export function CustomSymbol(): ISymbolClass {\n\n// }\n"]}
1
+ {"version":3,"sources":["../src/graphic/builtin-symbol/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["import { isArray, type IBounds, AABBBounds, isNumber } from '@visactor/vutils';\nimport { renderCommandList } from '../../common/render-command-list';\nimport type { IContext2d, ICustomPath2D, IGraphicAttribute, IPath2D, ISymbolClass } from '../../interface';\n\nconst tempBounds = new AABBBounds();\nexport class CustomSymbolClass implements ISymbolClass {\n type: string;\n path: ICustomPath2D;\n pathStr: string = '';\n isSvg: boolean;\n svgCache?: { path: ICustomPath2D; attribute: Partial<IGraphicAttribute> }[];\n\n constructor(\n type: string,\n path: ICustomPath2D | { path: ICustomPath2D; attribute: Partial<IGraphicAttribute> }[],\n isSvg: boolean = false\n ) {\n this.type = type;\n if (isArray(path)) {\n this.svgCache = path;\n } else {\n this.path = path;\n }\n this.isSvg = isSvg;\n }\n\n drawOffset(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n offset: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void\n ) {\n size = this.parseSize(size);\n if (this.isSvg) {\n if (!this.svgCache) {\n return false;\n }\n this.svgCache.forEach(item => {\n ctx.beginPath();\n renderCommandList(item.path.commandList, ctx, x, y, size, size);\n cb && cb(item.path, item.attribute);\n });\n return false;\n }\n renderCommandList(this.path.commandList, ctx, x, y, size + offset, size + offset);\n return false;\n }\n\n draw(\n ctx: IContext2d,\n size: number,\n x: number,\n y: number,\n z?: number,\n cb?: (path: ICustomPath2D, attribute?: Record<string, any>) => void\n ) {\n size = this.parseSize(size);\n return this.drawOffset(ctx, size, x, y, 0, z, cb);\n }\n\n protected parseSize(size: number | [number, number]): number {\n return isNumber(size) ? size : Math.min(size[0], size[1]);\n }\n drawWithClipRange(\n ctx: IPath2D,\n size: number,\n x: number,\n y: number,\n clipRange: number,\n z?: number,\n cb?: (p: ICustomPath2D, a: any) => void\n ) {\n size = this.parseSize(size);\n if (this.isSvg) {\n if (!this.svgCache) {\n return false;\n }\n this.svgCache.forEach(item => {\n item.path.drawWithClipRange(ctx, size, x, y, clipRange);\n cb && cb(item.path, item.attribute);\n });\n return false;\n }\n this.path.drawWithClipRange(ctx, size, x, y, clipRange);\n // this.path.drawWithClipRange && this.path.drawWithClipRange(ctx, clipRange);\n // renderCommandList(this.path.commandList, ctx, x, y, size + offset, size + offset);\n return false;\n }\n\n bounds(size: number, bounds: IBounds) {\n size = this.parseSize(size);\n if (this.isSvg) {\n if (!this.svgCache) {\n return;\n }\n bounds.clear();\n this.svgCache.forEach(({ path }) => {\n tempBounds.x1 = path.bounds.x1 * size;\n tempBounds.y1 = path.bounds.y1 * size;\n tempBounds.x2 = path.bounds.x2 * size;\n tempBounds.y2 = path.bounds.y2 * size;\n bounds.union(tempBounds);\n });\n return;\n }\n if (!this.path.bounds) {\n return;\n }\n bounds.x1 = this.path.bounds.x1 * size;\n bounds.y1 = this.path.bounds.y1 * size;\n bounds.x2 = this.path.bounds.x2 * size;\n bounds.y2 = this.path.bounds.y2 * size;\n }\n}\n\n// export function CustomSymbol(): ISymbolClass {\n\n// }\n"]}
@@ -100,6 +100,9 @@ export const DefaultStyle = Object.assign(Object.assign(Object.assign(Object.ass
100
100
  forceBoundsHeight: void 0,
101
101
  opacity: 1,
102
102
  background: null,
103
+ autoAnimateTexture: !1,
104
+ textureRatio: 0,
105
+ textureOptions: null,
103
106
  backgroundOpacity: 1,
104
107
  backgroundCornerRadius: 0,
105
108
  texture: null,
@@ -108,7 +111,12 @@ export const DefaultStyle = Object.assign(Object.assign(Object.assign(Object.ass
108
111
  texturePadding: 2,
109
112
  backgroundMode: "no-repeat",
110
113
  backgroundFit: !0,
114
+ backgroundClip: !0,
115
+ backgroundScale: 1,
116
+ backgroundOffsetX: 0,
117
+ backgroundOffsetY: 0,
111
118
  blur: 0,
119
+ filter: "",
112
120
  cursor: null,
113
121
  html: null,
114
122
  react: null
@@ -203,7 +211,8 @@ export const DefaultGroupAttribute = Object.assign(Object.assign({}, DefaultAttr
203
211
  justifyContent: "flex-start",
204
212
  alignItems: "flex-start",
205
213
  alignContent: "flex-start",
206
- baseOpacity: 1
214
+ baseOpacity: 1,
215
+ cornerType: "round"
207
216
  });
208
217
 
209
218
  export const DefaultGlyphAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
@@ -227,6 +236,7 @@ export const DefaultLineAttribute = Object.assign(Object.assign(Object.assign({}
227
236
  export const DefaultPathAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
228
237
  path: new CustomPath2D,
229
238
  fillStrokeOrder: 1,
239
+ clipRange: 1,
230
240
  customPath: () => {
231
241
  Logger.getInstance().warn("空函数");
232
242
  }
@@ -244,7 +254,8 @@ export const DefaultRectAttribute = Object.assign(Object.assign({}, DefaultAttri
244
254
  x1: 0,
245
255
  y1: 0,
246
256
  strokeBoundsBuffer: 0,
247
- cornerRadius: 0
257
+ cornerRadius: 0,
258
+ cornerType: "round"
248
259
  });
249
260
 
250
261
  export const DefaultRect3dAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
@@ -253,13 +264,15 @@ export const DefaultRect3dAttribute = Object.assign(Object.assign({}, DefaultAtt
253
264
  x1: 0,
254
265
  y1: 0,
255
266
  cornerRadius: 0,
256
- length: 0
267
+ length: 0,
268
+ cornerType: "round"
257
269
  });
258
270
 
259
271
  export const DefaultSymbolAttribute = Object.assign(Object.assign({}, DefaultAttribute), {
260
272
  symbolType: "circle",
261
273
  size: 10,
262
- keepDirIn3d: !0
274
+ keepDirIn3d: !0,
275
+ clipRange: 1
263
276
  });
264
277
 
265
278
  export const DefaultTextAttribute = Object.assign(Object.assign(Object.assign({}, DefaultAttribute), DefaultTextStyle), {
@@ -269,6 +282,7 @@ export const DefaultTextAttribute = Object.assign(Object.assign(Object.assign({}
269
282
 
270
283
  export const DefaultRichTextAttribute = Object.assign(Object.assign(Object.assign({}, DefaultAttribute), DefaultTextStyle), {
271
284
  editable: !1,
285
+ editOptions: null,
272
286
  width: 300,
273
287
  height: 300,
274
288
  ellipsis: !0,
@@ -292,7 +306,8 @@ export const DefaultImageAttribute = Object.assign(Object.assign({
292
306
  height: 0
293
307
  }, DefaultAttribute), {
294
308
  fill: !0,
295
- cornerRadius: 0
309
+ cornerRadius: 0,
310
+ cornerType: "round"
296
311
  });
297
312
 
298
313
  export const DefaultRichTextIconAttribute = Object.assign(Object.assign({}, DefaultImageAttribute), {