@lightningjs/renderer 0.9.4 → 1.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +0 -82
  2. package/dist/exports/index.d.ts +40 -3
  3. package/dist/exports/index.js +35 -3
  4. package/dist/exports/index.js.map +1 -1
  5. package/dist/src/core/CoreNode.d.ts +462 -46
  6. package/dist/src/core/CoreNode.js +171 -103
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreShaderManager.d.ts +16 -6
  9. package/dist/src/core/CoreShaderManager.js +20 -20
  10. package/dist/src/core/CoreShaderManager.js.map +1 -1
  11. package/dist/src/core/CoreTextNode.d.ts +30 -4
  12. package/dist/src/core/CoreTextNode.js +24 -1
  13. package/dist/src/core/CoreTextNode.js.map +1 -1
  14. package/dist/src/core/CoreTextureManager.d.ts +31 -82
  15. package/dist/src/core/CoreTextureManager.js +39 -126
  16. package/dist/src/core/CoreTextureManager.js.map +1 -1
  17. package/dist/src/core/Stage.d.ts +67 -9
  18. package/dist/src/core/Stage.js +174 -30
  19. package/dist/src/core/Stage.js.map +1 -1
  20. package/dist/src/core/TextureMemoryManager.d.ts +97 -8
  21. package/dist/src/core/TextureMemoryManager.js +142 -19
  22. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  23. package/dist/src/core/animations/CoreAnimation.d.ts +14 -6
  24. package/dist/src/core/animations/CoreAnimation.js +136 -44
  25. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  26. package/dist/src/core/lib/ImageWorker.js +59 -52
  27. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  28. package/dist/src/core/lib/utils.js.map +1 -1
  29. package/dist/src/core/platform.js +7 -1
  30. package/dist/src/core/platform.js.map +1 -1
  31. package/dist/src/core/renderers/CoreContextTexture.d.ts +3 -2
  32. package/dist/src/core/renderers/CoreContextTexture.js +7 -1
  33. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  34. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -1
  35. package/dist/src/core/renderers/CoreRenderer.js +0 -1
  36. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  37. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +3 -0
  38. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +16 -1
  39. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  40. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -1
  41. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -5
  42. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +2 -2
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -1
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -10
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +47 -9
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +24 -8
  52. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +70 -37
  53. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +2 -2
  55. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -1
  56. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +2 -2
  57. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -1
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +2 -2
  59. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -1
  60. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +2 -2
  61. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +2 -2
  63. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +8 -0
  65. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +103 -0
  66. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  67. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +3 -18
  68. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -1
  69. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +5 -2
  70. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -1
  71. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +4 -36
  72. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +3 -2
  74. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  75. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +4 -2
  76. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  77. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +2 -1
  78. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -1
  79. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +4 -36
  80. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -1
  81. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +11 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  83. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +5 -2
  84. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  85. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -1
  86. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -1
  87. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  88. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -1
  89. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  90. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +10 -26
  91. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +116 -365
  92. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  93. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -1
  94. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -2
  95. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +2 -2
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +2 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  100. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +3 -2
  101. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  102. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  103. package/dist/src/core/textures/ColorTexture.js +1 -1
  104. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  105. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  106. package/dist/src/core/textures/NoiseTexture.js +3 -0
  107. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  108. package/dist/src/core/textures/SubTexture.d.ts +2 -2
  109. package/dist/src/core/textures/SubTexture.js +5 -1
  110. package/dist/src/core/textures/SubTexture.js.map +1 -1
  111. package/dist/src/core/textures/Texture.d.ts +23 -2
  112. package/dist/src/core/textures/Texture.js +32 -3
  113. package/dist/src/core/textures/Texture.js.map +1 -1
  114. package/dist/src/core/utils.d.ts +7 -0
  115. package/dist/src/core/utils.js +12 -10
  116. package/dist/src/core/utils.js.map +1 -1
  117. package/dist/src/main-api/DynamicShaderController.d.ts +3 -9
  118. package/dist/src/main-api/DynamicShaderController.js +18 -17
  119. package/dist/src/main-api/DynamicShaderController.js.map +1 -1
  120. package/dist/src/main-api/INode.d.ts +43 -463
  121. package/dist/src/main-api/INode.js +1 -19
  122. package/dist/src/main-api/INode.js.map +1 -1
  123. package/dist/src/main-api/Inspector.d.ts +10 -10
  124. package/dist/src/main-api/Inspector.js +18 -15
  125. package/dist/src/main-api/Inspector.js.map +1 -1
  126. package/dist/src/main-api/Renderer.d.ts +27 -21
  127. package/dist/src/main-api/Renderer.js +38 -107
  128. package/dist/src/main-api/Renderer.js.map +1 -1
  129. package/dist/src/main-api/ShaderController.d.ts +3 -8
  130. package/dist/src/main-api/ShaderController.js +8 -3
  131. package/dist/src/main-api/ShaderController.js.map +1 -1
  132. package/dist/src/utils.d.ts +1 -0
  133. package/dist/src/utils.js +7 -0
  134. package/dist/src/utils.js.map +1 -1
  135. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  136. package/exports/index.ts +60 -3
  137. package/package.json +8 -7
  138. package/src/core/CoreNode.test.ts +93 -0
  139. package/src/core/CoreNode.ts +675 -187
  140. package/src/core/CoreShaderManager.ts +56 -29
  141. package/src/core/CoreTextNode.ts +41 -9
  142. package/src/core/CoreTextureManager.ts +55 -175
  143. package/src/core/Stage.ts +199 -43
  144. package/src/core/TextureMemoryManager.ts +231 -22
  145. package/src/core/animations/CoreAnimation.ts +193 -68
  146. package/src/core/lib/ImageWorker.ts +79 -52
  147. package/src/core/lib/utils.ts +1 -0
  148. package/src/core/platform.ts +8 -1
  149. package/src/core/renderers/CoreContextTexture.ts +9 -2
  150. package/src/core/renderers/CoreRenderer.ts +5 -2
  151. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +20 -1
  152. package/src/core/renderers/canvas/CanvasCoreTexture.ts +2 -6
  153. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +2 -2
  154. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +7 -11
  155. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +51 -9
  156. package/src/core/renderers/webgl/shaders/DynamicShader.ts +114 -55
  157. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +2 -2
  158. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +2 -2
  159. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +2 -2
  160. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +2 -2
  161. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +2 -2
  162. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +129 -3
  163. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +7 -15
  164. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +5 -2
  165. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +6 -15
  166. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +6 -2
  167. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +10 -2
  168. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +2 -1
  169. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +6 -15
  170. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +20 -0
  171. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +14 -15
  172. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -2
  173. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -1
  174. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +139 -447
  175. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -3
  176. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -2
  177. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +4 -2
  178. package/src/core/text-rendering/renderers/TextRenderer.ts +3 -2
  179. package/src/core/textures/ColorTexture.ts +1 -1
  180. package/src/core/textures/ImageTexture.ts +1 -1
  181. package/src/core/textures/NoiseTexture.ts +4 -1
  182. package/src/core/textures/SubTexture.ts +7 -7
  183. package/src/core/textures/Texture.ts +46 -3
  184. package/src/core/utils.ts +12 -11
  185. package/src/main-api/DynamicShaderController.ts +97 -0
  186. package/src/main-api/INode.ts +56 -479
  187. package/src/main-api/Inspector.ts +37 -39
  188. package/src/main-api/Renderer.ts +543 -0
  189. package/src/main-api/ShaderController.ts +81 -0
  190. package/src/main-api/utils.ts +45 -0
  191. package/src/utils.ts +8 -0
  192. package/dist/exports/core-api.d.ts +0 -74
  193. package/dist/exports/core-api.js +0 -96
  194. package/dist/exports/core-api.js.map +0 -1
  195. package/dist/exports/main-api.d.ts +0 -30
  196. package/dist/exports/main-api.js +0 -45
  197. package/dist/exports/main-api.js.map +0 -1
  198. package/dist/src/core/CoreExtension.d.ts +0 -12
  199. package/dist/src/core/CoreExtension.js +0 -29
  200. package/dist/src/core/CoreExtension.js.map +0 -1
  201. package/dist/src/core/renderers/SpecificNode.d.ts +0 -1
  202. package/dist/src/core/renderers/SpecificNode.js +0 -19
  203. package/dist/src/core/renderers/SpecificNode.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/newShader/effectsMock.d.ts +0 -13
  205. package/dist/src/core/renderers/webgl/newShader/effectsMock.js +0 -62
  206. package/dist/src/core/renderers/webgl/newShader/effectsMock.js.map +0 -1
  207. package/dist/src/main-api/ICoreDriver.d.ts +0 -24
  208. package/dist/src/main-api/ICoreDriver.js +0 -20
  209. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  210. package/dist/src/main-api/RendererMain.d.ts +0 -378
  211. package/dist/src/main-api/RendererMain.js +0 -367
  212. package/dist/src/main-api/RendererMain.js.map +0 -1
  213. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  214. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  215. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  216. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  217. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  218. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  219. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  220. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  221. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  222. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -21
  223. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -115
  224. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  225. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -101
  226. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -425
  227. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  228. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  229. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -204
  230. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  231. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -93
  232. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -290
  233. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  234. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -40
  235. package/dist/src/render-drivers/threadx/SharedNode.js +0 -61
  236. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  237. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  238. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -203
  239. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  240. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -25
  241. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -232
  242. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  243. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -24
  244. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -113
  245. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  246. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -46
  247. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -160
  248. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  249. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  250. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  251. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  252. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  253. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  254. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  255. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  256. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -184
  257. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  258. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  259. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -109
  260. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  261. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  262. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -147
  263. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  264. package/dist/src/render-drivers/utils.d.ts +0 -12
  265. package/dist/src/render-drivers/utils.js +0 -74
  266. package/dist/src/render-drivers/utils.js.map +0 -1
  267. package/exports/core-api.ts +0 -102
  268. package/exports/main-api.ts +0 -62
  269. package/src/core/CoreExtension.ts +0 -32
  270. package/src/main-api/ICoreDriver.ts +0 -68
  271. package/src/main-api/RendererMain.ts +0 -685
  272. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +0 -45
  273. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +0 -154
  274. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +0 -54
  275. package/src/render-drivers/main/MainCoreDriver.ts +0 -159
  276. package/src/render-drivers/main/MainOnlyNode.ts +0 -553
  277. package/src/render-drivers/main/MainOnlyTextNode.ts +0 -261
  278. package/src/render-drivers/threadx/NodeStruct.ts +0 -320
  279. package/src/render-drivers/threadx/SharedNode.ts +0 -101
  280. package/src/render-drivers/threadx/TextNodeStruct.ts +0 -213
  281. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +0 -291
  282. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +0 -135
  283. package/src/render-drivers/threadx/ThreadXMainNode.ts +0 -201
  284. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +0 -85
  285. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +0 -112
  286. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +0 -253
  287. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +0 -151
  288. package/src/render-drivers/threadx/worker/renderer.ts +0 -156
  289. package/src/render-drivers/utils.ts +0 -102
