@lightningtv/renderer 3.0.0-beta1 → 3.2.4

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 (503) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +22 -28
  3. package/dist/exports/canvas-shaders.js +0 -16
  4. package/dist/exports/canvas-shaders.js.map +1 -1
  5. package/dist/exports/canvas.d.ts +1 -1
  6. package/dist/exports/canvas.js +1 -19
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +2 -5
  9. package/dist/exports/index.js +1 -23
  10. package/dist/exports/index.js.map +1 -1
  11. package/dist/exports/inspector.js +0 -18
  12. package/dist/exports/inspector.js.map +1 -1
  13. package/dist/exports/utils.d.ts +2 -1
  14. package/dist/exports/utils.js +2 -19
  15. package/dist/exports/utils.js.map +1 -1
  16. package/dist/exports/webgl-shaders.js +0 -16
  17. package/dist/exports/webgl-shaders.js.map +1 -1
  18. package/dist/exports/webgl.d.ts +2 -1
  19. package/dist/exports/webgl.js +2 -19
  20. package/dist/exports/webgl.js.map +1 -1
  21. package/dist/src/common/CommonTypes.d.ts +15 -3
  22. package/dist/src/common/CommonTypes.js +0 -18
  23. package/dist/src/common/CommonTypes.js.map +1 -1
  24. package/dist/src/common/EventEmitter.js +0 -18
  25. package/dist/src/common/EventEmitter.js.map +1 -1
  26. package/dist/src/common/IEventEmitter.js +0 -16
  27. package/dist/src/common/IEventEmitter.js.map +1 -1
  28. package/dist/src/core/Autosizer.d.ts +35 -0
  29. package/dist/src/core/Autosizer.js +178 -0
  30. package/dist/src/core/Autosizer.js.map +1 -0
  31. package/dist/src/core/CoreNode.d.ts +139 -101
  32. package/dist/src/core/CoreNode.js +813 -528
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +3 -3
  35. package/dist/src/core/CoreShaderManager.js +0 -18
  36. package/dist/src/core/CoreShaderManager.js.map +1 -1
  37. package/dist/src/core/CoreTextNode.d.ts +75 -87
  38. package/dist/src/core/CoreTextNode.js +380 -258
  39. package/dist/src/core/CoreTextNode.js.map +1 -1
  40. package/dist/src/core/CoreTextureManager.d.ts +25 -14
  41. package/dist/src/core/CoreTextureManager.js +83 -140
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +102 -36
  44. package/dist/src/core/Stage.js +424 -191
  45. package/dist/src/core/Stage.js.map +1 -1
  46. package/dist/src/core/TextureError.d.ts +11 -0
  47. package/dist/src/core/TextureError.js +37 -0
  48. package/dist/src/core/TextureError.js.map +1 -0
  49. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  50. package/dist/src/core/TextureMemoryManager.js +114 -134
  51. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  52. package/dist/src/core/animations/AnimationManager.js +0 -18
  53. package/dist/src/core/animations/AnimationManager.js.map +1 -1
  54. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  55. package/dist/src/core/animations/CoreAnimation.js +8 -24
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  58. package/dist/src/core/animations/CoreAnimationController.js +11 -22
  59. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  60. package/dist/src/core/lib/ContextSpy.js +0 -18
  61. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  62. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  63. package/dist/src/core/lib/ImageWorker.js +33 -31
  64. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  65. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  66. package/dist/src/core/lib/Matrix3d.js +7 -19
  67. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  68. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  69. package/dist/src/core/lib/RenderCoords.js +27 -55
  70. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  71. package/dist/src/core/lib/WebGlContextWrapper.d.ts +78 -3
  72. package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
  73. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  74. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  75. package/dist/src/core/lib/collectionUtils.js +82 -0
  76. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  77. package/dist/src/core/lib/colorCache.d.ts +1 -0
  78. package/dist/src/core/lib/colorCache.js +19 -0
  79. package/dist/src/core/lib/colorCache.js.map +1 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
  81. package/dist/src/core/lib/colorParser.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  83. package/dist/src/core/lib/textureCompression.js +320 -85
  84. package/dist/src/core/lib/textureCompression.js.map +1 -1
  85. package/dist/src/core/lib/textureSvg.js +0 -18
  86. package/dist/src/core/lib/textureSvg.js.map +1 -1
  87. package/dist/src/core/lib/utils.d.ts +8 -1
  88. package/dist/src/core/lib/utils.js +44 -20
  89. package/dist/src/core/lib/utils.js.map +1 -1
  90. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  91. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  92. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  93. package/dist/src/core/platforms/Platform.d.ts +42 -0
  94. package/dist/src/core/platforms/Platform.js +4 -0
  95. package/dist/src/core/platforms/Platform.js.map +1 -0
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  100. package/dist/src/core/renderers/CoreContextTexture.js +0 -18
  101. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  102. package/dist/src/core/renderers/CoreRenderOp.js +0 -18
  103. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -18
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
  108. package/dist/src/core/renderers/CoreShaderNode.js +25 -2
  109. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
  111. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
  112. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
  116. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  117. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  118. package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
  119. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/BatchRenderOp.d.ts +25 -0
  121. package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
  122. package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  124. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  125. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  126. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  130. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  133. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  136. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  137. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  139. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  140. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  142. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  143. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  145. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  146. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  147. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  148. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
  150. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  152. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  154. package/dist/src/core/shaders/canvas/Border.js +67 -41
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
  166. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  168. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
  169. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  170. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  171. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  172. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  173. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  174. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  175. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  176. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  177. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  178. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  179. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  181. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
  182. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  183. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  184. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  186. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  187. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  188. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
  189. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  191. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  192. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  194. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  195. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  200. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  201. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  203. package/dist/src/core/shaders/utils.js +25 -0
  204. package/dist/src/core/shaders/utils.js.map +1 -0
  205. package/dist/src/core/shaders/webgl/Border.js +118 -51
  206. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  207. package/dist/src/core/shaders/webgl/Default.js +6 -41
  208. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  209. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  210. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  211. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  212. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  213. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  214. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  215. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  216. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  217. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  218. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  219. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  220. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  221. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  222. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  224. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  225. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  227. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  228. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  229. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  230. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  231. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  232. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  233. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  235. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  236. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  237. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  238. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  239. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  241. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  242. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  243. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  244. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  245. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  247. package/dist/src/core/text-rendering/Utils.js +66 -0
  248. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  249. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  250. package/dist/src/core/textures/ColorTexture.js +3 -22
  251. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  252. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  253. package/dist/src/core/textures/ImageTexture.js +57 -66
  254. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  255. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  256. package/dist/src/core/textures/NoiseTexture.js +8 -26
  257. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  258. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  259. package/dist/src/core/textures/RenderTexture.js +12 -30
  260. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  261. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  262. package/dist/src/core/textures/SubTexture.js +19 -55
  263. package/dist/src/core/textures/SubTexture.js.map +1 -1
  264. package/dist/src/core/textures/Texture.d.ts +90 -12
  265. package/dist/src/core/textures/Texture.js +160 -35
  266. package/dist/src/core/textures/Texture.js.map +1 -1
  267. package/dist/src/core/utils.d.ts +2 -1
  268. package/dist/src/core/utils.js +1 -19
  269. package/dist/src/core/utils.js.map +1 -1
  270. package/dist/src/main-api/INode.js.map +1 -1
  271. package/dist/src/main-api/Inspector.d.ts +135 -2
  272. package/dist/src/main-api/Inspector.js +507 -30
  273. package/dist/src/main-api/Inspector.js.map +1 -1
  274. package/dist/src/main-api/Renderer.d.ts +294 -81
  275. package/dist/src/main-api/Renderer.js +225 -96
  276. package/dist/src/main-api/Renderer.js.map +1 -1
  277. package/dist/src/utils.d.ts +19 -6
  278. package/dist/src/utils.js +32 -27
  279. package/dist/src/utils.js.map +1 -1
  280. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  281. package/dist/tsconfig.tsbuildinfo +1 -0
  282. package/exports/canvas-shaders.ts +0 -17
  283. package/exports/canvas.ts +1 -19
  284. package/exports/index.ts +6 -27
  285. package/exports/inspector.ts +0 -19
  286. package/exports/utils.ts +7 -19
  287. package/exports/webgl-shaders.ts +0 -16
  288. package/exports/webgl.ts +3 -20
  289. package/package.json +23 -22
  290. package/src/common/CommonTypes.ts +20 -22
  291. package/src/common/EventEmitter.ts +0 -19
  292. package/src/common/IAnimationController.ts +0 -18
  293. package/src/common/IEventEmitter.ts +0 -17
  294. package/src/core/Autosizer.ts +205 -0
  295. package/src/core/CoreNode.test.ts +376 -45
  296. package/src/core/CoreNode.ts +1017 -656
  297. package/src/core/CoreShaderManager.ts +3 -21
  298. package/src/core/CoreTextNode.ts +457 -314
  299. package/src/core/CoreTextureManager.ts +123 -168
  300. package/src/core/Stage.ts +526 -236
  301. package/src/core/TextureError.ts +46 -0
  302. package/src/core/TextureMemoryManager.ts +150 -167
  303. package/src/core/animations/AnimationManager.ts +0 -19
  304. package/src/core/animations/CoreAnimation.ts +15 -32
  305. package/src/core/animations/CoreAnimationController.ts +13 -23
  306. package/src/core/lib/ContextSpy.ts +0 -19
  307. package/src/core/lib/ImageWorker.ts +45 -32
  308. package/src/core/lib/Matrix3d.ts +7 -20
  309. package/src/core/lib/RenderCoords.ts +36 -67
  310. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  311. package/src/core/lib/collectionUtils.ts +99 -0
  312. package/src/core/lib/colorCache.ts +20 -0
  313. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  314. package/src/core/lib/textureCompression.ts +433 -93
  315. package/src/core/lib/textureSvg.ts +0 -19
  316. package/src/core/lib/utils.ts +58 -19
  317. package/src/core/lib/validateImageBitmap.ts +17 -6
  318. package/src/core/platforms/Platform.ts +64 -0
  319. package/src/core/platforms/web/WebPlatform.ts +132 -0
  320. package/src/core/renderers/CoreContextTexture.ts +2 -20
  321. package/src/core/renderers/CoreRenderOp.ts +0 -19
  322. package/src/core/renderers/CoreRenderer.ts +16 -23
  323. package/src/core/renderers/CoreShaderNode.ts +37 -6
  324. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  325. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  326. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  327. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  328. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  329. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  330. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  331. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  332. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  333. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  334. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  335. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  336. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  337. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  338. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  339. package/src/core/shaders/canvas/Border.ts +91 -50
  340. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  341. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  342. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  343. package/src/core/shaders/canvas/Rounded.ts +2 -19
  344. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  345. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  346. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  347. package/src/core/shaders/canvas/Shadow.ts +0 -17
  348. package/src/core/shaders/canvas/utils/render.ts +45 -53
  349. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  350. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  351. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  352. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  353. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  354. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  355. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  356. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  357. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  358. package/src/core/shaders/utils.ts +30 -0
  359. package/src/core/shaders/webgl/Border.ts +118 -55
  360. package/src/core/shaders/webgl/Default.ts +6 -43
  361. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  362. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  363. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  364. package/src/core/shaders/webgl/Rounded.ts +25 -45
  365. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  366. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  367. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  368. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  369. package/src/core/shaders/webgl/Shadow.ts +39 -35
  370. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  371. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  372. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  373. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  374. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  375. package/src/core/text-rendering/TextRenderer.ts +426 -0
  376. package/src/core/text-rendering/Utils.ts +80 -0
  377. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  378. package/src/core/textures/ColorTexture.ts +7 -24
  379. package/src/core/textures/ImageTexture.ts +110 -92
  380. package/src/core/textures/NoiseTexture.ts +14 -31
  381. package/src/core/textures/RenderTexture.ts +18 -35
  382. package/src/core/textures/SubTexture.ts +25 -65
  383. package/src/core/textures/Texture.ts +214 -46
  384. package/src/core/utils.ts +9 -26
  385. package/src/main-api/INode.ts +0 -18
  386. package/src/main-api/Inspector.ts +794 -38
  387. package/src/main-api/Renderer.ts +519 -159
  388. package/src/utils.ts +64 -29
  389. package/dist/src/core/platform.d.ts +0 -10
  390. package/dist/src/core/platform.js +0 -56
  391. package/dist/src/core/platform.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  393. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  394. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  395. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  396. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  397. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  398. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  399. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  400. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  401. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
  402. package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
  403. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
  404. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  405. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  406. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  407. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  408. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  409. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  410. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  411. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  412. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  417. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  418. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  420. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  421. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  423. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  424. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  425. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  426. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  427. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  428. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  429. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  430. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  432. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  433. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  435. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  436. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  462. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  463. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  464. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  465. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  466. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  467. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  468. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  469. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  470. package/scripts/please-use-pnpm.js +0 -13
  471. package/src/core/platform.ts +0 -64
  472. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  473. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  474. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  475. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  476. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  477. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  478. package/src/core/text-rendering/TrFontManager.ts +0 -183
  479. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  480. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  481. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  482. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  483. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  484. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  485. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  486. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  487. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  496. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  497. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  498. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  499. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  500. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  501. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  502. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  503. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -1,79 +1,66 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
