@visactor/vrender-core 0.21.0-alpha.2 → 0.21.0-alpha.3

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 (174) hide show
  1. package/cjs/common/3d-interceptor.js +2 -1
  2. package/cjs/common/bounds-context.js +1 -2
  3. package/cjs/common/morphing-utils.js +1 -1
  4. package/cjs/common/path-svg.js +4 -4
  5. package/cjs/common/path-svg.js.map +1 -1
  6. package/cjs/common/polygon.js +2 -2
  7. package/cjs/common/rect-utils.js +1 -1
  8. package/cjs/common/render-area.js +1 -1
  9. package/cjs/common/render-command-list.js +2 -1
  10. package/cjs/common/render-curve.js +1 -1
  11. package/cjs/common/render-utils.js +1 -1
  12. package/cjs/common/seg-context.js +1 -1
  13. package/cjs/common/simplify.js +3 -4
  14. package/cjs/common/simplify.js.map +1 -1
  15. package/cjs/common/sort.js +1 -1
  16. package/cjs/common/split-path.js +1 -1
  17. package/cjs/common/store.js +1 -1
  18. package/cjs/common/text.js.map +1 -1
  19. package/cjs/core/application.js +1 -2
  20. package/cjs/core/camera.js +1 -1
  21. package/cjs/core/constants.js +1 -1
  22. package/cjs/core/contributions/textMeasure/AtextMeasure.d.ts +55 -4
  23. package/cjs/core/contributions/textMeasure/AtextMeasure.js +105 -18
  24. package/cjs/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
  25. package/cjs/core/contributions/textMeasure/layout.d.ts +0 -1
  26. package/cjs/core/contributions/textMeasure/layout.js +20 -30
  27. package/cjs/core/contributions/textMeasure/layout.js.map +1 -1
  28. package/cjs/core/core-modules.js +1 -1
  29. package/cjs/core/global-module.js +0 -2
  30. package/cjs/core/global.js +1 -1
  31. package/cjs/core/graphic-utils.js +1 -1
  32. package/cjs/core/index.js +1 -1
  33. package/cjs/core/layer-service.js +1 -1
  34. package/cjs/core/layer.js +1 -1
  35. package/cjs/core/light.js +1 -1
  36. package/cjs/core/stage.d.ts +3 -0
  37. package/cjs/core/stage.js +12 -3
  38. package/cjs/core/stage.js.map +1 -1
  39. package/cjs/core/window.js +4 -3
  40. package/cjs/core/window.js.map +1 -1
  41. package/cjs/event/event-manager.d.ts +1 -0
  42. package/cjs/event/event-manager.js +1 -1
  43. package/cjs/event/event-manager.js.map +1 -1
  44. package/cjs/event/event-system.js +2 -1
  45. package/cjs/event/event-system.js.map +1 -1
  46. package/cjs/graphic/config.js +3 -0
  47. package/cjs/graphic/config.js.map +1 -1
  48. package/cjs/graphic/text.d.ts +10 -11
  49. package/cjs/graphic/text.js +91 -174
  50. package/cjs/graphic/text.js.map +1 -1
  51. package/cjs/graphic/text2.d.ts +81 -0
  52. package/cjs/graphic/text2.js +288 -0
  53. package/cjs/graphic/text2.js.map +1 -0
  54. package/cjs/graphic/wrap-text.js +12 -4
  55. package/cjs/graphic/wrap-text.js.map +1 -1
  56. package/cjs/interface/graphic/text.d.ts +3 -3
  57. package/cjs/interface/graphic/text.js.map +1 -1
  58. package/cjs/interface/graphic.d.ts +1 -0
  59. package/cjs/interface/graphic.js.map +1 -1
  60. package/cjs/interface/stage.d.ts +1 -0
  61. package/cjs/interface/stage.js.map +1 -1
  62. package/cjs/interface/text.d.ts +6 -1
  63. package/cjs/interface/text.js.map +1 -1
  64. package/cjs/plugins/builtin-plugin/auto-refresh-plugin.d.ts +16 -0
  65. package/cjs/plugins/builtin-plugin/auto-refresh-plugin.js +48 -0
  66. package/cjs/plugins/builtin-plugin/auto-refresh-plugin.js.map +1 -0
  67. package/cjs/render/contributions/render/arc-render.js +30 -18
  68. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  69. package/cjs/render/contributions/render/area-render.js +40 -36
  70. package/cjs/render/contributions/render/area-render.js.map +1 -1
  71. package/cjs/render/contributions/render/circle-render.js +10 -5
  72. package/cjs/render/contributions/render/circle-render.js.map +1 -1
  73. package/cjs/render/contributions/render/group-render.js +10 -5
  74. package/cjs/render/contributions/render/group-render.js.map +1 -1
  75. package/cjs/render/contributions/render/image-render.js +26 -22
  76. package/cjs/render/contributions/render/image-render.js.map +1 -1
  77. package/cjs/render/contributions/render/path-render.js +10 -5
  78. package/cjs/render/contributions/render/path-render.js.map +1 -1
  79. package/cjs/render/contributions/render/polygon-render.js +10 -5
  80. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  81. package/cjs/render/contributions/render/rect-render.js +10 -5
  82. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  83. package/cjs/render/contributions/render/symbol-render.js +18 -8
  84. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  85. package/cjs/render/contributions/render/text-render.js +1 -23
  86. package/cjs/render/contributions/render/text-render.js.map +1 -1
  87. package/dist/index.es.js +804 -710
  88. package/es/common/3d-interceptor.js +2 -1
  89. package/es/common/bounds-context.js +1 -2
  90. package/es/common/morphing-utils.js +1 -1
  91. package/es/common/path-svg.js +4 -4
  92. package/es/common/path-svg.js.map +1 -1
  93. package/es/common/polygon.js +1 -1
  94. package/es/common/rect-utils.js +1 -1
  95. package/es/common/render-area.js +1 -1
  96. package/es/common/render-command-list.js +2 -1
  97. package/es/common/render-curve.js +1 -1
  98. package/es/common/render-utils.js +1 -1
  99. package/es/common/seg-context.js +1 -1
  100. package/es/common/simplify.js +3 -4
  101. package/es/common/simplify.js.map +1 -1
  102. package/es/common/sort.js +1 -1
  103. package/es/common/split-path.js +1 -1
  104. package/es/common/store.js +1 -1
  105. package/es/common/text.js.map +1 -1
  106. package/es/core/application.js +1 -2
  107. package/es/core/camera.js +1 -1
  108. package/es/core/constants.js +1 -1
  109. package/es/core/contributions/textMeasure/AtextMeasure.d.ts +55 -4
  110. package/es/core/contributions/textMeasure/AtextMeasure.js +106 -17
  111. package/es/core/contributions/textMeasure/AtextMeasure.js.map +1 -1
  112. package/es/core/contributions/textMeasure/layout.d.ts +0 -1
  113. package/es/core/contributions/textMeasure/layout.js +20 -30
  114. package/es/core/contributions/textMeasure/layout.js.map +1 -1
  115. package/es/core/core-modules.js +1 -1
  116. package/es/core/global-module.js +0 -2
  117. package/es/core/global.js +1 -1
  118. package/es/core/graphic-utils.js +1 -1
  119. package/es/core/index.js +1 -1
  120. package/es/core/layer-service.js +1 -1
  121. package/es/core/layer.js +1 -1
  122. package/es/core/light.js +1 -1
  123. package/es/core/stage.d.ts +3 -0
  124. package/es/core/stage.js +13 -2
  125. package/es/core/stage.js.map +1 -1
  126. package/es/core/window.js +4 -2
  127. package/es/core/window.js.map +1 -1
  128. package/es/event/event-manager.d.ts +1 -0
  129. package/es/event/event-manager.js +1 -1
  130. package/es/event/event-manager.js.map +1 -1
  131. package/es/event/event-system.js +2 -1
  132. package/es/event/event-system.js.map +1 -1
  133. package/es/graphic/config.js +3 -0
  134. package/es/graphic/config.js.map +1 -1
  135. package/es/graphic/text.d.ts +10 -11
  136. package/es/graphic/text.js +90 -169
  137. package/es/graphic/text.js.map +1 -1
  138. package/es/graphic/text2.d.ts +81 -0
  139. package/es/graphic/text2.js +293 -0
  140. package/es/graphic/text2.js.map +1 -0
  141. package/es/graphic/wrap-text.js +12 -4
  142. package/es/graphic/wrap-text.js.map +1 -1
  143. package/es/interface/graphic/text.d.ts +3 -3
  144. package/es/interface/graphic/text.js.map +1 -1
  145. package/es/interface/graphic.d.ts +1 -0
  146. package/es/interface/graphic.js.map +1 -1
  147. package/es/interface/stage.d.ts +1 -0
  148. package/es/interface/stage.js.map +1 -1
  149. package/es/interface/text.d.ts +6 -1
  150. package/es/interface/text.js.map +1 -1
  151. package/es/plugins/builtin-plugin/auto-refresh-plugin.d.ts +16 -0
  152. package/es/plugins/builtin-plugin/auto-refresh-plugin.js +41 -0
  153. package/es/plugins/builtin-plugin/auto-refresh-plugin.js.map +1 -0
  154. package/es/render/contributions/render/arc-render.js +30 -18
  155. package/es/render/contributions/render/arc-render.js.map +1 -1
  156. package/es/render/contributions/render/area-render.js +40 -36
  157. package/es/render/contributions/render/area-render.js.map +1 -1
  158. package/es/render/contributions/render/circle-render.js +10 -5
  159. package/es/render/contributions/render/circle-render.js.map +1 -1
  160. package/es/render/contributions/render/group-render.js +10 -5
  161. package/es/render/contributions/render/group-render.js.map +1 -1
  162. package/es/render/contributions/render/image-render.js +26 -22
  163. package/es/render/contributions/render/image-render.js.map +1 -1
  164. package/es/render/contributions/render/path-render.js +10 -5
  165. package/es/render/contributions/render/path-render.js.map +1 -1
  166. package/es/render/contributions/render/polygon-render.js +10 -5
  167. package/es/render/contributions/render/polygon-render.js.map +1 -1
  168. package/es/render/contributions/render/rect-render.js +10 -5
  169. package/es/render/contributions/render/rect-render.js.map +1 -1
  170. package/es/render/contributions/render/symbol-render.js +18 -8
  171. package/es/render/contributions/render/symbol-render.js.map +1 -1
  172. package/es/render/contributions/render/text-render.js +1 -23
  173. package/es/render/contributions/render/text-render.js.map +1 -1
  174. package/package.json +2 -2
