@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta16

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 (283) 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 +1 -2
  5. package/dist/src/core/CoreTextNode.js +43 -21
  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 -3
  13. package/dist/src/core/animations/CoreAnimation.js +3 -3
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -5
  16. package/dist/src/core/lib/textureCompression.js +1 -1
  17. package/dist/src/core/lib/textureCompression.js.map +1 -1
  18. package/dist/src/core/platform.d.ts +10 -0
  19. package/dist/src/core/platform.js +81 -0
  20. package/dist/src/core/platform.js.map +1 -0
  21. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  22. package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
  23. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  24. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  27. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  30. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  31. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  33. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  34. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  35. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  36. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  37. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  38. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +641 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  56. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  58. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  59. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  61. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  62. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  63. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  64. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  65. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  66. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  67. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  68. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  69. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  70. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  71. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  72. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  73. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  74. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  75. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  76. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  77. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  78. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  79. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  80. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  81. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  83. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  84. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  85. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  87. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  88. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  94. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  96. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  97. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  99. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  100. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  105. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
  107. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  108. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  109. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  110. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  111. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  112. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  113. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  114. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  115. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  116. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  117. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +1 -1
  118. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
  120. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  121. package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
  122. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  123. package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
  124. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  125. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  126. package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
  127. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  128. package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
  129. package/dist/src/core/text-rendering/CanvasFont.js +111 -0
  130. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
  131. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
  132. package/dist/src/core/text-rendering/CanvasFontHandler.js +97 -32
  133. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  134. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
  135. package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
  136. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  137. package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
  138. package/dist/src/core/text-rendering/CoreFont.js +48 -0
  139. package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
  140. package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
  141. package/dist/src/core/text-rendering/FontManager.js +42 -0
  142. package/dist/src/core/text-rendering/FontManager.js.map +1 -0
  143. package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
  144. package/dist/src/core/text-rendering/SdfFont.js +142 -0
  145. package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
  146. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
  147. package/dist/src/core/text-rendering/SdfFontHandler.js +79 -56
  148. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  149. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
  150. package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
  151. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  152. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  153. package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -107
  154. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  155. package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
  156. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  157. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  158. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  159. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  160. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  161. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  162. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  163. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  164. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  165. package/dist/src/core/text-rendering/Utils.d.ts +1 -42
  166. package/dist/src/core/text-rendering/Utils.js +4 -132
  167. package/dist/src/core/text-rendering/Utils.js.map +1 -1
  168. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  169. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  170. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  171. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  172. package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
  173. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  174. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  175. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  176. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  177. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  178. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  179. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  180. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  181. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  182. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  183. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  184. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  185. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  186. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  187. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  188. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  189. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  190. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  191. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  193. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  194. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  195. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  196. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  197. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  198. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  208. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  210. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  211. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  212. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  213. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  214. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  215. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  216. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  217. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  218. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  219. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  220. package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
  221. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  222. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  223. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  224. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  225. package/dist/src/core/utils.d.ts +2 -1
  226. package/dist/src/core/utils.js +1 -1
  227. package/dist/src/core/utils.js.map +1 -1
  228. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  229. package/dist/src/main-api/DynamicShaderController.js +58 -0
  230. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  231. package/dist/src/main-api/Inspector.d.ts +124 -0
  232. package/dist/src/main-api/Inspector.js +292 -13
  233. package/dist/src/main-api/Inspector.js.map +1 -1
  234. package/dist/src/main-api/Renderer.d.ts +150 -26
  235. package/dist/src/main-api/Renderer.js +27 -25
  236. package/dist/src/main-api/Renderer.js.map +1 -1
  237. package/dist/src/main-api/ShaderController.d.ts +31 -0
  238. package/dist/src/main-api/ShaderController.js +37 -0
  239. package/dist/src/main-api/ShaderController.js.map +1 -0
  240. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  241. package/exports/index.ts +1 -0
  242. package/package.json +14 -15
  243. package/src/core/CoreTextNode.ts +55 -27
  244. package/src/core/Stage.ts +2 -3
  245. package/src/core/animations/CoreAnimation.ts +8 -9
  246. package/src/core/lib/textureCompression.ts +4 -2
  247. package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
  248. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
  249. package/src/core/shaders/webgl/LinearGradient.ts +26 -3
  250. package/src/core/shaders/webgl/RadialGradient.ts +50 -28
  251. package/src/core/shaders/webgl/SdfShader.ts +1 -12
  252. package/src/core/text-rendering/CanvasFontHandler.ts +139 -39
  253. package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
  254. package/src/core/text-rendering/SdfFontHandler.ts +97 -60
  255. package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
  256. package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +211 -145
  257. package/src/core/text-rendering/TextRenderer.ts +36 -13
  258. package/src/core/text-rendering/Utils.ts +5 -163
  259. package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
  260. package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
  261. package/src/core/utils.ts +9 -7
  262. package/src/main-api/Inspector.ts +511 -17
  263. package/src/main-api/Renderer.ts +158 -26
  264. package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
  265. package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
  266. package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
  267. package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
  268. package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
  269. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
  270. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
  271. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
  272. package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
  273. package/dist/src/core/text-rendering/canvas/draw.js +0 -132
  274. package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
  275. package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
  276. package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
  277. package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
  278. package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
  279. package/src/core/text-rendering/canvas/Settings.ts +0 -99
  280. package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
  281. package/src/core/text-rendering/canvas/Utils.ts +0 -178
  282. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
  283. package/src/core/text-rendering/canvas/draw.ts +0 -165