1
  import type {
2
+ FontHandler,
21
3
  TextRenderer,
22
- TextRendererMap,
23
4
  TrProps,
24
- TextRendererState,
25
- TrFailedEventHandler,
26
- TrLoadedEventHandler,
27
- } from './text-rendering/renderers/TextRenderer.js';
28
- import { CoreNode, UpdateType, type CoreNodeProps } from './CoreNode.js';
5
+ TextLayout,
6
+ TextRenderInfo,
7
+ } from './text-rendering/TextRenderer.js';
8
+ import { SdfRenderOp } from './renderers/webgl/SdfRenderOp.js';
9
+ import { mergeColorAlpha, USE_RTT } from '../utils.js';
10
+ import {
11
+ CoreNode,
12
+ CoreNodeRenderState,
13
+ UpdateType,
14
+ type CoreNodeProps,
15
+ } from './CoreNode.js';
29
16
  import type { Stage } from './Stage.js';
30
- import type { CoreRenderer } from './renderers/CoreRenderer.js';
31
17
  import type {
32
18
  NodeTextFailedPayload,
33
19
  NodeTextLoadedPayload,
20
+ NodeTextureLoadedPayload,
34
21
  } from '../common/CommonTypes.js';
35
22
  import type { RectWithValid } from './lib/utils.js';
