@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
@@ -47,4 +47,5 @@ const vutils_1 = require("@visactor/vutils"), constants_1 = require("../graphic/
47
47
  return result;
48
48
  };
49
49
 
50
- exports.draw3dItem = draw3dItem;
50
+ exports.draw3dItem = draw3dItem;
51
+ //# sourceMappingURL=3d-interceptor.js.map
@@ -56,5 +56,4 @@ class BoundsContext {
56
56
  release(...params) {}
57
57
  }
58
58
 
59
- exports.BoundsContext = BoundsContext;
60
- //# sourceMappingURL=bounds-context.js.map
59
+ exports.BoundsContext = BoundsContext;
@@ -292,4 +292,4 @@ function bezierCurversToPath(bezierCurves) {
292
292
 
293
293
  exports.pathToBezierCurves = pathToBezierCurves, exports.applyTransformOnBezierCurves = applyTransformOnBezierCurves,
294
294
  exports.bezierCurversToPath = bezierCurversToPath;
295
- //# sourceMappingURL=morphing-utils.js.map
295
+ //# sourceMappingURL=morphing-utils.js.map
@@ -39,11 +39,11 @@ function parseSvgPath(str) {
39
39
  for (let i = 0, len = coordsStrArr.length; i < len; i++) coordStr = coordsStrArr[i],
40
40
  coordNumber = parseFloat(coordStr), Number.isNaN(coordNumber) || currCommandData.push(coordNumber);
41
41
  if (standardCommandLen = commandLengths[commandChar], currCommandData.length - 1 > standardCommandLen) {
42
- let subCommand;
42
+ let subCommand, bestCommandChar = commandChar;
43
43
  for (let i = 1, len = currCommandData.length; i < len; i += standardCommandLen) {
44
- subCommand = [ commandChar ];
44
+ subCommand = [ bestCommandChar ];
45
45
  for (let j = i, subLen = i + standardCommandLen; j < subLen; j++) subCommand.push(currCommandData[j]);
46
- result.push(subCommand);
46
+ result.push(subCommand), "m" === bestCommandChar ? bestCommandChar = "l" : "M" === bestCommandChar && (bestCommandChar = "L");
47
47
  }
48
48
  } else result.push(currCommandData);
49
49
  } else result.push(currCommandData);
@@ -61,4 +61,4 @@ exports.enumCommandMap = {
61
61
  Q: 7,
62
62
  R: 8
63
63
  }, exports.parseSvgPath = parseSvgPath;
64
- //# sourceMappingURL=path-svg.js.map
64
+ //# sourceMappingURL=path-svg.js.map
@@ -1 +1 @@
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 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"]}
@@ -39,8 +39,8 @@ function getProportionPoint(point, segment, length, dx, dy) {
39
39
  };
40
40
  }
41
41
 
42
- //# sourceMappingURL=polygon.js.map
43
42
  Object.defineProperty(exports, "__esModule", {
44
43
  value: !0
45
44
  }), exports.drawRoundedPolygon = exports.drawPolygon = void 0, exports.drawPolygon = drawPolygon,
46
- exports.drawRoundedPolygon = drawRoundedPolygon;
45
+ exports.drawRoundedPolygon = drawRoundedPolygon;
46
+ //# sourceMappingURL=polygon.js.map
@@ -24,4 +24,4 @@ const vutils_1 = require("@visactor/vutils"), normalizeRectAttributes = attribut
24
24
  };
25
25
 
26
26
  exports.normalizeRectAttributes = normalizeRectAttributes;
27
- //# sourceMappingURL=rect-utils.js.map
27
+ //# sourceMappingURL=rect-utils.js.map
@@ -121,5 +121,5 @@ function drawAreaBlock(path, topList, bottomList, params) {
121
121
  path.closePath();
122
122
  }
123
123
 
124
+ exports.drawAreaSegments = drawAreaSegments;
124
125
  //# sourceMappingURL=render-area.js.map
