@lightningjs/renderer 3.0.0-beta13 → 3.0.0-beta15

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 (278) hide show
  1. package/dist/exports/index.d.ts +1 -0
  2. package/dist/exports/index.js.map +1 -1
  3. package/dist/src/core/CoreNode.d.ts +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +0 -2
  5. package/dist/src/core/CoreTextNode.js +4 -16
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/Stage.js +2 -3
  8. package/dist/src/core/Stage.js.map +1 -1
  9. package/dist/src/core/TextureError.d.ts +11 -0
  10. package/dist/src/core/TextureError.js +37 -0
  11. package/dist/src/core/TextureError.js.map +1 -0
  12. package/dist/src/core/animations/CoreAnimation.d.ts +3 -2
  13. package/dist/src/core/animations/CoreAnimation.js +3 -2
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/lib/WebGlContextWrapper.d.ts +6 -6
  16. package/dist/src/core/lib/WebGlContextWrapper.js +2 -2
  17. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  18. package/dist/src/core/lib/textureCompression.js +1 -1
  19. package/dist/src/core/lib/textureCompression.js.map +1 -1
  20. package/dist/src/core/platform.d.ts +10 -0
  21. package/dist/src/core/platform.js +81 -0
  22. package/dist/src/core/platform.js.map +1 -0
  23. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  24. package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
  25. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  27. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  28. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  30. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  31. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  33. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  34. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  35. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  36. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  37. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  38. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  39. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  40. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +65 -0
  48. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +269 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  56. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  57. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  58. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  59. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -1
  60. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +4 -5
  61. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  63. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  64. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  65. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  66. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  67. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  68. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  69. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  70. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  71. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  72. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  73. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  74. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  75. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  76. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  77. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  78. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  79. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  80. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  81. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  83. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  84. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  85. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  87. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  88. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  94. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  96. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  97. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  99. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  100. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  105. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  107. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  108. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  109. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  110. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  111. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  112. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  113. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  114. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  115. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  116. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  117. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  118. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  119. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  120. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  121. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  122. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +1 -1
  123. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  124. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
  125. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  126. package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
  127. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  128. package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
  129. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  130. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  131. package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
  132. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  133. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
  134. package/dist/src/core/text-rendering/CanvasFontHandler.js +94 -32
  135. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  136. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
  137. package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
  138. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  139. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
  140. package/dist/src/core/text-rendering/SdfFontHandler.js +76 -56
  141. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  142. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
  143. package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
  144. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  145. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  146. package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -105
  147. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  148. package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
  149. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  150. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  151. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  152. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  153. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  154. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  155. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  156. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  157. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  158. package/dist/src/core/text-rendering/Utils.d.ts +1 -42
  159. package/dist/src/core/text-rendering/Utils.js +4 -132
  160. package/dist/src/core/text-rendering/Utils.js.map +1 -1
  161. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  162. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  163. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  164. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  165. package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
  166. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  167. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  168. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  169. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  170. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  171. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  172. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  173. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  174. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  175. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  176. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  177. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  178. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  179. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  180. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  181. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  182. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  183. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  184. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  185. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  186. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  187. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  188. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  189. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  193. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  194. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  195. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  196. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  197. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  198. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  208. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  210. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  211. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  212. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  213. package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
  214. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  215. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  216. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  217. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  218. package/dist/src/core/utils.d.ts +2 -1
  219. package/dist/src/core/utils.js +1 -1
  220. package/dist/src/core/utils.js.map +1 -1
  221. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  222. package/dist/src/main-api/DynamicShaderController.js +58 -0
  223. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  224. package/dist/src/main-api/Inspector.d.ts +124 -0
  225. package/dist/src/main-api/Inspector.js +283 -8
  226. package/dist/src/main-api/Inspector.js.map +1 -1
  227. package/dist/src/main-api/Renderer.d.ts +150 -26
  228. package/dist/src/main-api/Renderer.js +27 -25
  229. package/dist/src/main-api/Renderer.js.map +1 -1
  230. package/dist/src/main-api/ShaderController.d.ts +31 -0
  231. package/dist/src/main-api/ShaderController.js +37 -0
  232. package/dist/src/main-api/ShaderController.js.map +1 -0
  233. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  234. package/exports/index.ts +1 -0
  235. package/package.json +14 -15
  236. package/src/core/CoreTextNode.ts +4 -22
  237. package/src/core/Stage.ts +2 -3
  238. package/src/core/animations/CoreAnimation.ts +8 -7
  239. package/src/core/lib/WebGlContextWrapper.ts +4 -3
  240. package/src/core/lib/textureCompression.ts +4 -2
  241. package/src/core/renderers/webgl/WebGlShaderProgram.ts +5 -6
  242. package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
  243. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
  244. package/src/core/shaders/webgl/LinearGradient.ts +26 -3
  245. package/src/core/shaders/webgl/RadialGradient.ts +50 -28
  246. package/src/core/shaders/webgl/SdfShader.ts +1 -12
  247. package/src/core/text-rendering/CanvasFontHandler.ts +136 -39
  248. package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
  249. package/src/core/text-rendering/SdfFontHandler.ts +94 -60
  250. package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
  251. package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +209 -143
  252. package/src/core/text-rendering/TextRenderer.ts +36 -13
  253. package/src/core/text-rendering/Utils.ts +5 -163
  254. package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
  255. package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
  256. package/src/core/utils.ts +9 -7
  257. package/src/main-api/Inspector.ts +502 -12
  258. package/src/main-api/Renderer.ts +158 -26
  259. package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
  260. package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
  261. package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
  262. package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
  263. package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
  264. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
  265. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
  266. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
  267. package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
  268. package/dist/src/core/text-rendering/canvas/draw.js +0 -132
  269. package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
  270. package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
  271. package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
  272. package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
  273. package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
  274. package/src/core/text-rendering/canvas/Settings.ts +0 -99
  275. package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
  276. package/src/core/text-rendering/canvas/Utils.ts +0 -178
  277. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
  278. package/src/core/text-rendering/canvas/draw.ts +0 -165