36
- import { assertTruthy } from '../utils.js';
23
+ import type { CoreRenderer } from './renderers/CoreRenderer.js';
24
+ import type { TextureLoadedEventHandler } from './textures/Texture.js';
25
+ import type { WebGlRenderer } from './renderers/webgl/WebGlRenderer.js';
37
26
  import { Matrix3d } from './lib/Matrix3d.js';
38
-
39
27
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
40
28
  /**
41
29
  * 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
30
  */
53
- textRendererOverride: keyof TextRendererMap | null;
31
+ textRendererOverride?: string | null;
32
+ forceLoad: boolean;
33
+ }
34
+
35
+ export enum TextConstraint {
36
+ 'none' = 0,
37
+ 'width' = 1,
38
+ 'height' = 2,
39
+ 'both' = 3,
54
40
  }
55
41
 
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
42
  export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
73
- textRenderer: TextRenderer;
74
- trState: TextRendererState;
75
- private _textRendererOverride: CoreTextNodeProps['textRendererOverride'] =
76
- null;
43
+ private textRenderer: TextRenderer;
44
+ private fontHandler: FontHandler;
45
+
46
+ private _layoutGenerated = false;
47
+ private _waitingForFont = false;
48
+ private _containType: TextConstraint = TextConstraint.none;
49
+
50
+ // SDF layout caching for performance
51
+ private _cachedLayout: TextLayout | null = null;
52
+ private _lastVertexBuffer: Float32Array | null = null;
53
+ private _cachedRenderOp: SdfRenderOp | null = null;
54
+
55
+ // Text renderer properties - stored directly on the node
56
+ private textProps: CoreTextNodeProps;
57
+
58
+ private _renderInfo: TextRenderInfo = {
59
+ width: 0,
60
+ height: 0,
61
+ };
62
+
63
+ private _type: 'sdf' | 'canvas' = 'sdf'; // Default to SDF renderer
77
64
 