125
- exports.drawAreaSegments = drawAreaSegments;
@@ -13,4 +13,5 @@ function renderCommandList(commandList, context, x = 0, y = 0, sx = 1, sy = 1, z
13
13
  }
14
14
  }
15
15
 
16
- exports.renderCommandList = renderCommandList;
16
+ exports.renderCommandList = renderCommandList;
17
+ //# sourceMappingURL=render-command-list.js.map
@@ -99,4 +99,4 @@ function drawIncrementalAreaSegments(path, lastSeg, segments, params) {
99
99
 
100
100
  exports.drawSegments = drawSegments, exports.drawIncrementalSegments = drawIncrementalSegments,
101
101
  exports.drawIncrementalAreaSegments = drawIncrementalAreaSegments;
102
- //# sourceMappingURL=render-curve.js.map
102
+ //# sourceMappingURL=render-curve.js.map
@@ -19,4 +19,4 @@ function drawSegItem(ctx, curve, endPercent, params) {
19
19
  }
20
20
 
21
21
  exports.drawSegItem = drawSegItem;
22
- //# sourceMappingURL=render-utils.js.map
22
+ //# sourceMappingURL=render-utils.js.map
@@ -95,4 +95,4 @@ class ReflectSegContext extends SegContext {
95
95
  }
96
96
 
97
97
  exports.ReflectSegContext = ReflectSegContext;
98
- //# sourceMappingURL=seg-context.js.map
98
+ //# sourceMappingURL=seg-context.js.map
@@ -19,7 +19,7 @@ function simplifyDPStep(points, startIdx, endIdx, sqTolerance, simplified) {
19
19
  sqDistance = sqArea / sqLength, sqDistance > maxSqDist && (maxSqDist = sqDistance,
20
20
  nextIdx = i);
21
21
  maxSqDist > sqTolerance && (nextIdx - startIdx > 2 && simplifyDPStep(points, startIdx, nextIdx, sqTolerance, simplified),
22
- simplified.push(points[nextIdx], points[nextIdx + 1]), endIdx - nextIdx > 2 && simplifyDPStep(points, nextIdx, endIdx, sqTolerance, simplified));
22
+ simplified.push(points[nextIdx], points[nextIdx + 1]), endIdx - nextIdx > 2 && simplifyDPStep(points, nextIdx + 1, endIdx, sqTolerance, simplified));
23
23
  }
24
24
 
