@lightningjs/renderer 3.0.0-beta9 → 3.0.0

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