@lightningjs/renderer 2.19.1 → 2.20.0

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 (250) hide show
  1. package/dist/src/core/lib/WebGlContextWrapper.d.ts +14 -0
  2. package/dist/src/core/lib/WebGlContextWrapper.js +35 -0
  3. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  4. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  5. package/dist/src/core/lib/textureCompression.js +301 -65
  6. package/dist/src/core/lib/textureCompression.js.map +1 -1
  7. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +4 -0
  8. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +14 -11
  9. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  10. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  11. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +43 -8
  12. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  13. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  14. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +18 -49
  15. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  16. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +0 -2
  17. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  18. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  19. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  20. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  21. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  22. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  23. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  24. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  25. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  26. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  27. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  28. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  29. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  30. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  31. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  32. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  33. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  34. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +1 -1
  35. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +1 -1
  36. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  37. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  38. package/dist/src/core/textures/Texture.d.ts +12 -5
  39. package/dist/src/core/textures/Texture.js.map +1 -1
  40. package/dist/src/main-api/Inspector.js +9 -5
  41. package/dist/src/main-api/Inspector.js.map +1 -1
  42. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  43. package/package.json +1 -1
  44. package/src/core/lib/WebGlContextWrapper.ts +49 -0
  45. package/src/core/lib/textureCompression.ts +416 -75
  46. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +16 -14
  47. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +1 -1
  48. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +44 -11
  49. package/src/core/renderers/webgl/WebGlCoreShader.ts +27 -75
  50. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -2
  51. package/src/core/renderers/webgl/shaders/DefaultShader.ts +3 -6
  52. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -11
  53. package/src/core/renderers/webgl/shaders/DynamicShader.ts +5 -10
  54. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +5 -10
  55. package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -12
  56. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +1 -1
  57. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +1 -1
  58. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +1 -1
  59. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +1 -1
  60. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +5 -5
  61. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +1 -1
  62. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +1 -1
  63. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +1 -1
  64. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +1 -1
  65. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +5 -5
  66. package/src/core/textures/Texture.ts +13 -6
  67. package/src/main-api/Inspector.ts +9 -5
  68. package/dist/exports/canvas-shaders.d.ts +0 -10
  69. package/dist/exports/canvas-shaders.js +0 -27
  70. package/dist/exports/canvas-shaders.js.map +0 -1
  71. package/dist/exports/webgl-shaders.d.ts +0 -11
  72. package/dist/exports/webgl-shaders.js +0 -28
  73. package/dist/exports/webgl-shaders.js.map +0 -1
  74. package/dist/src/core/lib/colorCache.d.ts +0 -1
  75. package/dist/src/core/lib/colorCache.js +0 -19
  76. package/dist/src/core/lib/colorCache.js.map +0 -1
  77. package/dist/src/core/lib/colorParser.d.ts +0 -21
  78. package/dist/src/core/lib/colorParser.js +0 -72
  79. package/dist/src/core/lib/colorParser.js.map +0 -1
  80. package/dist/src/core/platforms/Platform.d.ts +0 -37
  81. package/dist/src/core/platforms/Platform.js +0 -22
  82. package/dist/src/core/platforms/Platform.js.map +0 -1
  83. package/dist/src/core/platforms/web/WebPlatform.d.ts +0 -9
  84. package/dist/src/core/platforms/web/WebPlatform.js +0 -84
  85. package/dist/src/core/platforms/web/WebPlatform.js.map +0 -1
  86. package/dist/src/core/renderers/CoreShaderNode.d.ts +0 -59
  87. package/dist/src/core/renderers/CoreShaderNode.js +0 -113
  88. package/dist/src/core/renderers/CoreShaderNode.js.map +0 -1
  89. package/dist/src/core/renderers/CoreShaderProgram.d.ts +0 -4
  90. package/dist/src/core/renderers/CoreShaderProgram.js +0 -20
  91. package/dist/src/core/renderers/CoreShaderProgram.js.map +0 -1
  92. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +0 -35
  93. package/dist/src/core/renderers/canvas/CanvasRenderer.js +0 -201
  94. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +0 -1
  95. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +0 -21
  96. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +0 -58
  97. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +0 -1
  98. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +0 -16
  99. package/dist/src/core/renderers/canvas/CanvasTexture.js +0 -125
  100. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +0 -1
  101. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +0 -12
  102. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +0 -57
  103. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +0 -1
  104. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +0 -22
  105. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +0 -67
  106. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +0 -1
  107. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +0 -56
  108. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -236
  109. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +0 -1
  110. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
  111. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -125
  112. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  113. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +0 -136
  114. package/dist/src/core/renderers/webgl/WebGlRenderer.js +0 -573
  115. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +0 -1
  116. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +0 -222
  117. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +0 -331
  118. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +0 -1
  119. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +0 -37
  120. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +0 -218
  121. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +0 -1
  122. package/dist/src/core/shaders/canvas/Border.d.ts +0 -9
  123. package/dist/src/core/shaders/canvas/Border.js +0 -57
  124. package/dist/src/core/shaders/canvas/Border.js.map +0 -1
  125. package/dist/src/core/shaders/canvas/HolePunch.d.ts +0 -7
  126. package/dist/src/core/shaders/canvas/HolePunch.js +0 -38
  127. package/dist/src/core/shaders/canvas/HolePunch.js.map +0 -1
  128. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +0 -10
  129. package/dist/src/core/shaders/canvas/LinearGradient.js +0 -48
  130. package/dist/src/core/shaders/canvas/LinearGradient.js.map +0 -1
  131. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +0 -11
  132. package/dist/src/core/shaders/canvas/RadialGradient.js +0 -70
  133. package/dist/src/core/shaders/canvas/RadialGradient.js.map +0 -1
  134. package/dist/src/core/shaders/canvas/Rounded.d.ts +0 -7
  135. package/dist/src/core/shaders/canvas/Rounded.js +0 -33
  136. package/dist/src/core/shaders/canvas/Rounded.js.map +0 -1
  137. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +0 -7
  138. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +0 -43
  139. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +0 -1
  140. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +0 -8
  141. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +0 -41
  142. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +0 -1
  143. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +0 -7
  144. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +0 -40
  145. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +0 -1
  146. package/dist/src/core/shaders/canvas/Shadow.d.ts +0 -8
  147. package/dist/src/core/shaders/canvas/Shadow.js +0 -31
  148. package/dist/src/core/shaders/canvas/Shadow.js.map +0 -1
  149. package/dist/src/core/shaders/canvas/utils/render.d.ts +0 -5
  150. package/dist/src/core/shaders/canvas/utils/render.js +0 -84
  151. package/dist/src/core/shaders/canvas/utils/render.js.map +0 -1
  152. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +0 -37
  153. package/dist/src/core/shaders/templates/BorderTemplate.js +0 -73
  154. package/dist/src/core/shaders/templates/BorderTemplate.js.map +0 -1
  155. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +0 -46
  156. package/dist/src/core/shaders/templates/HolePunchTemplate.js +0 -35
  157. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +0 -1
  158. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +0 -23
  159. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -47
  160. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +0 -1
  161. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +0 -31
  162. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +0 -49
  163. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +0 -1
  164. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +0 -29
  165. package/dist/src/core/shaders/templates/RoundedTemplate.js +0 -67
  166. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +0 -1
  167. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +0 -7
  168. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -24
  169. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +0 -1
  170. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +0 -6
  171. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +0 -23
  172. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +0 -1
  173. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +0 -6
  174. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -23
  175. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +0 -1
  176. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +0 -34
  177. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -66
  178. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +0 -1
  179. package/dist/src/core/shaders/utils.d.ts +0 -5
  180. package/dist/src/core/shaders/utils.js +0 -41
  181. package/dist/src/core/shaders/utils.js.map +0 -1
  182. package/dist/src/core/shaders/webgl/Border.d.ts +0 -3
  183. package/dist/src/core/shaders/webgl/Border.js +0 -110
  184. package/dist/src/core/shaders/webgl/Border.js.map +0 -1
  185. package/dist/src/core/shaders/webgl/Default.d.ts +0 -2
  186. package/dist/src/core/shaders/webgl/Default.js +0 -86
  187. package/dist/src/core/shaders/webgl/Default.js.map +0 -1
  188. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
  189. package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
  190. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
  191. package/dist/src/core/shaders/webgl/HolePunch.d.ts +0 -3
  192. package/dist/src/core/shaders/webgl/HolePunch.js +0 -65
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +0 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +0 -3
  195. package/dist/src/core/shaders/webgl/LinearGradient.js +0 -99
  196. package/dist/src/core/shaders/webgl/LinearGradient.js.map +0 -1
  197. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +0 -3
  198. package/dist/src/core/shaders/webgl/RadialGradient.js +0 -96
  199. package/dist/src/core/shaders/webgl/RadialGradient.js.map +0 -1
  200. package/dist/src/core/shaders/webgl/Rounded.d.ts +0 -7
  201. package/dist/src/core/shaders/webgl/Rounded.js +0 -86
  202. package/dist/src/core/shaders/webgl/Rounded.js.map +0 -1
  203. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +0 -3
  204. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +0 -140
  205. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +0 -1
  206. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +0 -3
  207. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +0 -162
  208. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +0 -1
  209. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +0 -3
  210. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +0 -84
  211. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +0 -1
  212. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -30
  213. package/dist/src/core/shaders/webgl/SdfShader.js +0 -107
  214. package/dist/src/core/shaders/webgl/SdfShader.js.map +0 -1
  215. package/dist/src/core/shaders/webgl/Shadow.d.ts +0 -3
  216. package/dist/src/core/shaders/webgl/Shadow.js +0 -110
  217. package/dist/src/core/shaders/webgl/Shadow.js.map +0 -1
  218. package/dist/src/core/text-rendering/CanvasFont.d.ts +0 -14
  219. package/dist/src/core/text-rendering/CanvasFont.js +0 -111
  220. package/dist/src/core/text-rendering/CanvasFont.js.map +0 -1
  221. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +0 -59
  222. package/dist/src/core/text-rendering/CanvasFontHandler.js +0 -221
  223. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +0 -1
  224. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +0 -19
  225. package/dist/src/core/text-rendering/CanvasTextRenderer.js +0 -165
  226. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +0 -1
  227. package/dist/src/core/text-rendering/CoreFont.d.ts +0 -33
  228. package/dist/src/core/text-rendering/CoreFont.js +0 -48
  229. package/dist/src/core/text-rendering/CoreFont.js.map +0 -1
  230. package/dist/src/core/text-rendering/FontManager.d.ts +0 -11
  231. package/dist/src/core/text-rendering/FontManager.js +0 -42
  232. package/dist/src/core/text-rendering/FontManager.js.map +0 -1
  233. package/dist/src/core/text-rendering/SdfFont.d.ts +0 -29
  234. package/dist/src/core/text-rendering/SdfFont.js +0 -142
  235. package/dist/src/core/text-rendering/SdfFont.js.map +0 -1
  236. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +0 -85
  237. package/dist/src/core/text-rendering/SdfFontHandler.js +0 -58
  238. package/dist/src/core/text-rendering/SdfFontHandler.js.map +0 -1
  239. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +0 -18
  240. package/dist/src/core/text-rendering/SdfTextRenderer.js +0 -315
  241. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +0 -1
  242. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +0 -20
  243. package/dist/src/core/text-rendering/TextLayoutEngine.js +0 -324
  244. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +0 -1
  245. package/dist/src/core/text-rendering/TextRenderer.d.ts +0 -369
  246. package/dist/src/core/text-rendering/TextRenderer.js +0 -20
  247. package/dist/src/core/text-rendering/TextRenderer.js.map +0 -1
  248. package/dist/src/core/text-rendering/Utils.d.ts +0 -30
  249. package/dist/src/core/text-rendering/Utils.js +0 -84
  250. package/dist/src/core/text-rendering/Utils.js.map +0 -1
