@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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 (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -18,62 +18,64 @@
18
18
  */
19
19
 
20
20
  import type {
21
+ FontHandler,
21
22
  TextRenderer,
22
- TextRendererMap,
23
23
  TrProps,
24
- TextRendererState,
25
- TrFailedEventHandler,
26
- TrLoadedEventHandler,
27
- } from './text-rendering/renderers/TextRenderer.js';
28
- import { CoreNode, UpdateType, type CoreNodeProps } from './CoreNode.js';
24
+ TextLayout,
25
+ TextRenderInfo,
26
+ } from './text-rendering/TextRenderer.js';
27
+ import {
28
+ CoreNode,
29
+ CoreNodeRenderState,
30
+ UpdateType,
31
+ type CoreNodeProps,
32
+ } from './CoreNode.js';
29
33
  import type { Stage } from './Stage.js';
30
- import type { CoreRenderer } from './renderers/CoreRenderer.js';
31
34
  import type {
32
35
  NodeTextFailedPayload,
33
36
  NodeTextLoadedPayload,
37
+ NodeTextureLoadedPayload,
34
38
  } from '../common/CommonTypes.js';
35
39
  import type { RectWithValid } from './lib/utils.js';
36
- import { assertTruthy } from '../utils.js';
40
+ import type { CoreRenderer } from './renderers/CoreRenderer.js';
41
+ import type { TextureLoadedEventHandler } from './textures/Texture.js';
37
42
  import { Matrix3d } from './lib/Matrix3d.js';
38
-
39
43
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
40
44
  /**
41
45
  * Force Text Node to use a specific Text Renderer
42
- *
43
- * @remarks
44
- * By default, Text Nodes resolve the Text Renderer to use based on the font
45
- * that is matched using the font family and other font selection properties.
46
- *
47
- * If two fonts supported by two separate Text Renderers are matched setting
48
- * this override forces the Text Node to resolve to the Text Renderer defined
49
- * here.
50
- *
51
- * @default null
52
46
  */
53
- textRendererOverride: keyof TextRendererMap | null;
47
+ textRendererOverride?: string | null;
48
+ forceLoad: boolean;
49
+ }
50
+
51
+ export enum TextConstraint {
52
+ 'none' = 0,
53
+ 'width' = 1,
54
+ 'height' = 2,
55
+ 'both' = 4,
54
56
  }
55
57
 
56
- /**
57
- * An CoreNode in the Renderer scene graph that renders text.
58
- *
59
- * @remarks
60
- * A Text Node is the second graphical building block of the Renderer scene
61
- * graph. It renders text using a specific text renderer that is automatically
62
- * chosen based on the font requested and what type of fonts are installed
63
- * into an app.
64
- *
65
- * The text renderer can be overridden by setting the `textRendererOverride`
66
- *
67
- * The `texture` and `shader` properties are managed by loaded text renderer and
68
- * should not be set directly.
69
- *
70
- * For non-text rendering, see {@link CoreNode}.
71
- */
72
58
  export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
73
- textRenderer: TextRenderer;
74
- trState: TextRendererState;
75
- private _textRendererOverride: CoreTextNodeProps['textRendererOverride'] =
76
- null;
59
+ private textRenderer: TextRenderer;
60
+ private fontHandler: FontHandler;
61
+
62
+ private _layoutGenerated = false;
63
+ private _waitingForFont = false;
64
+ private _containType: TextConstraint = TextConstraint.none;
65
+
66
+ // SDF layout caching for performance
67
+ private _cachedLayout: TextLayout | null = null;
68
+ private _lastVertexBuffer: Float32Array | null = null;
69
+
70
+ // Text renderer properties - stored directly on the node
71
+ private textProps: CoreTextNodeProps;
72
+
73
+ private _renderInfo: TextRenderInfo = {
74
+ width: 0,
75
+ height: 0,
76
+ };
77
+
78
+ private _type: 'sdf' | 'canvas' = 'sdf'; // Default to SDF renderer
77
79
 