@@ -1,27 +1,75 @@
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
+ for (let i = 0; i < effectiveLineAmount; i++) {
45
+ const line = lines[i];
46
+ const w = line[1];
47
+ line[2] =
48
+ textAlign === 'right'
49
+ ? effectiveMaxWidth - w
50
+ : (effectiveMaxWidth - w) / 2;
51
+ }
52
+ }
53
+ const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
54
+ let firstBaseLine = halfDelta;
55
+ const startY = firstBaseLine;
56
+ for (let i = 0; i < effectiveLineAmount; i++) {
57
+ const line = lines[i];
58
+ line[3] = startY + lineHeightPx * i;
59
+ }
60
+ return [
61
+ lines,
62
+ remainingLines,
63
+ remainingText,
64
+ bareLineHeight,
65
+ lineHeightPx,
66
+ effectiveMaxWidth,
67
+ effectiveMaxHeight,
68
+ ];
69
+ };
70
+ export const measureLines = (measureText, lines, fontFamily, letterSpacing, maxLines) => {
22
71
  const measuredLines = [];
23
- const designLetterSpacing = letterSpacing * fontScale;
24
- let remainingLines = hasMaxLines === true ? maxLines : lines.length;
72
+ let remainingLines = maxLines > 0 ? maxLines : lines.length;
25
73
  let i = 0;
26
74
  while (remainingLines > 0) {
27
75
  const line = lines[i];
@@ -30,39 +78,48 @@ export const measureLines = (lines, fontFamily, letterSpacing, fontScale, maxLin
30
78
  if (line === undefined) {
31
79
  continue;
32
80
  }
33
- const width = measureText(line, fontFamily, designLetterSpacing);
34
- measuredLines.push([line, width]);
81
+ const width = measureText(line, fontFamily, letterSpacing);
82
+ measuredLines.push([line, width, 0, 0]);
35
83
  }
36
84
  return [
37
85
  measuredLines,
38
86
  remainingLines,
39
- hasMaxLines === true ? lines.length - measuredLines.length > 0 : false,
87
+ maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
40
88
  ];
41
89
  };
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) => {
90
+ export const wrapText = (measureText, text, fontFamily, maxWidth, letterSpacing, overflowSuffix, wordBreak, maxLines) => {
46
91
  const lines = text.split('\n');
47
92
  const wrappedLines = [];
48
- const maxWidthInDesignUnits = maxWidth / fontScale;
49
- const designLetterSpacing = letterSpacing * fontScale;
50
93
  // Calculate space width for line wrapping
51
- const spaceWidth = measureText(' ', fontFamily, designLetterSpacing);
94
+ const spaceWidth = measureText(' ', fontFamily, letterSpacing);
52
95
  let wrappedLine = [];
53
96
  let remainingLines = maxLines;
54
97
  let hasRemainingText = true;
98
+ let hasMaxLines = maxLines > 0;
55
99
  for (let i = 0; i < lines.length; i++) {
56
100
  const line = lines[i];
57
- [wrappedLine, remainingLines, hasRemainingText] = wrapLine(line, fontFamily, maxWidthInDesignUnits, designLetterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines);
101
+ if (line === undefined) {
102
+ continue;
103
+ }
104
+ [wrappedLine, remainingLines, hasRemainingText] =
105
+ line.length > 0
106
+ ? wrapLine(measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines)
107
+ : [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
108
+ remainingLines--;
58
109
  wrappedLines.push(...wrappedLine);
110
+ if (hasMaxLines === true && remainingLines <= 0) {
111
+ const lastLine = wrappedLines[wrappedLines.length - 1];
112
+ if (i < lines.length - 1) {
113
+ if (lastLine[0].endsWith(overflowSuffix) === false) {
114
+ lastLine[0] = truncateLineWithSuffix(measureText, lastLine[0], fontFamily, maxWidth, letterSpacing, overflowSuffix);
115
+ }
116
+ }
117
+ break;
118
+ }
59
119
  }
60
120
  return [wrappedLines, remainingLines, hasRemainingText];
61
121
  };
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) => {
122
+ export const wrapLine = (measureText, line, fontFamily, maxWidth, letterSpacing, spaceWidth, overflowSuffix, wordBreak, remainingLines, hasMaxLines) => {
66
123
  // Use the same space regex as Canvas renderer to handle ZWSP
67
124
  const spaceRegex = / |\u200B/g;
68
125
  const words = line.split(spaceRegex);
@@ -78,7 +135,7 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
78
135
  continue;
79
136
  }
80
137
  const space = spaces[i - 1] || '';
81
- const wordWidth = measureText(word, fontFamily, designLetterSpacing);
138
+ const wordWidth = measureText(word, fontFamily, letterSpacing);
82
139
  // For width calculation, treat ZWSP as having 0 width but regular space functionality
83
140
  const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
84
141
  const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
@@ -111,17 +168,15 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
111
168
  break;
112
169
  }
113
170
  if (wordBreak !== 'break-all' && currentLine.length > 0) {
114
- wrappedLines.push([currentLine, currentLineWidth]);
115
- currentLine = '';
116
- currentLineWidth = 0;
117
- remainingLines--;
171
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
118
172
  }
119
173
  if (wordBreak !== 'break-all') {
174
+ remainingLines--;
120
175
  currentLine = word;
121
176
  currentLineWidth = wordWidth;
122
177
  }
123
178
  if (wordBreak === 'break-word') {
124
- const [lines, rl, rt] = breakWord(word, fontFamily, maxWidth, designLetterSpacing, remainingLines, hasMaxLines);
179
+ const [lines, rl, rt] = breakWord(measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines);
125
180
  remainingLines = rl;
126
181
  hasRemainingText = rt;
127
182
  if (lines.length === 1) {
@@ -137,89 +192,59 @@ export const wrapLine = (line, fontFamily, maxWidth, designLetterSpacing, spaceW
137
192
  }
138
193
  }
139
194
  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;
195
+ const firstLetterWidth = measureText(word.charAt(0), fontFamily, letterSpacing);
143
196
  let linebreak = false;
144
197
  if (currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
145
198
  maxWidth) {
146
- wrappedLines.push([currentLine, currentLineWidth]);
199
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
147
200
  remainingLines -= 1;
148
201
  currentLine = '';
149
202
  currentLineWidth = 0;
150
203
  linebreak = true;
151
204
  }
152
205
  const initial = maxWidth - currentLineWidth;
153
- const [lines, rl, rt] = breakAll(word, fontFamily, initial, maxWidth, designLetterSpacing, remainingLines, hasMaxLines);
206
+ const [lines, rl, rt] = breakAll(measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines);
154
207
  remainingLines = rl;
155
208
  hasRemainingText = rt;
156
209
  if (linebreak === false) {
157
210
  const [text, width] = lines[0];
158
- currentLine += ' ' + text;
159
- currentLineWidth = width;
160
- wrappedLines.push([currentLine, currentLineWidth]);
211
+ currentLine += text;
212
+ currentLineWidth += width;
213
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
161
214
  }
162
215
  for (let j = 1; j < lines.length; j++) {
163
216
  [currentLine, currentLineWidth] = lines[j];
164
217
  if (j < lines.length - 1) {
165
- wrappedLines.push([currentLine, currentLineWidth]);
218
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
166
219
  }
167
220
  }
221
+ if (i < words.length - 1 && currentLine.endsWith(' ') === false) {
222
+ currentLine += ' ';
223
+ currentLineWidth += effectiveSpaceWidth;
224
+ }
168
225
  }
169
226
  }