@@ -1,324 +0,0 @@
1
- export const defaultFontMetrics = {
2
- ascender: 800,
3
- descender: -200,
4
- lineGap: 200,
5
- unitsPerEm: 1000,
6
- };
7
- export const normalizeFontMetrics = (metrics, fontSize) => {
8
- const scale = fontSize / metrics.unitsPerEm;
9
- return {
10
- ascender: metrics.ascender * scale,
11
- descender: metrics.descender * scale,
12
- lineGap: metrics.lineGap * scale,
13
- };
14
- };
15
- export const mapTextLayout = (font, metrics, text, textAlign, verticalAlign, fontFamily, lineHeight, overflowSuffix, wordBreak, letterSpacing, maxLines, maxWidth, maxHeight) => {
16
- const ascPx = metrics.ascender;
17
- const descPx = metrics.descender;
18
- const bareLineHeight = ascPx - descPx;
19
- const lineHeightPx = lineHeight <= 3 ? lineHeight * bareLineHeight : lineHeight;
20
- const lineHeightDelta = lineHeightPx - bareLineHeight;
21
- const halfDelta = lineHeightDelta * 0.5;
22
- let effectiveMaxLines = maxLines;
23
- if (maxHeight > 0) {
24
- const maxFromHeight = Math.floor(maxHeight / lineHeightPx);
25
- if (effectiveMaxLines === 0 || maxFromHeight < effectiveMaxLines) {
26
- effectiveMaxLines = maxFromHeight;
27
- }
28
- }
29
- const wrappedText = maxWidth > 0;
30
- //wrapText or just measureLines based on maxWidth
31
- const [lines, remainingLines, remainingText] = wrappedText === true
32
- ? wrapText(font, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines)
33
- : measureLines(font, text.split('\n'), fontFamily, letterSpacing, maxLines);
34
- let effectiveLineAmount = lines.length;
35
- let effectiveMaxWidth = lines[0][1];
36
- //check for longest line
37
- if (effectiveLineAmount > 1) {
38
- for (let i = 1; i < effectiveLineAmount; i++) {
39
- effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i][1]);
40
- }
41
- }
42
- //update line x offsets
43
- if (textAlign !== 'left') {
44
- const maxW = wrappedText === true ? maxWidth : effectiveMaxWidth;
45
- for (let i = 0; i < effectiveLineAmount; i++) {
46
- const line = lines[i];
47
- const w = line[1];
48
- line[2] = textAlign === 'right' ? maxW - w : (maxW - w) / 2;
49
- }
50
- }
51
- const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
52
- let firstBaseLine = halfDelta;
53
- if (maxHeight > 0 && verticalAlign !== 'top') {
54
- if (verticalAlign === 'middle') {
55
- firstBaseLine += (maxHeight - effectiveMaxHeight) / 2;
56
- }
57
- else {
58
- firstBaseLine += maxHeight - effectiveMaxHeight;
59
- }
60
- }
61
- const startY = firstBaseLine;
62
- for (let i = 0; i < effectiveLineAmount; i++) {
63
- const line = lines[i];
64
- line[3] = startY + lineHeightPx * i;
65
- }
66
- return [
67
- lines,
68
- remainingLines,
69
- remainingText,
70
- bareLineHeight,
71
- lineHeightPx,
72
- effectiveMaxWidth,
73
- effectiveMaxHeight,
74
- ];
75
- };
76
- export const measureLines = (font, lines, fontFamily, letterSpacing, maxLines) => {
77
- const measuredLines = [];
78
- let remainingLines = maxLines > 0 ? maxLines : lines.length;
79
- let i = 0;
80
- while (remainingLines > 0) {
81
- const line = lines[i];
82
- i++;
83
- remainingLines--;
84
- if (line === undefined) {
85
- continue;
86
- }
87
- const width = font.measureText(line, letterSpacing);
88
- measuredLines.push([line, width, 0, 0]);
89
- }
90
- return [
91
- measuredLines,
92
- remainingLines,
93
- maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
94
- ];
95
- };
96
- export const wrapText = (font, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines) => {
97
- const lines = text.split('\n');
98
- const wrappedLines = [];
99
- // Calculate space width for line wrapping
100
- const spaceWidth = font.measureText(' ', letterSpacing);
101
- let wrappedLine = [];
102
- let remainingLines = maxLines;
103
- let hasRemainingText = true;
104
- let hasMaxLines = maxLines > 0;
105
- for (let i = 0; i < lines.length; i++) {
106
- const line = lines[i];
107
- if (line === undefined) {
108
- continue;
109
- }
110
- [wrappedLine, remainingLines, hasRemainingText] =
111
- line.length > 0
112
- ? wrapLine(font, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
113
- : [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
114
- remainingLines--;
115
- wrappedLines.push(...wrappedLine);
116
- if (hasMaxLines === true && remainingLines <= 0) {
117
- const lastLine = wrappedLines[wrappedLines.length - 1];
118
- if (i < lines.length - 1) {
119
- if (lastLine[0].endsWith(overflowSuffix) === false) {
120
- lastLine[0] = truncateLineWithSuffix(font, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
121
- }
122
- }
123
- break;
124
- }
125
- }
126
- return [wrappedLines, remainingLines, hasRemainingText];
127
- };
128
- export const wrapLine = (font, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
129
- // Use the same space regex as Canvas renderer to handle ZWSP
130
- const spaceRegex = / |\u200B/g;
131
- const words = line.split(spaceRegex);
132
- const spaces = line.match(spaceRegex) || [];
133
- const wrappedLines = [];
134
- let currentLine = '';
135
- let currentLineWidth = 0;
136
- let hasRemainingText = true;
137
- let i = 0;
138
- for (; i < words.length; i++) {
139
- const word = words[i];
140
- if (word === undefined) {
141
- continue;
142
- }
143
- const space = spaces[i - 1] || '';
144
- const wordWidth = font.measureText(word, letterSpacing);
145
- // For width calculation, treat ZWSP as having 0 width but regular space functionality
146
- const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
147
- const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
148
- if ((i === 0 && wordWidth <= maxWidth) ||
149
- (i > 0 && totalWidth <= maxWidth)) {
150
- // Word fits on current line
151
- if (currentLine.length > 0) {
152
- // Add space - for ZWSP, don't add anything to output (it's invisible)
153
- if (space !== '\u200B') {
154
- currentLine += space;
155
- currentLineWidth += effectiveSpaceWidth;
156
- }
157
- }
158
- currentLine += word;
159
- currentLineWidth += wordWidth;
160
- }
161
- else {
162
- if (remainingLines === 1) {
163
- if (currentLine.length > 0) {
164
- // Add space - for ZWSP, don't add anything to output (it's invisible)
165
- if (space !== '\u200B') {
166
- currentLine += space;
167
- currentLineWidth += effectiveSpaceWidth;
168
- }
169
- }
170
- currentLine += word;
171
- currentLineWidth += wordWidth;
172
- remainingLines = 0;
173
- hasRemainingText = i < words.length;
174
- break;
175
- }
176
- if (wordBreak !== 'break-all' && currentLine.length > 0) {
177
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
178
- }
179
- if (wordBreak !== 'break-all') {
180
- remainingLines--;
181
- currentLine = word;
182
- currentLineWidth = wordWidth;
183
- }
184
- if (wordBreak === 'break-word') {
185
- const [lines, rl, rt] = breakWord(font, word, fontFamily, maxWidth, letterSpacing, remainingLines);
186
- remainingLines = rl;
187
- hasRemainingText = rt;
188
- if (lines.length === 1) {
189
- [currentLine, currentLineWidth] = lines[lines.length - 1];
190
- }
191
- else {
192
- for (let j = 0; j < lines.length; j++) {
193
- [currentLine, currentLineWidth] = lines[j];
194
- if (j < lines.length - 1) {
195
- wrappedLines.push(lines[j]);
196
- }
197
- }
198
- }
199
- }
200
- else if (wordBreak === 'break-all') {
201
- const firstLetterWidth = font.measureText(word.charAt(0), letterSpacing);
202
- let linebreak = false;
203
- if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
204
- maxWidth) {
205
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
206
- remainingLines -= 1;
207
- currentLine = '';
208
- currentLineWidth = 0;
209
- linebreak = true;
210
- }
211
- const initial = maxWidth - currentLineWidth;
212
- const [lines, rl, rt] = breakAll(font, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
213
- remainingLines = rl;
214
- hasRemainingText = rt;
215
- if (linebreak === false) {
216
- const [text, width] = lines[0];
217
- currentLine += ' ' + text;
218
- currentLineWidth = width;
219
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
220
- }
221
- for (let j = 1; j < lines.length; j++) {
222
- [currentLine, currentLineWidth] = lines[j];
223
- if (j < lines.length - 1) {
224
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
225
- }
226
- }
227
- }
228
- }
229
- }
230
- // Add the last line if it has content
231
- if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
232
- currentLine = truncateLineWithSuffix(font, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
233
- }
234
- if (currentLine.length > 0) {
235
- wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
236
- }
237
- return [wrappedLines, remainingLines, hasRemainingText];
238
- };
239
- /**
240
- * Truncate a line with overflow suffix to fit within width
241
- */
242
- export const truncateLineWithSuffix = (font, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
243
- const suffixWidth = font.measureText(overflowSuffix, letterSpacing);
244
- if (suffixWidth >= maxWidth) {
245
- return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
246
- }
247
- let truncatedLine = line;
248
- while (truncatedLine.length > 0) {
249
- const lineWidth = font.measureText(truncatedLine, letterSpacing);
250
- if (lineWidth + suffixWidth <= maxWidth) {
251
- return truncatedLine + overflowSuffix;
252
- }
253
- truncatedLine = truncatedLine.substring(0, truncatedLine.length - 1);
254
- }
255
- return overflowSuffix;
256
- };
257
- /**
258
- * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
259
- */
260
- export const breakWord = (font, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
261
- const lines = [];
262
- let currentPart = '';
263
- let currentWidth = 0;
264
- let i = 0;
265
- for (let i = 0; i < word.length; i++) {
266
- const char = word.charAt(i);
267
- const codepoint = char.codePointAt(0);
268
- if (codepoint === undefined)
269
- continue;
270
- const charWidth = font.measureText(char, letterSpacing);
271
- if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
272
- remainingLines--;
273
- if (remainingLines === 0) {
274
- break;
275
- }
276
- lines.push([currentPart, currentWidth, 0, 0]);
277
- currentPart = char;
278
- currentWidth = charWidth;
279
- }
280
- else {
281
- currentPart += char;
282
- currentWidth += charWidth;
283
- }
284
- }
285
- if (currentPart.length > 0) {
286
- lines.push([currentPart, currentWidth, 0, 0]);
287
- }
288
- return [lines, remainingLines, i < word.length - 1];
289
- };
290
- /**
291
- * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
292
- */
293
- export const breakAll = (font, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
294
- const lines = [];
295
- let currentPart = '';
296
- let currentWidth = 0;
297
- let max = initial;
298
- let i = 0;
299
- let hasRemainingText = false;
300
- for (; i < word.length; i++) {
301
- if (remainingLines === 0) {
302
- hasRemainingText = true;
303
- break;
304
- }
305
- const char = word.charAt(i);
306
- const charWidth = font.measureText(char, letterSpacing);
307
- if (currentWidth + charWidth > max && currentPart.length > 0) {
308
- lines.push([currentPart, currentWidth, 0, 0]);
309
- currentPart = char;
310
- currentWidth = charWidth;
311
- max = maxWidth;
312
- remainingLines--;
313
- }
314
- else {
315
- currentPart += char;
316
- currentWidth += charWidth;
317
- }
318
- }
319
- if (currentPart.length > 0) {
320
- lines.push([currentPart, currentWidth, 0, 0]);
321
- }
322
- return [lines, remainingLines, hasRemainingText];
323
- };
324
- //# sourceMappingURL=TextLayoutEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextLayoutEngine.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextLayoutEngine.ts"],"names":[],"mappings":"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"}