@@ -43,4 +43,5 @@ export const draw3dItem = (context, graphic, callback, output) => {
43
43
  }));
44
44
  } else result = callback(isPie, is3d);
45
45
  return result;
46
- };
46
+ };
47
+ //# sourceMappingURL=3d-interceptor.js.map
@@ -49,5 +49,4 @@ export class BoundsContext {
49
49
  this.bounds.clear();
50
50
  }
51
51
  release(...params) {}
52
- }
53
- //# sourceMappingURL=bounds-context.js.map
52
+ }
@@ -284,4 +284,4 @@ export function bezierCurversToPath(bezierCurves) {
284
284
  }
285
285
  return path;
286
286
  }
287
- //# sourceMappingURL=morphing-utils.js.map
287
+ //# sourceMappingURL=morphing-utils.js.map
@@ -45,14 +45,14 @@ export function parseSvgPath(str) {
45
45
  for (let i = 0, len = coordsStrArr.length; i < len; i++) coordStr = coordsStrArr[i],
46
46
  coordNumber = parseFloat(coordStr), Number.isNaN(coordNumber) || currCommandData.push(coordNumber);
47
47
  if (standardCommandLen = commandLengths[commandChar], currCommandData.length - 1 > standardCommandLen) {
48
- let subCommand;
48
+ let subCommand, bestCommandChar = commandChar;
49
49
  for (let i = 1, len = currCommandData.length; i < len; i += standardCommandLen) {
50
- subCommand = [ commandChar ];
50
+ subCommand = [ bestCommandChar ];
51
51
  for (let j = i, subLen = i + standardCommandLen; j < subLen; j++) subCommand.push(currCommandData[j]);
52
- result.push(subCommand);
52
+ result.push(subCommand), "m" === bestCommandChar ? bestCommandChar = "l" : "M" === bestCommandChar && (bestCommandChar = "L");
53
53
  }
54
54
  } else result.push(currCommandData);
55
55
  } else result.push(currCommandData);