@@ -1,27 +1,81 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2025 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
- import { isZeroWidthSpace } from '../Utils.js';
20
- import * as SdfFontHandler from '../SdfFontHandler.js';
21
- export const measureLines = (lines, fontFamily, letterSpacing, fontScale, maxLines, hasMaxLines) => {
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 = (measureText, 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(measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines)
33
+ : measureLines(measureText, 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 = (measureText, lines, fontFamily, letterSpacing, maxLines) => {
22
77
  const measuredLines = [];
23
- const designLetterSpacing = letterSpacing * fontScale;
24
- let remainingLines = hasMaxLines === true ? maxLines : lines.length;
78
+ let remainingLines = maxLines > 0 ? maxLines : lines.length;
25
79
  let i = 0;
26
80
  while (remainingLines > 0) {
27
81
  const line = lines[i];
@@ -30,39 +84,48 @@ export const measureLines = (lines, fontFamily, letterSpacing, fontScale, maxLin
30
84
  if (line === undefined) {
31
85
  continue;
32
86
  }
33
- const width = measureText(line, fontFamily, designLetterSpacing);
34
- measuredLines.push([line, width]);
87
+ const width = measureText(line, fontFamily, letterSpacing);
88
+ measuredLines.push([line, width, 0, 0]);
35
89
  }
36
90
  return [
37
91
  measuredLines,
38
92
  remainingLines,
39
- hasMaxLines === true ? lines.length - measuredLines.length > 0 : false,
93
+ maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
40
94
  ];
41
95
  };
42
- /**
43
- * Wrap text for SDF rendering with proper width constraints
44
- */
45
- export const wrapText = (text, fontFamily, fontScale, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines, hasMaxLines) => {
96
+ export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines) => {
46
97
  const lines = text.split('\n');
47
98
  const wrappedLines = [];
48
- const maxWidthInDesignUnits = maxWidth / fontScale;
49
- const designLetterSpacing = letterSpacing * fontScale;
50
99
  // Calculate space width for line wrapping
51
- const spaceWidth = measureText(' ', fontFamily, designLetterSpacing);
100
+ const spaceWidth = measureText(' ', fontFamily, letterSpacing);
52
101
  let wrappedLine = [];
53
102
  let remainingLines = maxLines;
54
103
  let hasRemainingText = true;
104
+ let hasMaxLines = maxLines > 0;
55
105
  for (let i = 0; i < lines.length; i++) {
56
106
  const line = lines[i];
57
- [wrappedLine, remainingLines, hasRemainingText] = wrapLine(line, fontFamily, maxWidthInDesignUnits, designLetterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines);
107
+ if (line === undefined) {
108
+ continue;
109
+ }
110
+ [wrappedLine, remainingLines, hasRemainingText] =
111
+ line.length > 0
112
+ ? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
113
+ : [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
114
+ remainingLines--;
58
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(measureText, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
121
+ }
122
+ }
123
+ break;
124
+ }
59
125
  }
60
126
  return [wrappedLines, remainingLines, hasRemainingText];
61
127
  };
62
- /**
63
- * Wrap a single line of text for SDF rendering
64
- */
65
- export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
128
+ export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
66
129
  // Use the same space regex as Canvas renderer to handle ZWSP
67
130
  const spaceRegex = / |\u200B/g;
68
131
  const words = line.split(spaceRegex);
@@ -78,7 +141,7 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
78
141
  continue;
79
142
  }
80
143
  const space = spaces[i - 1] || '';
81
- const wordWidth = measureText(word, fontFamily, designLetterSpacing);
144
+ const wordWidth = measureText(word, fontFamily, letterSpacing);
82
145
  // For width calculation, treat ZWSP as having 0 width but regular space functionality
83
146
  const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
84
147
  const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
@@ -111,17 +174,15 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
111
174
  break;
112
175
  }
113
176
  if (wordBreak !== 'break-all' && currentLine.length > 0) {
114
- wrappedLines.push([currentLine, currentLineWidth]);
115
- currentLine = '';
116
- currentLineWidth = 0;
117
- remainingLines--;
177
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
118
178
  }
119
179
  if (wordBreak !== 'break-all') {
180
+ remainingLines--;
120
181
  currentLine = word;
121
182
  currentLineWidth = wordWidth;
122
183
  }
123
184
  if (wordBreak === 'break-word') {
124
- const [lines, rl, rt] = breakWord(word, fontFamily, maxWidth, designLetterSpacing, remainingLines, hasMaxLines);
185
+ const [lines, rl, rt] = breakWord(measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines);
125
186
  remainingLines = rl;
126
187
  hasRemainingText = rt;
127
188
  if (lines.length === 1) {
@@ -137,89 +198,55 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
137
198
  }
138
199
  }
139
200
  else if (wordBreak === 'break-all') {
140
- const codepoint = word.codePointAt(0);
141
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
142
- const firstLetterWidth = glyph !== null ? glyph.xadvance + designLetterSpacing : 0;
201
+ const firstLetterWidth = measureText(word.charAt(0), fontFamily, letterSpacing);
143
202
  let linebreak = false;
144
203
  if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
145
204
  maxWidth) {
146
- wrappedLines.push([currentLine, currentLineWidth]);
205
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
147
206
  remainingLines -= 1;
148
207
  currentLine = '';
149
208
  currentLineWidth = 0;
150
209
  linebreak = true;
151
210
  }
152
211
  const initial = maxWidth - currentLineWidth;
153
- const [lines, rl, rt] = breakAll(word, fontFamily, initial, maxWidth, designLetterSpacing, remainingLines, hasMaxLines);
212
+ const [lines, rl, rt] = breakAll(measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
154
213
  remainingLines = rl;
155
214
  hasRemainingText = rt;
156
215
  if (linebreak === false) {
157
216
  const [text, width] = lines[0];
158
217
  currentLine += ' ' + text;
159
218
  currentLineWidth = width;
160
- wrappedLines.push([currentLine, currentLineWidth]);
219
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
161
220
  }
162
221
  for (let j = 1; j < lines.length; j++) {
163
222
  [currentLine, currentLineWidth] = lines[j];
164
223
  if (j < lines.length - 1) {
165
- wrappedLines.push([currentLine, currentLineWidth]);
224
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
166
225
  }
167
226
  }
168
227
  }
169
228
  }
