@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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