@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta21

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 (587) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +124 -100
  19. package/dist/src/core/CoreNode.js +720 -472
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +355 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +93 -33
  30. package/dist/src/core/Stage.js +315 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/Animation.d.ts +21 -0
  39. package/dist/src/core/animations/Animation.js +194 -0
  40. package/dist/src/core/animations/Animation.js.map +1 -0
  41. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  42. package/dist/src/core/animations/CoreAnimation.js +8 -3
  43. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  44. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  45. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  46. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  47. package/dist/src/core/animations/Playback.d.ts +64 -0
  48. package/dist/src/core/animations/Playback.js +169 -0
  49. package/dist/src/core/animations/Playback.js.map +1 -0
  50. package/dist/src/core/animations/Transition.d.ts +27 -0
  51. package/dist/src/core/animations/Transition.js +52 -0
  52. package/dist/src/core/animations/Transition.js.map +1 -0
  53. package/dist/src/core/animations/utils.d.ts +2 -0
  54. package/dist/src/core/animations/utils.js +136 -0
  55. package/dist/src/core/animations/utils.js.map +1 -0
  56. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  57. package/dist/src/core/lib/ImageWorker.js +31 -12
  58. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  59. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  60. package/dist/src/core/lib/WebGlContextWrapper.js +105 -28
  61. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  62. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  63. package/dist/src/core/lib/collectionUtils.js +100 -0
  64. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  65. package/dist/src/core/lib/colorCache.d.ts +1 -0
  66. package/dist/src/core/lib/colorCache.js +19 -0
  67. package/dist/src/core/lib/colorCache.js.map +1 -0
  68. package/dist/src/core/lib/colorParser.d.ts +21 -0
  69. package/dist/src/core/lib/colorParser.js +72 -0
  70. package/dist/src/core/lib/colorParser.js.map +1 -0
  71. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  72. package/dist/src/core/lib/textureCompression.js +320 -67
  73. package/dist/src/core/lib/textureCompression.js.map +1 -1
  74. package/dist/src/core/lib/utils.d.ts +8 -2
  75. package/dist/src/core/lib/utils.js +43 -21
  76. package/dist/src/core/lib/utils.js.map +1 -1
  77. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  78. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  79. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  80. package/dist/src/core/platform.js +30 -5
  81. package/dist/src/core/platform.js.map +1 -1
  82. package/dist/src/core/platforms/Platform.d.ts +42 -0
  83. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  84. package/dist/src/core/platforms/Platform.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  86. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  87. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  88. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  89. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  90. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -30
  91. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  92. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  93. package/dist/src/core/renderers/CoreShaderNode.d.ts +12 -1
  94. package/dist/src/core/renderers/CoreShaderNode.js +26 -0
  95. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  96. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  97. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  98. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  99. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  100. package/dist/src/core/renderers/canvas/CanvasRenderer.js +65 -87
  101. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  102. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  103. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  104. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  105. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  106. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  107. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  108. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  109. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  110. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  111. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  112. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  113. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  115. package/dist/src/core/renderers/webgl/SdfRenderOp.js +97 -0
  116. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  117. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  118. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  119. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  120. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +87 -42
  121. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  122. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  124. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  125. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  126. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  127. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  129. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  130. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  132. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  133. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  135. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -52
  136. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +11 -4
  139. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  140. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -21
  141. package/dist/src/core/renderers/webgl/WebGlRenderer.js +168 -152
  142. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  143. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -4
  144. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  145. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  146. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  147. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +83 -43
  148. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  150. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  152. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  154. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  155. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  156. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  157. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  158. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  159. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  160. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  162. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  163. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  164. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  165. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  166. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  171. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  172. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  173. package/dist/src/core/shaders/canvas/Border.js +64 -25
  174. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  175. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  176. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  177. package/dist/src/core/shaders/canvas/LinearGradient.js +11 -7
  178. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  179. package/dist/src/core/shaders/canvas/RadialGradient.js +21 -17
  180. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  181. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  182. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  183. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  184. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +45 -7
  185. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  186. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  187. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +50 -11
  188. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  189. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +10 -7
  190. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  191. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  192. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  193. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  194. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  195. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  196. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  197. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -11
  198. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  200. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  201. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  203. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  204. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  205. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  206. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  207. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  208. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  209. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  210. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  211. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  212. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  213. package/dist/src/core/shaders/utils.js.map +1 -0
  214. package/dist/src/core/shaders/webgl/Border.js +116 -35
  215. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  216. package/dist/src/core/shaders/webgl/Default.js +6 -7
  217. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  218. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  219. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  220. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  221. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  222. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  223. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  224. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  225. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +153 -39
  227. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  228. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +158 -43
  229. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  230. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +6 -4
  231. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  232. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  233. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  234. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  235. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  236. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  237. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  238. package/dist/src/core/shaders/webgl/Shadow.js +12 -6
  239. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  240. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  241. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  242. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  243. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  244. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  245. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  247. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  248. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  249. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  250. package/dist/src/core/text-rendering/SdfTextRenderer.js +303 -0
  251. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  252. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  253. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  254. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  255. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  256. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  257. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  258. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  259. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  260. package/dist/src/core/text-rendering/Utils.js +84 -0
  261. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  262. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  263. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  264. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  266. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  267. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  269. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  270. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  271. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  272. package/dist/src/core/textures/ColorTexture.js +3 -4
  273. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  274. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  275. package/dist/src/core/textures/ImageTexture.js +31 -40
  276. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  277. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  278. package/dist/src/core/textures/NoiseTexture.js +8 -8
  279. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  280. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  281. package/dist/src/core/textures/RenderTexture.js +12 -12
  282. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  283. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  284. package/dist/src/core/textures/SubTexture.js +19 -37
  285. package/dist/src/core/textures/SubTexture.js.map +1 -1
  286. package/dist/src/core/textures/Texture.d.ts +87 -10
  287. package/dist/src/core/textures/Texture.js +160 -17
  288. package/dist/src/core/textures/Texture.js.map +1 -1
  289. package/dist/src/core/utils.d.ts +2 -1
  290. package/dist/src/core/utils.js +1 -1
  291. package/dist/src/core/utils.js.map +1 -1
  292. package/dist/src/main-api/INode.d.ts +2 -2
  293. package/dist/src/main-api/Inspector.d.ts +131 -2
  294. package/dist/src/main-api/Inspector.js +345 -28
  295. package/dist/src/main-api/Inspector.js.map +1 -1
  296. package/dist/src/main-api/Renderer.d.ts +295 -82
  297. package/dist/src/main-api/Renderer.js +223 -76
  298. package/dist/src/main-api/Renderer.js.map +1 -1
  299. package/dist/src/utils.d.ts +1 -6
  300. package/dist/src/utils.js +2 -9
  301. package/dist/src/utils.js.map +1 -1
  302. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  303. package/dist/tsconfig.tsbuildinfo +1 -0
  304. package/exports/canvas.ts +1 -1
  305. package/exports/index.ts +2 -8
  306. package/exports/utils.ts +7 -1
  307. package/exports/webgl.ts +3 -1
  308. package/package.json +15 -17
  309. package/src/common/CommonTypes.ts +18 -2
  310. package/src/core/Autosizer.ts +224 -0
  311. package/src/core/CoreNode.test.ts +179 -17
  312. package/src/core/CoreNode.ts +895 -599
  313. package/src/core/CoreShaderManager.ts +5 -10
  314. package/src/core/CoreTextNode.ts +422 -286
  315. package/src/core/CoreTextureManager.ts +110 -130
  316. package/src/core/Stage.ts +397 -195
  317. package/src/core/TextureError.ts +46 -0
  318. package/src/core/TextureMemoryManager.ts +164 -141
  319. package/src/core/animations/CoreAnimation.ts +15 -9
  320. package/src/core/animations/CoreAnimationController.ts +13 -4
  321. package/src/core/lib/ImageWorker.ts +43 -12
  322. package/src/core/lib/WebGlContextWrapper.ts +127 -79
  323. package/src/core/lib/collectionUtils.ts +118 -0
  324. package/src/core/lib/colorCache.ts +20 -0
  325. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  326. package/src/core/lib/textureCompression.ts +433 -75
  327. package/src/core/lib/utils.ts +54 -25
  328. package/src/core/lib/validateImageBitmap.ts +17 -6
  329. package/src/core/platforms/Platform.ts +83 -0
  330. package/src/core/platforms/web/WebPlatform.ts +132 -0
  331. package/src/core/renderers/CoreContextTexture.ts +2 -1
  332. package/src/core/renderers/CoreRenderer.ts +5 -32
  333. package/src/core/renderers/CoreShaderNode.ts +38 -3
  334. package/src/core/renderers/canvas/CanvasRenderer.ts +84 -126
  335. package/src/core/renderers/canvas/CanvasShaderNode.ts +4 -8
  336. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  337. package/src/core/renderers/webgl/SdfRenderOp.ts +105 -0
  338. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  339. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  340. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -84
  341. package/src/core/renderers/webgl/WebGlRenderer.ts +203 -190
  342. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -11
  343. package/src/core/renderers/webgl/WebGlShaderProgram.ts +101 -53
  344. package/src/core/shaders/canvas/Border.ts +88 -34
  345. package/src/core/shaders/canvas/HolePunch.ts +5 -11
  346. package/src/core/shaders/canvas/LinearGradient.ts +14 -10
  347. package/src/core/shaders/canvas/RadialGradient.ts +24 -41
  348. package/src/core/shaders/canvas/Rounded.ts +7 -7
  349. package/src/core/shaders/canvas/RoundedWithBorder.ts +77 -23
  350. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +84 -36
  351. package/src/core/shaders/canvas/RoundedWithShadow.ts +15 -13
  352. package/src/core/shaders/canvas/Shadow.ts +7 -5
  353. package/src/core/shaders/canvas/utils/render.ts +45 -36
  354. package/src/core/shaders/templates/BorderTemplate.ts +42 -12
  355. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  356. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  357. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  358. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  359. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  360. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  361. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  362. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  363. package/src/core/shaders/webgl/Border.ts +116 -39
  364. package/src/core/shaders/webgl/Default.ts +6 -7
  365. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  366. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  367. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  368. package/src/core/shaders/webgl/Rounded.ts +4 -6
  369. package/src/core/shaders/webgl/RoundedWithBorder.ts +154 -46
  370. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +159 -52
  371. package/src/core/shaders/webgl/RoundedWithShadow.ts +6 -8
  372. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  373. package/src/core/shaders/webgl/Shadow.ts +12 -6
  374. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  375. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  376. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  377. package/src/core/text-rendering/SdfTextRenderer.ts +408 -0
  378. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  379. package/src/core/text-rendering/TextRenderer.ts +444 -0
  380. package/src/core/text-rendering/Utils.ts +99 -0
  381. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  382. package/src/core/textures/ColorTexture.ts +7 -5
  383. package/src/core/textures/ImageTexture.ts +78 -66
  384. package/src/core/textures/NoiseTexture.ts +14 -12
  385. package/src/core/textures/RenderTexture.ts +18 -16
  386. package/src/core/textures/SubTexture.ts +25 -46
  387. package/src/core/textures/Texture.ts +207 -24
  388. package/src/core/utils.ts +9 -7
  389. package/src/main-api/INode.ts +4 -3
  390. package/src/main-api/Inspector.ts +577 -36
  391. package/src/main-api/Renderer.ts +518 -139
  392. package/src/utils.ts +10 -10
  393. package/dist/exports/core-api.d.ts +0 -74
  394. package/dist/exports/core-api.js +0 -96
  395. package/dist/exports/core-api.js.map +0 -1
  396. package/dist/exports/main-api.d.ts +0 -30
  397. package/dist/exports/main-api.js +0 -45
  398. package/dist/exports/main-api.js.map +0 -1
  399. package/dist/src/core/CoreExtension.d.ts +0 -12
  400. package/dist/src/core/CoreExtension.js +0 -29
  401. package/dist/src/core/CoreExtension.js.map +0 -1
  402. package/dist/src/core/CoreStuff.d.ts +0 -1
  403. package/dist/src/core/CoreStuff.js +0 -138
  404. package/dist/src/core/CoreStuff.js.map +0 -1
  405. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  406. package/dist/src/core/CoreTexturizer.js +0 -47
  407. package/dist/src/core/CoreTexturizer.js.map +0 -1
  408. package/dist/src/core/LngNode.d.ts +0 -736
  409. package/dist/src/core/LngNode.js +0 -1174
  410. package/dist/src/core/LngNode.js.map +0 -1
  411. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  412. package/dist/src/core/Matrix2DContext.js +0 -45
  413. package/dist/src/core/Matrix2DContext.js.map +0 -1
  414. package/dist/src/core/ShaderNode.d.ts +0 -10
  415. package/dist/src/core/ShaderNode.js +0 -30
  416. package/dist/src/core/ShaderNode.js.map +0 -1
  417. package/dist/src/core/TextNode.d.ts +0 -103
  418. package/dist/src/core/TextNode.js +0 -331
  419. package/dist/src/core/TextNode.js.map +0 -1
  420. package/dist/src/core/lib/Coords.d.ts +0 -14
  421. package/dist/src/core/lib/Coords.js +0 -55
  422. package/dist/src/core/lib/Coords.js.map +0 -1
  423. package/dist/src/core/lib/glm/common.d.ts +0 -162
  424. package/dist/src/core/lib/glm/common.js +0 -81
  425. package/dist/src/core/lib/glm/common.js.map +0 -1
  426. package/dist/src/core/lib/glm/index.d.ts +0 -11
  427. package/dist/src/core/lib/glm/index.js +0 -30
  428. package/dist/src/core/lib/glm/index.js.map +0 -1
  429. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  430. package/dist/src/core/lib/glm/mat2.js +0 -396
  431. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  432. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  433. package/dist/src/core/lib/glm/mat2d.js +0 -442
  434. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  435. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  436. package/dist/src/core/lib/glm/mat3.js +0 -680
  437. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  438. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  439. package/dist/src/core/lib/glm/mat4.js +0 -1802
  440. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  441. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  442. package/dist/src/core/lib/glm/quat.js +0 -693
  443. package/dist/src/core/lib/glm/quat.js.map +0 -1
  444. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  445. package/dist/src/core/lib/glm/quat2.js +0 -754
  446. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  447. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  448. package/dist/src/core/lib/glm/vec2.js +0 -569
  449. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  450. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  451. package/dist/src/core/lib/glm/vec3.js +0 -720
  452. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  453. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  454. package/dist/src/core/lib/glm/vec4.js +0 -608
  455. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  456. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  457. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  458. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  459. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  460. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  461. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  462. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  463. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  464. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  465. package/dist/src/core/scene/Scene.d.ts +0 -59
  466. package/dist/src/core/scene/Scene.js +0 -106
  467. package/dist/src/core/scene/Scene.js.map +0 -1
  468. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  469. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  470. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  471. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  472. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  473. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  474. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  475. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  476. package/dist/src/main-api/IShaderController.d.ts +0 -14
  477. package/dist/src/main-api/IShaderController.js +0 -30
  478. package/dist/src/main-api/IShaderController.js.map +0 -1
  479. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  480. package/dist/src/main-api/IShaderNode.js +0 -19
  481. package/dist/src/main-api/IShaderNode.js.map +0 -1
  482. package/dist/src/main-api/RendererMain.d.ts +0 -375
  483. package/dist/src/main-api/RendererMain.js +0 -365
  484. package/dist/src/main-api/RendererMain.js.map +0 -1
  485. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  486. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  487. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  488. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  489. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  490. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  491. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  492. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  493. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  494. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  495. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  496. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  497. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  498. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  499. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  500. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  501. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  502. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  503. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  504. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  505. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  506. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  507. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  508. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  509. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  510. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  511. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  512. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  513. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  514. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  515. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  516. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  517. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  518. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  519. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  520. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  521. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  522. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  523. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  524. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  525. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  526. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  527. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  528. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  529. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  530. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  531. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  532. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  533. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  534. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  535. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  536. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  537. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  538. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  539. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  540. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  541. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  542. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  543. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  544. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  545. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  546. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  547. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  548. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  549. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  550. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  551. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  552. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  553. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  554. package/dist/src/render-drivers/utils.d.ts +0 -12
  555. package/dist/src/render-drivers/utils.js +0 -69
  556. package/dist/src/render-drivers/utils.js.map +0 -1
  557. package/scripts/please-use-pnpm.js +0 -13
  558. package/src/core/platform.ts +0 -64
  559. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  560. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  561. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  562. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  563. package/src/core/text-rendering/TrFontManager.ts +0 -183
  564. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  565. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  566. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  567. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  568. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  569. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  570. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  571. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  572. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  573. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  574. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  575. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  576. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  577. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  578. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  579. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  580. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  581. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  582. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  583. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  584. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  585. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  586. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  587. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -16,20 +16,19 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
