@lightningjs/renderer 3.0.0-beta9 → 3.0.1

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