@@ -1,7 +1,6 @@
1
+ import type { CoreNode } from '../../CoreNode.js';
2
+ import type { CoreTextNode } from '../../CoreTextNode.js';
1
3
  import type { Stage } from '../../Stage.js';
2
- import type { Matrix3d } from '../../lib/Matrix3d.js';
3
- import { type Bound, type BoundWithValid, type RectWithValid } from '../../lib/utils.js';
4
- import type { ImageTexture } from '../../textures/ImageTexture.js';
5
4
  import type { TrFontFace } from '../font-face-types/TrFontFace.js';
6
5
  import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
7
6
  import { LightningTextTextureRenderer, type RenderInfo } from './LightningTextTextureRenderer.js';
@@ -11,30 +10,21 @@ declare module './TextRenderer.js' {
11
10
  canvas: CanvasTextRenderer;
12
11
  }
13
12
  }
14
- interface CanvasPageInfo {
15
- texture: ImageTexture | undefined;
16
- lineNumStart: number;
17
- lineNumEnd: number;
18
- valid: boolean;
19
- }
20
13
  export interface CanvasTextRendererState extends TextRendererState {
14
+ node: CoreTextNode;
21
15
  props: TrProps;
22
- fontFaceLoadedHandler: (() => void) | undefined;
23
16
  fontInfo: {
24
17
  fontFace: WebTrFontFace;
25
18
  cssString: string;
26
19
  loaded: boolean;
27
20
  } | undefined;
28
- canvasPages: [CanvasPageInfo, CanvasPageInfo, CanvasPageInfo] | undefined;
21
+ textureNode: CoreNode | undefined;
29
22
  lightning2TextRenderer: LightningTextTextureRenderer;
30
23
  renderInfo: RenderInfo | undefined;
31
- renderWindow: Bound | undefined;
32
- visibleWindow: BoundWithValid;
33
24
  }