78
65
  constructor(
79
66
  stage: Stage,
@@ -81,368 +68,524 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
81
68
  textRenderer: TextRenderer,
82
69
  ) {
83
70
  super(stage, props);
84
- this._textRendererOverride = props.textRendererOverride;
85
71
  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
- };
72
+ this.fontHandler = textRenderer.font;
73
+ this._type = textRenderer.type;
146
74
 
147
- private onTextFailed: TrFailedEventHandler = (target, error) => {
148
- this.emit('failed', {
149
- type: 'text',
150
- error,
151
- } satisfies NodeTextFailedPayload);
152
- };
75
+ // Initialize text properties from props
76
+ // Props are guaranteed to have all defaults resolved by Stage.createTextNode
77
+ this.textProps = props;
78
+ this._containType = TextConstraint[props.contain];
153
79
 
154
- override get width(): number {
155
- return this.props.width;
80
+ this.setUpdateType(UpdateType.All);
156
81
  }
157
82
 
158
- override set width(value: number) {
159
- this.props.width = value;
160
- this.textRenderer.set.width(this.trState, value);
83
+ protected override onTextureLoaded: TextureLoadedEventHandler = (
84
+ _,
85
+ dimensions,
86
+ ) => {
87
+ // If parent has a render texture, flag that we need to update
88
+ if (USE_RTT && this.parentHasRenderTexture) {
89
+ this.notifyParentRTTOfUpdate();
90
+ }
91
+ // ignore 1x1 pixel textures
92
+ if (dimensions.w > 1 && dimensions.h > 1) {
93
+ this.emit('loaded', {
94
+ type: 'texture',
95
+ dimensions,
96
+ } satisfies NodeTextureLoadedPayload);
97
+ }
98
+ this.setUpdateType(UpdateType.IsRenderable);
99
+ };
161
100
 
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);
101
+ allowTextGeneration() {
102
+ const p = this.props.parent;
103
+ if (p === null) {
104
+ return false;
166
105
  }
106
+ if (p.worldAlpha > 0 && p.renderState > CoreNodeRenderState.OutOfBounds) {
107
+ return true;
108
+ }
109
+ return false;
167
110
  }
168
111
 
169
- override get height(): number {
170
- return this.props.height;
171
- }
112
+ override updateLocalTransform() {
113
+ const p = this.props;
114
+ let { x, y, w, h } = p;
115
+ const mountX = p.mountX;
116
+ const mountY = p.mountY;
117
+ let mountTranslateX = p.mountX * w;
118
+ let mountTranslateY = p.mountY * h;
119
+
120
+ const tProps = this.textProps;
121
+ const { textAlign, verticalAlign, maxWidth, maxHeight } = tProps;
122
+ const contain = this._containType;
123
+
124
+ const hasMaxWidth = maxWidth > 0;
125
+ const hasMaxHeight = maxHeight > 0;
126
+
127
+ let containX = 0;
128
+ let containY = 0;
129
+
130
+ if (contain > 0 && (hasMaxWidth || hasMaxHeight)) {
131
+ if (contain & TextConstraint.width && hasMaxWidth === true) {
132
+ if (textAlign === 'right') {
133
+ containX = maxWidth - w;
134
+ } else if (textAlign === 'center') {
135
+ containX = (maxWidth - w) * 0.5;
136
+ }
137
+ mountTranslateX = mountX * maxWidth;
138
+ }
139
+ if (contain & TextConstraint.height && maxHeight > 0) {
140
+ if (verticalAlign === 'bottom') {
141
+ containY = maxHeight - h;
142
+ } else if (verticalAlign === 'middle') {
143
+ containY = (maxHeight - h) * 0.5;
144
+ }
145
+ mountTranslateY = mountY * maxHeight;
146
+ }
147
+ }
172
148
 
173
- override set height(value: number) {
174
- this.props.height = value;
175
- this.textRenderer.set.height(this.trState, value);
149
+ if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
150
+ const scaleRotate = Matrix3d.rotate(p.rotation, Matrix3d.temp).scale(
151
+ p.scaleX,
152
+ p.scaleY,
153
+ );
154
+ const pivotW =
155
+ contain & TextConstraint.width && maxWidth > 0 ? maxWidth : w;
156
+ const pivotH =
157
+ contain & TextConstraint.height && maxHeight > 0 ? maxHeight : h;
158
+ const pivotTranslateX = p.pivotX * pivotW;
159
+ const pivotTranslateY = p.pivotY * pivotH;
160
+
161
+ this.localTransform = Matrix3d.translate(
162
+ x - mountTranslateX + pivotTranslateX,
163
+ y - mountTranslateY + pivotTranslateY,
164
+ this.localTransform,
165
+ )
166
+ .multiply(scaleRotate)
167
+ .translate(-pivotTranslateX, -pivotTranslateY);
168
+ } else {
169
+ this.localTransform = Matrix3d.translate(
170
+ x - mountTranslateX,
171
+ y - mountTranslateY,
172
+ this.localTransform,
173
+ );
174
+ }
176
175
 
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);
176
+ if (containX !== 0 || containY !== 0) {
177
+ this.localTransform.translate(containX, containY);
181
178
  }
182
179
  }
183
180
 