- import { startLoop, getTimeStamp } from './platform.js';
20
19
  import { assertTruthy, setPremultiplyMode } from '../utils.js';
21
20
  import { AnimationManager } from './animations/AnimationManager.js';
22
21
  import { UpdateType, CoreNode, CoreNodeRenderState, } from './CoreNode.js';
23
22
  import { CoreTextureManager } from './CoreTextureManager.js';
24
- import { TrFontManager } from './text-rendering/TrFontManager.js';
25
23
  import { CoreShaderManager } from './CoreShaderManager.js';
26
- import { TextRenderer, } from './text-rendering/renderers/TextRenderer.js';
24
+ import {} from './text-rendering/TextRenderer.js';
27
25
  import { EventEmitter } from '../common/EventEmitter.js';
28
26
  import { ContextSpy } from './lib/ContextSpy.js';
29
27
  import { TextureMemoryManager, } from './TextureMemoryManager.js';
30
28
  import { CoreRenderer } from './renderers/CoreRenderer.js';
31
29
  import { CoreTextNode } from './CoreTextNode.js';
32
30
  import { santizeCustomDataMap } from '../main-api/utils.js';
31
+ import { pointInBound } from './lib/utils.js';
33
32
  import { createBound, createPreloadBounds } from './lib/utils.js';