25
25
  function simplifyDouglasPeucker(points, sqTolerance) {
@@ -30,11 +30,10 @@ function simplifyDouglasPeucker(points, sqTolerance) {
30
30
 
31
31
  function flatten_simplify(points, tolerance, highestQuality) {
32
32
  if (points.length <= 10) return points;
33
- const sqTolerance = void 0 !== tolerance ? tolerance * tolerance : 1;
34
- return points = simplifyDouglasPeucker(points = highestQuality ? points : simplifyRadialDist(points, sqTolerance), sqTolerance);
33
+ return points = highestQuality ? points : simplifyRadialDist(points, void 0 !== tolerance ? tolerance * tolerance : 1);
35
34
  }
36
35
 
37
36
  Object.defineProperty(exports, "__esModule", {
38
37
  value: !0
39
38
  }), exports.flatten_simplify = void 0, exports.flatten_simplify = flatten_simplify;
40
- //# sourceMappingURL=simplify.js.map
39
+ //# 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"]}
@@ -101,4 +101,4 @@ Object.defineProperty(exports, "__esModule", {
101
101
  value: !0
102
102
  }), exports.findNextGraphic = exports.foreachAsync = exports.foreach = void 0, exports.foreach = foreach,
103
103
  exports.foreachAsync = foreachAsync, exports.findNextGraphic = findNextGraphic;
104
- //# sourceMappingURL=sort.js.map
104
+ //# sourceMappingURL=sort.js.map
@@ -269,4 +269,4 @@ const splitPath = (path, count) => {
269
269
  };
270
270
 
271
271
  exports.splitPath = splitPath;
272
- //# sourceMappingURL=split-path.js.map
272
+ //# 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":";;;AAEA,6CAAoF;AAWpF,SAAgB,eAAe,CAAC,QAA0B,EAAE,CAAS;IACnE,MAAM,MAAM,GACV,QAAQ,KAAK,KAAK;QAChB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,QAAQ,KAAK,QAAQ;YACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YACrB,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC,CAAC;IACR,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,0CAUC;AAQD,SAAgB,eAAe,CAAC,SAAwB,EAAE,KAAa;IACrE,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,EAAE;QAChD,OAAO,CAAC,KAAK,CAAC;KACf;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;QACjC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;KACnB;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAPD,0CAOC;AASD,SAAgB,iBAAiB,CAC/B,QAA0B,EAC1B,UAAkB,EAClB,QAAgB,EAChB,MAAc,CAAC;IAEf,IAAI,QAAQ,KAAK,QAAQ,EAAE;QACzB,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;KACxB;IACD,IAAI,QAAQ,KAAK,KAAK,EAAE;QACtB,OAAO,CAAC,CAAC;KACV;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE;QACzB,OAAO,GAAG,GAAG,UAAU,CAAC;KACzB;IACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE;QAC1C,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,GAAG,UAAU,CAAC;SACvB;QACD,OAAO,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC;KACvD;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAtBD,8CAsBC;AAED,SAAgB,qBAAqB,CAAC,KAA4B;IAChE,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,EAAE;QAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;IACtE,CAAC,CAAC;IAEF,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;YACd,KAAK,CAAC,IAAA,+BAAsB,EAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;SACjD;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAA,+BAAsB,EAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAA,cAAK,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;YACtB,KAAK,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,IAAA,gBAAO,EAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QAC/B,KAAK,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KACvD;IAED,IAAI,KAAK,CAAC,SAAS,EAAE;QACnB,KAAK,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC;KACxC;SAAM,IAAI,KAAK,CAAC,WAAW,EAAE;QAC5B,KAAK,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC;KAC3C;IAED,IAAI,KAAK,CAAC,IAAI,EAAE;QACd,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;SAC1B;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAtCD,sDAsCC","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"]}
@@ -2,5 +2,4 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.ApplicationContribution = void 0, exports.ApplicationContribution = Symbol("ApplicationContribution");
6
- //# sourceMappingURL=application.js.map
5
+ }), exports.ApplicationContribution = void 0, exports.ApplicationContribution = Symbol("ApplicationContribution");
@@ -71,4 +71,4 @@ const registerOrthoCamera = () => {
71
71
  };
72
72
 
73
73
  exports.registerOrthoCamera = registerOrthoCamera;
74
- //# sourceMappingURL=camera.js.map
74
+ //# sourceMappingURL=camera.js.map
@@ -7,4 +7,4 @@ exports.TransformUtil = Symbol.for("TransformUtil"), exports.GraphicUtil = Symbo
7
7
  exports.LayerService = Symbol.for("LayerService"), exports.StaticLayerHandlerContribution = Symbol.for("StaticLayerHandlerContribution"),
8
8
  exports.DynamicLayerHandlerContribution = Symbol.for("DynamicLayerHandlerContribution"),
9
9
  exports.VirtualLayerHandlerContribution = Symbol.for("VirtualLayerHandlerContribution");
10
- //# sourceMappingURL=constants.js.map
10
+ //# 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,16 +10,33 @@ Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
11
  }), exports.ATextMeasure = void 0;
12
12
 
13
- const inversify_lite_1 = require("../../../common/inversify-lite"), config_1 = require("../../../graphic/config"), utils_1 = require("../../../graphic/richtext/utils");
13
+ const inversify_lite_1 = require("../../../common/inversify-lite"), config_1 = require("../../../graphic/config"), utils_1 = require("../../../graphic/richtext/utils"), vutils_1 = require("@visactor/vutils");
14
14
 