78
80
  constructor(
79
81
  stage: Stage,
@@ -81,359 +83,495 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
81
83
  textRenderer: TextRenderer,
82
84
  ) {
83
85
  super(stage, props);
84
- this._textRendererOverride = props.textRendererOverride;
85
86
  this.textRenderer = textRenderer;
86
- const textRendererState = this.createState({
87
- x: this.absX,
88
- y: this.absY,
89
- width: props.width,
90
- height: props.height,
91
- textAlign: props.textAlign,
92
- color: props.color,
93
- zIndex: props.zIndex,
94
- contain: props.contain,
95
- scrollable: props.scrollable,
96
- scrollY: props.scrollY,
97
- offsetY: props.offsetY,
98
- letterSpacing: props.letterSpacing,
99
- debug: props.debug,
100
- fontFamily: props.fontFamily,
101
- fontSize: props.fontSize,
102
- fontStretch: props.fontStretch,
103
- fontStyle: props.fontStyle,
104
- fontWeight: props.fontWeight,
105
- text: props.text,
106
- lineHeight: props.lineHeight,
107
- maxLines: props.maxLines,
108
- textBaseline: props.textBaseline,
109
- verticalAlign: props.verticalAlign,
110
- overflowSuffix: props.overflowSuffix,
111
- });
112
-
113
- this.trState = textRendererState;
114
- }
115
-
116
- private onTextLoaded: TrLoadedEventHandler = () => {
117
- const { contain } = this;
118
- const setWidth = this.trState.props.width;
119
- const setHeight = this.trState.props.height;
120
- const calcWidth = this.trState.textW || 0;
121
- const calcHeight = this.trState.textH || 0;
122
-
123
- if (contain === 'both') {
124
- this.props.width = setWidth;
125
- this.props.height = setHeight;
126
- } else if (contain === 'width') {
127
- this.props.width = setWidth;
128
- this.props.height = calcHeight;
129
- } else if (contain === 'none') {
130
- this.props.width = calcWidth;
131
- this.props.height = calcHeight;
132
- }
133
- this.updateLocalTransform();
134
-
135
- // Incase the RAF loop has been stopped already before text was loaded,
136
- // we request a render so it can be drawn.
137
- this.stage.requestRender();
138
- this.emit('loaded', {
139
- type: 'text',
140
- dimensions: {
141
- width: this.trState.textW || 0,
142
- height: this.trState.textH || 0,
143
- },
144
- } satisfies NodeTextLoadedPayload);
145
- };
87
+ this.fontHandler = textRenderer.font;
88
+ this._type = textRenderer.type;
146
89
 
147
- private onTextFailed: TrFailedEventHandler = (target, error) => {
148
- this.emit('failed', {
149
- type: 'text',
150
- error,
151
- } satisfies NodeTextFailedPayload);
152
- };
90
+ // Initialize text properties from props
91
+ // Props are guaranteed to have all defaults resolved by Stage.createTextNode
92
+ this.textProps = props;
93
+ this._containType = TextConstraint[props.contain];
153
94
 
154
- override get width(): number {
155
- return this.props.width;
95
+ this.setUpdateType(UpdateType.All);
156
96
  }
157
97
 