170
229
  }
171
230
  // Add the last line if it has content
172
- if (currentLine.length > 0 && remainingLines === 0) {
173
- currentLine = truncateLineWithSuffix(currentLine, fontFamily, maxWidth, designLetterSpacing, overflowSuffix);
231
+ if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
232
+ currentLine = truncateLineWithSuffix(measureText, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
174
233
  }
175
234
  if (currentLine.length > 0) {
176
- wrappedLines.push([currentLine, currentLineWidth]);
177
- }
178
- else {
179
- wrappedLines.push(['', 0]);
235
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
180
236
  }
181
237
  return [wrappedLines, remainingLines, hasRemainingText];
182
238
  };
183
- /**
184
- * Measure the width of text in SDF design units
185
- */
186
- export const measureText = (text, fontFamily, designLetterSpacing) => {
187
- let width = 0;
188
- let prevCodepoint = 0;
189
- for (let i = 0; i < text.length; i++) {
190
- const char = text.charAt(i);
191
- const codepoint = text.codePointAt(i);
192
- if (codepoint === undefined)
193
- continue;
194
- // Skip zero-width spaces in width calculations
195
- if (isZeroWidthSpace(char)) {
196
- continue;
197
- }
198
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
199
- if (glyph === null)
200
- continue;
201
- let advance = glyph.xadvance;
202
- // Add kerning if there's a previous character
203
- if (prevCodepoint !== 0) {
204
- const kerning = SdfFontHandler.getKerning(fontFamily, prevCodepoint, codepoint);
205
- advance += kerning;
206
- }
207
- width += advance + designLetterSpacing;
208
- prevCodepoint = codepoint;
209
- }
210
- return width;
211
- };
212
239
  /**
213
240
  * Truncate a line with overflow suffix to fit within width
214
241
  */