15
15
  let ATextMeasure = class {
16
16
  configure(service, env) {
17
17
  this.canvas = service.canvas, this.context = service.context, service.bindTextMeasure(this);
18
18
  }
19
- measureTextWidth(text, options) {
20
- if (!this.context) return this.estimate(text, options).width;
19
+ _measureTextWithoutAlignBaseline(text, options, compatible) {
21
20
  this.context.setTextStyleWithoutAlignBaseline(options);
22
- 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;
23
40
  }
24
41
  estimate(text, {fontSize: fontSize = config_1.DefaultTextAttribute.fontSize}) {
25
42
  let eCharLen = 0, cCharLen = 0;
@@ -29,19 +46,81 @@ let ATextMeasure = class {
29
46
  height: fontSize
30
47
  };
31
48
  }
32
- 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) {
33
62
  var _a;
34
- if (!this.context) return null !== (_a = options.fontSize) && void 0 !== _a ? _a : config_1.DefaultTextStyle.fontSize;
35
- this.context.setTextStyleWithoutAlignBaseline(options);
36
- const textMeasure = this.context.measureText(text);
37
- 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 : config_1.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);
38
71
  }
39
- measureTextBoundHieght(text, options) {
72
+ measureTextBoundHieght(text, options, textMeasure) {
40
73
  var _a;
41
- if (!this.context) return null !== (_a = options.fontSize) && void 0 !== _a ? _a : config_1.DefaultTextStyle.fontSize;
42
- this.context.setTextStyleWithoutAlignBaseline(options);
43
- const textMeasure = this.context.measureText(text);
44
- 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 : config_1.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 : config_1.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 : config_1.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
+ };
45
124
  }
46
125
  measureText(text, options) {
47
126
  return this.context ? (this.context.setTextStyleWithoutAlignBaseline(options), this.context.measureText(text)) : this.estimate(text, options);
@@ -119,6 +198,14 @@ let ATextMeasure = class {
119
198
  return data;
120
199
  }
121
200
  _clipTextEnd(text, options, width, leftIdx, rightIdx) {
201
+ if (leftIdx === rightIdx) {
202
+ vutils_1.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
+ }
122
209
  const middleIdx = Math.floor((leftIdx + rightIdx) / 2), subText = text.substring(0, middleIdx + 1), strWidth = this.measureTextWidth(subText, options);
123
210
  let length;
124
211
  if (strWidth > width) {
@@ -149,25 +236,25 @@ let ATextMeasure = class {
149
236
  };
150
237
  }
151
238
  _clipTextStart(text, options, width, leftIdx, rightIdx) {
152
- 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);
153
240
  let length;
154
241
  if (strWidth > width) {
155
242
  if (subText.length <= 1) return {
156
243
  str: "",
157
244
  width: 0
158
245
  };
159
- const str = text.substring(middleIdx, text.length - 1);
246
+ const str = text.substring(middleIdx, text.length);
160
247
  return length = this.measureTextWidth(str, options), length <= width ? {
161
248
  str: str,
162
249
  width: length
163
- } : this._clipTextStart(text, options, width, middleIdx, text.length - 1);
250
+ } : this._clipTextStart(text, options, width, middleIdx, text.length);
164
251
  }
165
252
  if (strWidth < width) {
166
253
  if (middleIdx <= 0) return {
167
254
  str: text,
168
255
  width: this.measureTextWidth(text, options)
169
256
  };
170
- const str = text.substring(middleIdx - 2, text.length - 1);
257
+ const str = text.substring(middleIdx - 2, text.length);
171
258
  return length = this.measureTextWidth(str, options), length >= width ? {
172
259
  str: subText,
173
260
  width: strWidth