@lightningjs/renderer 3.0.0-beta14 → 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 (271) 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 +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 +65 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +269 -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 +616 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -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 +87 -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 +119 -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 +413 -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 +131 -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 +160 -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 +129 -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 +39 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -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/CanvasFontHandler.d.ts +21 -3
  129. package/dist/src/core/text-rendering/CanvasFontHandler.js +94 -32
  130. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  131. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
  132. package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
  133. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  134. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
  135. package/dist/src/core/text-rendering/SdfFontHandler.js +76 -56
  136. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  137. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
  138. package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
  139. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  140. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  141. package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -105
  142. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  143. package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
  144. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  145. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  146. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  147. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  148. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  149. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  150. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  151. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  152. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  153. package/dist/src/core/text-rendering/Utils.d.ts +1 -42
  154. package/dist/src/core/text-rendering/Utils.js +4 -132
  155. package/dist/src/core/text-rendering/Utils.js.map +1 -1
  156. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  157. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  158. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  159. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  160. package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
  161. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  162. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  163. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  164. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  165. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  166. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  167. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  168. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  169. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  170. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  171. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  172. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  173. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  175. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  176. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  177. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  178. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  179. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  180. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  181. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  182. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  183. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  184. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  185. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  186. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  187. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  188. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  189. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  193. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  194. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  195. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  196. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  197. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  198. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  208. package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  210. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  211. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  212. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  213. package/dist/src/core/utils.d.ts +2 -1
  214. package/dist/src/core/utils.js +1 -1
  215. package/dist/src/core/utils.js.map +1 -1
  216. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  217. package/dist/src/main-api/DynamicShaderController.js +58 -0
  218. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  219. package/dist/src/main-api/Inspector.d.ts +124 -0
  220. package/dist/src/main-api/Inspector.js +283 -8
  221. package/dist/src/main-api/Inspector.js.map +1 -1
  222. package/dist/src/main-api/Renderer.d.ts +150 -26
  223. package/dist/src/main-api/Renderer.js +27 -25
  224. package/dist/src/main-api/Renderer.js.map +1 -1
  225. package/dist/src/main-api/ShaderController.d.ts +31 -0
  226. package/dist/src/main-api/ShaderController.js +37 -0
  227. package/dist/src/main-api/ShaderController.js.map +1 -0
  228. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  229. package/exports/index.ts +1 -0
  230. package/package.json +14 -15
  231. package/src/core/CoreTextNode.ts +4 -22
  232. package/src/core/Stage.ts +2 -3
  233. package/src/core/animations/CoreAnimation.ts +8 -7
  234. package/src/core/lib/textureCompression.ts +4 -2
  235. package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
  236. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
  237. package/src/core/shaders/webgl/LinearGradient.ts +26 -3
  238. package/src/core/shaders/webgl/RadialGradient.ts +50 -28
  239. package/src/core/shaders/webgl/SdfShader.ts +1 -12
  240. package/src/core/text-rendering/CanvasFontHandler.ts +136 -39
  241. package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
  242. package/src/core/text-rendering/SdfFontHandler.ts +94 -60
  243. package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
  244. package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +209 -143
  245. package/src/core/text-rendering/TextRenderer.ts +36 -13
  246. package/src/core/text-rendering/Utils.ts +5 -163
  247. package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
  248. package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
  249. package/src/core/utils.ts +9 -7
  250. package/src/main-api/Inspector.ts +502 -12
  251. package/src/main-api/Renderer.ts +158 -26
  252. package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
  253. package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
  254. package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
  255. package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
  256. package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
  257. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
  258. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
  259. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
  260. package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
  261. package/dist/src/core/text-rendering/canvas/draw.js +0 -132
  262. package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
  263. package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
  264. package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
  265. package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
  266. package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
  267. package/src/core/text-rendering/canvas/Settings.ts +0 -99
  268. package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
  269. package/src/core/text-rendering/canvas/Utils.ts +0 -178
  270. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
  271. package/src/core/text-rendering/canvas/draw.ts +0 -165
@@ -24,9 +24,19 @@ import type {
24
24
  NormalizedFontMetrics,
25
25
  } from './TextRenderer.js';
26
26
  import type { Stage } from '../Stage.js';
27
- import { calculateFontMetrics } from './Utils.js';
27
+ import { hasZeroWidthSpace } from './Utils.js';
28
28
  import type { CoreTextNode } from '../CoreTextNode.js';
29
29
  import { UpdateType } from '../CoreNode.js';
30
+ import {
31
+ defaultFontMetrics,
32
+ normalizeFontMetrics,
33
+ } from './TextLayoutEngine.js';
34
+
35
+ interface CanvasFont {
36
+ fontFamily: string;
37
+ fontFace?: FontFace;
38
+ metrics?: FontMetrics;
39
+ }
30
40
 
