@lightningtv/renderer 3.0.0-beta1 → 3.2.4

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