56
56
  return result;
57
57
  }
58
- //# sourceMappingURL=path-svg.js.map
58
+ //# sourceMappingURL=path-svg.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/path-svg.ts"],"names":[],"mappings":"AAmBA,MAAM,aAAa,GAAG,wDAAwD,CAAC;AAC/E,MAAM,cAAc,GAA2B;IAC7C,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,CAAC;IACL,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;CACL,CAAC;AAGF,IAAI,QAAgB,CAAC;AACrB,IAAI,SAAiB,CAAC;AACtB,IAAI,WAAiB,CAAC;AACtB,IAAI,QAAgB,CAAC;AACrB,IAAI,WAAmB,CAAC;AACxB,IAAI,kBAA0B,CAAC;AAC/B,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,EAAE,CAAC;KACX;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,EAAE,CAAC;KACX;IAED,IAAI,eAAoC,CAAC;IACzC,IAAI,YAAqC,CAAC;IAC1C,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAChD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC;QAEhC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7B,SAAS;SACV;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACvD,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3B,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;gBAC9B,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnC;SACF;QAGD,kBAAkB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,kBAAkB,EAAE;YAEnD,IAAI,UAA+B,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE;gBAC9E,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrC;gBACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACzB;SACF;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC9B;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","file":"path-svg.js","sourcesContent":["/**\n * 基于fabric.js https://github.com/fabricjs/fabric.js/blob/a709d3be8e5bbdf520ae385ff28bca17a9566d76/src/util/path.js\n * Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nconst rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/gi;\nconst commandLengths: Record<string, number> = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7\n};\n\nexport const enumCommandMap = {\n A: 0,\n AT: 1,\n C: 2,\n Z: 3,\n E: 4,\n L: 5,\n M: 6,\n Q: 7,\n R: 8\n};\n\ntype char = string;\nlet currPath: string;\nlet coordsStr: string;\nlet commandChar: char;\nlet coordStr: string;\nlet coordNumber: number;\nlet standardCommandLen: number;\nexport function parseSvgPath(str: string): Array<string | number>[] {\n if (!str) {\n return [];\n }\n // parse str到命令数组\n const paths = str.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n if (paths === null) {\n return [];\n }\n\n let currCommandData: (string | number)[];\n let coordsStrArr: RegExpMatchArray | null;\n const result: (string | number)[][] = [];\n for (let i = 0, len = paths.length; i < len; i++) {\n currPath = paths[i];\n coordsStr = currPath.slice(1);\n commandChar = currPath[0];\n currCommandData = [commandChar];\n\n coordsStrArr = coordsStr.match(rePathCommand);\n if (coordsStrArr === null) {\n result.push(currCommandData);\n continue;\n }\n\n // 转到number\n for (let i = 0, len = coordsStrArr.length; i < len; i++) {\n coordStr = coordsStrArr[i];\n coordNumber = parseFloat(coordStr);\n if (!Number.isNaN(coordNumber)) {\n currCommandData.push(coordNumber);\n }\n }\n\n // 当前命令的参数长度,svg可能会合并多个相同的命令\n standardCommandLen = commandLengths[commandChar];\n if (currCommandData.length - 1 > standardCommandLen) {\n // 如果命令长度超过默认长度,就拆分为多个命令\n let subCommand: (string | number)[];\n for (let i = 1, len = currCommandData.length; i < len; i += standardCommandLen) {\n subCommand = [commandChar];\n for (let j = i, subLen = i + standardCommandLen; j < subLen; j++) {\n subCommand.push(currCommandData[j]);\n }\n result.push(subCommand);\n }\n } else {\n result.push(currCommandData);\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/path-svg.ts"],"names":[],"mappings":"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","file":"path-svg.js","sourcesContent":["/**\n * 基于fabric.js https://github.com/fabricjs/fabric.js/blob/a709d3be8e5bbdf520ae385ff28bca17a9566d76/src/util/path.js\n * Copyright (c) 2008-2015 Printio (Juriy Zaytsev, Maxim Chernyak)\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\nconst rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/gi;\nconst commandLengths: Record<string, number> = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7\n};\n\nexport const enumCommandMap = {\n A: 0,\n AT: 1,\n C: 2,\n Z: 3,\n E: 4,\n L: 5,\n M: 6,\n Q: 7,\n R: 8\n};\n\ntype char = string;\nlet currPath: string;\nlet coordsStr: string;\nlet commandChar: char;\nlet coordStr: string;\nlet coordNumber: number;\nlet standardCommandLen: number;\nexport function parseSvgPath(str: string): Array<string | number>[] {\n if (!str) {\n return [];\n }\n // parse str到命令数组\n const paths = str.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n if (paths === null) {\n return [];\n }\n\n let currCommandData: (string | number)[];\n let coordsStrArr: RegExpMatchArray | null;\n const result: (string | number)[][] = [];\n for (let i = 0, len = paths.length; i < len; i++) {\n currPath = paths[i];\n coordsStr = currPath.slice(1);\n commandChar = currPath[0];\n currCommandData = [commandChar];\n\n coordsStrArr = coordsStr.match(rePathCommand);\n if (coordsStrArr === null) {\n result.push(currCommandData);\n continue;\n }\n\n // 转到number\n for (let i = 0, len = coordsStrArr.length; i < len; i++) {\n coordStr = coordsStrArr[i];\n coordNumber = parseFloat(coordStr);\n if (!Number.isNaN(coordNumber)) {\n currCommandData.push(coordNumber);\n }\n }\n\n // 当前命令的参数长度,svg可能会合并多个相同的命令\n standardCommandLen = commandLengths[commandChar];\n if (currCommandData.length - 1 > standardCommandLen) {\n // 如果命令长度超过默认长度,就拆分为多个命令\n let subCommand: (string | number)[];\n let bestCommandChar = commandChar;\n for (let i = 1, len = currCommandData.length; i < len; i += standardCommandLen) {\n subCommand = [bestCommandChar];\n for (let j = i, subLen = i + standardCommandLen; j < subLen; j++) {\n subCommand.push(currCommandData[j]);\n }\n result.push(subCommand);\n // 如果是一堆m命令,后续就转为l命令\n if (bestCommandChar === 'm') {\n bestCommandChar = 'l';\n } else if (bestCommandChar === 'M') {\n bestCommandChar = 'L';\n }\n }\n } else {\n result.push(currCommandData);\n }\n }\n\n return result;\n}\n"]}
@@ -36,4 +36,4 @@ function getProportionPoint(point, segment, length, dx, dy) {
36
36
  y: point.y - dy * factor
37
37
  };