31
41
  /**
32
42
  * Global font set regardless of if run in the main thread or a web worker
@@ -36,24 +46,19 @@ import { UpdateType } from '../CoreNode.js';
36
46
 
37
47
  // Global state variables for fontHandler
38
48
  const fontFamilies: Record<string, FontFace> = {};
39
- const loadedFonts = new Set<string>();
40
49
  const fontLoadPromises = new Map<string, Promise<void>>();
41
50
  const normalizedMetrics = new Map<string, NormalizedFontMetrics>();
42
- const nodesWaitingForFont: Record<string, CoreTextNode[]> = Object.create(null);
43
- let initialized = false;
44
- let context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
51
+ const nodesWaitingForFont: Record<string, CoreTextNode[]> = Object.create(
52
+ null,
53
+ ) as Record<string, CoreTextNode[]>;
45
54
 
46
- /**
47
- * Normalize font metrics to be in the range of 0 to 1
48
- */
49
- function normalizeMetrics(metrics: FontMetrics): NormalizedFontMetrics {
50
- return {
51
- ascender: metrics.ascender / metrics.unitsPerEm,
52
- descender: metrics.descender / metrics.unitsPerEm,
53
- lineGap: metrics.lineGap / metrics.unitsPerEm,
54
- };
55
- }
55
+ const fontCache = new Map<string, CanvasFont>();
56
56
 
57
+ let initialized = false;
58
+ let context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
59
+ let measureContext:
60
+ | CanvasRenderingContext2D
61
+ | OffscreenCanvasRenderingContext2D;
57
62
  /**
58
63
  * make fontface add not show errors
59
64
  */
@@ -69,6 +74,19 @@ export const canRenderFont = (): boolean => {
69
74
  return true;
70
75
  };
71
76
 
77
+ const processFontData = (
78
+ fontFamily: string,
79
+ fontFace?: FontFace,
80
+ metrics?: FontMetrics,
81
+ ) => {
82
+ metrics = metrics || defaultFontMetrics;
83
+ fontCache.set(fontFamily, {
84
+ fontFamily,
85
+ fontFace,
86
+ metrics,
87
+ });
88
+ };
89
+
72
90
  /**
73
91
  * Load a font by providing fontFamily, fontUrl, and optional metrics
74
92
  */