215
- export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterSpacing, overflowSuffix) => {
216
- const suffixWidth = measureText(overflowSuffix, fontFamily, designLetterSpacing);
242
+ export const truncateLineWithSuffix = (measureText, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
243
+ const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
217
244
  if (suffixWidth >= maxWidth) {
218
245
  return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
219
246
  }
220
247
  let truncatedLine = line;
221
248
  while (truncatedLine.length > 0) {
222
- const lineWidth = measureText(truncatedLine, fontFamily, designLetterSpacing);
249
+ const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
223
250
  if (lineWidth + suffixWidth <= maxWidth) {
224
251
  return truncatedLine + overflowSuffix;
225
252
  }
@@ -230,7 +257,7 @@ export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterS
230
257
  /**
231
258
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
232
259
  */
233
- export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remainingLines, hasMaxLines) => {
260
+ export const breakWord = (measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
234
261
  const lines = [];
235
262
  let currentPart = '';
236
263
  let currentWidth = 0;
@@ -240,16 +267,13 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
240
267
  const codepoint = char.codePointAt(0);
241
268
  if (codepoint === undefined)
242
269
  continue;
243
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
244
- if (glyph === null)
245
- continue;
246
- const charWidth = glyph.xadvance + designLetterSpacing;
270
+ const charWidth = measureText(char, fontFamily, letterSpacing);
247
271
  if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
248
272
  remainingLines--;
249
273
  if (remainingLines === 0) {
250
274
  break;
251
275
  }
252
- lines.push([currentPart, currentWidth]);
276
+ lines.push([currentPart, currentWidth, 0, 0]);
253
277
  currentPart = char;
254
278
  currentWidth = charWidth;
255
279
  }
@@ -259,14 +283,14 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
259
283
  }
260
284
  }
261
285
  if (currentPart.length > 0) {
262
- lines.push([currentPart, currentWidth]);
286
+ lines.push([currentPart, currentWidth, 0, 0]);
263
287
  }
264
288
  return [lines, remainingLines, i < word.length - 1];
265
289
  };
266
290
  /**
267
291
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
268
292
  */
269
- export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacing, remainingLines, hasMaxLines) => {
293
+ export const breakAll = (measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
270
294
  const lines = [];
271
295
  let currentPart = '';
272
296
  let currentWidth = 0;
@@ -279,13 +303,9 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
279
303
  break;
280
304
  }
281
305
  const char = word.charAt(i);
282
- const codepoint = char.codePointAt(0);
283
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
284
- if (glyph === null)
285
- continue;
286
- const charWidth = glyph.xadvance + designLetterSpacing;
306
+ const charWidth = measureText(char, fontFamily, letterSpacing);
287
307
  if (currentWidth + charWidth > max && currentPart.length > 0) {
288
- lines.push([currentPart, currentWidth]);
308
+ lines.push([currentPart, currentWidth, 0, 0]);
289
309
  currentPart = char;
290
310
  currentWidth = charWidth;
291
311
  max = maxWidth;
@@ -297,8 +317,8 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
297
317
  }
298
318
  }