38
38
  }
39
- //# sourceMappingURL=polygon.js.map
39
+ //# sourceMappingURL=polygon.js.map
@@ -17,4 +17,4 @@ export const normalizeRectAttributes = attribute => {
17
17
  height: height
18
18
  };
19
19
  };
20
- //# sourceMappingURL=rect-utils.js.map
20
+ //# sourceMappingURL=rect-utils.js.map
@@ -121,4 +121,4 @@ function drawAreaBlock(path, topList, bottomList, params) {
121
121
  }
122
122
  path.closePath();
123
123
  }
124
- //# sourceMappingURL=render-area.js.map
124
+ //# sourceMappingURL=render-area.js.map
@@ -5,4 +5,5 @@ export function renderCommandList(commandList, context, x = 0, y = 0, sx = 1, sy
5
5
  const command = commandList[i];
6
6
  commandFuncs[command[0]](command, context, x, y, sx, sy, z);
7
7
  }
8
- }
8
+ }
9
+ //# sourceMappingURL=render-command-list.js.map
@@ -93,4 +93,4 @@ export function drawIncrementalAreaSegments(path, lastSeg, segments, params) {
93
93
  path.closePath();
94
94
  }));
95
95
  }
96
- //# sourceMappingURL=render-curve.js.map
96
+ //# sourceMappingURL=render-curve.js.map
@@ -11,4 +11,4 @@ export function drawSegItem(ctx, curve, endPercent, params) {
11
11
  ctx.lineTo(offsetX + p.x, offsetY + p.y, offsetZ);
12
12
  }
13
13
  }
14
- //# sourceMappingURL=render-utils.js.map
14
+ //# sourceMappingURL=render-utils.js.map
@@ -91,4 +91,4 @@ export class ReflectSegContext extends SegContext {
91
91
  return super.clear();
92
92
  }
93
93
  }
94
- //# sourceMappingURL=seg-context.js.map
94
+ //# sourceMappingURL=seg-context.js.map
@@ -17,7 +17,7 @@ function simplifyDPStep(points, startIdx, endIdx, sqTolerance, simplified) {
17
17
  sqDistance = sqArea / sqLength, sqDistance > maxSqDist && (maxSqDist = sqDistance,
18
18
  nextIdx = i);
19
19
  maxSqDist > sqTolerance && (nextIdx - startIdx > 2 && simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified),
20
- simplified.push(points[nextIdx], points[nextIdx + 1]), endIdx - nextIdx > 2 && simplifyDPStep(points, nextIdx, endIdx, sqTolerance, simplified));
20
+ simplified.push(points[nextIdx], points[nextIdx + 1]), endIdx - nextIdx > 2 && simplifyDPStep(points, nextIdx + 1, endIdx, sqTolerance, simplified));
21
21
  }
22
22
 