@@ -79,7 +97,7 @@ export const loadFont = async (
79
97
  const { fontFamily, fontUrl, metrics } = options;
80
98
 
81
99
  // If already loaded, return immediately
82
- if (loadedFonts.has(fontFamily) === true) {
100
+ if (fontCache.has(fontFamily) === true) {
83
101
  return;
84
102
  }
85
103
 
@@ -95,12 +113,8 @@ export const loadFont = async (
95
113
  .load()
96
114
  .then((loadedFont) => {
97
115
  (document.fonts as FontFaceSetWithAdd).add(loadedFont);
98
- loadedFonts.add(fontFamily);
116
+ processFontData(fontFamily, loadedFont, metrics);
99
117
  fontLoadPromises.delete(fontFamily);
100
- // Store normalized metrics if provided
101
- if (metrics) {
102
- setFontMetrics(fontFamily, normalizeMetrics(metrics));
103
- }
104
118
  for (let key in nwff) {
105
119
  nwff[key]!.setUpdateType(UpdateType.Local);
106
120
  }
@@ -127,7 +141,8 @@ export const getFontFamilies = (): FontFamilyMap => {
127
141
  * Initialize the global font handler
128
142
  */
129
143
  export const init = (
130
- c?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
144
+ c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
145
+ mc: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
131
146
  ): void => {
132
147
  if (initialized === true) {
133
148
  return;
@@ -140,16 +155,17 @@ export const init = (
140
155
  }
141
156
 
142
157
  context = c;
158
+ measureContext = mc;
143
159
 
144
160
  // Register the default 'sans-serif' font face
145
- const defaultMetrics: NormalizedFontMetrics = {
146
- ascender: 0.8,
147
- descender: -0.2,
148
- lineGap: 0.2,
161
+ const defaultMetrics: FontMetrics = {
162
+ ascender: 800,
163
+ descender: -200,
164
+ lineGap: 200,
165
+ unitsPerEm: 1000,
149
166
  };
150
167
 
151
- setFontMetrics('sans-serif', defaultMetrics);
152
- loadedFonts.add('sans-serif');
168
+ processFontData('sans-serif', undefined, defaultMetrics);
153
169
  initialized = true;
154
170
  };
155
171
 
@@ -159,7 +175,7 @@ export const type = 'canvas';
159
175
  * Check if a font is already loaded by font family
160
176
  */
161
177
  export const isFontLoaded = (fontFamily: string): boolean => {
162
- return loadedFonts.has(fontFamily) || fontFamily === 'sans-serif';
178
+ return fontCache.has(fontFamily);
163
179
  };
164
180
 
165
181
  /**
@@ -191,20 +207,101 @@ export const getFontMetrics = (
191
207
  fontFamily: string,
192
208
  fontSize: number,
193
209
  ): NormalizedFontMetrics => {
194
- let out =
195
- normalizedMetrics.get(fontFamily) ||
196
- normalizedMetrics.get(fontFamily + fontSize);
210
+ const out = normalizedMetrics.get(fontFamily + fontSize);
197
211
  if (out !== undefined) {
198
212
  return out;
199
213
  }
200
- out = calculateFontMetrics(context, fontFamily, fontSize);
201
- normalizedMetrics.set(fontFamily + fontSize, out);
202
- return out;
214
+ let metrics = fontCache.get(fontFamily)!.metrics;
215
+ if (metrics === undefined) {
216
+ metrics = calculateFontMetrics(fontFamily, fontSize);
217
+ }
218
+ return processFontMetrics(fontFamily, fontSize, metrics);
203
219
  };
204
220
 
205
- export const setFontMetrics = (
221
+ export const processFontMetrics = (
206
222
  fontFamily: string,
207
- metrics: NormalizedFontMetrics,
208
- ): void => {
209
- normalizedMetrics.set(fontFamily, metrics);
223
+ fontSize: number,
224
+ metrics: FontMetrics,
225
+ ): NormalizedFontMetrics => {
226
+ const label = fontFamily + fontSize;
227
+ const normalized = normalizeFontMetrics(metrics, fontSize);
228
+ normalizedMetrics.set(label, normalized);
229
+ return normalized;
210
230
  };
231
+
232
+ export const measureText = (
233
+ text: string,
234
+ fontFamily: string,
235
+ letterSpacing: number,
236
+ ) => {
237
+ if (letterSpacing === 0) {
238
+ return measureContext.measureText(text).width;
239
+ }
240
+ if (hasZeroWidthSpace(text) === false) {
241
+ return measureContext.measureText(text).width + letterSpacing * text.length;
242
+ }
243
+ return text.split('').reduce((acc, char) => {
244
+ if (hasZeroWidthSpace(char) === true) {
245
+ return acc;
246
+ }
247
+ return acc + measureContext.measureText(char).width + letterSpacing;
248
+ }, 0);
249
+ };
250
+
251
+ /**
252
+ * Get the font metrics for a font face.
253
+ *
254
+ * @remarks
255
+ * This function will attempt to grab the explicitly defined metrics from the
256
+ * font face first. If the font face does not have metrics defined, it will
257
+ * attempt to calculate the metrics using the browser's measureText method.
258
+ *
259
+ * If the browser does not support the font metrics API, it will use some
260
+ * default values.
261
+ *
262
+ * @param context
263
+ * @param fontFace
264
+ * @param fontSize
265
+ * @returns
266
+ */
267
+ export function calculateFontMetrics(
268
+ fontFamily: string,
269
+ fontSize: number,
270
+ ): FontMetrics {
271
+ // If the font face doesn't have metrics defined, we fallback to using the
272
+ // browser's measureText method to calculate take a best guess at the font
273
+ // actual font's metrics.
274
+ // - fontBoundingBox[Ascent|Descent] is the best estimate but only supported
275
+ // in Chrome 87+ (2020), Firefox 116+ (2023), and Safari 11.1+ (2018).
276
+ // - It is an estimate as it can vary between browsers.
277
+ // - actualBoundingBox[Ascent|Descent] is less accurate and supported in
278
+ // Chrome 77+ (2019), Firefox 74+ (2020), and Safari 11.1+ (2018).
279
+ // - If neither are supported, we'll use some default values which will
280
+ // get text on the screen but likely not be great.
281
+ // NOTE: It's been decided not to rely on fontBoundingBox[Ascent|Descent]
282
+ // as it's browser support is limited and it also tends to produce higher than
283
+ // expected values. It is instead HIGHLY RECOMMENDED that developers provide
284
+ // explicit metrics in the font face definition.
285
+ const metrics = measureContext.measureText(
286
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
287
+ );
288
+ console.warn(
289
+ `Font metrics not provided for Canvas Web font ${fontFamily}. ` +
290
+ 'Using fallback values. It is HIGHLY recommended you use the latest ' +
291
+ 'version of the Lightning 3 `msdf-generator` tool to extract the default ' +
292
+ 'metrics for the font and provide them in the Canvas Web font definition.',
293
+ );
294
+ const ascender =
295
+ metrics.fontBoundingBoxAscent ?? metrics.actualBoundingBoxAscent ?? 0;
296
+ const descender =
297
+ metrics.fontBoundingBoxDescent ?? metrics.actualBoundingBoxDescent ?? 0;
298
+ return {
299
+ ascender,
300
+ descender: -descender,
301
+ lineGap:
302
+ (metrics.emHeightAscent ?? 0) +
303
+ (metrics.emHeightDescent ?? 0) -
304
+ (ascender + descender),
305
+ unitsPerEm: (metrics.emHeightAscent ?? 0) + (metrics.emHeightDescent ?? 0),
306
+ };
307
+ }