34
33
  import { ColorTexture } from './textures/ColorTexture.js';
35
34
  const autoStart = true;
@@ -39,19 +38,30 @@ export class Stage {
39
38
  animationManager;
40
39
  txManager;
41
40
  txMemManager;
42
- fontManager;
43
- textRenderers;
41
+ textRenderers = {};
42
+ fontHandlers = {};
44
43
  shManager;
45
44
  renderer;
46
45
  root;
46
+ interactiveNodes = new Set();
47
47
  boundsMargin;
48
48
  defShaderNode = null;
49
49
  strictBound;
50
50
  preloadBound;
51
- strictBounds;
52
51
  defaultTexture = null;
53
52
  pixelRatio;
54
53
  bufferMemory = 2e6;
54
+ platform;
55
+ calculateTextureCoord;
56
+ /**
57
+ * Target frame time in milliseconds (calculated from targetFPS)
58
+ *
59
+ * @remarks
60
+ * This is pre-calculated to avoid recalculating on every frame.
61
+ * - 0 means no throttling (use display refresh rate)
62
+ * - >0 means throttle to this frame time (1000 / targetFPS)
63
+ */
64
+ targetFrameTime = 0;
55
65
  /**
56
66
  * Renderer Event Bus for the Stage to emit events onto
57
67
  *
@@ -62,28 +72,42 @@ export class Stage {
62
72
  */
63
73
  eventBus;
64
74
  /// State
75
+ startTime = 0;
65
76
  deltaTime = 0;
66
77
  lastFrameTime = 0;
67
78
  currentFrameTime = 0;
79
+ elapsedTime = 0;
80
+ timedNodes = [];
68
81
  clrColor = 0x00000000;
69
82
  fpsNumFrames = 0;
70
83
  fpsElapsedTime = 0;
71
84
  numQuadsRendered = 0;
72
85
  renderRequested = false;
73
86
  frameEventQueue = [];
74
- fontResolveMap = {};
75
- /// Debug data
87
+ // Font resolve optimisation flags
88
+ hasOnlyOneFontEngine;
89
+ hasOnlyCanvasFontEngine;
90
+ hasCanvasEngine;
91
+ singleFontEngine = null;
92
+ singleFontHandler = null;
93
+ // Debug data
76
94
  contextSpy = null;
77
95
  /**
78
96
  * Stage constructor
79
97
  */
80
98
  constructor(options) {
81
99
  this.options = options;
82
- const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, } = options;
100
+ const { canvas, clearColor, appWidth, appHeight, boundsMargin, enableContextSpy, forceWebGL2, numImageWorkers, textureMemory, renderEngine, fontEngines, createImageBitmapSupport, platform, maxRetryCount, } = options;
101
+ assertTruthy(platform !== null, 'A CorePlatform is not provided in the options');
102
+ this.platform = platform;
103
+ this.startTime = platform.getTimeStamp();
83
104
  this.eventBus = options.eventBus;
105
+ // Calculate target frame time from targetFPS option
106
+ this.targetFrameTime = options.targetFPS > 0 ? 1000 / options.targetFPS : 0;
84
107
  this.txManager = new CoreTextureManager(this, {
85
108
  numImageWorkers,
86
109
  createImageBitmapSupport,
110
+ maxRetryCount,
87
111
  });
88
112
  // Wait for the Texture Manager to initialize
89
113
  // once it does, request a render
@@ -93,7 +117,6 @@ export class Stage {
93
117
  this.txMemManager = new TextureMemoryManager(this, textureMemory);
94
118
  this.animationManager = new AnimationManager();
95
119
  this.contextSpy = enableContextSpy ? new ContextSpy() : null;
96
- this.strictBounds = options.strictBounds;
97
120
  let bm = [0, 0, 0, 0];
98
121
  if (boundsMargin) {
99
122
  bm = Array.isArray(boundsMargin)
@@ -115,40 +138,85 @@ export class Stage {
115
138
  });
116
139
  this.shManager = new CoreShaderManager(this);
117
140
  this.defShaderNode = this.renderer.getDefaultShaderNode();
141
+ this.calculateTextureCoord = this.renderer.getTextureCoords !== undefined;
118
142
  const renderMode = this.renderer.mode || 'webgl';
119
143
  this.createDefaultTexture();
120
144
  setPremultiplyMode(renderMode);
121
145
  // Must do this after renderer is created
122
146
  this.txManager.renderer = this.renderer;
123
147
  // Create text renderers
124
- this.textRenderers = {};
125
- fontEngines.forEach((fontEngineConstructor) => {
126
- const fontEngineInstance = new fontEngineConstructor(this);
127
- const className = fontEngineInstance.type;
128
- if (className === 'sdf' && renderMode === 'canvas') {
129
- console.warn('SdfTextRenderer is not compatible with Canvas renderer. Skipping...');
130
- return;
131
- }
132
- if (fontEngineInstance instanceof TextRenderer) {
133
- if (className === 'canvas') {
134
- this.textRenderers['canvas'] =
135
- fontEngineInstance;
148
+ this.hasOnlyOneFontEngine = fontEngines.length === 1;
149
+ this.hasOnlyCanvasFontEngine =
150
+ fontEngines.length === 1 && fontEngines[0].type === 'canvas';
151
+ this.hasCanvasEngine = false;
152
+ this.singleFontEngine = this.hasOnlyOneFontEngine
153
+ ? fontEngines[0]
154
+ : null;
155
+ this.singleFontHandler = this.hasOnlyOneFontEngine
156
+ ? fontEngines[0]?.font
157
+ : null;
158
+ if (this.singleFontEngine === null) {
159
+ // Multiple font engines case
160
+ // Filter out incompatible engines first
161
+ const compatibleEngines = fontEngines.filter((fontEngine) => {
162
+ const type = fontEngine.type;
163
+ if (type === 'sdf' && renderMode === 'canvas') {
164
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
165
+ return false;
136
166
  }
137
- else if (className === 'sdf') {
138
- this.textRenderers['sdf'] = fontEngineInstance;
167
+ if (type === 'canvas') {
168
+ this.hasCanvasEngine = true;
139
169
  }
170
+ return true;
171
+ });
172
+ // Sort engines: SDF first, Canvas last, others in between
173
+ const sortedEngines = compatibleEngines.sort((a, b) => {
174
+ if (a.type === 'sdf')
175
+ return -1;
176
+ if (b.type === 'sdf')
177
+ return 1;
178
+ if (a.type === 'canvas')
179
+ return 1;
180
+ if (b.type === 'canvas')
181
+ return -1;
182
+ return 0;
183
+ });
184
+ // Initialize engines in sorted order
185
+ sortedEngines.forEach((fontEngine) => {
186
+ const type = fontEngine.type;
187
+ // Add to map for type-based access
188
+ this.textRenderers[type] = fontEngine;
189
+ this.textRenderers[type].init(this);
190
+ this.fontHandlers[type] = fontEngine.font;
191
+ });
192
+ }
193
+ else {
194
+ // Single font engine case - initialize it directly
195
+ const fontEngine = this.singleFontEngine;
196
+ const type = fontEngine.type;
197
+ // Check compatibility
198
+ if (type === 'sdf' && renderMode === 'canvas') {
199
+ console.warn('MsdfTextRenderer is not compatible with Canvas renderer. Skipping...');
140
200
  }
141
- });
201
+ else {
202
+ if (type === 'canvas') {
203
+ this.hasCanvasEngine = true;
204
+ }
205
+ // Add to map for type-based access
206
+ this.textRenderers[type] = fontEngine;
207
+ this.fontHandlers[type] = fontEngine.font;
208
+ this.textRenderers[type].init(this);
209
+ }
210
+ }
142
211
  if (Object.keys(this.textRenderers).length === 0) {
143
212
  console.warn('No text renderers available. Your text will not render.');
144
213
  }
145
- this.fontManager = new TrFontManager(this.textRenderers);
146
214
  // create root node
147
215
  const rootNode = new CoreNode(this, {
148
216
  x: 0,
149
217
  y: 0,
150
- width: appWidth,
151
- height: appHeight,
218
+ w: appWidth,
219
+ h: appHeight,
152
220
  alpha: 1,
153
221
  autosize: false,
154
222
  boundsMargin: null,
@@ -163,7 +231,6 @@ export class Stage {
163
231
  colorBl: 0x00000000,
164
232
  colorBr: 0x00000000,
165
233
  zIndex: 0,
166
- zIndexLocked: 0,
167
234
  scaleX: 1,
168
235
  scaleY: 1,
169
236
  mountX: 0,
@@ -180,13 +247,11 @@ export class Stage {
180
247
  rtt: false,
181
248
  src: null,
182
249
  scale: 1,
183
- preventCleanup: false,
184
- strictBounds: this.strictBounds,
185
250
  });
186
251
  this.root = rootNode;
187
252
  // execute platform start loop
188
- if (autoStart) {
189
- startLoop(this);
253
+ if (autoStart === true) {
254
+ this.platform.startLoop(this);
190
255
  }
191
256
  }
192
257
  setClearColor(color) {
@@ -194,10 +259,24 @@ export class Stage {
194
259
  this.renderer.updateClearColor(color);
195
260
  this.renderRequested = true;
196
261
  }
262
+ /**
263
+ * Update the target frame time based on the current targetFPS setting
264
+ *
265
+ * @remarks
266
+ * This should be called whenever the targetFPS option is changed
267
+ * to ensure targetFrameTime stays in sync.
268
+ * targetFPS of 0 means no throttling (targetFrameTime = 0)
269
+ * targetFPS > 0 means throttle to 1000/targetFPS milliseconds
270
+ */
271
+ updateTargetFrameTime() {
272
+ this.targetFrameTime =
273
+ this.options.targetFPS > 0 ? 1000 / this.options.targetFPS : 0;
274
+ }
197
275
  updateFrameTime() {
198
- const newFrameTime = getTimeStamp();
276
+ const newFrameTime = this.platform.getTimeStamp();
199
277
  this.lastFrameTime = this.currentFrameTime;
200
278
  this.currentFrameTime = newFrameTime;
279
+ this.elapsedTime = newFrameTime - this.startTime;
201
280
  this.deltaTime = !this.lastFrameTime
202
281
  ? 100 / 6
203
282
  : newFrameTime - this.lastFrameTime;
@@ -214,7 +293,6 @@ export class Stage {
214
293
  * Create default PixelTexture
215
294
  */
216
295
  createDefaultTexture() {
217
- console.log('Creating default texture');
218
296
  this.defaultTexture = this.txManager.createTexture('ColorTexture', {
219
297
  color: 0xffffffff,
220
298
  });
@@ -223,7 +301,7 @@ export class Stage {
223
301
  // Mark the default texture as ALWAYS renderable
224
302
  // This prevents it from ever being cleaned up.
225
303
  // Fixes https://github.com/lightning-js/renderer/issues/262
226
- this.defaultTexture.setRenderableOwner(this, true);
304
+ this.defaultTexture.setRenderableOwner('stage', true);
227
305
  // When the default texture is loaded, request a render in case the
228
306
  // RAF is paused. Fixes: https://github.com/lightning-js/renderer/issues/123
229
307
  this.defaultTexture.once('loaded', () => {
@@ -253,24 +331,23 @@ export class Stage {
253
331
  * Start a new frame draw
254
332
  */
255
333
  drawFrame() {
256
- const { renderer, renderRequested } = this;
257
- assertTruthy(renderer);
334
+ const { renderer, renderRequested, root } = this;
335
+ const txMemManager = this.txMemManager;
258
336
  // Update tree if needed
259
- if (this.root.updateType !== 0) {
260
- this.root.update(this.deltaTime, this.root.clippingRect);
337
+ if (root.updateType !== 0) {
338
+ root.update(this.deltaTime, root.clippingRect);
339
+ }
340
+ // Process some textures asynchronously but don't block the frame
341
+ // Use a background task to prevent frame drops
342
+ if (this.txManager.hasUpdates() === true) {
343
+ this.txManager
344
+ .processSome(this.options.textureProcessingTimeLimit)
345
+ .catch((err) => {
346
+ console.error('Error processing textures:', err);
347
+ });
261
348
  }
262
- // Process some textures
263
- this.txManager.processSome(this.options.textureProcessingTimeLimit);
264
349
  // Reset render operations and clear the canvas
265
350
  renderer.reset();
266
- // Check if we need to cleanup textures
267
- if (this.txMemManager.criticalCleanupRequested === true) {
268
- this.txMemManager.cleanup(false);
269
- if (this.txMemManager.criticalCleanupRequested === true) {
270
- // If we still need to cleanup, request another but aggressive cleanup
271
- this.txMemManager.cleanup(true);
272
- }
273
- }
274
351
  // If we have RTT nodes draw them first
275
352
  // So we can use them as textures in the main scene
276
353
  if (renderer.rttNodes.length > 0) {
@@ -279,13 +356,25 @@ export class Stage {
279
356
  // Fill quads buffer
280
357
  this.addQuads(this.root);
281
358
  // Perform render pass
282
- renderer?.render();
359
+ renderer.render();
283
360
  this.calculateFps();
284
361
  this.calculateQuads();
285
362
  // Reset renderRequested flag if it was set
286
- if (renderRequested) {
363
+ if (renderRequested === true) {
287
364
  this.renderRequested = false;
288
365
  }
366
+ if (this.timedNodes.length > 0) {
367
+ for (let key in this.timedNodes) {
368
+ if (this.timedNodes[key].isRenderable === true) {
369
+ this.requestRender();
370
+ break;
371
+ }
372
+ }
373
+ }
374
+ // Check if we need to cleanup textures
375
+ if (this.txMemManager.criticalCleanupRequested === true) {
376
+ this.txMemManager.cleanup();
377
+ }
289
378
  }
290
379
  /**
291
380
  * Queue an event to be emitted after the current/next frame is rendered
@@ -359,8 +448,7 @@ export class Stage {
359
448
  continue;
360
449
  }
361
450
  if (child.worldAlpha === 0 ||
362
- (child.strictBounds === true &&
363
- child.renderState === CoreNodeRenderState.OutOfBounds)) {
451
+ child.renderState === CoreNodeRenderState.OutOfBounds) {
364
452
  continue;
365
453
  }
366
454
  this.addQuads(child);
@@ -383,86 +471,68 @@ export class Stage {
383
471
  * @returns
384
472
  */
385
473
  resolveTextRenderer(trProps, textRendererOverride = null) {
386
- const fontCacheString = `${trProps.fontFamily}${trProps.fontStyle}${trProps.fontWeight}${trProps.fontStretch}${textRendererOverride ? textRendererOverride : ''}`;
387
- // check our resolve cache first
388
- if (this.fontResolveMap[fontCacheString] !== undefined) {
389
- return this.fontResolveMap[fontCacheString];
390
- }
391
- // Resolve the text renderer
392
- let rendererId = textRendererOverride;
393
- let overrideFallback = false;
394
- // Check if the override is valid (if one is provided)
395
- if (rendererId) {
396
- const possibleRenderer = this.textRenderers[rendererId];
397
- if (!possibleRenderer) {
398
- console.warn(`Text renderer override '${rendererId}' not found.`);
399
- rendererId = null;
400
- overrideFallback = true;
401
- }
402
- else if (!possibleRenderer.canRenderFont(trProps)) {
403
- console.warn(`Cannot use override text renderer '${rendererId}' for font`, trProps);
404
- rendererId = null;
405
- overrideFallback = true;
474
+ // If we have an overide, return it
475
+ if (textRendererOverride !== null) {
476
+ const overrideKey = String(textRendererOverride);
477
+ if (this.textRenderers[overrideKey] === undefined) {
478
+ console.warn(`Text renderer override '${overrideKey}' not found.`);
479
+ return null;
406
480
  }
481
+ return this.textRenderers[overrideKey];
407
482
  }
408
- if (!rendererId) {
409
- // Iterate through the text renderers and find the first one that can render the font
410
- for (const [trId, tr] of Object.entries(this.textRenderers)) {
411
- if (tr.canRenderFont(trProps)) {
412
- rendererId = trId;
413
- break;
414
- }
483
+ // If we have only one font engine early return it
484
+ if (this.singleFontEngine !== null) {
485
+ // If we have only one font engine and its the canvas engine, we can just return it
486
+ if (this.hasOnlyCanvasFontEngine === true) {
487
+ return this.singleFontEngine;
415
488
  }
416
- if (!rendererId && this.textRenderers.canvas !== undefined) {
417
- // If no renderer can be found, use the canvas renderer
418
- rendererId = 'canvas';
489
+ // If we have only one font engine and it can render the font, return it
490
+ if (this.singleFontHandler?.canRenderFont(trProps) === true) {
491
+ return this.singleFontEngine;
419
492
  }
493
+ // If we have only one font engine and it cannot render the font, return null
494
+ console.warn(`Text renderer cannot render font`, trProps);
495
+ return null;
420
496
  }
421
- if (overrideFallback) {
422
- console.warn(`Falling back to text renderer ${String(rendererId)}`);
497
+ // Multi font handling - If we have multiple font engines, we need to resolve the best one
498
+ // First check SDF
499
+ if (this.fontHandlers['sdf']?.canRenderFont(trProps) === true) {
500
+ return this.textRenderers.sdf || null;
423
501
  }
424
- if (!rendererId) {
425
- // silently fail if no renderer can be found, the error is already created
426
- // at the constructor level
427
- return null;
502
+ // If we have a canvas engine, we can return it (it can render all fonts)
503
+ if (this.hasCanvasEngine === true) {
504
+ return this.textRenderers.canvas || null;
428
505
  }
429
- // By now we are guaranteed to have a valid rendererId (at least Canvas);
430
- const resolvedTextRenderer = this.textRenderers[rendererId];
431
- assertTruthy(resolvedTextRenderer, 'resolvedTextRenderer undefined');
432
- // cache the resolved renderer for future use with these trProps
433
- this.fontResolveMap[fontCacheString] = resolvedTextRenderer;
434
- // Need to explicitly cast to TextRenderer because TS doesn't like
435
- // the covariant state argument in the setter method map
436
- return resolvedTextRenderer;
506
+ // If we have no font engines, return null
507
+ console.warn('No text renderers available. Your text will not render.');
508
+ return null;
437
509
  }
438
510
  createNode(props) {
439
511
  const resolvedProps = this.resolveNodeDefaults(props);
440
512
  return new CoreNode(this, resolvedProps);
441
513
  }
442
514
  createTextNode(props) {
443
- const fontSize = props.fontSize ?? 16;
515
+ const fontSize = props.fontSize || 16;
444
516
  const resolvedProps = Object.assign(this.resolveNodeDefaults(props), {
445
- text: props.text ?? '',
446
- textRendererOverride: props.textRendererOverride ?? null,
517
+ text: props.text || '',
518
+ textRendererOverride: props.textRendererOverride || null,
447
519
  fontSize,
448
- fontFamily: props.fontFamily ?? 'sans-serif',
449
- fontStyle: props.fontStyle ?? 'normal',
450
- fontWeight: props.fontWeight ?? 'normal',
451
- fontStretch: props.fontStretch ?? 'normal',
452
- textAlign: props.textAlign ?? 'left',
453
- contain: props.contain ?? 'none',
454
- scrollable: props.scrollable ?? false,
455
- scrollY: props.scrollY ?? 0,
456
- offsetY: props.offsetY ?? 0,
457
- letterSpacing: props.letterSpacing ?? 0,
458
- lineHeight: props.lineHeight, // `undefined` is a valid value
459
- maxLines: props.maxLines ?? 0,
460
- textBaseline: props.textBaseline ?? 'alphabetic',
461
- verticalAlign: props.verticalAlign ?? 'middle',
462
- overflowSuffix: props.overflowSuffix ?? '...',
463
- debug: props.debug ?? {},
520
+ fontFamily: props.fontFamily || 'sans-serif',
521
+ fontStyle: props.fontStyle || 'normal',
522
+ textAlign: props.textAlign || 'left',
523
+ offsetY: props.offsetY || 0,
524
+ letterSpacing: props.letterSpacing || 0,
525
+ lineHeight: props.lineHeight || 1.2,
526
+ maxLines: props.maxLines || 0,
527
+ verticalAlign: props.verticalAlign || 'top',
528
+ overflowSuffix: props.overflowSuffix || '...',
529
+ wordBreak: props.wordBreak || 'break-word',
530
+ contain: props.contain || 'none',
531
+ maxWidth: props.maxWidth || 0,
532
+ maxHeight: props.maxHeight || 0,
533
+ forceLoad: props.forceLoad || false,
464
534
  });
465
- const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, props.textRendererOverride);
535
+ const resolvedTextRenderer = this.resolveTextRenderer(resolvedProps, resolvedProps.textRendererOverride);
466
536
  if (!resolvedTextRenderer) {
467
537
  throw new Error(`No compatible text renderer found for ${resolvedProps.fontFamily}`);
468
538
  }
@@ -474,6 +544,74 @@ export class Stage {
474
544
  : [value, value, value, value];
475
545
  this.root.setUpdateType(UpdateType.RenderBounds);
476
546
  }
547
+ /**
548
+ * Update the viewport bounds
549
+ */
550
+ updateViewportBounds() {
551
+ const { appWidth, appHeight } = this.options;
552
+ this.strictBound = createBound(0, 0, appWidth, appHeight);
553
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
554
+ this.root.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
555
+ this.root.childUpdateType |= UpdateType.RenderBounds;
556
+ }
557
+ /** Find all nodes at a given point
558
+ * @param data
559
+ */
560
+ findNodesAtPoint(data) {
561
+ const x = data.x / this.options.deviceLogicalPixelRatio;
562
+ const y = data.y / this.options.deviceLogicalPixelRatio;
563
+ const nodes = [];
564
+ for (const node of this.interactiveNodes) {
565
+ if (node.isRenderable === false) {
566
+ continue;
567
+ }
568
+ if (pointInBound(x, y, node.renderBound) === true) {
569
+ nodes.push(node);
570
+ }
571
+ }
572
+ return nodes;
573
+ }
574
+ /**
575
+ * Find the top node at a given point
576
+ * @param data
577
+ * @returns
578
+ */
579
+ getNodeFromPosition(data) {
580
+ const nodes = this.findNodesAtPoint(data);
581
+ if (nodes.length === 0) {
582
+ return null;
583
+ }
584
+ //get last node in array (as top node)
585
+ let topNode = nodes[nodes.length - 1];
586
+ for (let i = 0; i < nodes.length; i++) {
587
+ if (nodes[i].zIndex > topNode.zIndex) {
588
+ topNode = nodes[i];
589
+ }
590
+ }
591
+ return topNode || null;
592
+ }
593
+ /**
594
+ * add node to timeNodes arrays
595
+ * @param node
596
+ * @returns
597
+ */
598
+ trackTimedNode(node) {
599
+ if (this.timedNodes[node.id] !== undefined) {
600
+ return;
601
+ }
602
+ this.timedNodes[node.id] = node;
603
+ }
604
+ /**
605
+ * remove node from timeNodes arrays
606
+ * @param node
607
+ * @returns
608
+ */
609
+ untrackTimedNode(node) {
610
+ if (this.timedNodes[node.id] === undefined) {
611
+ return;
612
+ }
613
+ delete this.timedNodes[node.id];
614
+ }
477
615
  /**
478
616
  * Resolves the default property values for a Node
479
617
  *
@@ -486,61 +624,64 @@ export class Stage {
486
624
  * @returns
487
625
  */
488
626
  resolveNodeDefaults(props) {
627
+ const { colorTop: top, colorBottom: bottom, colorLeft: left, colorRight: right, } = props;
489
628
  const color = props.color ?? 0xffffffff;
490
- const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
491
- const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
492
- const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
493
- const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
494
- let data = {};
495
- if (this.options.inspector === true) {
496
- data = santizeCustomDataMap(props.data ?? {});
497
- }
629
+ const colorTop = top ?? color;
630
+ const colorBottom = bottom ?? color;
631
+ const colorLeft = left ?? color;
632
+ const colorRight = right ?? color;
633
+ const colorTl = props.colorTl ?? top ?? left ?? color;
634
+ const colorTr = props.colorTr ?? top ?? right ?? color;
635
+ const colorBl = props.colorBl ?? bottom ?? left ?? color;
636
+ const colorBr = props.colorBr ?? bottom ?? right ?? color;
637
+ const scale = props.scale ?? null;
638
+ const mount = props.mount ?? 0;
639
+ const pivot = props.pivot ?? 0.5;
640
+ const data = this.options.inspector
641
+ ? santizeCustomDataMap(props.data ?? {})
642
+ : {};
498
643
  return {
499
644
  x: props.x ?? 0,
500
645
  y: props.y ?? 0,
501
- width: props.width ?? 0,
502
- height: props.height ?? 0,
646
+ w: props.w ?? 0,
647
+ h: props.h ?? 0,
503
648
  alpha: props.alpha ?? 1,
504
649
  autosize: props.autosize ?? false,
505
650
  boundsMargin: props.boundsMargin ?? null,
506
651
  clipping: props.clipping ?? false,
507
652
  color,
508
- colorTop: props.colorTop ?? color,
509
- colorBottom: props.colorBottom ?? color,
510
- colorLeft: props.colorLeft ?? color,
511
- colorRight: props.colorRight ?? color,
512
- colorBl,
513
- colorBr,
653
+ colorTop,
654
+ colorBottom,
655
+ colorLeft,
656
+ colorRight,
514
657
  colorTl,
515
658
  colorTr,
659
+ colorBl,
660
+ colorBr,
516
661
  zIndex: props.zIndex ?? 0,
517
- zIndexLocked: props.zIndexLocked ?? 0,
518
662
  parent: props.parent ?? null,
519
663
  texture: props.texture ?? null,
520
664
  textureOptions: props.textureOptions ?? {},
521
665
  shader: props.shader ?? this.defShaderNode,
522
- // Since setting the `src` will trigger a texture load, we need to set it after
523
- // we set the texture. Otherwise, problems happen.
524
666
  src: props.src ?? null,
525
667
  srcHeight: props.srcHeight,
526
668
  srcWidth: props.srcWidth,
527
669
  srcX: props.srcX,
528
670
  srcY: props.srcY,
529
- scale: props.scale ?? null,
530
- scaleX: props.scaleX ?? props.scale ?? 1,
531
- scaleY: props.scaleY ?? props.scale ?? 1,
532
- mount: props.mount ?? 0,
533
- mountX: props.mountX ?? props.mount ?? 0,
534
- mountY: props.mountY ?? props.mount ?? 0,
535
- pivot: props.pivot ?? 0.5,
536
- pivotX: props.pivotX ?? props.pivot ?? 0.5,
537
- pivotY: props.pivotY ?? props.pivot ?? 0.5,
671
+ scale,
672
+ scaleX: props.scaleX ?? scale ?? 1,
673
+ scaleY: props.scaleY ?? scale ?? 1,
674
+ mount,
675
+ mountX: props.mountX ?? mount,
676
+ mountY: props.mountY ?? mount,
677
+ pivot,
678
+ pivotX: props.pivotX ?? pivot,
679
+ pivotY: props.pivotY ?? pivot,
538
680
  rotation: props.rotation ?? 0,
539
681
  rtt: props.rtt ?? false,
540
- data: data,
541
- preventCleanup: props.preventCleanup ?? false,
682
+ data,
542
683
  imageType: props.imageType,
543
- strictBounds: props.strictBounds ?? this.strictBounds,
684
+ interactive: props.interactive ?? false,
544
685
  };
545
686
  }
546
687
  /**
@@ -549,8 +690,8 @@ export class Stage {
549
690
  * @remarks
550
691
  * This method is used to cleanup orphaned textures that are no longer in use.
551
692
  */
552
- cleanup(aggressive) {
553
- this.txMemManager.cleanup(aggressive);
693
+ cleanup(full = false) {
694
+ this.txMemManager.cleanup(full);
554
695
  }
555
696
  set clearColor(value) {
556
697
  this.renderer.updateClearColor(value);
@@ -560,5 +701,28 @@ export class Stage {
560
701
  get clearColor() {
561
702
  return this.clrColor;
562
703
  }
704
+ /**
705
+ * Load a font using a specific text renderer type
706
+ *
707
+ * @remarks
708
+ * This method allows consumers to explicitly load fonts for a specific
709
+ * text renderer type (e.g., 'canvas', 'sdf'). Consumers must specify
710
+ * the renderer type to ensure fonts are loaded with the correct pipeline.
711
+ *
712
+ * For Canvas fonts, provide fontUrl (e.g., .ttf, .woff, .woff2)
713
+ * For SDF fonts, provide atlasUrl (image) and atlasDataUrl (JSON glyph data)
714
+ *
715
+ * @param rendererType - The type of text renderer ('canvas', 'sdf', etc.)
716
+ * @param options - Font loading options specific to the renderer type
717
+ * @returns Promise that resolves when the font is loaded
718
+ */
719
+ async loadFont(rendererType, options) {
720
+ const rendererTypeKey = String(rendererType);
721
+ const fontHandler = this.fontHandlers[rendererTypeKey];
722
+ if (!fontHandler) {
723
+ throw new Error(`Font handler for renderer type '${rendererTypeKey}' not found. Available types: ${Object.keys(this.fontHandlers).join(', ')}`);
724
+ }
725
+ return fontHandler.loadFont(this, options);
726
+ }
563
727
  }
564
728
  //# sourceMappingURL=Stage.js.map