34
25
  export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
35
26
  protected canvas: OffscreenCanvas | HTMLCanvasElement;
36
27
  protected context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;
37
- private rendererBounds;
38
28
  /**
39
29
  * Font family map used to store web font faces that were added to the
40
30
  * canvas text renderer.
@@ -46,21 +36,16 @@ export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererS
46
36
  canRenderFont(props: TrFontProps): boolean;
47
37
  isFontFaceSupported(fontFace: TrFontFace): boolean;
48
38
  addFontFace(fontFace: TrFontFace): void;
49
- createState(props: TrProps): CanvasTextRendererState;
39
+ createState(props: TrProps, node: CoreTextNode): CanvasTextRendererState;
50
40
  updateState(state: CanvasTextRendererState): void;
51
- renderQuads(state: CanvasTextRendererState, transform: Matrix3d, clippingRect: RectWithValid, alpha: number): void;
52
- setIsRenderable(state: CanvasTextRendererState, renderable: boolean): void;
41
+ renderSingleCanvasPage(state: CanvasTextRendererState): void;
42
+ loadFont: (state: CanvasTextRendererState) => void;
43
+ calculateRenderInfo(state: CanvasTextRendererState): RenderInfo;
44
+ renderQuads(): void;
53
45
  destroyState(state: CanvasTextRendererState): void;
54
- /**
55
- * Invalidate the visible window stored in the state. This will cause a new
56
- * visible window to be calculated on the next update.
57
- *
58
- * @param state
59
- */
60
- protected invalidateVisibleWindowCache(state: CanvasTextRendererState): void;
61
46
  /**
62
47
  * Invalidate the layout cache stored in the state. This will cause the text
63
- * to be re-layed out on the next update.
48
+ * to be re-rendered on the next update.
64
49
  *
65
50
  * @remarks
66
51
  * This also invalidates the visible window cache.
@@ -71,4 +56,3 @@ export declare class CanvasTextRenderer extends TextRenderer<CanvasTextRendererS
71
56
  private onFontLoaded;
72
57
  private onFontLoadError;
73
58
  }
74
- export {};
@@ -17,8 +17,8 @@
17
17
  * limitations under the License.
18
18
  */
19
19
  import { EventEmitter } from '../../../common/EventEmitter.js';
