@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21

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 (587) 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 +124 -100
  19. package/dist/src/core/CoreNode.js +720 -472
  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 +355 -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 +93 -33
  30. package/dist/src/core/Stage.js +315 -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/Animation.d.ts +21 -0
  39. package/dist/src/core/animations/Animation.js +194 -0
  40. package/dist/src/core/animations/Animation.js.map +1 -0
  41. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  42. package/dist/src/core/animations/CoreAnimation.js +8 -3
  43. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  44. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  45. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  46. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  47. package/dist/src/core/animations/Playback.d.ts +64 -0
  48. package/dist/src/core/animations/Playback.js +169 -0
  49. package/dist/src/core/animations/Playback.js.map +1 -0
  50. package/dist/src/core/animations/Transition.d.ts +27 -0
  51. package/dist/src/core/animations/Transition.js +52 -0
  52. package/dist/src/core/animations/Transition.js.map +1 -0
  53. package/dist/src/core/animations/utils.d.ts +2 -0
  54. package/dist/src/core/animations/utils.js +136 -0
  55. package/dist/src/core/animations/utils.js.map +1 -0
  56. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  57. package/dist/src/core/lib/ImageWorker.js +31 -12
  58. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  59. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  60. package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
  61. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  62. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  63. package/dist/src/core/lib/collectionUtils.js +100 -0
  64. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  65. package/dist/src/core/lib/colorCache.d.ts +1 -0
  66. package/dist/src/core/lib/colorCache.js +19 -0
  67. package/dist/src/core/lib/colorCache.js.map +1 -0
  68. package/dist/src/core/lib/colorParser.d.ts +21 -0
  69. package/dist/src/core/lib/colorParser.js +72 -0
  70. package/dist/src/core/lib/colorParser.js.map +1 -0
  71. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  72. package/dist/src/core/lib/textureCompression.js +320 -67
  73. package/dist/src/core/lib/textureCompression.js.map +1 -1
  74. package/dist/src/core/lib/utils.d.ts +8 -2
  75. package/dist/src/core/lib/utils.js +43 -21
  76. package/dist/src/core/lib/utils.js.map +1 -1
  77. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  78. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  79. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  80. package/dist/src/core/platform.js +30 -5
  81. package/dist/src/core/platform.js.map +1 -1
  82. package/dist/src/core/platforms/Platform.d.ts +42 -0
  83. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  84. package/dist/src/core/platforms/Platform.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  86. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  87. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  88. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  89. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  90. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
  91. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  92. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  93. package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
  94. package/dist/src/core/renderers/CoreShaderNode.js +26 -0
  95. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  96. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  97. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  98. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  99. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  100. package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
  101. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  102. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  103. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  104. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  105. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  106. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  107. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  108. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  109. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  110. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  111. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  112. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  113. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  115. package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
  116. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  117. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  118. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  119. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  120. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
  121. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  122. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  124. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  125. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  126. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  127. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  129. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  132. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  133. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  135. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -52
  136. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
  139. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  140. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
  141. package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
  142. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  143. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
  144. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  145. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  147. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -43
  148. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  150. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  152. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  154. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  155. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  156. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  157. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  158. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  159. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  160. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  162. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  163. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  164. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  165. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  166. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  171. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  172. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  173. package/dist/src/core/shaders/canvas/Border.js +64 -25
  174. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  175. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  176. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  177. package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
  178. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  179. package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
  180. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  181. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  182. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  184. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +45 -7
  185. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  187. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +50 -11
  188. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
  190. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  191. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  194. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -11
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  203. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  204. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  205. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  206. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  207. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  208. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  209. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  210. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  211. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  212. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  213. package/dist/src/core/shaders/utils.js.map +1 -0
  214. package/dist/src/core/shaders/webgl/Border.js +116 -35
  215. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/Default.js +6 -7
  217. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  219. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  221. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  222. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  223. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  224. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  225. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
  227. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  228. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
  229. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  230. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
  231. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  232. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  233. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  234. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  235. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  236. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  237. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/Shadow.js +12 -6
  239. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  240. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  241. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  242. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  243. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  244. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  245. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  247. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  248. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  249. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  250. package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -0
  251. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  252. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  253. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  254. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  255. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  256. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  257. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  258. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  259. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  260. package/dist/src/core/text-rendering/Utils.js +84 -0
  261. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  262. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  263. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  264. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  266. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  267. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  269. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  270. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  271. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  272. package/dist/src/core/textures/ColorTexture.js +3 -4
  273. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  274. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  275. package/dist/src/core/textures/ImageTexture.js +31 -40
  276. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  277. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  278. package/dist/src/core/textures/NoiseTexture.js +8 -8
  279. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  280. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  281. package/dist/src/core/textures/RenderTexture.js +12 -12
  282. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  283. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  284. package/dist/src/core/textures/SubTexture.js +19 -37
  285. package/dist/src/core/textures/SubTexture.js.map +1 -1
  286. package/dist/src/core/textures/Texture.d.ts +87 -10
  287. package/dist/src/core/textures/Texture.js +160 -17
  288. package/dist/src/core/textures/Texture.js.map +1 -1
  289. package/dist/src/core/utils.d.ts +2 -1
  290. package/dist/src/core/utils.js +1 -1
  291. package/dist/src/core/utils.js.map +1 -1
  292. package/dist/src/main-api/INode.d.ts +2 -2
  293. package/dist/src/main-api/Inspector.d.ts +131 -2
  294. package/dist/src/main-api/Inspector.js +345 -28
  295. package/dist/src/main-api/Inspector.js.map +1 -1
  296. package/dist/src/main-api/Renderer.d.ts +295 -82
  297. package/dist/src/main-api/Renderer.js +223 -76
  298. package/dist/src/main-api/Renderer.js.map +1 -1
  299. package/dist/src/utils.d.ts +1 -6
  300. package/dist/src/utils.js +2 -9
  301. package/dist/src/utils.js.map +1 -1
  302. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  303. package/dist/tsconfig.tsbuildinfo +1 -0
  304. package/exports/canvas.ts +1 -1
  305. package/exports/index.ts +2 -8
  306. package/exports/utils.ts +7 -1
  307. package/exports/webgl.ts +3 -1
  308. package/package.json +15 -17
  309. package/src/common/CommonTypes.ts +18 -2
  310. package/src/core/Autosizer.ts +224 -0
  311. package/src/core/CoreNode.test.ts +179 -17
  312. package/src/core/CoreNode.ts +895 -599
  313. package/src/core/CoreShaderManager.ts +5 -10
  314. package/src/core/CoreTextNode.ts +422 -286
  315. package/src/core/CoreTextureManager.ts +110 -130
  316. package/src/core/Stage.ts +397 -195
  317. package/src/core/TextureError.ts +46 -0
  318. package/src/core/TextureMemoryManager.ts +164 -141
  319. package/src/core/animations/CoreAnimation.ts +15 -9
  320. package/src/core/animations/CoreAnimationController.ts +13 -4
  321. package/src/core/lib/ImageWorker.ts +43 -12
  322. package/src/core/lib/WebGlContextWrapper.ts +127 -79
  323. package/src/core/lib/collectionUtils.ts +118 -0
  324. package/src/core/lib/colorCache.ts +20 -0
  325. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  326. package/src/core/lib/textureCompression.ts +433 -75
  327. package/src/core/lib/utils.ts +54 -25
  328. package/src/core/lib/validateImageBitmap.ts +17 -6
  329. package/src/core/platforms/Platform.ts +83 -0
  330. package/src/core/platforms/web/WebPlatform.ts +132 -0
  331. package/src/core/renderers/CoreContextTexture.ts +2 -1
  332. package/src/core/renderers/CoreRenderer.ts +5 -32
  333. package/src/core/renderers/CoreShaderNode.ts +38 -3
  334. package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
  335. package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
  336. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  337. package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
  338. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  339. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  340. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
  341. package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
  342. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
  343. package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
  344. package/src/core/shaders/canvas/Border.ts +88 -34
  345. package/src/core/shaders/canvas/HolePunch.ts +5 -11
  346. package/src/core/shaders/canvas/LinearGradient.ts +14 -10
  347. package/src/core/shaders/canvas/RadialGradient.ts +24 -41
  348. package/src/core/shaders/canvas/Rounded.ts +7 -7
  349. package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
  350. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
  351. package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
  352. package/src/core/shaders/canvas/Shadow.ts +7 -5
  353. package/src/core/shaders/canvas/utils/render.ts +45 -36
  354. package/src/core/shaders/templates/BorderTemplate.ts +42 -12
  355. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  356. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  357. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  358. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  359. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  360. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  361. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  362. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  363. package/src/core/shaders/webgl/Border.ts +116 -39
  364. package/src/core/shaders/webgl/Default.ts +6 -7
  365. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  366. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  367. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  368. package/src/core/shaders/webgl/Rounded.ts +4 -6
  369. package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
  370. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
  371. package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
  372. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  373. package/src/core/shaders/webgl/Shadow.ts +12 -6
  374. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  375. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  376. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  377. package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
  378. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  379. package/src/core/text-rendering/TextRenderer.ts +444 -0
  380. package/src/core/text-rendering/Utils.ts +99 -0
  381. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  382. package/src/core/textures/ColorTexture.ts +7 -5
  383. package/src/core/textures/ImageTexture.ts +78 -66
  384. package/src/core/textures/NoiseTexture.ts +14 -12
  385. package/src/core/textures/RenderTexture.ts +18 -16
  386. package/src/core/textures/SubTexture.ts +25 -46
  387. package/src/core/textures/Texture.ts +207 -24
  388. package/src/core/utils.ts +9 -7
  389. package/src/main-api/INode.ts +4 -3
  390. package/src/main-api/Inspector.ts +577 -36
  391. package/src/main-api/Renderer.ts +518 -139
  392. package/src/utils.ts +10 -10
  393. package/dist/exports/core-api.d.ts +0 -74
  394. package/dist/exports/core-api.js +0 -96
  395. package/dist/exports/core-api.js.map +0 -1
  396. package/dist/exports/main-api.d.ts +0 -30
  397. package/dist/exports/main-api.js +0 -45
  398. package/dist/exports/main-api.js.map +0 -1
  399. package/dist/src/core/CoreExtension.d.ts +0 -12
  400. package/dist/src/core/CoreExtension.js +0 -29
  401. package/dist/src/core/CoreExtension.js.map +0 -1
  402. package/dist/src/core/CoreStuff.d.ts +0 -1
  403. package/dist/src/core/CoreStuff.js +0 -138
  404. package/dist/src/core/CoreStuff.js.map +0 -1
  405. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  406. package/dist/src/core/CoreTexturizer.js +0 -47
  407. package/dist/src/core/CoreTexturizer.js.map +0 -1
  408. package/dist/src/core/LngNode.d.ts +0 -736
  409. package/dist/src/core/LngNode.js +0 -1174
  410. package/dist/src/core/LngNode.js.map +0 -1
  411. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  412. package/dist/src/core/Matrix2DContext.js +0 -45
  413. package/dist/src/core/Matrix2DContext.js.map +0 -1
  414. package/dist/src/core/ShaderNode.d.ts +0 -10
  415. package/dist/src/core/ShaderNode.js +0 -30
  416. package/dist/src/core/ShaderNode.js.map +0 -1
  417. package/dist/src/core/TextNode.d.ts +0 -103
  418. package/dist/src/core/TextNode.js +0 -331
  419. package/dist/src/core/TextNode.js.map +0 -1
  420. package/dist/src/core/lib/Coords.d.ts +0 -14
  421. package/dist/src/core/lib/Coords.js +0 -55
  422. package/dist/src/core/lib/Coords.js.map +0 -1
  423. package/dist/src/core/lib/glm/common.d.ts +0 -162
  424. package/dist/src/core/lib/glm/common.js +0 -81
  425. package/dist/src/core/lib/glm/common.js.map +0 -1
  426. package/dist/src/core/lib/glm/index.d.ts +0 -11
  427. package/dist/src/core/lib/glm/index.js +0 -30
  428. package/dist/src/core/lib/glm/index.js.map +0 -1
  429. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  430. package/dist/src/core/lib/glm/mat2.js +0 -396
  431. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  432. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  433. package/dist/src/core/lib/glm/mat2d.js +0 -442
  434. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  435. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  436. package/dist/src/core/lib/glm/mat3.js +0 -680
  437. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  438. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  439. package/dist/src/core/lib/glm/mat4.js +0 -1802
  440. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  441. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  442. package/dist/src/core/lib/glm/quat.js +0 -693
  443. package/dist/src/core/lib/glm/quat.js.map +0 -1
  444. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  445. package/dist/src/core/lib/glm/quat2.js +0 -754
  446. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  447. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  448. package/dist/src/core/lib/glm/vec2.js +0 -569
  449. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  450. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  451. package/dist/src/core/lib/glm/vec3.js +0 -720
  452. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  453. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  454. package/dist/src/core/lib/glm/vec4.js +0 -608
  455. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  456. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  457. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  458. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  460. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  461. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  463. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  464. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  465. package/dist/src/core/scene/Scene.d.ts +0 -59
  466. package/dist/src/core/scene/Scene.js +0 -106
  467. package/dist/src/core/scene/Scene.js.map +0 -1
  468. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  469. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  470. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  471. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  472. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  473. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  474. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  475. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  476. package/dist/src/main-api/IShaderController.d.ts +0 -14
  477. package/dist/src/main-api/IShaderController.js +0 -30
  478. package/dist/src/main-api/IShaderController.js.map +0 -1
  479. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  480. package/dist/src/main-api/IShaderNode.js +0 -19
  481. package/dist/src/main-api/IShaderNode.js.map +0 -1
  482. package/dist/src/main-api/RendererMain.d.ts +0 -375
  483. package/dist/src/main-api/RendererMain.js +0 -365
  484. package/dist/src/main-api/RendererMain.js.map +0 -1
  485. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  486. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  487. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  488. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  489. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  490. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  491. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  492. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  493. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  494. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  495. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  496. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  497. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  498. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  499. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  500. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  501. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  502. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  503. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  504. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  505. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  506. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  507. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  508. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  509. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  510. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  511. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  512. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  513. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  514. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  515. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  516. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  517. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  518. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  519. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  520. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  521. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  522. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  523. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  524. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  525. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  526. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  527. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  528. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  529. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  530. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  531. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  532. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  533. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  534. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  535. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  536. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  537. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  538. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  539. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  540. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  541. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  542. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  543. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  544. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  545. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  546. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  547. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  548. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  549. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  550. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  551. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  552. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  553. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  554. package/dist/src/render-drivers/utils.d.ts +0 -12
  555. package/dist/src/render-drivers/utils.js +0 -69
  556. package/dist/src/render-drivers/utils.js.map +0 -1
  557. package/scripts/please-use-pnpm.js +0 -13
  558. package/src/core/platform.ts +0 -64
  559. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  560. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  561. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  562. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  563. package/src/core/text-rendering/TrFontManager.ts +0 -183
  564. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  565. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  566. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  567. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  568. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  569. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  570. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  571. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  572. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  573. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  574. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  575. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  576. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  577. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  578. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  579. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  580. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  581. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  582. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  583. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  584. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  585. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  586. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  587. 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' = 3,
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,493 @@ 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
+ this.maxWidth = value;
251
363
  }