23
23
  function simplifyDouglasPeucker(points, sqTolerance) {
@@ -28,7 +28,6 @@ function simplifyDouglasPeucker(points, sqTolerance) {
28
28
 
29
29
  export function flatten_simplify(points, tolerance, highestQuality) {
30
30
  if (points.length <= 10) return points;
31
- const sqTolerance = void 0 !== tolerance ? tolerance * tolerance : 1;
32
- return points = simplifyDouglasPeucker(points = highestQuality ? points : simplifyRadialDist(points, sqTolerance), sqTolerance);
31
+ return points = highestQuality ? points : simplifyRadialDist(points, void 0 !== tolerance ? tolerance * tolerance : 1);
33
32
  }
34
- //# sourceMappingURL=simplify.js.map
33
+ //# sourceMappingURL=simplify.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/simplify.ts"],"names":[],"mappings":"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","file":"simplify.js","sourcesContent":["/*\n 优化自simplify-js: https://github.com/mourner/simplify-js\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nimport type { IPointLike } from '@visactor/vutils';\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: IPointLike[], sqTolerance: number): IPointLike[] {\n let lastX = points[0].x;\n let lastY = points[0].y;\n let deltaX;\n let deltaY;\n const newPoints: IPointLike[] = [points[0]];\n for (let i = 1, len = points.length; i < len; i++) {\n deltaX = points[i].x - lastX;\n deltaY = points[i].y - lastY;\n if (deltaX * deltaX + deltaY * deltaY > sqTolerance) {\n lastX = points[i].x;\n lastY = points[i].y;\n newPoints.push(points[i]);\n }\n }\n if (points[points.length - 1].x !== lastX || points[points.length - 1].y !== lastY) {\n newPoints.push(points[points.length - 1]);\n }\n return newPoints;\n}\nfunction simplifyDPStep(\n points: IPointLike[],\n startIdx: number,\n endIdx: number,\n sqTolerance: number,\n simplified: IPointLike[]\n) {\n let maxSqDist = sqTolerance;\n let nextIdx = startIdx;\n const startX = points[startIdx].x;\n const startY = points[startIdx].y;\n const endX = points[endIdx].x;\n const endY = points[endIdx].y;\n const vecX2 = endX - startX;\n const vecY2 = endY - startY;\n const sqLength = vecX2 * vecX2 + vecY2 * vecY2;\n let area;\n let sqArea;\n let sqDistance;\n // 计算距离startIdx到endIdx最长的distance\n let vecX1;\n let vecY1;\n for (let i = startIdx + 1, len = endIdx - 1; i < len; i++) {\n vecX1 = points[i].x - startX;\n vecY1 = points[i].y - startY;\n // axb = x1y2 - x2y1\n area = vecX1 * vecY2 - vecX2 * vecY1;\n sqArea = area * area;\n sqDistance = sqArea / sqLength;\n if (sqDistance > maxSqDist) {\n maxSqDist = sqDistance;\n nextIdx = i;\n }\n }\n if (maxSqDist > sqTolerance) {\n if (nextIdx - startIdx > 2) {\n simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified);\n }\n simplified.push(points[nextIdx], points[nextIdx + 1]);\n if (endIdx - nextIdx > 2) {\n simplifyDPStep(points, nextIdx, endIdx, sqTolerance, simplified);\n }\n }\n}\n// simplification using Ramer-Douglas-Peucker algorithm\n// https://karthaus.nl/rdp/\nfunction simplifyDouglasPeucker(points: IPointLike[], sqTolerance: number): IPointLike[] {\n const lastIdx = points.length - 1;\n const simplified = [points[0]];\n simplifyDPStep(points, 0, lastIdx, sqTolerance, simplified);\n simplified.push(points[lastIdx]);\n return simplified;\n}\n// both algorithms combined for awesome performance\nexport function flatten_simplify(points: IPointLike[], tolerance: number, highestQuality: boolean): IPointLike[] {\n if (points.length <= 10) {\n return points;\n }\n const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n return points;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/simplify.ts"],"names":[],"mappings":"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","file":"simplify.js","sourcesContent":["/*\n 优化自simplify-js: https://github.com/mourner/simplify-js\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nimport type { IPointLike } from '@visactor/vutils';\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: IPointLike[], sqTolerance: number): IPointLike[] {\n let lastX = points[0].x;\n let lastY = points[0].y;\n let deltaX;\n let deltaY;\n const newPoints: IPointLike[] = [points[0]];\n for (let i = 1, len = points.length; i < len; i++) {\n deltaX = points[i].x - lastX;\n deltaY = points[i].y - lastY;\n if (deltaX * deltaX + deltaY * deltaY > sqTolerance) {\n lastX = points[i].x;\n lastY = points[i].y;\n newPoints.push(points[i]);\n }\n }\n if (points[points.length - 1].x !== lastX || points[points.length - 1].y !== lastY) {\n newPoints.push(points[points.length - 1]);\n }\n return newPoints;\n}\nfunction simplifyDPStep(\n points: IPointLike[],\n startIdx: number,\n endIdx: number,\n sqTolerance: number,\n simplified: IPointLike[]\n) {\n let maxSqDist = sqTolerance;\n let nextIdx = startIdx;\n const startX = points[startIdx].x;\n const startY = points[startIdx].y;\n const endX = points[endIdx].x;\n const endY = points[endIdx].y;\n const vecX2 = endX - startX;\n const vecY2 = endY - startY;\n const sqLength = vecX2 * vecX2 + vecY2 * vecY2;\n let area;\n let sqArea;\n let sqDistance;\n // 计算距离startIdx到endIdx最长的distance\n let vecX1;\n let vecY1;\n for (let i = startIdx + 1, len = endIdx - 1; i < len; i++) {\n vecX1 = points[i].x - startX;\n vecY1 = points[i].y - startY;\n // axb = x1y2 - x2y1\n area = vecX1 * vecY2 - vecX2 * vecY1;\n sqArea = area * area;\n sqDistance = sqArea / sqLength;\n if (sqDistance > maxSqDist) {\n maxSqDist = sqDistance;\n nextIdx = i;\n }\n }\n\n if (maxSqDist > sqTolerance) {\n if (nextIdx - startIdx > 2) {\n simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified);\n }\n simplified.push(points[nextIdx], points[nextIdx + 1]);\n if (endIdx - nextIdx > 2) {\n simplifyDPStep(points, nextIdx + 1, endIdx, sqTolerance, simplified);\n }\n }\n}\n// simplification using Ramer-Douglas-Peucker algorithm\n// https://karthaus.nl/rdp/\nfunction simplifyDouglasPeucker(points: IPointLike[], sqTolerance: number): IPointLike[] {\n const lastIdx = points.length - 1;\n const simplified = [points[0]];\n simplifyDPStep(points, 0, lastIdx, sqTolerance, simplified);\n simplified.push(points[lastIdx]);\n return simplified;\n}\n// both algorithms combined for awesome performance\nexport function flatten_simplify(points: IPointLike[], tolerance: number, highestQuality: boolean): IPointLike[] {\n if (points.length <= 10) {\n return points;\n }\n const sqTolerance = tolerance !== undefined ? tolerance * tolerance : 1;\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n // 暂时屏蔽 Douglas-Peucker 算法, 因为在极端情况下不会有点被删除, 导致性能问题\n // points = simplifyDouglasPeucker(points, sqTolerance);\n return points;\n}\n"]}
package/es/common/sort.js CHANGED
@@ -94,4 +94,4 @@ export function findNextGraphic(graphic, id, defaultZIndex, reverse = !1) {
94
94
  !1)), reverse);
95
95
  return result;
96
96
  }
97
- //# sourceMappingURL=sort.js.map
97
+ //# sourceMappingURL=sort.js.map
@@ -248,4 +248,4 @@ export const splitPath = (path, count) => {
248
248
  }
249
249
  return res;
250
250
  };
251
- //# sourceMappingURL=split-path.js.map
251
+ //# sourceMappingURL=split-path.js.map
@@ -1,2 +1,2 @@
1
1
  class StageStore {}