158
- override set width(value: number) {
159
- this.props.width = value;
160
- this.textRenderer.set.width(this.trState, value);
98
+ protected override onTextureLoaded: TextureLoadedEventHandler = (
99
+ _,
100
+ dimensions,
101
+ ) => {
102
+ // If parent has a render texture, flag that we need to update
103
+ if (this.parentHasRenderTexture) {
104
+ this.notifyParentRTTOfUpdate();
105
+ }
106
+ // ignore 1x1 pixel textures
107
+ if (dimensions.w > 1 && dimensions.h > 1) {
108
+ this.emit('loaded', {
109
+ type: 'texture',
110
+ dimensions,
111
+ } satisfies NodeTextureLoadedPayload);
112
+ }
113
+ this.setUpdateType(UpdateType.IsRenderable);
114
+ };
161
115
 
162
- // If not containing, we must update the local transform to account for the
163
- // new width
164
- if (this.contain === 'none') {
165
- this.setUpdateType(UpdateType.Local);
116
+ allowTextGeneration() {
117
+ const p = this.props.parent;
118
+ if (p === null) {
119
+ return false;
166
120
  }
121
+ if (p.worldAlpha > 0 && p.renderState > CoreNodeRenderState.OutOfBounds) {
122
+ return true;
123
+ }
124
+ return false;
167
125
  }
168
126
 
169
- override get height(): number {
170
- return this.props.height;
171
- }
127
+ override updateLocalTransform() {
128
+ const p = this.props;
129
+ let { x, y, w, h } = p;
130
+ const mountX = p.mountX;
131
+ const mountY = p.mountY;
132
+ let mountTranslateX = p.mountX * w;
133
+ let mountTranslateY = p.mountY * h;
134
+
135
+ let localTextTransform: Matrix3d | null = null;
136
+
137
+ const tProps = this.textProps;
138
+ const { textAlign, verticalAlign, maxWidth, maxHeight } = tProps;
139
+ const contain = this._containType;
140
+
141
+ const hasMaxWidth = maxWidth > 0;
142
+ const hasMaxHeight = maxHeight > 0;
143
+
144
+ if (contain > 0 && (hasMaxWidth || hasMaxHeight)) {
145
+ let containX = 0;
146
+ let containY = 0;
147
+ if (contain & TextConstraint.width && hasMaxWidth === true) {
148
+ if (textAlign === 'right') {
149
+ containX = maxWidth - w;
150
+ } else if (textAlign === 'center') {
151
+ containX = (maxWidth - w) * 0.5;
152
+ }
153
+ mountTranslateX = mountX * maxWidth;
154
+ }
155
+ if (contain & TextConstraint.height && maxHeight > 0) {
156
+ if (verticalAlign === 'bottom') {
157
+ containY = maxHeight - h;
158
+ } else if (verticalAlign === 'middle') {
159
+ containY = (maxHeight - h) * 0.5;
160
+ }
161
+ mountTranslateY = mountY * maxHeight;
162
+ }
163
+ localTextTransform = Matrix3d.translate(containX, containY);
164
+ }
172
165
 
173
- override set height(value: number) {
174
- this.props.height = value;
175
- this.textRenderer.set.height(this.trState, value);
166
+ if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
167
+ const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
168
+ const pivotW =
169
+ contain & TextConstraint.width && maxWidth > 0 ? maxWidth : w;
170
+ const pivotH =
171
+ contain & TextConstraint.height && maxHeight > 0 ? maxHeight : h;
172
+ const pivotTranslateX = p.pivotX * pivotW;
173
+ const pivotTranslateY = p.pivotY * pivotH;
174
+
175
+ this.localTransform = Matrix3d.translate(
176
+ x - mountTranslateX + pivotTranslateX,
177
+ y - mountTranslateY + pivotTranslateY,
178
+ this.localTransform,
179
+ )
180
+ .multiply(scaleRotate)
181
+ .translate(-pivotTranslateX, -pivotTranslateY);
182
+ } else {
183
+ this.localTransform = Matrix3d.translate(
184
+ x - mountTranslateX,
185
+ y - mountTranslateY,
186
+ this.localTransform,
187
+ );
188
+ }
176
189
 
177
- // If not containing in the horizontal direction, we must update the local
178
- // transform to account for the new height
179
- if (this.contain !== 'both') {
180
- this.setUpdateType(UpdateType.Local);
190
+ if (localTextTransform !== null) {
191
+ this.localTransform = this.localTransform.multiply(localTextTransform);
181
192
  }
182
193
  }
183
194
 
184
- override get color(): number {
185
- return this.trState.props.color;
186
- }
195
+ /**
196
+ * Override CoreNode's update method to handle text-specific updates
197
+ */
198
+ override update(delta: number, parentClippingRect: RectWithValid): void {
199
+ if (
200
+ (this.textProps.forceLoad === true ||
201
+ this.allowTextGeneration() === true) &&
202
+ this._layoutGenerated === false
203
+ ) {
204
+ if (this.fontHandler.isFontLoaded(this.textProps.fontFamily) === true) {
205
+ this._waitingForFont = false;
206
+ this._cachedLayout = null; // Invalidate cached layout
207
+ this._lastVertexBuffer = null; // Invalidate last vertex buffer
208
+ const resp = this.textRenderer.renderText(this.textProps);
209
+ this.handleRenderResult(resp);
210
+ this._layoutGenerated = true;
211
+ } else if (this._waitingForFont === false) {
212
+ this.fontHandler.waitingForFont(this.textProps.fontFamily, this);
213
+ this._waitingForFont = true;
214
+ }
215
+ }
187
216
 
188
- override set color(value: number) {
189
- this.textRenderer.set.color(this.trState, value);
217
+ // First run the standard CoreNode update
218
+ super.update(delta, parentClippingRect);
190
219
  }
191
220
 
192
- get text(): string {
193
- return this.trState.props.text;
194
- }
221
+ /**
222
+ * Override is renderable check for SDF text nodes
223
+ */
224
+ override updateIsRenderable(): void {
225
+ // SDF text nodes are always renderable if they have a valid layout
226
+ if (this._type === 'canvas') {
227
+ super.updateIsRenderable();
228
+ return;
229
+ }
195
230
 
196
- set text(value: string) {
197
- this.textRenderer.set.text(this.trState, value);
231
+ // For SDF, check if we have a cached layout
232
+ this.setRenderable(this._cachedLayout !== null);
198
233
  }
199
234
 
200
- get textRendererOverride(): CoreTextNodeProps['textRendererOverride'] {
201
- return this._textRendererOverride;
235
+ /**
236
+ * Handle the result of text rendering for both Canvas and SDF renderers
237
+ */
238
+ private handleRenderResult(result: TextRenderInfo): void {
239
+ // Host paths on top
240
+ const textRendererType = this._type;
241
+ let width = result.width;
242
+ let height = result.height;
243
+
244
+ // Handle Canvas renderer (uses ImageData)
245
+ if (textRendererType === 'canvas') {
246
+ if (result.imageData === undefined) {
247
+ this.emit('failed', {
248
+ type: 'text',
249
+ error: new Error(
250
+ 'Canvas text rendering failed, no image data returned',
251
+ ),
252
+ } satisfies NodeTextFailedPayload);
253
+ return;
254
+ }
255
+
256
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
257
+ premultiplyAlpha: true,
258
+ src: result.imageData as ImageData,
259
+ });
260
+ // It isn't renderable until the texture is loaded we have to set it to false here to avoid it
261
+ // being detected as a renderable default color node in the next frame
262
+ // it will be corrected once the texture is loaded
263
+ this.setRenderable(false);
264
+
265
+ if (this.renderState > CoreNodeRenderState.OutOfBounds) {
266
+ // We do want the texture to load immediately
267
+ this.texture.setRenderableOwner(this._id, true);
268
+ }
269
+ }
270
+
271
+ this._cachedLayout = result.layout || null;
272
+ this.props.w = width;
273
+ this.props.h = height;
274
+
275
+ // Handle SDF renderer (uses layout caching)
276
+ if (textRendererType === 'sdf') {
277
+ this.setRenderable(true);
278
+ this.setUpdateType(UpdateType.Local);
279
+ }
280
+
281
+ this._renderInfo = result;
282
+ queueMicrotask(this.emitTextLoadedEvent);
202
283
  }
203
284
 
204
- set textRendererOverride(value: CoreTextNodeProps['textRendererOverride']) {
205
- this._textRendererOverride = value;
206
- this.textRenderer.destroyState(this.trState);
285
+ // Reusable bound method for emitting loaded event
286
+ private emitTextLoadedEvent = () => {
287
+ this.emit('loaded', {
288
+ type: 'text',
289
+ dimensions: {
290
+ w: this._renderInfo.width,
291
+ h: this._renderInfo.height,
292
+ },
293
+ } satisfies NodeTextLoadedPayload);
294
+ };
207
295
 
208
- const textRenderer = this.stage.resolveTextRenderer(
209
- this.trState.props,
210
- this._textRendererOverride,
211
- );
296
+ /**
297
+ * Override renderQuads to handle SDF vs Canvas rendering
298
+ */
299
+ override renderQuads(renderer: CoreRenderer): void {
300
+ if (this.parentHasRenderTexture === true) {
301
+ const rtt = renderer.renderToTextureActive;
302
+ if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
303
+ return;
304
+ }
212
305
 
213
- if (!textRenderer) {
214
- console.warn(
215
- 'Text Renderer not found for font',
216
- this.trState.props.fontFamily,
217
- );
306
+ // Canvas renderer: use standard texture rendering via CoreNode
307
+ if (this._type === 'canvas') {
308
+ super.renderQuads(renderer);
218
309
  return;
219
310
  }
220
311
 
221
- this.textRenderer = textRenderer;
222
- this.trState = this.createState(this.trState.props);
223
- }
312
+ // Early return if no cached data
313
+ if (!this._cachedLayout) {
314
+ return;
315
+ }
224
316
 
225
- get fontSize(): CoreTextNodeProps['fontSize'] {
226
- return this.trState.props.fontSize;
227
- }
317
+ if (this._lastVertexBuffer === null) {
318
+ this._lastVertexBuffer = this.textRenderer.addQuads(this._cachedLayout);
319
+ }
228
320
 
229
- set fontSize(value: CoreTextNodeProps['fontSize']) {
230
- this.textRenderer.set.fontSize(this.trState, value);
321
+ const props = this.textProps;
322
+ this.textRenderer.renderQuads(
323
+ renderer,
324
+ this._cachedLayout as TextLayout,
325
+ this._lastVertexBuffer!,
326
+ {
327
+ fontFamily: this.textProps.fontFamily,
328
+ fontSize: props.fontSize,
329
+ color: this.props.color || 0xffffffff,
330
+ offsetY: props.offsetY,
331
+ worldAlpha: this.worldAlpha,
332
+ globalTransform: this.globalTransform!.getFloatArr(),
333
+ clippingRect: this.clippingRect,
334
+ width: this.props.w,
335
+ height: this.props.h,
336
+ parentHasRenderTexture: this.parentHasRenderTexture,
337
+ framebufferDimensions:
338
+ this.parentHasRenderTexture === true
339
+ ? this.parentFramebufferDimensions
340
+ : null,
341
+ stage: this.stage,
342
+ },
343
+ );
231
344
  }
232
345
 
233
- get fontFamily(): CoreTextNodeProps['fontFamily'] {
234
- return this.trState.props.fontFamily;
235
- }
346
+ override destroy(): void {
347
+ if (this._waitingForFont === true && this.fontHandler) {
348
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
349
+ }
236
350
 
237
- set fontFamily(value: CoreTextNodeProps['fontFamily']) {
238
- this.textRenderer.set.fontFamily(this.trState, value);
239
- }
351
+ // Clear cached layout and vertex buffer
352
+ this._cachedLayout = null;
353
+ this._lastVertexBuffer = null;
240
354
 
241
- get fontStretch(): CoreTextNodeProps['fontStretch'] {
242
- return this.trState.props.fontStretch;
243
- }
355
+ this.fontHandler = null!; // Clear reference to avoid memory leaks
356
+ this.textRenderer = null!; // Clear reference to avoid memory leaks
244
357
 
245
- set fontStretch(value: CoreTextNodeProps['fontStretch']) {
246
- this.textRenderer.set.fontStretch(this.trState, value);
358
+ super.destroy();
247
359
  }
248
360
 
249
- get fontStyle(): CoreTextNodeProps['fontStyle'] {
250
- return this.trState.props.fontStyle;
361
+ override set w(value: number) {
362
+ // dont allow direct setting of width on text nodes, handled by text layout generation
363
+ console.warn('Cannot directly set w on CoreTextNode');
251
364
  }
252
365
 
253
- set fontStyle(value: CoreTextNodeProps['fontStyle']) {
254
- this.textRenderer.set.fontStyle(this.trState, value);
366
+ override get w(): number {
367
+ return this.props.w;
255
368
  }
256
369
 
257
- get fontWeight(): CoreTextNodeProps['fontWeight'] {
258
- return this.trState.props.fontWeight;
370
+ override set h(value: number) {
371
+ // dont allow direct setting of height on text nodes, handled by text layout generation
372
+ console.warn('Cannot directly set h on CoreTextNode');
259
373
  }
260
374
 
261
- set fontWeight(value: CoreTextNodeProps['fontWeight']) {
262
- this.textRenderer.set.fontWeight(this.trState, value);
375
+ override get h(): number {
376
+ return this.props.h;
263
377
  }
264
378
 
265
- get textAlign(): CoreTextNodeProps['textAlign'] {
266
- return this.trState.props.textAlign;
379
+ get maxWidth() {
380
+ return this.textProps.maxWidth;
267
381
  }
268
382
 
269
- set textAlign(value: CoreTextNodeProps['textAlign']) {
270
- this.textRenderer.set.textAlign(this.trState, value);
383
+ set maxWidth(value: number) {
384
+ if (this.textProps.maxWidth !== value) {
385
+ this.textProps.maxWidth = value;
386
+ this._layoutGenerated = false;
387
+ this.setUpdateType(UpdateType.Local);
388
+ }
271
389
  }
272
390
 
273
- get contain(): CoreTextNodeProps['contain'] {
274
- return this.trState.props.contain;
391
+ // Property getters and setters
392
+ get maxHeight() {
393
+ return this.textProps.maxHeight;
275
394
  }
276
395
 
277
- set contain(value: CoreTextNodeProps['contain']) {
278
- this.textRenderer.set.contain(this.trState, value);
396
+ set maxHeight(value: number) {
397
+ if (this.textProps.maxHeight !== value) {
398
+ this.textProps.maxHeight = value;
399
+ this._layoutGenerated = false;
400
+ this.setUpdateType(UpdateType.Local);
401
+ }
279
402
  }
280
403
 
281
- get scrollable(): CoreTextNodeProps['scrollable'] {
282
- return this.trState.props.scrollable;
404
+ get contain(): TrProps['contain'] {
405
+ return this.textProps.contain;
283
406
  }
284
407
 
285
- set scrollable(value: CoreTextNodeProps['scrollable']) {
286
- this.textRenderer.set.scrollable(this.trState, value);
408
+ set contain(value: TrProps['contain']) {
409
+ if (this.textProps.contain !== value) {
410
+ this.textProps.contain = value;
411
+ this._containType = TextConstraint[value];
412
+ this.setUpdateType(UpdateType.Local);
413
+ }
287
414
  }
288
415
 
289
- get scrollY(): CoreTextNodeProps['scrollY'] {
290
- return this.trState.props.scrollY;
416
+ get text(): string {
417
+ return this.textProps.text;
291
418
  }
292
419
 
293
- set scrollY(value: CoreTextNodeProps['scrollY']) {
294
- this.textRenderer.set.scrollY(this.trState, value);
420
+ set text(value: string) {
421
+ if (this.textProps.text !== value) {
422
+ this.textProps.text = value;
423
+ this._layoutGenerated = false;
424
+ this.setUpdateType(UpdateType.Local);
425
+ }
295
426
  }
296
427
 
297
- get offsetY(): CoreTextNodeProps['offsetY'] {
298
- return this.trState.props.offsetY;
428
+ get fontSize(): number {
429
+ return this.textProps.fontSize;
299
430
  }
300
431
 
301
- set offsetY(value: CoreTextNodeProps['offsetY']) {
302
- this.textRenderer.set.offsetY(this.trState, value);
432
+ set fontSize(value: number) {
433
+ if (this.textProps.fontSize !== value) {
434
+ this.textProps.fontSize = value;
435
+ this._layoutGenerated = false;
436
+ this.setUpdateType(UpdateType.Local);
437
+ }
303
438
  }
304
439
 
305
- get letterSpacing(): CoreTextNodeProps['letterSpacing'] {
306
- return this.trState.props.letterSpacing;
440
+ get fontFamily(): string {
441
+ return this.textProps.fontFamily;
307
442
  }
308
443
 
309
- set letterSpacing(value: CoreTextNodeProps['letterSpacing']) {
310
- this.textRenderer.set.letterSpacing(this.trState, value);
444
+ set fontFamily(value: string) {
445
+ if (this.textProps.fontFamily !== value) {
446
+ if (this._waitingForFont === true) {
447
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
448
+ }
449
+ this.textProps.fontFamily = value;
450
+ this._layoutGenerated = false;
451
+ this.setUpdateType(UpdateType.Local);
452
+ }
311
453
  }
312
454
 
313
- get lineHeight(): CoreTextNodeProps['lineHeight'] {
314
- return this.trState.props.lineHeight;
455
+ get fontStyle(): TrProps['fontStyle'] {
456
+ return this.textProps.fontStyle;
315
457
  }
316
458
 
317
- set lineHeight(value: CoreTextNodeProps['lineHeight']) {
318
- this.textRenderer.set.lineHeight(this.trState, value);
459
+ set fontStyle(value: TrProps['fontStyle']) {
460
+ if (this.textProps.fontStyle !== value) {
461
+ this.textProps.fontStyle = value;
462
+ this._layoutGenerated = false;
463
+ this.setUpdateType(UpdateType.Local);
464
+ }
319
465
  }
320
466
 
321
- get maxLines(): CoreTextNodeProps['maxLines'] {
322
- return this.trState.props.maxLines;
467
+ get textAlign(): TrProps['textAlign'] {
468
+ return this.textProps.textAlign;
323
469
  }
324
470
 
325
- set maxLines(value: CoreTextNodeProps['maxLines']) {
326
- this.textRenderer.set.maxLines(this.trState, value);
471
+ set textAlign(value: TrProps['textAlign']) {
472
+ if (this.textProps.textAlign !== value) {
473
+ this.textProps.textAlign = value;
474
+ this._layoutGenerated = false;
475
+ this.setUpdateType(UpdateType.Local);
476
+ }
327
477
  }
328
478
 
329
- get textBaseline(): CoreTextNodeProps['textBaseline'] {
330
- return this.trState.props.textBaseline;
479
+ get letterSpacing(): number {
480
+ return this.textProps.letterSpacing;
331
481
  }
332
482
 
333
- set textBaseline(value: CoreTextNodeProps['textBaseline']) {
334
- this.textRenderer.set.textBaseline(this.trState, value);
483
+ set letterSpacing(value: number) {
484
+ if (this.textProps.letterSpacing !== value) {
485
+ this.textProps.letterSpacing = value;
486
+ this._layoutGenerated = false;
487
+ this.setUpdateType(UpdateType.Local);
488
+ }
335
489
  }
336
490
 
337
- get verticalAlign(): CoreTextNodeProps['verticalAlign'] {
338
- return this.trState.props.verticalAlign;
491
+ get lineHeight(): number {
492
+ return this.textProps.lineHeight;
339
493
  }
340
494
 
341
- set verticalAlign(value: CoreTextNodeProps['verticalAlign']) {
342
- this.textRenderer.set.verticalAlign(this.trState, value);
495
+ set lineHeight(value: number) {
496
+ if (this.textProps.lineHeight !== value) {
497
+ this.textProps.lineHeight = value;
498
+ this._layoutGenerated = false;
499
+ this.setUpdateType(UpdateType.Local);
500
+ }
343
501
  }
344
502
 
345
- get overflowSuffix(): CoreTextNodeProps['overflowSuffix'] {
346
- return this.trState.props.overflowSuffix;
503
+ get maxLines(): number {
504
+ return this.textProps.maxLines;
347
505
  }
348
506
 
349
- set overflowSuffix(value: CoreTextNodeProps['overflowSuffix']) {
350
- this.textRenderer.set.overflowSuffix(this.trState, value);
507
+ set maxLines(value: number) {
508
+ if (this.textProps.maxLines !== value) {
509
+ this.textProps.maxLines = value;
510
+ this._layoutGenerated = false;
511
+ this.setUpdateType(UpdateType.Local);
512
+ }
351
513
  }
352
514
 
353
- get debug(): CoreTextNodeProps['debug'] {
354
- return this.trState.props.debug;
515
+ get verticalAlign(): TrProps['verticalAlign'] {
516
+ return this.textProps.verticalAlign;
355
517
  }
356
518
 
357
- set debug(value: CoreTextNodeProps['debug']) {
358
- this.textRenderer.set.debug(this.trState, value);
519
+ set verticalAlign(value: TrProps['verticalAlign']) {
520
+ if (this.textProps.verticalAlign !== value) {
521
+ this.textProps.verticalAlign = value;
522
+ this._layoutGenerated = false;
523
+ this.setUpdateType(UpdateType.Local);
524
+ }
359
525
  }
360
526
 
361
- override update(delta: number, parentClippingRect: RectWithValid) {
362
- super.update(delta, parentClippingRect);
363
-
364
- assertTruthy(this.globalTransform);
365
-
366
- // globalTransform is updated in super.update(delta)
367
- this.textRenderer.set.x(this.trState, this.globalTransform.tx);
368
- this.textRenderer.set.y(this.trState, this.globalTransform.ty);
527
+ get overflowSuffix(): string {
528
+ return this.textProps.overflowSuffix;
369
529
  }
370
530
 
371
- override checkBasicRenderability() {
372
- if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
373
- return false;
374
- }
375
-
376
- if (this.trState && this.trState.props.text !== '') {
377
- return true;
531
+ set overflowSuffix(value: string) {
532
+ if (this.textProps.overflowSuffix !== value) {
533
+ this.textProps.overflowSuffix = value;
534
+ this._layoutGenerated = false;
535
+ this.setUpdateType(UpdateType.Local);
378
536
  }
379
-
380
- return false;
381
537
  }
382
538
 
383
- override setRenderable(isRenderable: boolean) {
384
- super.setRenderable(isRenderable);
385
- this.textRenderer.setIsRenderable(this.trState, isRenderable);
539
+ get wordBreak(): TrProps['wordBreak'] {
540
+ return this.textProps.wordBreak;
386
541
  }
387
542
 
388
- override renderQuads(renderer: CoreRenderer) {
389
- assertTruthy(this.globalTransform);
390
-
391
- // If the text renderer does not support rendering quads, fallback to the
392
- // default renderQuads method
393
- if (!this.textRenderer.renderQuads) {
394
- super.renderQuads(renderer);
395
- return;
543
+ set wordBreak(value: TrProps['wordBreak']) {
544
+ if (this.textProps.wordBreak !== value) {
545
+ this.textProps.wordBreak = value;
546
+ this._layoutGenerated = false;
547
+ this.setUpdateType(UpdateType.Local);
396
548
  }
549
+ }
397
550
 
398
- // If the text renderer does support rendering quads, use it...
551
+ get offsetY(): number {
552
+ return this.textProps.offsetY;
553
+ }
399
554
 
400
- // Prevent quad rendering if parent has a render texture
401
- // and this node is not the render texture
402
- if (this.parentHasRenderTexture) {
403
- if (!renderer.renderToTextureActive) {
404
- return;
405
- }
406
- // Prevent quad rendering if parent render texture is not the active render texture
407
- if (this.parentRenderTexture !== renderer.activeRttNode) {
408
- return;
409
- }
555
+ set offsetY(value: number) {
556
+ if (this.textProps.offsetY !== value) {
557
+ this.textProps.offsetY = value;
558
+ this._layoutGenerated = false;
559
+ this.setUpdateType(UpdateType.Local);
410
560
  }
411
-
412
- this.textRenderer.renderQuads(this);
413
561
  }
414
562
 
415
- /**
416
- * Destroy the node and cleanup all resources
417
- */
418
- override destroy(): void {
419
- super.destroy();
420
-
421
- this.textRenderer.destroyState(this.trState);
563
+ get forceLoad() {
564
+ return this.textProps.forceLoad;
422
565
  }
423
566
 
424
- /**
425
- * Resolve a text renderer and a new state based on the current text renderer props provided
426
- * @param props
427
- * @returns
428
- */
429
- private createState(props: TrProps) {
430
- const textRendererState = this.textRenderer.createState(props, this);
431
-
432
- textRendererState.emitter.on('loaded', this.onTextLoaded);
433
- textRendererState.emitter.on('failed', this.onTextFailed);
434
-
435
- this.textRenderer.scheduleUpdateState(textRendererState);
567
+ set forceLoad(value: boolean) {
568
+ if (this.textProps.forceLoad !== value) {
569
+ this.textProps.forceLoad = value;
570
+ this.setUpdateType(UpdateType.Local);
571
+ }
572
+ }
436
573
 
437
- return textRendererState;
574
+ get renderInfo(): TextRenderInfo {
575
+ return this._renderInfo;
438
576
  }
439
577
  }