299
319
  if (currentPart.length > 0) {
300
- lines.push([currentPart, currentWidth]);
320
+ lines.push([currentPart, currentWidth, 0, 0]);
301
321
  }
302
322
  return [lines, remainingLines, hasRemainingText];
303
323
  };
304
- //# sourceMappingURL=Utils.js.map
324
+ //# sourceMappingURL=TextLayoutEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextLayoutEngine.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextLayoutEngine.ts"],"names":[],"mappings":"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"}
@@ -167,16 +167,6 @@ export interface TrProps extends TrFontProps {
167
167
  * @default 0
168
168
  */
169
169
  maxLines: number;
170
- /**
171
- * Baseline for text
172
- *
173
- * @remarks
174
- * This property sets the text baseline used when drawing text.
175
- * Not yet implemented in the SDF renderer.
176
- *
177
- * @default alphabetic
178
- */
179
- textBaseline: TextBaseline;
180
170
  /**
181
171
  * Vertical Align for text when lineHeight > fontSize
182
172
  *
@@ -296,6 +286,10 @@ export interface FontLoadOptions {
296
286
  atlasUrl?: string;
297
287
  atlasDataUrl?: string;
298
288
  }
289
+ /**
290
+ * Measure Width of Text function to be defined in font handlers, used in TextLayoutEngine
291
+ */
292
+ export type MeasureTextFn = (text: string, fontFamily: string, letterSpacing: number) => number;
299
293
  export interface FontHandler {
300
294
  init: (c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) => void;
301
295
  type: 'canvas' | 'sdf';
@@ -306,7 +300,7 @@ export interface FontHandler {
306
300
  getFontFamilies: () => FontFamilyMap;
307
301
  canRenderFont: (trProps: TrProps) => boolean;
308
302
  getFontMetrics: (fontFamily: string, fontSize: number) => NormalizedFontMetrics;
309
- setFontMetrics: (fontFamily: string, metrics: NormalizedFontMetrics) => void;
303
+ measureText: MeasureTextFn;
310
304
  }
311
305
  export interface TextRenderProps {
312
306
  fontFamily: string;
@@ -325,13 +319,15 @@ export interface TextRenderProps {
325
319
  export interface TextRenderInfo {
326
320
  width: number;
327
321
  height: number;
322
+ hasRemainingText?: boolean;
323
+ remainingLines?: number;
328
324
  imageData?: ImageData | null;
329
325
  layout?: TextLayout;
330
326
  }
331
327
  export interface TextRenderer {
332
328
  type: 'canvas' | 'sdf';
333
329
  font: FontHandler;
334
- renderText: (stage: Stage, props: CoreTextNodeProps) => TextRenderInfo;
330
+ renderText: (props: CoreTextNodeProps) => TextRenderInfo;
335
331
  addQuads: (layout?: TextLayout) => Float32Array | null;
336
332
  renderQuads: (renderer: CoreRenderer, layout: TextLayout, vertexBuffer: Float32Array, renderProps: TextRenderProps) => void;
337
333
  init: (stage: Stage) => void;
@@ -340,8 +336,10 @@ export interface TextRenderer {
340
336
  * Text line struct for text mapping
341
337
  * 0 - text
342
338
  * 1 - width
339
+ * 2 - line offset x
340
+ * 3 - line offset y
343
341
  */
344
- export type TextLineStruct = [string, number];
342
+ export type TextLineStruct = [string, number, number, number];
345
343
  /**
346
344
  * Wrapped lines struct for text mapping
347
345
  * 0 - line structs
@@ -349,3 +347,22 @@ export type TextLineStruct = [string, number];
349
347
  * 2 - remaining text
350
348
  */
351
349
  export type WrappedLinesStruct = [TextLineStruct[], number, boolean];
350
+ /**
351
+ * Wrapped lines struct for text mapping
352
+ * 0 - line structs
353
+ * 1 - remaining lines
354
+ * 2 - remaining text
355
+ * 3 - bare line height
356
+ * 4 - line height pixels
357
+ * 5 - effective width
358
+ * 6 - effective height
359
+ */
360
+ export type TextLayoutStruct = [
361
+ TextLineStruct[],
362
+ number,
363
+ boolean,
364
+ number,
365
+ number,
366
+ number,
367
+ number
368
+ ];
@@ -0,0 +1,12 @@
1
+ import type { NormalizedFontMetrics } from './font-face-types/TrFontFace.js';
2
+ /**
3
+ * Calculate the default line height given normalized font metrics
4
+ *
5
+ * @remarks
6
+ * This method may be used for both the WebTrFontFace and SdfTrFontFace font types.
7
+ *
8
+ * @param metrics
9
+ * @param fontSize
10
+ * @returns
11
+ */
12
+ export declare function calcDefaultLineHeight(metrics: NormalizedFontMetrics, fontSize: number): number;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Calculate the default line height given normalized font metrics
3
+ *
4
+ * @remarks
5
+ * This method may be used for both the WebTrFontFace and SdfTrFontFace font types.
6
+ *
7
+ * @param metrics
8
+ * @param fontSize
9
+ * @returns
10
+ */
11
+ export function calcDefaultLineHeight(metrics, fontSize) {
12
+ return fontSize * (metrics.ascender - metrics.descender + metrics.lineGap);
13
+ }
14
+ //# sourceMappingURL=TextRenderingUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextRenderingUtils.js","sourceRoot":"","sources":["../../../../src/core/text-rendering/TextRenderingUtils.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA8B,EAC9B,QAAgB;IAEhB,OAAO,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { NormalizedFontMetrics } from './font-face-types/TrFontFace.js';
2
+ import type { WebTrFontFace } from './font-face-types/WebTrFontFace.js';
3
+ /**
4
+ * Returns CSS font setting string for use in canvas context.
5
+ *
6
+ * @param fontFace
7
+ * @param fontStyle
8
+ * @param fontSize
9
+ * @param precision
10
+ * @param defaultFontFace
11
+ * @returns
12
+ */
13
+ export declare function getFontSetting(fontFace: string | string[], fontStyle: string, fontSize: number, precision: number, defaultFontFace: string): string;
14
+ /**
15
+ * Returns true if the given character is a zero-width space.
16
+ *
17
+ * @param space
18
+ */
19
+ export declare function isZeroWidthSpace(space: string): boolean;
20
+ /**
21
+ * Returns true if the given character is a zero-width space or a regular space.
22
+ *
23
+ * @param space
24
+ */
25
+ export declare function isSpace(space: string): boolean;
26
+ /**
27
+ * Converts a string into an array of tokens and the words between them.
28
+ *
29
+ * @param tokenRegex
30
+ * @param text
31
+ */
32
+ export declare function tokenizeString(tokenRegex: RegExp, text: string): string[];
33
+ /**
34
+ * Measure the width of a string accounting for letter spacing.
35
+ *
36
+ * @param context
37
+ * @param word
38
+ * @param space
39
+ */
40
+ export declare function measureText(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, word: string, space?: number): number;
41
+ /**
42
+ * Get the font metrics for a font face.
43
+ *
44
+ * @remarks
45
+ * This function will attempt to grab the explicitly defined metrics from the
46
+ * font face first. If the font face does not have metrics defined, it will
47
+ * attempt to calculate the metrics using the browser's measureText method.
48
+ *
49
+ * If the browser does not support the font metrics API, it will use some
50
+ * default values.
51
+ *
52
+ * @param context
53
+ * @param fontFace
54
+ * @param fontSize
55
+ * @returns
56
+ */
57
+ export declare function getWebFontMetrics(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, fontFace: WebTrFontFace, fontSize: number): NormalizedFontMetrics;
58
+ export interface WrapTextResult {
59
+ l: string[];
60
+ n: number[];
61
+ }
62
+ /**
63
+ * Applies newlines to a string to have it optimally fit into the horizontal
64
+ * bounds set by the Text object's wordWrapWidth property.
65
+ *
66
+ * @param context
67
+ * @param text
68
+ * @param wordWrapWidth
69
+ * @param letterSpacing
70
+ * @param indent
71
+ */
72
+ export declare function wrapText(context: CanvasRenderingContext2D, text: string, wordWrapWidth: number, letterSpacing: number, indent: number): WrapTextResult;