2
- //# sourceMappingURL=store.js.map
2
+ //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/text.ts"],"names":[],"mappings":"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","file":"text.js","sourcesContent":["// 存放一些公共方法,公共配置\n\nimport { isNil, isString, isValid, lowerCamelCaseToMiddle } from '@visactor/vutils';\nimport type { ITextGraphicAttribute, TextAlignType, TextBaselineType } from '../interface';\n\n// TODO: 更好的方案\n/**\n * 用于绘制的时候偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param h\n * @returns\n */\nexport function textDrawOffsetY(baseline: TextBaselineType, h: number): number {\n const offset =\n baseline === 'top'\n ? Math.ceil(0.79 * h)\n : baseline === 'middle'\n ? Math.round(0.3 * h)\n : baseline === 'bottom'\n ? Math.round(-0.21 * h)\n : 0;\n return offset;\n}\n\n/**\n * 用于绘制的时候偏移\n * @param textAlign\n * @param width\n * @returns\n */\nexport function textDrawOffsetX(textAlign: TextAlignType, width: number): number {\n if (textAlign === 'end' || textAlign === 'right') {\n return -width;\n } else if (textAlign === 'center') {\n return -width / 2;\n }\n return 0;\n}\n\n/**\n * 用于计算布局的偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param lineHeight\n * @returns\n */\nexport function textLayoutOffsetY(\n baseline: TextBaselineType,\n lineHeight: number,\n fontSize: number,\n buf: number = 0\n): number {\n if (baseline === 'middle') {\n return -lineHeight / 2;\n }\n if (baseline === 'top') {\n return 0;\n }\n if (baseline === 'bottom') {\n return buf - lineHeight;\n }\n if (!baseline || baseline === 'alphabetic') {\n if (!fontSize) {\n fontSize = lineHeight;\n }\n return -(lineHeight - fontSize) / 2 - 0.79 * fontSize;\n }\n return 0;\n}\n\nexport function textAttributesToStyle(attrs: ITextGraphicAttribute) {\n const stringTypes = ['textAlign', 'fontFamily', 'fontVariant', 'fontStyle', 'fontWeight'];\n const pxKeys = ['fontSize', 'lineHeight'];\n const style: any = {};\n const parsePxValue = (value: string | number) => {\n return /^\\d+(\\.\\d+)?$/.test(`${value}`) ? `${value}px` : `${value}`;\n };\n\n stringTypes.forEach(key => {\n if (attrs[key]) {\n style[lowerCamelCaseToMiddle(key)] = attrs[key];\n }\n });\n\n pxKeys.forEach(key => {\n const styleKey = lowerCamelCaseToMiddle(key);\n if (!isNil(attrs[key])) {\n style[styleKey] = parsePxValue(attrs[key]);\n }\n });\n\n if (isValid(attrs.maxLineWidth)) {\n style['max-width'] = parsePxValue(attrs.maxLineWidth);\n }\n\n if (attrs.underline) {\n style['text-decoration'] = 'underline';\n } else if (attrs.lineThrough) {\n style['text-decoration'] = 'line-through';\n }\n\n if (attrs.fill) {\n if (isString(attrs.fill)) {\n style.color = attrs.fill;\n }\n }\n\n return style;\n}\n"]}
1
+ {"version":3,"sources":["../src/common/text.ts"],"names":[],"mappings":"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","file":"text.js","sourcesContent":["// 存放一些公共方法,公共配置\n\nimport { isNil, isString, isValid, lowerCamelCaseToMiddle } from '@visactor/vutils';\nimport type { IText, ITextGraphicAttribute, TextAlignType, TextBaselineType } from '../interface';\n\n// TODO: 更好的方案\n/**\n * 用于绘制的时候偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param h\n * @returns\n */\nexport function textDrawOffsetY(baseline: TextBaselineType, h: number): number {\n const offset =\n baseline === 'top'\n ? Math.ceil(0.79 * h)\n : baseline === 'middle'\n ? Math.round(0.3 * h)\n : baseline === 'bottom'\n ? Math.round(-0.21 * h)\n : 0;\n return offset;\n}\n\n/**\n * 用于绘制的时候偏移\n * @param textAlign\n * @param width\n * @returns\n */\nexport function textDrawOffsetX(textAlign: TextAlignType, width: number): number {\n if (textAlign === 'end' || textAlign === 'right') {\n return -width;\n } else if (textAlign === 'center') {\n return -width / 2;\n }\n return 0;\n}\n\n/**\n * 用于计算布局的偏移,相对于xy的偏移\n * 经验值,来源于 https://github.com/vega/vega/blob/b45cf431cd6c0d0c0e1567f087f9b3b55bc236fa/packages/vega-scenegraph/src/util/text.js\n * @param baseline\n * @param lineHeight\n * @returns\n */\nexport function textLayoutOffsetY(\n baseline: TextBaselineType,\n lineHeight: number,\n fontSize: number,\n buf: number = 0\n): number {\n if (baseline === 'middle') {\n return -lineHeight / 2;\n }\n if (baseline === 'top') {\n return 0;\n }\n if (baseline === 'bottom') {\n return buf - lineHeight;\n }\n if (!baseline || baseline === 'alphabetic') {\n if (!fontSize) {\n fontSize = lineHeight;\n }\n return -(lineHeight - fontSize) / 2 - 0.79 * fontSize;\n }\n return 0;\n}\n\nexport function textAttributesToStyle(attrs: ITextGraphicAttribute) {\n const stringTypes = ['textAlign', 'fontFamily', 'fontVariant', 'fontStyle', 'fontWeight'];\n const pxKeys = ['fontSize', 'lineHeight'];\n const style: any = {};\n const parsePxValue = (value: string | number) => {\n return /^\\d+(\\.\\d+)?$/.test(`${value}`) ? `${value}px` : `${value}`;\n };\n\n stringTypes.forEach(key => {\n if ((attrs as any)[key]) {\n style[lowerCamelCaseToMiddle(key)] = (attrs as any)[key];\n }\n });\n\n pxKeys.forEach(key => {\n const styleKey = lowerCamelCaseToMiddle(key);\n if (!isNil((attrs as any)[key])) {\n style[styleKey] = parsePxValue((attrs as any)[key]);\n }\n });\n\n if (isValid(attrs.maxLineWidth)) {\n style['max-width'] = parsePxValue(attrs.maxLineWidth);\n }\n\n if (attrs.underline) {\n style['text-decoration'] = 'underline';\n } else if (attrs.lineThrough) {\n style['text-decoration'] = 'line-through';\n }\n\n if (attrs.fill) {\n if (isString(attrs.fill)) {\n style.color = attrs.fill;\n }\n }\n\n return style;\n}\n"]}
@@ -1,2 +1 @@
1
- export const ApplicationContribution = Symbol("ApplicationContribution");
2
- //# sourceMappingURL=application.js.map
1
+ export const ApplicationContribution = Symbol("ApplicationContribution");
package/es/core/camera.js CHANGED
@@ -66,4 +66,4 @@ export class OrthoCamera {
66
66
  export const registerOrthoCamera = () => {
67
67
  Factory.registerPlugin("OrthoCamera", OrthoCamera);
68
68
  };
69
- //# sourceMappingURL=camera.js.map
69
+ //# sourceMappingURL=camera.js.map
@@ -9,4 +9,4 @@ export const StaticLayerHandlerContribution = Symbol.for("StaticLayerHandlerCont
9
9
  export const DynamicLayerHandlerContribution = Symbol.for("DynamicLayerHandlerContribution");
10
10
 
11
11
  export const VirtualLayerHandlerContribution = Symbol.for("VirtualLayerHandlerContribution");
12
- //# sourceMappingURL=constants.js.map
12
+ //# sourceMappingURL=constants.js.map
@@ -6,13 +6,64 @@ export declare class ATextMeasure implements ITextMeasure {
6
6
  protected canvas?: ICanvas;
7
7
  protected context?: IContext2d | null;
8
8
  configure(service: IGraphicUtil, env: EnvType): void;
9
- measureTextWidth(text: string, options: TextOptionsType): number;
10
- estimate(text: string, { fontSize }: TextOptionsType): {
9
+ protected _measureTextWithoutAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean): {
10
+ width: number;
11
+ } | TextMetrics;
12
+ protected _measureTextWithAlignBaseline(text: string, options: TextOptionsType, compatible?: boolean): {
13
+ width: number;
14
+ } | TextMetrics;
15
+ protected compatibleMetrics(metrics: TextMetrics | {
16
+ width: number;
17
+ }, options: TextOptionsType): TextMetrics | {
18
+ width: number;
19
+ };
20
+ protected estimate(text: string, { fontSize }: TextOptionsType): {
11
21
  width: number;
12
22
  height: number;
13
23
  };
14
- measureTextPixelHeight(text: string, options: TextOptionsType): number;
15
- measureTextBoundHieght(text: string, options: TextOptionsType): number;
24
+ measureTextWidth(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
25
+ width: number;
26
+ }): number;
27
+ measureTextBoundsWidth(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
28
+ width: number;
29
+ }): number;
30
+ measureTextBoundsLeftRight(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
31
+ width: number;
32
+ }): {
33
+ left: any;
34
+ right: any;
35
+ };
36
+ measureTextPixelHeight(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
37
+ width: number;
38
+ }): number;
39
+ measureTextPixelADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
40
+ width: number;
41
+ }): {
42
+ ascent: any;
43
+ descent: any;
44
+ };
45
+ measureTextBoundHieght(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
46
+ width: number;
47
+ }): number;
48
+ measureTextBoundADscent(text: string, options: TextOptionsType, textMeasure?: TextMetrics | {
49
+ width: number;
50
+ }): {
51
+ ascent: any;
52
+ descent: any;
53
+ };
54
+ protected measureTextBoundADscentEstimate(options: TextOptionsType): {
55
+ ascent: number;
56
+ descent: number;
57
+ };
58
+ protected measureTextBoundLeftRightEstimate(options: TextOptionsType): {
59
+ left: number;
60
+ right: number;
61
+ };
62
+ measureTextPixelADscentAndWidth(text: string, options: TextOptionsType): {
63
+ width: number;
64
+ ascent: number;
65
+ descent: number;
66
+ };
16
67
  measureText(text: string, options: TextOptionsType): TextMetrics | {
17
68
  width: number;
18
69
  };