184
- override get color(): number {
185
- return this.trState.props.color;
186
- }
181
+ /**
182
+ * Override CoreNode's update method to handle text-specific updates
183
+ */
184
+ override update(delta: number, parentClippingRect: RectWithValid): void {
185
+ if (
186
+ (this.textProps.forceLoad === true ||
187
+ this.allowTextGeneration() === true) &&
188
+ this._layoutGenerated === false
189
+ ) {
190
+ if (this.fontHandler.isFontLoaded(this.textProps.fontFamily) === true) {
191
+ this._waitingForFont = false;
192
+ this._cachedLayout = null; // Invalidate cached layout
193
+ this._lastVertexBuffer = null; // Invalidate last vertex buffer
194
+ const resp = this.textRenderer.renderText(this.textProps);
195
+ this.handleRenderResult(resp);
196
+ this._layoutGenerated = true;
197
+ } else if (this._waitingForFont === false) {
198
+ this.fontHandler.waitingForFont(this.textProps.fontFamily, this);
199
+ this._waitingForFont = true;
200
+ }
201
+ }
187
202
 
188
- override set color(value: number) {
189
- this.textRenderer.set.color(this.trState, value);
203
+ // First run the standard CoreNode update
204
+ super.update(delta, parentClippingRect);
190
205
  }
191
206
 
192
- get text(): string {
193
- return this.trState.props.text;
194
- }
207
+ /**
208
+ * Override is renderable check for SDF text nodes
209
+ */
210
+ override updateIsRenderable(): void {
211
+ // SDF text nodes are always renderable if they have a valid layout
212
+ if (this._type === 'canvas') {
213
+ super.updateIsRenderable();
214
+ return;
215
+ }
195
216
 
196
- set text(value: string) {
197
- this.textRenderer.set.text(this.trState, value);
217
+ // For SDF, check if we have a cached layout
218
+ this.setRenderable(
219
+ this.checkBasicRenderability() === true && this._cachedLayout !== null,
220
+ );
198
221
  }
199
222
 
200
- get textRendererOverride(): CoreTextNodeProps['textRendererOverride'] {
201
- return this._textRendererOverride;
223
+ /**
224
+ * Handle the result of text rendering for both Canvas and SDF renderers
225
+ */
226
+ private handleRenderResult(result: TextRenderInfo): void {
227
+ // Host paths on top
228
+ const textRendererType = this._type;
229
+ let width = result.width;
230
+ let height = result.height;
231
+
232
+ // Handle Canvas renderer (uses ImageData)
233
+ if (textRendererType === 'canvas') {
234
+ if (result.imageData === undefined) {
235
+ this.emit('failed', {
236
+ type: 'text',
237
+ error: new Error(
238
+ 'Canvas text rendering failed, no image data returned',
239
+ ),
240
+ } satisfies NodeTextFailedPayload);
241
+ return;
242
+ }
243
+
244
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
245
+ premultiplyAlpha: true,
246
+ src: result.imageData as ImageData,
247
+ });
248
+ // It isn't renderable until the texture is loaded we have to set it to false here to avoid it
249
+ // being detected as a renderable default color node in the next frame
250
+ // it will be corrected once the texture is loaded
251
+ this.setRenderable(false);
252
+
253
+ if (this.renderState > CoreNodeRenderState.OutOfBounds) {
254
+ // We do want the texture to load immediately
255
+ this.texture.setRenderableOwner(this._id, true);
256
+ }
257
+ }
258
+
259
+ this._cachedLayout = result.layout || null;
260
+ this._cachedRenderOp = null; // Invalidate cached render op
261
+ this.props.w = width;
262
+ this.props.h = height;
263
+
264
+ // Handle SDF renderer (uses layout caching)
265
+ if (textRendererType === 'sdf') {
266
+ this.setRenderable(true);
267
+ this.setUpdateType(UpdateType.Local);
268
+ }
269
+
270
+ this._renderInfo = result;
271
+ this.emitTextLoadedEvent();
202
272
  }
203
273
 
204
- set textRendererOverride(value: CoreTextNodeProps['textRendererOverride']) {
205
- this._textRendererOverride = value;
206
- this.textRenderer.destroyState(this.trState);
274
+ // Reusable bound method for emitting loaded event
275
+ private emitTextLoadedEvent = () => {
276
+ this.emit('loaded', {
277
+ type: 'text',
278
+ dimensions: {
279
+ w: this._renderInfo.width,
280
+ h: this._renderInfo.height,
281
+ },
282
+ } satisfies NodeTextLoadedPayload);
283
+ };
207
284
 
208
- const textRenderer = this.stage.resolveTextRenderer(
209
- this.trState.props,
210
- this._textRendererOverride,
211
- );
285
+ /**
286
+ * Override renderQuads to handle SDF vs Canvas rendering
287
+ */
288
+ override renderQuads(renderer: CoreRenderer): void {
289
+ if (USE_RTT && this.parentHasRenderTexture === true) {
290
+ const rtt = renderer.renderToTextureActive;
291
+ if (rtt === false || this.parentRenderTexture !== renderer.activeRttNode)
292
+ return;
293
+ }
212
294
 
213
- if (!textRenderer) {
214
- console.warn(
215
- 'Text Renderer not found for font',
216
- this.trState.props.fontFamily,
217
- );
295
+ // Canvas renderer: use standard texture rendering via CoreNode
296
+ if (this._type === 'canvas') {
297
+ super.renderQuads(renderer);
218
298
  return;
219
299
  }
220
300
 
221
- this.textRenderer = textRenderer;
222
- this.trState = this.createState(this.trState.props);
223
- }
301
+ // Early return if no cached data
302
+ if (!this._cachedLayout) {
303
+ return;
304
+ }
224
305
 
225
- get fontSize(): CoreTextNodeProps['fontSize'] {
226
- return this.trState.props.fontSize;
227
- }
306
+ if (this._lastVertexBuffer === null) {
307
+ this._lastVertexBuffer = this.textRenderer.addQuads(this._cachedLayout);
308
+ }
228
309
 
229
- set fontSize(value: CoreTextNodeProps['fontSize']) {
230
- this.textRenderer.set.fontSize(this.trState, value);
231
- }
310
+ const props = this.textProps;
311
+ if (!this._cachedRenderOp) {
312
+ const op = this.textRenderer.renderQuads(
313
+ renderer,
314
+ this._cachedLayout as TextLayout,
315
+ this._lastVertexBuffer!,
316
+ {
317
+ fontFamily: this.textProps.fontFamily,
318
+ fontSize: props.fontSize,
319
+ color: this.props.color || 0xffffffff,
320
+ offsetY: props.offsetY,
321
+ worldAlpha: this.worldAlpha,
322
+ globalTransform: this.globalTransform!.getFloatArr(),
323
+ clippingRect: this.clippingRect,
324
+ width: this.props.w,
325
+ height: this.props.h,
326
+ parentHasRenderTexture: USE_RTT && this.parentHasRenderTexture,
327
+ framebufferDimensions:
328
+ USE_RTT && this.parentHasRenderTexture === true
329
+ ? this.parentFramebufferDimensions
330
+ : null,
331
+ stage: this.stage,
332
+ },
333
+ );
334
+ if (op !== null && op !== undefined) {
335
+ this._cachedRenderOp = op;
336
+ }
337
+ }
232
338
 
233
- get fontFamily(): CoreTextNodeProps['fontFamily'] {
234
- return this.trState.props.fontFamily;
339
+ if (this._cachedRenderOp) {
340
+ // Update dynamic properties
341
+ this._cachedRenderOp.worldAlpha = this.worldAlpha;
342
+ (this._cachedRenderOp.clippingRect as unknown) = this.clippingRect;
343
+ this._cachedRenderOp.sdfShaderProps.color = mergeColorAlpha(
344
+ this.props.color || 0xffffffff,
345
+ this.worldAlpha,
346
+ );
347
+ this._cachedRenderOp.sdfShaderProps.transform =
348
+ this.globalTransform!.getFloatArr();
349
+ this.globalTransform!.getFloatArr();
350
+ this._cachedRenderOp.parentHasRenderTexture =
351
+ USE_RTT && this.parentHasRenderTexture;
352
+ this._cachedRenderOp.framebufferDimensions =
353
+ USE_RTT && this.parentHasRenderTexture === true
354
+ ? this.parentFramebufferDimensions
355
+ : null;
356
+
357
+ (renderer as WebGlRenderer).addRenderOp(this._cachedRenderOp);
358
+ }
235
359
  }
236
360
 
237
- set fontFamily(value: CoreTextNodeProps['fontFamily']) {
238
- this.textRenderer.set.fontFamily(this.trState, value);
239
- }
361
+ override destroy(isChild: boolean = false): void {
362
+ if (this._waitingForFont === true && this.fontHandler) {
363
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
364
+ }
240
365
 
241
- get fontStretch(): CoreTextNodeProps['fontStretch'] {
242
- return this.trState.props.fontStretch;
243
- }
366
+ // Clear cached layout and vertex buffer
367
+ this._cachedLayout = null;
368
+ this._lastVertexBuffer = null;
369
+ this._cachedRenderOp = null;
244
370
 
245
- set fontStretch(value: CoreTextNodeProps['fontStretch']) {
246
- this.textRenderer.set.fontStretch(this.trState, value);
247
- }
371
+ this.fontHandler = null!; // Clear reference to avoid memory leaks
372
+ this.textRenderer = null!; // Clear reference to avoid memory leaks
248
373
 
249
- get fontStyle(): CoreTextNodeProps['fontStyle'] {
250
- return this.trState.props.fontStyle;
374
+ super.destroy(isChild);
251
375
  }
252
376
 
253
- set fontStyle(value: CoreTextNodeProps['fontStyle']) {
254
- this.textRenderer.set.fontStyle(this.trState, value);
377
+ override set w(value: number) {
378
+ this.maxWidth = value;
255
379
  }
256
380
 
257
- get fontWeight(): CoreTextNodeProps['fontWeight'] {
258
- return this.trState.props.fontWeight;
381
+ override get w(): number {
382
+ return this.props.w;
259
383
  }
260
384
 
261
- set fontWeight(value: CoreTextNodeProps['fontWeight']) {
262
- this.textRenderer.set.fontWeight(this.trState, value);
385
+ override set h(value: number) {
386
+ this.maxHeight = value;
263
387
  }
264
388
 
265
- get textAlign(): CoreTextNodeProps['textAlign'] {
266
- return this.trState.props.textAlign;
389
+ override get h(): number {
390
+ return this.props.h;
267
391
  }
268
392
 
269
- set textAlign(value: CoreTextNodeProps['textAlign']) {
270
- this.textRenderer.set.textAlign(this.trState, value);
393
+ get maxWidth() {
394
+ return this.textProps.maxWidth;
271
395
  }
272
396
 
273
- get contain(): CoreTextNodeProps['contain'] {
274
- return this.trState.props.contain;
397
+ set maxWidth(value: number) {
398
+ if (this.textProps.maxWidth !== value) {
399
+ this.textProps.maxWidth = value;
400
+ this._layoutGenerated = false;
401
+ this.setUpdateType(UpdateType.Local);
402
+ }
275
403
  }
276
404
 
277
- set contain(value: CoreTextNodeProps['contain']) {
278
- this.textRenderer.set.contain(this.trState, value);
405
+ // Property getters and setters
406
+ get maxHeight() {
407
+ return this.textProps.maxHeight;
279
408
  }
280
409
 
281
- get scrollable(): CoreTextNodeProps['scrollable'] {
282
- return this.trState.props.scrollable;
410
+ set maxHeight(value: number) {
411
+ if (this.textProps.maxHeight !== value) {
412
+ this.textProps.maxHeight = value;
413
+ this._layoutGenerated = false;
414
+ this.setUpdateType(UpdateType.Local);
415
+ }
283
416
  }
284
417
 
285
- set scrollable(value: CoreTextNodeProps['scrollable']) {
286
- this.textRenderer.set.scrollable(this.trState, value);
418
+ get contain(): TrProps['contain'] {
419
+ return this.textProps.contain;
287
420
  }
288
421
 
289
- get scrollY(): CoreTextNodeProps['scrollY'] {
290
- return this.trState.props.scrollY;
422
+ set contain(value: TrProps['contain']) {
423
+ if (this.textProps.contain !== value) {
424
+ this.textProps.contain = value;
425
+ this._containType = TextConstraint[value];
426
+ this.setUpdateType(UpdateType.Local);
427
+ }
291
428
  }
292
429
 
293
- set scrollY(value: CoreTextNodeProps['scrollY']) {
294
- this.textRenderer.set.scrollY(this.trState, value);
430
+ get text(): string {
431
+ return this.textProps.text;
295
432
  }
296
433
 
297
- get offsetY(): CoreTextNodeProps['offsetY'] {
298
- return this.trState.props.offsetY;
434
+ set text(value: string) {
435
+ if (this.textProps.text !== value) {
436
+ this.textProps.text = value;
437
+ this._layoutGenerated = false;
438
+ this.setUpdateType(UpdateType.Local);
439
+ }
299
440
  }
300
441
 
301
- set offsetY(value: CoreTextNodeProps['offsetY']) {
302
- this.textRenderer.set.offsetY(this.trState, value);
442
+ get fontSize(): number {
443
+ return this.textProps.fontSize;
303
444
  }
304
445
 
305
- get letterSpacing(): CoreTextNodeProps['letterSpacing'] {
306
- return this.trState.props.letterSpacing;
446
+ set fontSize(value: number) {
447
+ if (this.textProps.fontSize !== value) {
448
+ this.textProps.fontSize = value;
449
+ this._layoutGenerated = false;
450
+ this.setUpdateType(UpdateType.Local);
451
+ }
307
452
  }
308
453
 
309
- set letterSpacing(value: CoreTextNodeProps['letterSpacing']) {
310
- this.textRenderer.set.letterSpacing(this.trState, value);
454
+ get fontFamily(): string {
455
+ return this.textProps.fontFamily;
311
456
  }
312
457
 
313
- get lineHeight(): CoreTextNodeProps['lineHeight'] {
314
- return this.trState.props.lineHeight;
458
+ set fontFamily(value: string) {
459
+ if (this.textProps.fontFamily !== value) {
460
+ if (this._waitingForFont === true) {
461
+ this.fontHandler.stopWaitingForFont(this.textProps.fontFamily, this);
462
+ }
463
+ this.textProps.fontFamily = value;
464
+ this._layoutGenerated = false;
465
+ this.setUpdateType(UpdateType.Local);
466
+ }
315
467
  }
316
468
 
317
- set lineHeight(value: CoreTextNodeProps['lineHeight']) {
318
- this.textRenderer.set.lineHeight(this.trState, value);
469
+ get fontStyle(): TrProps['fontStyle'] {
470
+ return this.textProps.fontStyle;
319
471
  }
320
472
 
321
- get maxLines(): CoreTextNodeProps['maxLines'] {
322
- return this.trState.props.maxLines;
473
+ set fontStyle(value: TrProps['fontStyle']) {
474
+ if (this.textProps.fontStyle !== value) {
475
+ this.textProps.fontStyle = value;
476
+ this._layoutGenerated = false;
477
+ this.setUpdateType(UpdateType.Local);
478
+ }
323
479
  }
324
480
 
325
- set maxLines(value: CoreTextNodeProps['maxLines']) {
326
- this.textRenderer.set.maxLines(this.trState, value);
481
+ get textAlign(): TrProps['textAlign'] {
482
+ return this.textProps.textAlign;
327
483
  }
328
484
 
329
- get textBaseline(): CoreTextNodeProps['textBaseline'] {
330
- return this.trState.props.textBaseline;
485
+ set textAlign(value: TrProps['textAlign']) {
486
+ if (this.textProps.textAlign !== value) {
487
+ this.textProps.textAlign = value;
488
+ this._layoutGenerated = false;
489
+ this.setUpdateType(UpdateType.Local);
490
+ }
331
491
  }
332
492
 
333
- set textBaseline(value: CoreTextNodeProps['textBaseline']) {
334
- this.textRenderer.set.textBaseline(this.trState, value);
493
+ get letterSpacing(): number {
494
+ return this.textProps.letterSpacing;
335
495
  }
336
496
 
337
- get verticalAlign(): CoreTextNodeProps['verticalAlign'] {
338
- return this.trState.props.verticalAlign;
497
+ set letterSpacing(value: number) {
498
+ if (this.textProps.letterSpacing !== value) {
499
+ this.textProps.letterSpacing = value;
500
+ this._layoutGenerated = false;
501
+ this.setUpdateType(UpdateType.Local);
502
+ }
339
503
  }
340
504
 
341
- set verticalAlign(value: CoreTextNodeProps['verticalAlign']) {
342
- this.textRenderer.set.verticalAlign(this.trState, value);
505
+ get lineHeight(): number {
506
+ return this.textProps.lineHeight;
343
507
  }
344
508
 
345
- get overflowSuffix(): CoreTextNodeProps['overflowSuffix'] {
346
- return this.trState.props.overflowSuffix;
509
+ set lineHeight(value: number) {
510
+ if (this.textProps.lineHeight !== value) {
511
+ this.textProps.lineHeight = value;
512
+ this._layoutGenerated = false;
513
+ this.setUpdateType(UpdateType.Local);
514
+ }
347
515
  }
348
516
 
349
- set overflowSuffix(value: CoreTextNodeProps['overflowSuffix']) {
350
- this.textRenderer.set.overflowSuffix(this.trState, value);
517
+ get maxLines(): number {
518
+ return this.textProps.maxLines;
351
519
  }
352
520
 
353
- get debug(): CoreTextNodeProps['debug'] {
354
- return this.trState.props.debug;
521
+ set maxLines(value: number) {
522
+ if (this.textProps.maxLines !== value) {
523
+ this.textProps.maxLines = value;
524
+ this._layoutGenerated = false;
525
+ this.setUpdateType(UpdateType.Local);
526
+ }
355
527
  }
356
528
 
357
- set debug(value: CoreTextNodeProps['debug']) {
358
- this.textRenderer.set.debug(this.trState, value);
529
+ get verticalAlign(): TrProps['verticalAlign'] {
530
+ return this.textProps.verticalAlign;
359
531
  }
360
532
 
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);
533
+ set verticalAlign(value: TrProps['verticalAlign']) {
534
+ if (this.textProps.verticalAlign !== value) {
535
+ this.textProps.verticalAlign = value;
536
+ this._layoutGenerated = false;
537
+ this.setUpdateType(UpdateType.Local);
538
+ }
369
539
  }
370
540
 
371
- override checkBasicRenderability() {
372
- if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
373
- return false;
374
- }
541
+ get overflowSuffix(): string {
542
+ return this.textProps.overflowSuffix;
543
+ }
375
544
 
376
- if (this.trState && this.trState.props.text !== '') {
377
- return true;
545
+ set overflowSuffix(value: string) {
546
+ if (this.textProps.overflowSuffix !== value) {
547
+ this.textProps.overflowSuffix = value;
548
+ this._layoutGenerated = false;
549
+ this.setUpdateType(UpdateType.Local);
378
550
  }
379
-
380
- return false;
381
551
  }
382
552
 
383
- override setRenderable(isRenderable: boolean) {
384
- super.setRenderable(isRenderable);
385
- this.textRenderer.setIsRenderable(this.trState, isRenderable);
553
+ get wordBreak(): TrProps['wordBreak'] {
554
+ return this.textProps.wordBreak;
386
555
  }
387
556
 
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;
557
+ set wordBreak(value: TrProps['wordBreak']) {
558
+ if (this.textProps.wordBreak !== value) {
559
+ this.textProps.wordBreak = value;
560
+ this._layoutGenerated = false;
561
+ this.setUpdateType(UpdateType.Local);
396
562
  }
563
+ }
397
564
 
398
- // If the text renderer does support rendering quads, use it...
399
-
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
- }
410
- }
565
+ get offsetY(): number {
566
+ return this.textProps.offsetY;
567
+ }
411
568
 
412
- if (this.parentHasRenderTexture && this.props.parent?.rtt) {
413
- this.globalTransform = Matrix3d.identity();
414
- if (this.localTransform) {
415
- this.globalTransform.multiply(this.localTransform);
416
- }
569
+ set offsetY(value: number) {
570
+ if (this.textProps.offsetY !== value) {
571
+ this.textProps.offsetY = value;
572
+ this._layoutGenerated = false;
573
+ this.setUpdateType(UpdateType.Local);
417
574
  }
418
-
419
- assertTruthy(this.globalTransform);
420
-
421
- this.textRenderer.renderQuads(this);
422
575
  }
423
576
 
424
- /**
425
- * Destroy the node and cleanup all resources
426
- */
427
- override destroy(): void {
428
- super.destroy();
429
-
430
- this.textRenderer.destroyState(this.trState);
577
+ get forceLoad() {
578
+ return this.textProps.forceLoad;
431
579
  }
432
580
 
433
- /**
434
- * Resolve a text renderer and a new state based on the current text renderer props provided
435
- * @param props
436
- * @returns
437
- */
438
- private createState(props: TrProps) {
439
- const textRendererState = this.textRenderer.createState(props, this);
440
-
441
- textRendererState.emitter.on('loaded', this.onTextLoaded);
442
- textRendererState.emitter.on('failed', this.onTextFailed);
443
-
444
- this.textRenderer.scheduleUpdateState(textRendererState);
581
+ set forceLoad(value: boolean) {
582
+ if (this.textProps.forceLoad !== value) {
583
+ this.textProps.forceLoad = value;
584
+ this.setUpdateType(UpdateType.Local);
585
+ }
586
+ }
445
587
 
446
- return textRendererState;
588
+ get renderInfo(): TextRenderInfo {
589
+ return this._renderInfo;
447
590
  }
448
591
  }