20
- import { assertTruthy, mergeColorAlphaPremultiplied } from '../../../utils.js';
21
- import { intersectRect, intersectBound, getNormalizedRgbaComponents, getNormalizedAlphaComponent, createBound, } from '../../lib/utils.js';
20
+ import { assertTruthy } from '../../../utils.js';
21
+ import { getNormalizedRgbaComponents, getNormalizedAlphaComponent, } from '../../lib/utils.js';
22
22
  import { TrFontManager } from '../TrFontManager.js';
23
23
  import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
24
24
  import { LightningTextTextureRenderer, } from './LightningTextTextureRenderer.js';
@@ -33,18 +33,9 @@ function getFontCssString(props) {
33
33
  const { fontFamily, fontStyle, fontWeight, fontStretch, fontSize } = props;
34
34
  return [fontStyle, fontWeight, fontStretch, `${fontSize}px`, fontFamily].join(' ');
35
35
  }
36
- /**
37
- * Ephemeral bounds object used for intersection calculations
38
- *
39
- * @remarks
40
- * Used to avoid creating a new object every time we need to intersect
41
- * element bounds.
42
- */
43
- const tmpElementBounds = createBound(0, 0, 0, 0);
44
36
  export class CanvasTextRenderer extends TextRenderer {
45
37
  canvas;
46
38
  context;
47
- rendererBounds;
48
39
  /**
49
40
  * Font family map used to store web font faces that were added to the
50
41
  * canvas text renderer.
@@ -60,22 +51,20 @@ export class CanvasTextRenderer extends TextRenderer {
60
51
  this.canvas = document.createElement('canvas');
61
52
  }
62
53
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
63
- let context = this.canvas.getContext('2d');
54
+ let context = this.canvas.getContext('2d', {
55
+ willReadFrequently: true,
56
+ });
64
57
  if (!context) {
65
58
  // A browser may appear to support OffscreenCanvas but not actually support the Canvas '2d' context
66
59
  // Here we try getting the context again after falling back to an HTMLCanvasElement.
67
60
  // See: https://github.com/lightning-js/renderer/issues/26#issuecomment-1750438486
68
61
  this.canvas = document.createElement('canvas');
69
- context = this.canvas.getContext('2d');
62
+ context = this.canvas.getContext('2d', {
63
+ willReadFrequently: true,
64
+ });
70
65
  }
71
66
  assertTruthy(context);
72
67
  this.context = context;
73
- this.rendererBounds = {
74
- x1: 0,
75
- y1: 0,
76
- x2: this.stage.options.appWidth,
77
- y2: this.stage.options.appHeight,
78
- };
79
68
  // Install the default 'san-serif' font face
80
69
  this.addFontFace(new WebTrFontFace({
81
70
  fontFamily: 'sans-serif',
@@ -125,11 +114,9 @@ export class CanvasTextRenderer extends TextRenderer {
125
114
  },
126
115
  x: (state, value) => {
127
116
  state.props.x = value;
128
- this.invalidateVisibleWindowCache(state);
129
117
  },
130
118
  y: (state, value) => {
131
119
  state.props.y = value;
132
- this.invalidateVisibleWindowCache(state);
133
120
  },
134
121
  contain: (state, value) => {
135
122
  state.props.contain = value;
@@ -180,9 +167,6 @@ export class CanvasTextRenderer extends TextRenderer {
180
167
  state.props.overflowSuffix = value;
181
168
  this.invalidateLayoutCache(state);
182
169
  },
183
- // debug: (state, value) => {
184
- // state.props.debug = value;
185
- // },
186
170
  };
187
171
  }
188
172
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -216,28 +200,20 @@ export class CanvasTextRenderer extends TextRenderer {
216
200
  }
217
201
  faceSet.add(fontFace);
218
202
  }
219
- createState(props) {
203
+ createState(props, node) {
220
204
  return {
205
+ node,
221
206
  props,
222
207
  status: 'initialState',
223
208
  updateScheduled: false,
224
209
  emitter: new EventEmitter(),
225
- canvasPages: undefined,
210
+ textureNode: undefined,
226
211
  lightning2TextRenderer: new LightningTextTextureRenderer(this.canvas, this.context),
227
- renderWindow: undefined,
228
- visibleWindow: {
229
- x1: 0,
230
- y1: 0,
231
- x2: 0,
232
- y2: 0,
233
- valid: false,
234
- },
235
212
  renderInfo: undefined,
236
213
  forceFullLayoutCalc: false,
237
214
  textW: 0,
238
215
  textH: 0,
239
216
  fontInfo: undefined,
240
- fontFaceLoadedHandler: undefined,
241
217
  isRenderable: false,
242
218
  debugData: {
243
219
  updateCount: 0,
@@ -254,363 +230,139 @@ export class CanvasTextRenderer extends TextRenderer {
254
230
  // On the first update call we need to set the status to loading
255
231
  if (state.status === 'initialState') {
256
232
  this.setStatus(state, 'loading');
233
+ // check if we're on screen
234
+ // if (this.isValidOnScreen(state) === true) {
235
+ // this.setStatus(state, 'loading');
236
+ // }
237
+ }
238
+ if (state.status === 'loaded') {
239
+ // If we're loaded, we don't need to do anything
240
+ return;
257
241
  }
258
242
  // If fontInfo is invalid, we need to establish it
259
243
  if (!state.fontInfo) {
260
- const cssString = getFontCssString(state.props);
261
- const trFontFace = TrFontManager.resolveFontFace(this.fontFamilyArray, state.props);
262
- assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
263
- state.fontInfo = {
264
- fontFace: trFontFace,
265
- cssString: cssString,
266
- // TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
267
- loaded: false,
268
- };
269
- // If font is not loaded, set up a handler to update the font info when the font loads
270
- if (!state.fontInfo.loaded) {
271
- globalFontSet
272
- .load(cssString)
273
- .then(this.onFontLoaded.bind(this, state, cssString))
274
- .catch(this.onFontLoadError.bind(this, state, cssString));
275
- return;
276
- }
244
+ return this.loadFont(state);
277
245
  }
278
246
  // If we're waiting for a font face to load, don't render anything
279
247
  if (!state.fontInfo.loaded) {
280
248
  return;
281
249
  }
282
250
  if (!state.renderInfo) {
283
- state.lightning2TextRenderer.settings = {
284
- text: state.props.text,
285
- textAlign: state.props.textAlign,
286
- fontFamily: state.props.fontFamily,
287
- trFontFace: state.fontInfo.fontFace,
288
- fontSize: state.props.fontSize,
289
- fontStyle: [
290
- state.props.fontStretch,
291
- state.props.fontStyle,
292
- state.props.fontWeight,
293
- ].join(' '),
294
- textColor: getNormalizedRgbaComponents(state.props.color),
295
- offsetY: state.props.offsetY,
296
- wordWrap: state.props.contain !== 'none',
297
- wordWrapWidth: state.props.contain === 'none' ? undefined : state.props.width,
298
- letterSpacing: state.props.letterSpacing,
299
- lineHeight: state.props.lineHeight ?? null,
300
- maxLines: state.props.maxLines,
301
- maxHeight: state.props.contain === 'both'
302
- ? state.props.height - state.props.offsetY
303
- : null,
304
- textBaseline: state.props.textBaseline,
305
- verticalAlign: state.props.verticalAlign,
306
- overflowSuffix: state.props.overflowSuffix,
307
- w: state.props.contain !== 'none' ? state.props.width : undefined,
308
- };
309
- // const renderInfoCalculateTime = performance.now();
310
- state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
311
- // console.log(
312
- // 'Render info calculated in',
313
- // performance.now() - renderInfoCalculateTime,
314
- // 'ms',
315
- // );
251
+ state.renderInfo = this.calculateRenderInfo(state);
316
252
  state.textH = state.renderInfo.lineHeight * state.renderInfo.lines.length;
317
253
  state.textW = state.renderInfo.width;
318
- // Invalidate renderWindow because the renderInfo changed
319
- state.renderWindow = undefined;
320
- }
321
- const { x, y, width, height, scrollY, contain } = state.props;
322
- const { visibleWindow } = state;
323
- let { renderWindow, canvasPages } = state;
324
- if (!visibleWindow.valid) {
325
- // Figure out whats actually in the bounds of the renderer/canvas (visibleWindow)
326
- const elementBounds = createBound(x, y, contain !== 'none' ? x + width : Infinity, contain === 'both' ? y + height : Infinity, tmpElementBounds);
327
- /**
328
- * Area that is visible on the screen.
329
- */
330
- intersectBound(this.rendererBounds, elementBounds, visibleWindow);
331
- visibleWindow.valid = true;
332
- }
333
- const visibleWindowHeight = visibleWindow.y2 - visibleWindow.y1;
334
- const maxLinesPerCanvasPage = Math.ceil(visibleWindowHeight / state.renderInfo.lineHeight);
335
- if (visibleWindowHeight === 0) {
336
- // Nothing to render. Clear any canvasPages and existing renderWindow
337
- // Return early.
338
- canvasPages = undefined;
339
- renderWindow = undefined;
340
- this.setStatus(state, 'loaded');
341
- return;
254
+ this.renderSingleCanvasPage(state);
342
255
  }