@@ -10,14 +10,33 @@ import { DefaultTextAttribute, DefaultTextStyle } from "../../../graphic/config"
10
10
 
11
11
  import { testLetter } from "../../../graphic/richtext/utils";
12
12
 
13
+ import { Logger } from "@visactor/vutils";
14
+
13
15
  let ATextMeasure = class {
14
16
  configure(service, env) {
15
17
  this.canvas = service.canvas, this.context = service.context, service.bindTextMeasure(this);
16
18
  }
17
- measureTextWidth(text, options) {
18
- if (!this.context) return this.estimate(text, options).width;
19
+ _measureTextWithoutAlignBaseline(text, options, compatible) {
19
20
  this.context.setTextStyleWithoutAlignBaseline(options);
20
- return this.context.measureText(text).width;
21
+ const metrics = this.context.measureText(text);
22
+ return compatible ? this.compatibleMetrics(metrics, options) : metrics;
23
+ }
24
+ _measureTextWithAlignBaseline(text, options, compatible) {
25
+ this.context.setTextStyle(options);
26
+ const metrics = this.context.measureText(text);
27
+ return compatible ? this.compatibleMetrics(metrics, options) : metrics;
28
+ }
29
+ compatibleMetrics(metrics, options) {
30
+ if (null == metrics.actualBoundingBoxAscent || null == metrics.actualBoundingBoxDescent || null == metrics.fontBoundingBoxAscent || null == metrics.fontBoundingBoxDescent) {
31
+ const {ascent: ascent, descent: descent} = this.measureTextBoundADscentEstimate(options);
32
+ metrics.actualBoundingBoxAscent = ascent, metrics.actualBoundingBoxDescent = descent,
33
+ metrics.fontBoundingBoxAscent = ascent, metrics.fontBoundingBoxDescent = descent;
34
+ }
35
+ if (null == metrics.actualBoundingBoxLeft || null == metrics.actualBoundingBoxRight) {
36
+ const {left: left, right: right} = this.measureTextBoundLeftRightEstimate(options);
37
+ metrics.actualBoundingBoxLeft = left, metrics.actualBoundingBoxRight = right;
38
+ }
39
+ return metrics;
21
40
  }
22
41
  estimate(text, {fontSize: fontSize = DefaultTextAttribute.fontSize}) {
23
42
  let eCharLen = 0, cCharLen = 0;
@@ -27,19 +46,81 @@ let ATextMeasure = class {
27
46
  height: fontSize
28
47
  };
29
48
  }
30
- measureTextPixelHeight(text, options) {
49
+ measureTextWidth(text, options, textMeasure) {
50
+ return this.context ? (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithoutAlignBaseline(text, options)).width : this.estimate(text, options).width;
51
+ }
52
+ measureTextBoundsWidth(text, options, textMeasure) {
53
+ return this.context ? (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithoutAlignBaseline(text, options)).width : this.estimate(text, options).width;
54
+ }
55
+ measureTextBoundsLeftRight(text, options, textMeasure) {
56
+ return this.context ? {
57
+ left: (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithAlignBaseline(text, options, !0)).actualBoundingBoxLeft,
58
+ right: textMeasure.actualBoundingBoxRight
59
+ } : this.measureTextBoundLeftRightEstimate(options);
60
+ }
61
+ measureTextPixelHeight(text, options, textMeasure) {
31
62
  var _a;
32
- if (!this.context) return null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize;
33
- this.context.setTextStyleWithoutAlignBaseline(options);
34
- const textMeasure = this.context.measureText(text);
35
- return Math.abs(textMeasure.actualBoundingBoxAscent - textMeasure.actualBoundingBoxDescent);
63
+ return this.context ? (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithoutAlignBaseline(text, options, !0),
64
+ Math.abs(textMeasure.actualBoundingBoxAscent - textMeasure.actualBoundingBoxDescent)) : null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize;
65
+ }
66
+ measureTextPixelADscent(text, options, textMeasure) {
67
+ return this.context ? {
68
+ ascent: (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithAlignBaseline(text, options, !0)).actualBoundingBoxAscent,
69
+ descent: textMeasure.actualBoundingBoxDescent
70
+ } : this.measureTextBoundADscentEstimate(options);
36
71
  }
37
- measureTextBoundHieght(text, options) {
72
+ measureTextBoundHieght(text, options, textMeasure) {
38
73
  var _a;
39
- if (!this.context) return null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize;
40
- this.context.setTextStyleWithoutAlignBaseline(options);
41
- const textMeasure = this.context.measureText(text);
42
- return Math.abs(textMeasure.fontBoundingBoxAscent - textMeasure.fontBoundingBoxDescent);
74
+ return this.context ? (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithoutAlignBaseline(text, options, !0),
75
+ Math.abs(textMeasure.fontBoundingBoxAscent - textMeasure.fontBoundingBoxDescent)) : null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize;
76
+ }
77
+ measureTextBoundADscent(text, options, textMeasure) {
78
+ return this.context ? {
79
+ ascent: (textMeasure = null != textMeasure ? textMeasure : this._measureTextWithAlignBaseline(text, options, !0)).fontBoundingBoxAscent,
80
+ descent: textMeasure.fontBoundingBoxDescent
81
+ } : this.measureTextBoundADscentEstimate(options);
82
+ }
83
+ measureTextBoundADscentEstimate(options) {
84
+ var _a;
85
+ const fontSize = null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize, {textBaseline: textBaseline} = options;
86
+ return "bottom" === textBaseline ? {
87
+ ascent: fontSize,
88
+ descent: 0
89
+ } : "middle" === textBaseline ? {
90
+ ascent: fontSize / 2,
91
+ descent: fontSize / 2
92
+ } : "alphabetic" === textBaseline ? {
93
+ ascent: .79 * fontSize,
94
+ descent: .21 * fontSize
95
+ } : {
96
+ ascent: 0,
97
+ descent: fontSize
98
+ };
99
+ }
100
+ measureTextBoundLeftRightEstimate(options) {
101
+ var _a;
102
+ const fontSize = null !== (_a = options.fontSize) && void 0 !== _a ? _a : DefaultTextStyle.fontSize, {textAlign: textAlign} = options;
103
+ return "center" === textAlign ? {
104
+ left: fontSize / 2,
105
+ right: fontSize / 2
106
+ } : "right" === textAlign || "end" === textAlign ? {
107
+ left: fontSize,
108
+ right: 0
109
+ } : {
110
+ left: 0,
111
+ right: fontSize
112
+ };
113
+ }
114
+ measureTextPixelADscentAndWidth(text, options) {
115
+ if (!this.context) return Object.assign(Object.assign({}, this.measureTextBoundADscentEstimate(options)), {
116
+ width: this.estimate(text, options).width
117
+ });
118
+ const out = this._measureTextWithoutAlignBaseline(text, options, !0);
119
+ return {
120
+ ascent: out.actualBoundingBoxAscent,
121
+ descent: out.actualBoundingBoxDescent,
122
+ width: out.width
123
+ };
43
124
  }
44
125
  measureText(text, options) {
45
126
  return this.context ? (this.context.setTextStyleWithoutAlignBaseline(options), this.context.measureText(text)) : this.estimate(text, options);
@@ -117,6 +198,14 @@ let ATextMeasure = class {
117
198
  return data;
118
199
  }
119
200
  _clipTextEnd(text, options, width, leftIdx, rightIdx) {
201
+ if (leftIdx === rightIdx) {
202
+ Logger.getInstance().warn(`【_clipTextEnd】不应该走到这里${text}, ${leftIdx}, ${rightIdx}`);
203
+ const subText = text.substring(0, rightIdx + 1);
204
+ return {
205
+ str: subText,
206
+ width: this.measureTextWidth(subText, options)
207
+ };
208
+ }
120
209
  const middleIdx = Math.floor((leftIdx + rightIdx) / 2), subText = text.substring(0, middleIdx + 1), strWidth = this.measureTextWidth(subText, options);
121
210
  let length;
122
211
  if (strWidth > width) {
@@ -147,25 +236,25 @@ let ATextMeasure = class {
147
236
  };
148
237
  }
149
238
  _clipTextStart(text, options, width, leftIdx, rightIdx) {
150
- const middleIdx = Math.ceil((leftIdx + rightIdx) / 2), subText = text.substring(middleIdx - 1, text.length - 1), strWidth = this.measureTextWidth(subText, options);
239
+ const middleIdx = Math.ceil((leftIdx + rightIdx) / 2), subText = text.substring(middleIdx - 1, text.length), strWidth = this.measureTextWidth(subText, options);
151
240
  let length;
152
241
  if (strWidth > width) {
153
242
  if (subText.length <= 1) return {
154
243
  str: "",
155
244
  width: 0
156
245
  };
157
- const str = text.substring(middleIdx, text.length - 1);
246
+ const str = text.substring(middleIdx, text.length);
158
247
  return length = this.measureTextWidth(str, options), length <= width ? {
159
248
  str: str,
160
249
  width: length
161
- } : this._clipTextStart(text, options, width, middleIdx, text.length - 1);
250
+ } : this._clipTextStart(text, options, width, middleIdx, text.length);
162
251
  }
163
252
  if (strWidth < width) {
164
253
  if (middleIdx <= 0) return {
165
254
  str: text,
166
255
  width: this.measureTextWidth(text, options)
167
256
  };
168
- const str = text.substring(middleIdx - 2, text.length - 1);
257
+ const str = text.substring(middleIdx - 2, text.length);
169
258
  return length = this.measureTextWidth(str, options), length >= width ? {
170
259
  str: subText,
171
260
  width: strWidth