252
364
 
253
- set fontStyle(value: CoreTextNodeProps['fontStyle']) {
254
- this.textRenderer.set.fontStyle(this.trState, value);
365
+ override get w(): number {
366
+ return this.props.w;
255
367
  }
256
368
 
257
- get fontWeight(): CoreTextNodeProps['fontWeight'] {
258
- return this.trState.props.fontWeight;
369
+ override set h(value: number) {
370
+ this.maxHeight = value;
259
371
  }
260
372
 
261
- set fontWeight(value: CoreTextNodeProps['fontWeight']) {
262
- this.textRenderer.set.fontWeight(this.trState, value);
373
+ override get h(): number {
374
+ return this.props.h;
263
375
  }
264
376
 
265
- get textAlign(): CoreTextNodeProps['textAlign'] {
266
- return this.trState.props.textAlign;
377
+ get maxWidth() {
378
+ return this.textProps.maxWidth;
267
379
  }
268
380
 
269
- set textAlign(value: CoreTextNodeProps['textAlign']) {
270
- this.textRenderer.set.textAlign(this.trState, value);
381
+ set maxWidth(value: number) {
382
+ if (this.textProps.maxWidth !== value) {
383
+ this.textProps.maxWidth = value;
384
+ this._layoutGenerated = false;
385
+ this.setUpdateType(UpdateType.Local);
386
+ }
271
387
  }
272
388
 
273
- get contain(): CoreTextNodeProps['contain'] {
274
- return this.trState.props.contain;
389
+ // Property getters and setters
390
+ get maxHeight() {
391
+ return this.textProps.maxHeight;
275
392
  }
276
393
 
277
- set contain(value: CoreTextNodeProps['contain']) {
278
- this.textRenderer.set.contain(this.trState, value);
394
+ set maxHeight(value: number) {
395
+ if (this.textProps.maxHeight !== value) {
396
+ this.textProps.maxHeight = value;
397
+ this._layoutGenerated = false;
398
+ this.setUpdateType(UpdateType.Local);
399
+ }
279
400
  }
280
401
 
281
- get scrollable(): CoreTextNodeProps['scrollable'] {
282
- return this.trState.props.scrollable;
402
+ get contain(): TrProps['contain'] {
403
+ return this.textProps.contain;
283
404
  }
284
405
 
285
- set scrollable(value: CoreTextNodeProps['scrollable']) {
286
- this.textRenderer.set.scrollable(this.trState, value);
406
+ set contain(value: TrProps['contain']) {
407
+ if (this.textProps.contain !== value) {
408
+ this.textProps.contain = value;
409
+ this._containType = TextConstraint[value];
410
+ this.setUpdateType(UpdateType.Local);
411
+ }
287
412
  }
288
413
 
289
- get scrollY(): CoreTextNodeProps['scrollY'] {
290
- return this.trState.props.scrollY;
414
+ get text(): string {
415
+ return this.textProps.text;
291
416
  }
292
417
 
293
- set scrollY(value: CoreTextNodeProps['scrollY']) {
294
- this.textRenderer.set.scrollY(this.trState, value);
418
+ set text(value: string) {
419
+ if (this.textProps.text !== value) {
420
+ this.textProps.text = value;
421
+ this._layoutGenerated = false;
422
+ this.setUpdateType(UpdateType.Local);
423
+ }
295
424
  }
296
425
 
297
- get offsetY(): CoreTextNodeProps['offsetY'] {
298
- return this.trState.props.offsetY;
426
+ get fontSize(): number {
427
+ return this.textProps.fontSize;
299
428
  }
300
429
 
301
- set offsetY(value: CoreTextNodeProps['offsetY']) {
302
- this.textRenderer.set.offsetY(this.trState, value);
430
+ set fontSize(value: number) {
431
+ if (this.textProps.fontSize !== value) {
432
+ this.textProps.fontSize = value;
433
+ this._layoutGenerated = false;
434
+ this.setUpdateType(UpdateType.Local);
435
+ }
303
436
  }
304
437
 
305
- get letterSpacing(): CoreTextNodeProps['letterSpacing'] {
306
- return this.trState.props.letterSpacing;
438
+ get fontFamily(): string {
439
+ return this.textProps.fontFamily;
307
440
  }
308
441
 
309
- set letterSpacing(value: CoreTextNodeProps['letterSpacing']) {
310
- this.textRenderer.set.letterSpacing(this.trState, value);
442
+ set fontFamily(value: string) {
443
+ if (this.textProps.fontFamily !== value) {
444
+ if (this._waitingForFont === true) {
445
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
446
+ }
447
+ this.textProps.fontFamily = value;
448
+ this._layoutGenerated = false;
449
+ this.setUpdateType(UpdateType.Local);
450
+ }
311
451
  }
312
452
 
313
- get lineHeight(): CoreTextNodeProps['lineHeight'] {
314
- return this.trState.props.lineHeight;
453
+ get fontStyle(): TrProps['fontStyle'] {
454
+ return this.textProps.fontStyle;
315
455
  }
316
456
 
317
- set lineHeight(value: CoreTextNodeProps['lineHeight']) {
318
- this.textRenderer.set.lineHeight(this.trState, value);
457
+ set fontStyle(value: TrProps['fontStyle']) {
458
+ if (this.textProps.fontStyle !== value) {
459
+ this.textProps.fontStyle = value;
460
+ this._layoutGenerated = false;
461
+ this.setUpdateType(UpdateType.Local);
462
+ }
319
463
  }
320
464
 
321
- get maxLines(): CoreTextNodeProps['maxLines'] {
322
- return this.trState.props.maxLines;
465
+ get textAlign(): TrProps['textAlign'] {
466
+ return this.textProps.textAlign;
323
467
  }
324
468
 
325
- set maxLines(value: CoreTextNodeProps['maxLines']) {
326
- this.textRenderer.set.maxLines(this.trState, value);
469
+ set textAlign(value: TrProps['textAlign']) {
470
+ if (this.textProps.textAlign !== value) {
471
+ this.textProps.textAlign = value;
472
+ this._layoutGenerated = false;
473
+ this.setUpdateType(UpdateType.Local);
474
+ }
327
475
  }
328
476
 
329
- get textBaseline(): CoreTextNodeProps['textBaseline'] {
330
- return this.trState.props.textBaseline;
477
+ get letterSpacing(): number {
478
+ return this.textProps.letterSpacing;
331
479
  }
332
480
 
333
- set textBaseline(value: CoreTextNodeProps['textBaseline']) {
334
- this.textRenderer.set.textBaseline(this.trState, value);
481
+ set letterSpacing(value: number) {
482
+ if (this.textProps.letterSpacing !== value) {
483
+ this.textProps.letterSpacing = value;
484
+ this._layoutGenerated = false;
485
+ this.setUpdateType(UpdateType.Local);
486
+ }
335
487
  }
336
488
 
337
- get verticalAlign(): CoreTextNodeProps['verticalAlign'] {
338
- return this.trState.props.verticalAlign;
489
+ get lineHeight(): number {
490
+ return this.textProps.lineHeight;
339
491
  }
340
492
 
341
- set verticalAlign(value: CoreTextNodeProps['verticalAlign']) {
342
- this.textRenderer.set.verticalAlign(this.trState, value);
493
+ set lineHeight(value: number) {
494
+ if (this.textProps.lineHeight !== value) {
495
+ this.textProps.lineHeight = value;
496
+ this._layoutGenerated = false;
497
+ this.setUpdateType(UpdateType.Local);
498
+ }
343
499
  }
344
500
 
345
- get overflowSuffix(): CoreTextNodeProps['overflowSuffix'] {
346
- return this.trState.props.overflowSuffix;
501
+ get maxLines(): number {
502
+ return this.textProps.maxLines;
347
503
  }
348
504
 
349
- set overflowSuffix(value: CoreTextNodeProps['overflowSuffix']) {
350
- this.textRenderer.set.overflowSuffix(this.trState, value);
505
+ set maxLines(value: number) {
506
+ if (this.textProps.maxLines !== value) {
507
+ this.textProps.maxLines = value;
508
+ this._layoutGenerated = false;
509
+ this.setUpdateType(UpdateType.Local);
510
+ }
351
511
  }
352
512
 
353
- get debug(): CoreTextNodeProps['debug'] {
354
- return this.trState.props.debug;
513
+ get verticalAlign(): TrProps['verticalAlign'] {
514
+ return this.textProps.verticalAlign;
355
515
  }
356
516
 
357
- set debug(value: CoreTextNodeProps['debug']) {
358
- this.textRenderer.set.debug(this.trState, value);
517
+ set verticalAlign(value: TrProps['verticalAlign']) {
518
+ if (this.textProps.verticalAlign !== value) {
519
+ this.textProps.verticalAlign = value;
520
+ this._layoutGenerated = false;
521
+ this.setUpdateType(UpdateType.Local);
522
+ }
359
523
  }
360
524
 
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);
525
+ get overflowSuffix(): string {
526
+ return this.textProps.overflowSuffix;
369
527
  }
370
528
 
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;
529
+ set overflowSuffix(value: string) {
530
+ if (this.textProps.overflowSuffix !== value) {
531
+ this.textProps.overflowSuffix = value;
532
+ this._layoutGenerated = false;
533
+ this.setUpdateType(UpdateType.Local);
378
534
  }
379
-
380
- return false;
381
535
  }
382
536
 
383
- override setRenderable(isRenderable: boolean) {
384
- super.setRenderable(isRenderable);
385
- this.textRenderer.setIsRenderable(this.trState, isRenderable);
537
+ get wordBreak(): TrProps['wordBreak'] {
538
+ return this.textProps.wordBreak;
386
539
  }
387
540
 
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;
541
+ set wordBreak(value: TrProps['wordBreak']) {
542
+ if (this.textProps.wordBreak !== value) {
543
+ this.textProps.wordBreak = value;
544
+ this._layoutGenerated = false;
545
+ this.setUpdateType(UpdateType.Local);
396
546
  }
547
+ }
397
548
 
398
- // If the text renderer does support rendering quads, use it...
549
+ get offsetY(): number {
550
+ return this.textProps.offsetY;
551
+ }
399
552
 
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
- }
553
+ set offsetY(value: number) {
554
+ if (this.textProps.offsetY !== value) {
555
+ this.textProps.offsetY = value;
556
+ this._layoutGenerated = false;
557
+ this.setUpdateType(UpdateType.Local);
410
558
  }
411
-
412
- this.textRenderer.renderQuads(this);
413
559
  }
414
560
 
415
- /**
416
- * Destroy the node and cleanup all resources
417
- */
418
- override destroy(): void {
419
- super.destroy();
420
-
421
- this.textRenderer.destroyState(this.trState);
561
+ get forceLoad() {
562
+ return this.textProps.forceLoad;
422
563
  }
423
564
 
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);
565
+ set forceLoad(value: boolean) {
566
+ if (this.textProps.forceLoad !== value) {
567
+ this.textProps.forceLoad = value;
568
+ this.setUpdateType(UpdateType.Local);
569
+ }
570
+ }
436
571
 
437
- return textRendererState;
572
+ get renderInfo(): TextRenderInfo {
573
+ return this._renderInfo;
438
574
  }
439
575
  }