170
227
  }
171
228
  // Add the last line if it has content
172
- if (currentLine.length > 0 && remainingLines === 0) {
173
- currentLine = truncateLineWithSuffix(currentLine, fontFamily, maxWidth, designLetterSpacing, overflowSuffix);
229
+ if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
230
+ currentLine = truncateLineWithSuffix(measureText, currentLine, fontFamily, maxWidth, letterSpacing, overflowSuffix);
174
231
  }
175
232
  if (currentLine.length > 0) {
176
- wrappedLines.push([currentLine, currentLineWidth]);
177
- }
178
- else {
179
- wrappedLines.push(['', 0]);
233
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
180
234
  }
181
235
  return [wrappedLines, remainingLines, hasRemainingText];
182
236
  };
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
237
  /**
213
238
  * Truncate a line with overflow suffix to fit within width
214
239
  */
215
- export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterSpacing, overflowSuffix) => {
216
- const suffixWidth = measureText(overflowSuffix, fontFamily, designLetterSpacing);
240
+ export const truncateLineWithSuffix = (measureText, line, fontFamily, maxWidth, letterSpacing, overflowSuffix) => {
241
+ const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
217
242
  if (suffixWidth >= maxWidth) {
218
243
  return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
219
244
  }
220
245
  let truncatedLine = line;
221
246
  while (truncatedLine.length > 0) {
222
- const lineWidth = measureText(truncatedLine, fontFamily, designLetterSpacing);
247
+ const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
223
248
  if (lineWidth + suffixWidth <= maxWidth) {
224
249
  return truncatedLine + overflowSuffix;
225
250
  }
@@ -230,7 +255,7 @@ export const truncateLineWithSuffix = (line, fontFamily, maxWidth, designLetterS
230
255
  /**
231
256
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
232
257
  */
233
- export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remainingLines, hasMaxLines) => {
258
+ export const breakWord = (measureText, word, fontFamily, maxWidth, letterSpacing, remainingLines) => {
234
259
  const lines = [];
235
260
  let currentPart = '';
236
261
  let currentWidth = 0;
@@ -240,16 +265,13 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
240
265
  const codepoint = char.codePointAt(0);
241
266
  if (codepoint === undefined)
242
267
  continue;
243
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
244
- if (glyph === null)
245
- continue;
246
- const charWidth = glyph.xadvance + designLetterSpacing;
268
+ const charWidth = measureText(char, fontFamily, letterSpacing);
247
269
  if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
248
270
  remainingLines--;
249
271
  if (remainingLines === 0) {
250
272
  break;
251
273
  }
252
- lines.push([currentPart, currentWidth]);
274
+ lines.push([currentPart, currentWidth, 0, 0]);
253
275
  currentPart = char;
254
276
  currentWidth = charWidth;
255
277
  }
@@ -259,14 +281,14 @@ export const breakWord = (word, fontFamily, maxWidth, designLetterSpacing, remai
259
281
  }
260
282
  }
261
283
  if (currentPart.length > 0) {
262
- lines.push([currentPart, currentWidth]);
284
+ lines.push([currentPart, currentWidth, 0, 0]);
263
285
  }
264
286
  return [lines, remainingLines, i < word.length - 1];
265
287
  };
266
288
  /**
267
289
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
268
290
  */
269
- export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacing, remainingLines, hasMaxLines) => {
291
+ export const breakAll = (measureText, word, fontFamily, initial, maxWidth, letterSpacing, remainingLines) => {
270
292
  const lines = [];
271
293
  let currentPart = '';
272
294
  let currentWidth = 0;
@@ -279,13 +301,9 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
279
301
  break;
280
302
  }
281
303
  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;
304
+ const charWidth = measureText(char, fontFamily, letterSpacing);
287
305
  if (currentWidth + charWidth > max && currentPart.length > 0) {
288
- lines.push([currentPart, currentWidth]);
306
+ lines.push([currentPart, currentWidth, 0, 0]);
289
307
  currentPart = char;
290
308
  currentWidth = charWidth;
291
309
  max = maxWidth;
@@ -297,8 +315,8 @@ export const breakAll = (word, fontFamily, initial, maxWidth, designLetterSpacin
297
315
  }
298
316
  }
299
317
  if (currentPart.length > 0) {
300
- lines.push([currentPart, currentWidth]);
318
+ lines.push([currentPart, currentWidth, 0, 0]);
301
319
  }
302
320
  return [lines, remainingLines, hasRemainingText];
303
321
  };
304
- //# sourceMappingURL=Utils.js.map
322
+ //# 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;