343
- else if (renderWindow && canvasPages) {
344
- // Return early if we're still viewing inside the established render window
345
- // No need to re-render what we've already rendered
346
- const renderWindowScreenX1 = x + renderWindow.x1;
347
- const renderWindowScreenY1 = y - scrollY + renderWindow.y1;
348
- const renderWindowScreenX2 = x + renderWindow.x2;
349
- const renderWindowScreenY2 = y - scrollY + renderWindow.y2;
350
- if (renderWindowScreenX1 <= visibleWindow.x1 &&
351
- renderWindowScreenX2 >= visibleWindow.x2 &&
352
- renderWindowScreenY1 <= visibleWindow.y1 &&
353
- renderWindowScreenY2 >= visibleWindow.y2) {
354
- this.setStatus(state, 'loaded');
355
- return;
356
- }
357
- if (renderWindowScreenY2 < visibleWindow.y2) {
358
- // We've scrolled up, so we need to render the next page
359
- renderWindow.y1 += maxLinesPerCanvasPage * state.renderInfo.lineHeight;
360
- renderWindow.y2 += maxLinesPerCanvasPage * state.renderInfo.lineHeight;
361
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
362
- canvasPages.push(canvasPages.shift());
363
- canvasPages[2].lineNumStart =
364
- canvasPages[1].lineNumStart + maxLinesPerCanvasPage;
365
- canvasPages[2].lineNumEnd =
366
- canvasPages[2].lineNumStart + maxLinesPerCanvasPage;
367
- canvasPages[2].valid = false;
368
- }
369
- else if (renderWindowScreenY1 > visibleWindow.y1) {
370
- // We've scrolled down, so we need to render the previous page
371
- renderWindow.y1 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
372
- renderWindow.y2 -= maxLinesPerCanvasPage * state.renderInfo.lineHeight;
373
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
374
- canvasPages.unshift(canvasPages.pop());
375
- canvasPages[0].lineNumStart =
376
- canvasPages[1].lineNumStart - maxLinesPerCanvasPage;
377
- canvasPages[0].lineNumEnd =
378
- canvasPages[0].lineNumStart + maxLinesPerCanvasPage;
379
- canvasPages[0].valid = false;
380
- }
256
+ // handle scrollable text !!!
257
+ // if (state.isScrollable === true) {
258
+ // return this.renderScrollableCanvasPages(state);
259
+ // }
260
+ // handle single page text
261
+ }
262
+ renderSingleCanvasPage(state) {
263
+ assertTruthy(state.renderInfo);
264
+ const node = state.node;
265
+ const texture = this.stage.txManager.loadTexture('ImageTexture', {
266
+ src: function (lightning2TextRenderer, renderInfo) {
267
+ // load the canvas texture
268
+ assertTruthy(renderInfo);
269
+ lightning2TextRenderer.draw(renderInfo, {
270
+ lines: renderInfo.lines,
271
+ lineWidths: renderInfo.lineWidths,
272
+ });
273
+ if (this.canvas.width === 0 || this.canvas.height === 0) {
274
+ return null;
275
+ }
276
+ return this.context.getImageData(0, 0, this.canvas.width, this.canvas.height);
277
+ }.bind(this, state.lightning2TextRenderer, state.renderInfo),
278
+ });
279
+ if (state.textureNode) {
280
+ // Use the existing texture node
281
+ state.textureNode.texture = texture;
381
282
  }
382
283
  else {
383
- const pageHeight = state.renderInfo.lineHeight * maxLinesPerCanvasPage;
384
- const page1Block = Math.ceil(scrollY / pageHeight);
385
- const page1LineStart = page1Block * maxLinesPerCanvasPage;
386
- const page0LineStart = page1LineStart - maxLinesPerCanvasPage;
387
- const page2LineStart = page1LineStart + maxLinesPerCanvasPage;
388
- // We haven't rendered anything yet, so we need to render the first page
389
- // If canvasPages already exist, let's re-use the textures
390
- canvasPages = [
391
- {
392
- texture: canvasPages?.[0].texture,
393
- lineNumStart: page0LineStart,
394
- lineNumEnd: page0LineStart + maxLinesPerCanvasPage,
395
- valid: false,
396
- },
397
- {
398
- texture: canvasPages?.[1].texture,
399
- lineNumStart: page1LineStart,
400
- lineNumEnd: page1LineStart + maxLinesPerCanvasPage,
401
- valid: false,
402
- },
403
- {
404
- texture: canvasPages?.[2].texture,
405
- lineNumStart: page2LineStart,
406
- lineNumEnd: page2LineStart + maxLinesPerCanvasPage,
407
- valid: false,
408
- },
409
- ];
410
- state.canvasPages = canvasPages;
411
- const scrollYNearestPage = page1Block * pageHeight;
412
- renderWindow = {
413
- x1: 0,
414
- y1: scrollYNearestPage - pageHeight,
415
- x2: width,
416
- y2: scrollYNearestPage + pageHeight * 2,
417
- };
418
- }
419
- state.renderWindow = renderWindow;
420
- const pageDrawTime = performance.now();
421
- for (const pageInfo of canvasPages) {
422
- if (pageInfo.valid)
423
- continue;
424
- if (pageInfo.lineNumStart < 0) {
425
- pageInfo.texture?.setRenderableOwner(state, false);
426
- pageInfo.texture = this.stage.txManager.loadTexture('ImageTexture', {
427
- src: '',
428
- });
429
- pageInfo.texture.setRenderableOwner(state, state.isRenderable);
430
- pageInfo.valid = true;
431
- continue;
432
- }
433
- state.lightning2TextRenderer.draw(state.renderInfo, {
434
- lines: state.renderInfo.lines.slice(pageInfo.lineNumStart, pageInfo.lineNumEnd),
435
- lineWidths: state.renderInfo.lineWidths.slice(pageInfo.lineNumStart, pageInfo.lineNumEnd),
284
+ // Create a new texture node
285
+ const textureNode = this.stage.createNode({
286
+ parent: node,
287
+ texture,
288
+ autosize: true,
289
+ // The alpha channel of the color is ignored when rasterizing the text
290
+ // texture so we need to pass it directly to the texture node.
291
+ alpha: getNormalizedAlphaComponent(state.props.color),
436
292
  });
437
- if (!(this.canvas.width === 0 || this.canvas.height === 0)) {
438
- pageInfo.texture?.setRenderableOwner(state, false);
439
- pageInfo.texture = this.stage.txManager.loadTexture('ImageTexture', {
440
- src: this.context.getImageData(0, 0, this.canvas.width, this.canvas.height),
441
- }, {
442
- preload: true,
443
- });
444
- pageInfo.texture.setRenderableOwner(state, state.isRenderable);
445
- }
446
- pageInfo.valid = true;
293
+ state.textureNode = textureNode;
447
294
  }
448
- // console.log('pageDrawTime', performance.now() - pageDrawTime, 'ms');
449
- // Report final status
450
295
  this.setStatus(state, 'loaded');
451
296
  }
452
- renderQuads(state, transform, clippingRect, alpha) {
453
- const { stage } = this;
454
- const { canvasPages, textW = 0, textH = 0, renderWindow } = state;
455
- if (!canvasPages || !renderWindow)
456
- return;
457
- const { x, y, scrollY, contain, width, height /*, debug*/ } = state.props;
458
- const elementRect = {
459
- x: x,
460
- y: y,
461
- width: contain !== 'none' ? width : textW,
462
- height: contain === 'both' ? height : textH,
297
+ loadFont = (state) => {
298
+ const cssString = getFontCssString(state.props);
299
+ const trFontFace = TrFontManager.resolveFontFace(this.fontFamilyArray, state.props);
300
+ assertTruthy(trFontFace, `Could not resolve font face for ${cssString}`);
301
+ state.fontInfo = {
302
+ fontFace: trFontFace,
303
+ cssString: cssString,
304
+ // TODO: For efficiency we would use this here but it's not reliable on WPE -> document.fonts.check(cssString),
305
+ loaded: false,
463
306
  };
464
- const visibleRect = intersectRect({
465
- x: 0,
466
- y: 0,
467
- width: stage.options.appWidth,
468
- height: stage.options.appHeight,
469
- }, elementRect);
470
- // if (!debug.disableScissor) {
471
- // renderer.enableScissor(
472
- // visibleRect.x,
473
- // visibleRect.y,
474
- // visibleRect.w,
475
- // visibleRect.h,
476
- // );
477
- // }
478
- assertTruthy(canvasPages, 'canvasPages is not defined');
479
- assertTruthy(renderWindow, 'renderWindow is not defined');
480
- const renderWindowHeight = renderWindow.y2 - renderWindow.y1;
481
- const pageSize = renderWindowHeight / 3.0;
482
- const { zIndex, color } = state.props;
483
- // Color alpha of text is not properly rendered to the Canvas texture, so we
484
- // need to apply it here.
485
- const combinedAlpha = alpha * getNormalizedAlphaComponent(color);
486
- const quadColor = mergeColorAlphaPremultiplied(0xffffffff, combinedAlpha);
487
- if (canvasPages[0].valid) {
488
- this.stage.renderer.addQuad({
489
- alpha: combinedAlpha,
490
- clippingRect,
491
- colorBl: quadColor,
492
- colorBr: quadColor,
493
- colorTl: quadColor,
494
- colorTr: quadColor,
495
- width: canvasPages[0].texture?.dimensions?.width || 0,
496
- height: canvasPages[0].texture?.dimensions?.height || 0,
497
- texture: canvasPages[0].texture,
498
- textureOptions: {},
499
- shader: null,
500
- shaderProps: null,
501
- zIndex,
502
- tx: transform.tx,
503
- ty: transform.ty - scrollY + renderWindow.y1,
504
- ta: transform.ta,
505
- tb: transform.tb,
506
- tc: transform.tc,
507
- td: transform.td,
508
- });
509
- }
510
- if (canvasPages[1].valid) {
511
- this.stage.renderer.addQuad({
512
- alpha: combinedAlpha,
513
- clippingRect,
514
- colorBl: quadColor,
515
- colorBr: quadColor,
516
- colorTl: quadColor,
517
- colorTr: quadColor,
518
- width: canvasPages[1].texture?.dimensions?.width || 0,
519
- height: canvasPages[1].texture?.dimensions?.height || 0,
520
- texture: canvasPages[1].texture,
521
- textureOptions: {},
522
- shader: null,
523
- shaderProps: null,
524
- zIndex,
525
- tx: transform.tx,
526
- ty: transform.ty - scrollY + renderWindow.y1 + pageSize,
527
- ta: transform.ta,
528
- tb: transform.tb,
529
- tc: transform.tc,
530
- td: transform.td,
531
- });
532
- }
533
- if (canvasPages[2].valid) {
534
- this.stage.renderer.addQuad({
535
- alpha: combinedAlpha,
536
- clippingRect,
537
- colorBl: quadColor,
538
- colorBr: quadColor,
539
- colorTl: quadColor,
540
- colorTr: quadColor,
541
- width: canvasPages[2].texture?.dimensions?.width || 0,
542
- height: canvasPages[2].texture?.dimensions?.height || 0,
543
- texture: canvasPages[2].texture,
544
- textureOptions: {},
545
- shader: null,
546
- shaderProps: null,
547
- zIndex,
548
- tx: transform.tx,
549
- ty: transform.ty - scrollY + renderWindow.y1 + pageSize + pageSize,
550
- ta: transform.ta,
551
- tb: transform.tb,
552
- tc: transform.tc,
553
- td: transform.td,
554
- });
307
+ // If font is not loaded, set up a handler to update the font info when the font loads
308
+ if (!state.fontInfo.loaded) {
309
+ globalFontSet
310
+ .load(cssString)
311
+ .then(this.onFontLoaded.bind(this, state, cssString))
312
+ .catch(this.onFontLoadError.bind(this, state, cssString));
313
+ return;
555
314
  }
556
- // renderer.disableScissor();
557
- // if (debug.showElementRect) {
558
- // this.renderer.drawBorder(
559
- // Colors.Blue,
560
- // elementRect.x,
561
- // elementRect.y,
562
- // elementRect.w,
563
- // elementRect.h,
564
- // );
565
- // }
566
- // if (debug.showVisibleRect) {
567
- // this.renderer.drawBorder(
568
- // Colors.Green,
569
- // visibleRect.x,
570
- // visibleRect.y,
571
- // visibleRect.w,
572
- // visibleRect.h,
573
- // );
574
- // }
575
- // if (debug.showRenderWindow && renderWindow) {
576
- // this.renderer.drawBorder(
577
- // Colors.Red,
578
- // x + renderWindow.x1,
579
- // y + renderWindow.y1 - scrollY,
580
- // x + renderWindow.x2 - (x + renderWindow.x1),
581
- // y + renderWindow.y2 - scrollY - (y + renderWindow.y1 - scrollY),
582
- // );
583
- // }
315
+ };
316
+ calculateRenderInfo(state) {
317
+ state.lightning2TextRenderer.settings = {
318
+ text: state.props.text,
319
+ textAlign: state.props.textAlign,
320
+ fontFamily: state.props.fontFamily,
321
+ trFontFace: state.fontInfo?.fontFace,
322
+ fontSize: state.props.fontSize,
323
+ fontStyle: [
324
+ state.props.fontStretch,
325
+ state.props.fontStyle,
326
+ state.props.fontWeight,
327
+ ].join(' '),
328
+ textColor: getNormalizedRgbaComponents(state.props.color),
329
+ offsetY: state.props.offsetY,
330
+ wordWrap: state.props.contain !== 'none',
331
+ wordWrapWidth: state.props.contain === 'none' ? undefined : state.props.width,
332
+ letterSpacing: state.props.letterSpacing,
333
+ lineHeight: state.props.lineHeight ?? null,
334
+ maxLines: state.props.maxLines,
335
+ maxHeight: state.props.contain === 'both'
336
+ ? state.props.height - state.props.offsetY
337
+ : null,
338
+ textBaseline: state.props.textBaseline,
339
+ verticalAlign: state.props.verticalAlign,
340
+ overflowSuffix: state.props.overflowSuffix,
341
+ w: state.props.contain !== 'none' ? state.props.width : undefined,
342
+ };
343
+ state.renderInfo = state.lightning2TextRenderer.calculateRenderInfo();
344
+ return state.renderInfo;
584
345
  }
585
- setIsRenderable(state, renderable) {
586
- super.setIsRenderable(state, renderable);
587
- // Set state object owner from any canvas page textures
588
- state.canvasPages?.forEach((pageInfo) => {
589
- pageInfo.texture?.setRenderableOwner(state, renderable);
590
- });
346
+ renderQuads() {
347
+ // Do nothing. The renderer will render the child node(s) that were created
348
+ // in the state update.
349
+ return;
591
350
  }
592
351
  destroyState(state) {
352
+ if (state.status === 'destroyed') {
353
+ return;
354
+ }
593
355
  super.destroyState(state);
594
- // Remove state object owner from any canvas page textures
595
- state.canvasPages?.forEach((pageInfo) => {
596
- pageInfo.texture?.setRenderableOwner(state, false);
597
- });
356
+ if (state.textureNode) {
357
+ state.textureNode.destroy();
358
+ delete state.textureNode;
359
+ }
360
+ delete state.renderInfo;
598
361
  }
599
362
  //#endregion Overrides
600
- /**
601
- * Invalidate the visible window stored in the state. This will cause a new
602
- * visible window to be calculated on the next update.
603
- *
604
- * @param state
605
- */
606
- invalidateVisibleWindowCache(state) {
607
- state.visibleWindow.valid = false;
608
- this.setStatus(state, 'loading');
609
- this.scheduleUpdateState(state);
610
- }
611
363
  /**
612
364
  * Invalidate the layout cache stored in the state. This will cause the text
613
- * to be re-layed out on the next update.
365
+ * to be re-rendered on the next update.
614
366
  *
615
367
  * @remarks
616
368
  * This also invalidates the visible window cache.
@@ -619,7 +371,6 @@ export class CanvasTextRenderer extends TextRenderer {
619
371
  */
620
372
  invalidateLayoutCache(state) {
621
373
  state.renderInfo = undefined;
622
- state.visibleWindow.valid = false;
623
374
  this.setStatus(state, 'loading');
624
375
  this.scheduleUpdateState(state);
625
376
  }