@lightningjs/renderer 3.0.0-beta6 → 3.0.0-beta7

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 (349) hide show
  1. package/COPYING +1 -0
  2. package/LICENSE +202 -202
  3. package/NOTICE +3 -3
  4. package/README.md +147 -147
  5. package/dist/src/core/CoreNode.d.ts +9 -0
  6. package/dist/src/core/CoreNode.js +17 -0
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreTextureManager.js +6 -0
  9. package/dist/src/core/CoreTextureManager.js.map +1 -1
  10. package/dist/src/core/Stage.d.ts +16 -0
  11. package/dist/src/core/Stage.js +39 -0
  12. package/dist/src/core/Stage.js.map +1 -1
  13. package/dist/src/core/lib/ImageWorker.js +1 -1
  14. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  15. package/dist/src/core/lib/utils.d.ts +1 -0
  16. package/dist/src/core/lib/utils.js +3 -0
  17. package/dist/src/core/lib/utils.js.map +1 -1
  18. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -2
  19. package/dist/src/core/renderers/webgl/WebGlRenderer.js +1 -3
  20. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  21. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +35 -35
  22. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +45 -45
  23. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
  24. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
  25. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
  26. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +62 -62
  27. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
  28. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +6 -6
  29. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
  30. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
  31. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
  32. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
  33. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
  34. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
  35. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +22 -22
  36. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +28 -28
  37. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +10 -10
  38. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
  39. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
  40. package/dist/src/core/shaders/webgl/Border.js +82 -82
  41. package/dist/src/core/shaders/webgl/Default.js +47 -47
  42. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  43. package/dist/src/core/shaders/webgl/HolePunch.js +32 -32
  44. package/dist/src/core/shaders/webgl/LinearGradient.js +36 -36
  45. package/dist/src/core/shaders/webgl/RadialGradient.js +33 -33
  46. package/dist/src/core/shaders/webgl/Rounded.js +71 -71
  47. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +100 -100
  48. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +118 -118
  49. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +54 -54
  50. package/dist/src/core/shaders/webgl/SdfShader.js +62 -62
  51. package/dist/src/core/shaders/webgl/Shadow.js +83 -83
  52. package/dist/src/core/temp.js +77 -0
  53. package/dist/src/core/temp.js.map +1 -0
  54. package/dist/src/core/textures/ImageTexture.js +5 -0
  55. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  56. package/dist/src/main-api/Renderer.js +1 -1
  57. package/dist/src/main-api/Renderer.js.map +1 -1
  58. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  59. package/exports/canvas-shaders.ts +28 -28
  60. package/exports/canvas.ts +45 -45
  61. package/exports/index.ts +90 -90
  62. package/exports/inspector.ts +24 -24
  63. package/exports/utils.ts +44 -44
  64. package/exports/webgl-shaders.ts +28 -28
  65. package/exports/webgl.ts +50 -50
  66. package/package.json +1 -2
  67. package/src/common/CommonTypes.ts +146 -146
  68. package/src/common/EventEmitter.ts +77 -77
  69. package/src/common/IAnimationController.ts +92 -92
  70. package/src/common/IEventEmitter.ts +28 -28
  71. package/src/core/CoreNode.test.ts +202 -202
  72. package/src/core/CoreNode.ts +2495 -2469
  73. package/src/core/CoreShaderManager.ts +188 -188
  74. package/src/core/CoreTextNode.ts +448 -448
  75. package/src/core/CoreTextureManager.ts +607 -600
  76. package/src/core/Stage.ts +797 -751
  77. package/src/core/TextureMemoryManager.ts +394 -394
  78. package/src/core/animations/AnimationManager.ts +38 -38
  79. package/src/core/animations/CoreAnimation.ts +284 -284
  80. package/src/core/animations/CoreAnimationController.ts +157 -157
  81. package/src/core/lib/ContextSpy.ts +41 -41
  82. package/src/core/lib/ImageWorker.ts +286 -280
  83. package/src/core/lib/Matrix3d.ts +244 -244
  84. package/src/core/lib/RenderCoords.ts +71 -71
  85. package/src/core/lib/WebGlContextWrapper.ts +1374 -1374
  86. package/src/core/lib/textureCompression.ts +152 -152
  87. package/src/core/lib/textureSvg.ts +78 -78
  88. package/src/core/lib/utils.ts +390 -386
  89. package/src/core/lib/validateImageBitmap.ts +87 -87
  90. package/src/core/platforms/Platform.ts +77 -77
  91. package/src/core/platforms/web/WebPlatform.ts +84 -84
  92. package/src/core/renderers/CoreContextTexture.ts +43 -43
  93. package/src/core/renderers/CoreRenderOp.ts +22 -22
  94. package/src/core/renderers/CoreRenderer.ts +109 -109
  95. package/src/core/renderers/CoreShaderNode.ts +165 -165
  96. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  97. package/src/core/renderers/canvas/CanvasRenderer.ts +298 -298
  98. package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -99
  99. package/src/core/renderers/canvas/CanvasTexture.ts +156 -156
  100. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +220 -220
  101. package/src/core/renderers/canvas/internal/ColorUtils.ts +85 -85
  102. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +86 -86
  103. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -50
  104. package/src/core/renderers/webgl/WebGlCtxTexture.ts +301 -301
  105. package/src/core/renderers/webgl/WebGlRenderOp.ts +161 -161
  106. package/src/core/renderers/webgl/WebGlRenderer.ts +748 -750
  107. package/src/core/renderers/webgl/WebGlShaderNode.ts +437 -437
  108. package/src/core/renderers/webgl/WebGlShaderProgram.ts +318 -318
  109. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  110. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
  111. package/src/core/renderers/webgl/internal/ShaderUtils.ts +281 -281
  112. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  113. package/src/core/shaders/canvas/Border.ts +78 -78
  114. package/src/core/shaders/canvas/HolePunch.ts +62 -62
  115. package/src/core/shaders/canvas/LinearGradient.ts +69 -69
  116. package/src/core/shaders/canvas/RadialGradient.ts +113 -113
  117. package/src/core/shaders/canvas/Rounded.ts +55 -55
  118. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -72
  119. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -88
  120. package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -69
  121. package/src/core/shaders/canvas/Shadow.ts +52 -52
  122. package/src/core/shaders/canvas/utils/render.ts +151 -151
  123. package/src/core/shaders/templates/BorderTemplate.ts +115 -115
  124. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  125. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  126. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -81
  127. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  128. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  129. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  130. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  131. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  132. package/src/core/shaders/templates/shaderUtils.ts +47 -47
  133. package/src/core/shaders/webgl/Border.ts +116 -116
  134. package/src/core/shaders/webgl/Default.ts +89 -89
  135. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  136. package/src/core/shaders/webgl/HolePunch.ts +78 -78
  137. package/src/core/shaders/webgl/LinearGradient.ts +81 -81
  138. package/src/core/shaders/webgl/RadialGradient.ts +84 -84
  139. package/src/core/shaders/webgl/Rounded.ts +117 -117
  140. package/src/core/shaders/webgl/RoundedWithBorder.ts +144 -144
  141. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +166 -166
  142. package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -98
  143. package/src/core/shaders/webgl/SdfShader.ts +134 -134
  144. package/src/core/shaders/webgl/Shadow.ts +115 -115
  145. package/src/core/text-rendering/TextRenderingUtils.ts +36 -36
  146. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -263
  147. package/src/core/text-rendering/TrFontManager.ts +183 -183
  148. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -176
  149. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
  150. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
  151. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -171
  152. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -187
  153. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -94
  154. package/src/core/text-rendering/font-face-types/utils.ts +39 -39
  155. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +514 -514
  156. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +863 -863
  157. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +849 -849
  158. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
  159. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
  160. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
  161. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
  162. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -117
  163. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
  164. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
  165. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +497 -497
  166. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
  167. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -52
  168. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
  169. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
  170. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
  171. package/src/core/text-rendering/renderers/TextRenderer.ts +567 -567
  172. package/src/core/textures/ColorTexture.ts +102 -102
  173. package/src/core/textures/ImageTexture.ts +417 -410
  174. package/src/core/textures/NoiseTexture.ts +104 -104
  175. package/src/core/textures/RenderTexture.ts +85 -85
  176. package/src/core/textures/SubTexture.ts +205 -205
  177. package/src/core/textures/Texture.ts +358 -358
  178. package/src/core/utils.ts +227 -227
  179. package/src/env.d.ts +7 -7
  180. package/src/main-api/INode.ts +100 -100
  181. package/src/main-api/Inspector.ts +522 -522
  182. package/src/main-api/Renderer.ts +673 -673
  183. package/src/main-api/utils.ts +45 -45
  184. package/src/utils.ts +267 -267
  185. package/dist/exports/core-api.d.ts +0 -74
  186. package/dist/exports/core-api.js +0 -96
  187. package/dist/exports/core-api.js.map +0 -1
  188. package/dist/exports/main-api.d.ts +0 -30
  189. package/dist/exports/main-api.js +0 -45
  190. package/dist/exports/main-api.js.map +0 -1
  191. package/dist/src/core/CoreExtension.d.ts +0 -12
  192. package/dist/src/core/CoreExtension.js +0 -29
  193. package/dist/src/core/CoreExtension.js.map +0 -1
  194. package/dist/src/core/CoreStuff.js +0 -138
  195. package/dist/src/core/CoreStuff.js.map +0 -1
  196. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  197. package/dist/src/core/CoreTexturizer.js +0 -47
  198. package/dist/src/core/CoreTexturizer.js.map +0 -1
  199. package/dist/src/core/LngNode.d.ts +0 -736
  200. package/dist/src/core/LngNode.js +0 -1174
  201. package/dist/src/core/LngNode.js.map +0 -1
  202. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  203. package/dist/src/core/Matrix2DContext.js +0 -45
  204. package/dist/src/core/Matrix2DContext.js.map +0 -1
  205. package/dist/src/core/ShaderNode.d.ts +0 -10
  206. package/dist/src/core/ShaderNode.js +0 -30
  207. package/dist/src/core/ShaderNode.js.map +0 -1
  208. package/dist/src/core/TextNode.d.ts +0 -103
  209. package/dist/src/core/TextNode.js +0 -331
  210. package/dist/src/core/TextNode.js.map +0 -1
  211. package/dist/src/core/lib/Coords.d.ts +0 -14
  212. package/dist/src/core/lib/Coords.js +0 -55
  213. package/dist/src/core/lib/Coords.js.map +0 -1
  214. package/dist/src/core/lib/glm/common.d.ts +0 -162
  215. package/dist/src/core/lib/glm/common.js +0 -81
  216. package/dist/src/core/lib/glm/common.js.map +0 -1
  217. package/dist/src/core/lib/glm/index.d.ts +0 -11
  218. package/dist/src/core/lib/glm/index.js +0 -30
  219. package/dist/src/core/lib/glm/index.js.map +0 -1
  220. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  221. package/dist/src/core/lib/glm/mat2.js +0 -396
  222. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  223. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  224. package/dist/src/core/lib/glm/mat2d.js +0 -442
  225. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  226. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  227. package/dist/src/core/lib/glm/mat3.js +0 -680
  228. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  229. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  230. package/dist/src/core/lib/glm/mat4.js +0 -1802
  231. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  232. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  233. package/dist/src/core/lib/glm/quat.js +0 -693
  234. package/dist/src/core/lib/glm/quat.js.map +0 -1
  235. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  236. package/dist/src/core/lib/glm/quat2.js +0 -754
  237. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  238. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  239. package/dist/src/core/lib/glm/vec2.js +0 -569
  240. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  241. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  242. package/dist/src/core/lib/glm/vec3.js +0 -720
  243. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  244. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  245. package/dist/src/core/lib/glm/vec4.js +0 -608
  246. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  247. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  248. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  249. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  250. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  251. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  252. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  253. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  254. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  255. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  256. package/dist/src/core/scene/Scene.d.ts +0 -59
  257. package/dist/src/core/scene/Scene.js +0 -106
  258. package/dist/src/core/scene/Scene.js.map +0 -1
  259. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  260. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  261. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  262. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  263. package/dist/src/main-api/ICoreDriver.js +0 -20
  264. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  265. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  266. package/dist/src/main-api/IRenderDriver.js +0 -20
  267. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  268. package/dist/src/main-api/IShaderController.d.ts +0 -14
  269. package/dist/src/main-api/IShaderController.js +0 -30
  270. package/dist/src/main-api/IShaderController.js.map +0 -1
  271. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  272. package/dist/src/main-api/IShaderNode.js +0 -19
  273. package/dist/src/main-api/IShaderNode.js.map +0 -1
  274. package/dist/src/main-api/RendererMain.d.ts +0 -375
  275. package/dist/src/main-api/RendererMain.js +0 -365
  276. package/dist/src/main-api/RendererMain.js.map +0 -1
  277. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  278. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  279. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  280. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  281. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  282. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  283. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  284. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  285. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  286. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  287. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  288. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  289. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  290. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  291. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  292. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  293. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  294. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  295. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  296. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  297. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  298. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  299. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  300. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  301. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  302. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  303. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  304. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  305. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  306. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  307. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  308. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  309. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  310. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  311. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  312. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  313. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  314. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  315. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  316. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  317. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  318. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  319. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  320. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  321. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  322. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  323. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  324. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  325. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  326. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  327. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  328. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  329. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  330. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  331. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  332. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  333. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  334. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  335. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  336. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  337. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  338. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  339. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  340. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  341. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  342. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  343. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  344. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  345. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  346. package/dist/src/render-drivers/utils.d.ts +0 -12
  347. package/dist/src/render-drivers/utils.js +0 -69
  348. package/dist/src/render-drivers/utils.js.map +0 -1
  349. /package/dist/src/core/{CoreStuff.d.ts → temp.d.ts} +0 -0
@@ -1,567 +1,567 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
- import type { Dimensions } from '../../../common/CommonTypes.js';
21
- import type { EventEmitter } from '../../../common/EventEmitter.js';
22
- import type { CoreTextNode } from '../../CoreTextNode.js';
23
- import type { Stage } from '../../Stage.js';
24
- import type { Matrix3d } from '../../lib/Matrix3d.js';
25
- import type { Rect, RectWithValid } from '../../lib/utils.js';
26
- import type {
27
- TrFontFace,
28
- TrFontFaceDescriptors,
29
- } from '../font-face-types/TrFontFace.js';
30
- import type {
31
- TextBaseline,
32
- TextVerticalAlign,
33
- } from './LightningTextTextureRenderer.js';
34
-
35
- /**
36
- * Augmentable map of text renderer type IDs to text renderer types.
37
- *
38
- * @example
39
- * ```ts
40
- * declare module './TextRenderer' {
41
- * interface TextRendererMap {
42
- * canvas: CanvasTextRenderer;
43
- * }
44
- * }
45
- * ```
46
- */
47
-
48
- export interface TextRendererMap {}
49
-
50
- export interface TextRendererState {
51
- props: TrProps;
52
- /**
53
- * Whether or not the text renderer state is scheduled to be updated
54
- * via queueMicrotask.
55
- */
56
- updateScheduled: boolean;
57
- status: 'initialState' | 'loading' | 'loaded' | 'failed' | 'destroyed';
58
- /**
59
- * Event emitter for the text renderer
60
- */
61
- emitter: EventEmitter;
62
-
63
- /**
64
- * Force a full layout pass for the calculation of the
65
- * total dimensions of the text
66
- */
67
- forceFullLayoutCalc: boolean;
68
- textW: number | undefined;
69
- textH: number | undefined;
70
-
71
- isRenderable: boolean;
72
-
73
- debugData: {
74
- updateCount: number;
75
- layoutCount: number;
76
- drawCount: number;
77
- lastLayoutNumCharacters: number;
78
- layoutSum: number;
79
- drawSum: number;
80
- bufferSize: number;
81
- };
82
- }
83
-
84
- export interface TextRendererDebugProps {
85
- showRenderWindow: boolean;
86
- showVisibleRect: boolean;
87
- showElementRect: boolean;
88
- disableScissor: boolean;
89
- printLayoutTime: boolean;
90
- }
91
-
92
- /**
93
- * Text renderer properties that are used in resolving appropriate font faces
94
- *
95
- * @remarks
96
- * Extended by {@link TrProps}
97
- */
98
- export interface TrFontProps {
99
- /**
100
- * Font Family
101
- *
102
- * @internalRemarks
103
- * `fontFamily` is defined currently as single string, but in the future we may want to
104
- * support multiple font family fallbacks, as this is supported by CSS / Canvas2d. We can
105
- * do this in a backwards compatible way by unioning an array of strings to the
106
- * `fontFamily` property.
107
- */
108
- fontFamily: string;
109
- /**
110
- * Font Weight
111
- *
112
- * @remarks
113
- * The font weight to use when looking up the font face. This can be a numeric
114
- * value between 1 and 1000, or one of the following strings:
115
- * - `'normal'` - same as 400
116
- * - `'bold'` - same as 700
117
- * - `'bolder'` - (Not yet properly supported)
118
- */
119
- fontWeight: TrFontFaceDescriptors['weight'] | 'bolder' | 'lighter';
120
- /**
121
- * Font Style
122
- *
123
- * @remarks
124
- * The font style to use when looking up the font face. This can be one of the
125
- * following strings:
126
- * - `'normal'`
127
- * - `'italic'`
128
- * - `'oblique'`
129
- */
130
- fontStyle: TrFontFaceDescriptors['style'];
131
- /**
132
- * Font Stretch
133
- *
134
- * @remarks
135
- * The font stretch to use when looking up the font face. This can be one of the
136
- * following strings:
137
- * - `'normal'`
138
- * - `'ultra-condensed'`
139
- * - `'extra-condensed'`
140
- * - `'condensed'`
141
- * - `'semi-condensed'`
142
- * - `'semi-expanded'`
143
- * - `'expanded'`
144
- * - `'extra-expanded'`
145
- * - `'ultra-expanded'`
146
- *
147
- * @default 'normal'
148
- */
149
- fontStretch: TrFontFaceDescriptors['stretch'];
150
- /**
151
- * Font Size
152
- *
153
- * @remarks
154
- * The font size to use when looking up the font face.
155
- *
156
- * The font size is specified in pixels and is the height of the font's
157
- * em-square. The em-square is essentially the height of the capital letters
158
- * for the font. The actual height of the text can be larger than the
159
- * specified font size, as the font may have ascenders and descenders that
160
- * extend beyond the em-square.
161
- *
162
- * @default 16
163
- */
164
- fontSize: number;
165
- }
166
-
167
- export interface TrProps extends TrFontProps {
168
- /**
169
- * Text to display
170
- *
171
- * @default ''
172
- */
173
- text: string;
174
- /**
175
- * Text alignment
176
- *
177
- * @remarks
178
- * Alignment of the text relative to it's contained bounds. For best results,
179
- * use {@link contain} mode `'width'` or `'both'` and a set an explicit
180
- * {@link width} for the text to be aligned within.
181
- *
182
- * @default 'left'
183
- */
184
- textAlign: 'left' | 'center' | 'right';
185
- /**
186
- * Color of text
187
- *
188
- * @remarks
189
- * The color value is a number in the format 0xRRGGBBAA, where RR is the red
190
- * component, GG is the green component, BB is the blue component, and AA is
191
- * the alpha component.
192
- *
193
- * @default 0xffffffff (opaque white)
194
- */
195
- color: number;
196
- x: number;
197
- y: number;
198
- /**
199
- * Contain mode for text
200
- *
201
- * @remarks
202
- * The contain mode determines how the text is contained within the bounds
203
- * of the Text Node. The default value is `'none'`, which means that the
204
- * Text Renderer will not constrain the text in any way. `'width'` mode will
205
- * constrain the text to the set width wrapping lines as necessary, and
206
- * `'both'` mode will constrain the text to both the set width and height
207
- * wrapping lines and truncating text as necessary.
208
- *
209
- * ## Text Auto-size Behavior
210
- * Depending on the set contain mode, after the text 'loaded' event is emitted,
211
- * the text node may have either its {@link width} and {@link height} updated
212
- * to match the rendered size of the text.
213
- *
214
- * When contain mode is 'none', both the {@link width} and {@link height}
215
- * properties are updated.
216
- *
217
- * When contain mode is 'width', only the {@link height} property is updated.
218
- *
219
- * When contain mode is 'both', neither property is updated.
220
- *
221
- * @default 'none'
222
- */
223
- contain: 'none' | 'width' | 'both';
224
- width: number;
225
- height: number;
226
- /**
227
- * Whether or not the text is scrollable
228
- *
229
- * @remarks
230
- * If `scrollable` is `true`, the text can be scrolled vertically within the
231
- * bounds of the Text Node. You can set the scroll position using the
232
- * {@link scrollY} property.
233
- *
234
- * @default false
235
- */
236
- scrollable: boolean;
237
- /**
238
- * Vertical scroll position for text
239
- *
240
- * @remarks
241
- * The vertical scroll position of the text. This property is only used if
242
- * {@link scrollable} is `true`.
243
- *
244
- * @default 0
245
- */
246
- scrollY: number;
247
- /**
248
- * Vertical offset for text
249
- *
250
- * @remarks
251
- * The vertical offset of the text. This property is only used if
252
- * {@link scrollable} is `true`.
253
- *
254
- * @default 0
255
- */
256
- offsetY: number;
257
- /**
258
- * Letter spacing for text (in pixels)
259
- *
260
- * @remarks
261
- * This property sets additional (or reduced, if value is negative) spacing
262
- * between characters in the text.
263
- *
264
- * @default 0
265
- */
266
- letterSpacing: number;
267
- /**
268
- * Line height for text (in pixels)
269
- *
270
- * @remarks
271
- * This property sets the height of each line. If set to `undefined`, the
272
- * line height will be calculated based on the font and font size to be the
273
- * minimal height required to completely contain a line of text.
274
- *
275
- * See: https://github.com/lightning-js/renderer/issues/170
276
- *
277
- * @default `undefined`
278
- */
279
- lineHeight: number | undefined;
280
- /**
281
- * Max lines for text
282
- *
283
- * @remarks
284
- * This property sets max number of lines of a text paragraph.
285
- * Not yet implemented in the SDF renderer.
286
- *
287
- * @default 0
288
- */
289
- maxLines: number;
290
- /**
291
- * Baseline for text
292
- *
293
- * @remarks
294
- * This property sets the text baseline used when drawing text.
295
- * Not yet implemented in the SDF renderer.
296
- *
297
- * @default alphabetic
298
- */
299
- textBaseline: TextBaseline;
300
- /**
301
- * Vertical Align for text when lineHeight > fontSize
302
- *
303
- * @remarks
304
- * This property sets the vertical align of the text.
305
- * Not yet implemented in the SDF renderer.
306
- *
307
- * @default middle
308
- */
309
- verticalAlign: TextVerticalAlign;
310
- /**
311
- * Overflow Suffix for text
312
- *
313
- * @remarks
314
- * The suffix to be added when text is cropped due to overflow.
315
- * Not yet implemented in the SDF renderer.
316
- *
317
- * @default "..."
318
- */
319
- overflowSuffix: string;
320
-
321
- /**
322
- * Word Break for text
323
- *
324
- * @remarks
325
- * This property sets how words should break when reaching the end of a line.
326
- *
327
- * - `'normal'`: Use the default line break rule.
328
- * - `'break-all'`: To prevent overflow, word breaks should happen between any two characters.
329
- * - `'break-word'`: To prevent overflow, word breaks should happen between words. If words are too long word breaks happen between any two characters.
330
- *
331
- * @default "normal"
332
- */
333
- wordBreak: 'normal' | 'break-all' | 'break-word';
334
-
335
- zIndex: number;
336
-
337
- debug: Partial<TextRendererDebugProps>;
338
- }
339
-
340
- export type TrPropSetters<StateT = TextRendererState> = {
341
- [key in keyof TrProps]: (state: StateT, value: TrProps[key]) => void;
342
- };
343
-
344
- const trPropSetterDefaults: TrPropSetters = {
345
- x: (state, value) => {
346
- state.props.x = value;
347
- },
348
- y: (state, value) => {
349
- state.props.y = value;
350
- },
351
- width: (state, value) => {
352
- state.props.width = value;
353
- },
354
- height: (state, value) => {
355
- state.props.height = value;
356
- },
357
- color: (state, value) => {
358
- state.props.color = value;
359
- },
360
- zIndex: (state, value) => {
361
- state.props.zIndex = value;
362
- },
363
- fontFamily: (state, value) => {
364
- state.props.fontFamily = value;
365
- },
366
- fontWeight: (state, value) => {
367
- state.props.fontWeight = value;
368
- },
369
- fontStyle: (state, value) => {
370
- state.props.fontStyle = value;
371
- },
372
- fontStretch: (state, value) => {
373
- state.props.fontStretch = value;
374
- },
375
- fontSize: (state, value) => {
376
- state.props.fontSize = value;
377
- },
378
- text: (state, value) => {
379
- state.props.text = value;
380
- },
381
- textAlign: (state, value) => {
382
- state.props.textAlign = value;
383
- },
384
- contain: (state, value) => {
385
- state.props.contain = value;
386
- },
387
- offsetY: (state, value) => {
388
- state.props.offsetY = value;
389
- },
390
- scrollable: (state, value) => {
391
- state.props.scrollable = value;
392
- },
393
- scrollY: (state, value) => {
394
- state.props.scrollY = value;
395
- },
396
- letterSpacing: (state, value) => {
397
- state.props.letterSpacing = value;
398
- },
399
- lineHeight: (state, value) => {
400
- state.props.lineHeight = value;
401
- },
402
- maxLines: (state, value) => {
403
- state.props.maxLines = value;
404
- },
405
- textBaseline: (state, value) => {
406
- state.props.textBaseline = value;
407
- },
408
- verticalAlign: (state, value) => {
409
- state.props.verticalAlign = value;
410
- },
411
- overflowSuffix: (state, value) => {
412
- state.props.overflowSuffix = value;
413
- },
414
- wordBreak: (state, value) => {
415
- state.props.wordBreak = value;
416
- },
417
- debug: (state, value) => {
418
- state.props.debug = value;
419
- },
420
- };
421
-
422
- /**
423
- * Event handler for when text is loaded
424
- *
425
- * @remarks
426
- * Emitted by state.emitter
427
- */
428
- export type TrLoadedEventHandler = (target: any) => void;
429
-
430
- /**
431
- * Event handler for when text failed to load
432
- *
433
- * @remarks
434
- * Emitted by state.emitter
435
- */
436
- export type TrFailedEventHandler = (target: any, error: Error) => void;
437
-
438
- export abstract class TextRenderer<
439
- StateT extends TextRendererState = TextRendererState,
440
- > {
441
- readonly set: Readonly<TrPropSetters<StateT>>;
442
- abstract type: 'canvas' | 'sdf';
443
-
444
- constructor(protected stage: Stage) {
445
- const propSetters = {
446
- ...trPropSetterDefaults,
447
- ...this.getPropertySetters(),
448
- };
449
- // For each prop setter add a wrapper method that checks if the prop is
450
- // different before calling the setter
451
- const propSet = {};
452
- Object.keys(propSetters).forEach((key) => {
453
- Object.defineProperty(propSet, key, {
454
- value: (state: StateT, value: TrProps[keyof TrProps]) => {
455
- // Check if the current prop value is different before calling the setter
456
- if (state.props[key as keyof TrProps] !== value) {
457
- propSetters[key as keyof TrPropSetters](state, value as never);
458
-
459
- // Assume any prop change will require a render
460
- // This ensures that renders are triggered appropriately even with RAF paused
461
- this.stage.requestRender();
462
- }
463
- },
464
- writable: false, // Prevents property from being changed
465
- configurable: false, // Prevents property from being deleted
466
- });
467
- });
468
- this.set = propSet as Readonly<TrPropSetters<StateT>>;
469
- }
470
-
471
- setStatus(state: StateT, status: StateT['status'], error?: Error) {
472
- // Don't emit the same status twice
473
- if (state.status === status) {
474
- return;
475
- }
476
- state.status = status;
477
- state.emitter.emit(status, error);
478
- }
479
-
480
- /**
481
- * Allows the CoreTextNode to communicate changes to the isRenderable state of
482
- * the itself.
483
- *
484
- * @param state
485
- * @param renderable
486
- */
487
- setIsRenderable(state: StateT, renderable: boolean) {
488
- state.isRenderable = renderable;
489
- }
490
-
491
- /**
492
- * Called by constructor to get a map of property setter functions for this renderer.
493
- */
494
- abstract getPropertySetters(): Partial<TrPropSetters<StateT>>;
495
-
496
- /**
497
- * Given text renderer properties (particularly the specific properties related to font selection)
498
- * returns whether or not the renderer can render it.
499
- *
500
- * @param props
501
- */
502
- abstract canRenderFont(props: TrFontProps): boolean;
503
-
504
- /**
505
- * Called by the TrFontManager to find out if a newly added font face is supported
506
- * by this renderer.
507
- *
508
- * @param fontFace
509
- */
510
- abstract isFontFaceSupported(fontFace: TrFontFace): boolean;
511
-
512
- /**
513
- * Called by the TrFontManager to add a font face to the renderer's font registry.
514
- *
515
- * @remarks
516
- * This method MUST ONLY be called for a fontFace that previously passed the
517
- * {@link isFontFaceSupported} check.
518
- *
519
- * @param fontFace
520
- */
521
- abstract addFontFace(fontFace: TrFontFace): void;
522
-
523
- abstract createState(props: TrProps, node: CoreTextNode): StateT;
524
-
525
- /**
526
- * Destroy/Clean up the state object
527
- *
528
- * @remarks
529
- * Opposite of createState(). Frees any event listeners / resources held by
530
- * the state that may not reliably get garbage collected.
531
- *
532
- * @param state
533
- */
534
- destroyState(state: StateT) {
535
- this.setStatus(state, 'destroyed');
536
- state.emitter.removeAllListeners();
537
- }
538
-
539
- /**
540
- * Schedule a state update via queueMicrotask
541
- *
542
- * @remarks
543
- * This method is used to schedule a state update via queueMicrotask. This
544
- * method should be called whenever a state update is needed, and it will
545
- * ensure that the state is only updated once per microtask.
546
- * @param state
547
- * @returns
548
- */
549
- scheduleUpdateState(state: StateT): void {
550
- if (state.updateScheduled) {
551
- return;
552
- }
553
- state.updateScheduled = true;
554
- queueMicrotask(() => {
555
- // If the state has been destroyed, don't update it
556
- if (state.status === 'destroyed') {
557
- return;
558
- }
559
- state.updateScheduled = false;
560
- this.updateState(state);
561
- });
562
- }
563
-
564
- abstract updateState(state: StateT): void;
565
-
566
- renderQuads?(node: CoreTextNode): void;
567
- }
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+
20
+ import type { Dimensions } from '../../../common/CommonTypes.js';
21
+ import type { EventEmitter } from '../../../common/EventEmitter.js';
22
+ import type { CoreTextNode } from '../../CoreTextNode.js';
23
+ import type { Stage } from '../../Stage.js';
24
+ import type { Matrix3d } from '../../lib/Matrix3d.js';
25
+ import type { Rect, RectWithValid } from '../../lib/utils.js';
26
+ import type {
27
+ TrFontFace,
28
+ TrFontFaceDescriptors,
29
+ } from '../font-face-types/TrFontFace.js';
30
+ import type {
31
+ TextBaseline,
32
+ TextVerticalAlign,
33
+ } from './LightningTextTextureRenderer.js';
34
+
35
+ /**
36
+ * Augmentable map of text renderer type IDs to text renderer types.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * declare module './TextRenderer' {
41
+ * interface TextRendererMap {
42
+ * canvas: CanvasTextRenderer;
43
+ * }
44
+ * }
45
+ * ```
46
+ */
47
+
48
+ export interface TextRendererMap {}
49
+
50
+ export interface TextRendererState {
51
+ props: TrProps;
52
+ /**
53
+ * Whether or not the text renderer state is scheduled to be updated
54
+ * via queueMicrotask.
55
+ */
56
+ updateScheduled: boolean;
57
+ status: 'initialState' | 'loading' | 'loaded' | 'failed' | 'destroyed';
58
+ /**
59
+ * Event emitter for the text renderer
60
+ */
61
+ emitter: EventEmitter;
62
+
63
+ /**
64
+ * Force a full layout pass for the calculation of the
65
+ * total dimensions of the text
66
+ */
67
+ forceFullLayoutCalc: boolean;
68
+ textW: number | undefined;
69
+ textH: number | undefined;
70
+
71
+ isRenderable: boolean;
72
+
73
+ debugData: {
74
+ updateCount: number;
75
+ layoutCount: number;
76
+ drawCount: number;
77
+ lastLayoutNumCharacters: number;
78
+ layoutSum: number;
79
+ drawSum: number;
80
+ bufferSize: number;
81
+ };
82
+ }
83
+
84
+ export interface TextRendererDebugProps {
85
+ showRenderWindow: boolean;
86
+ showVisibleRect: boolean;
87
+ showElementRect: boolean;
88
+ disableScissor: boolean;
89
+ printLayoutTime: boolean;
90
+ }
91
+
92
+ /**
93
+ * Text renderer properties that are used in resolving appropriate font faces
94
+ *
95
+ * @remarks
96
+ * Extended by {@link TrProps}
97
+ */
98
+ export interface TrFontProps {
99
+ /**
100
+ * Font Family
101
+ *
102
+ * @internalRemarks
103
+ * `fontFamily` is defined currently as single string, but in the future we may want to
104
+ * support multiple font family fallbacks, as this is supported by CSS / Canvas2d. We can
105
+ * do this in a backwards compatible way by unioning an array of strings to the
106
+ * `fontFamily` property.
107
+ */
108
+ fontFamily: string;
109
+ /**
110
+ * Font Weight
111
+ *
112
+ * @remarks
113
+ * The font weight to use when looking up the font face. This can be a numeric
114
+ * value between 1 and 1000, or one of the following strings:
115
+ * - `'normal'` - same as 400
116
+ * - `'bold'` - same as 700
117
+ * - `'bolder'` - (Not yet properly supported)
118
+ */
119
+ fontWeight: TrFontFaceDescriptors['weight'] | 'bolder' | 'lighter';
120
+ /**
121
+ * Font Style
122
+ *
123
+ * @remarks
124
+ * The font style to use when looking up the font face. This can be one of the
125
+ * following strings:
126
+ * - `'normal'`
127
+ * - `'italic'`
128
+ * - `'oblique'`
129
+ */
130
+ fontStyle: TrFontFaceDescriptors['style'];
131
+ /**
132
+ * Font Stretch
133
+ *
134
+ * @remarks
135
+ * The font stretch to use when looking up the font face. This can be one of the
136
+ * following strings:
137
+ * - `'normal'`
138
+ * - `'ultra-condensed'`
139
+ * - `'extra-condensed'`
140
+ * - `'condensed'`
141
+ * - `'semi-condensed'`
142
+ * - `'semi-expanded'`
143
+ * - `'expanded'`
144
+ * - `'extra-expanded'`
145
+ * - `'ultra-expanded'`
146
+ *
147
+ * @default 'normal'
148
+ */
149
+ fontStretch: TrFontFaceDescriptors['stretch'];
150
+ /**
151
+ * Font Size
152
+ *
153
+ * @remarks
154
+ * The font size to use when looking up the font face.
155
+ *
156
+ * The font size is specified in pixels and is the height of the font's
157
+ * em-square. The em-square is essentially the height of the capital letters
158
+ * for the font. The actual height of the text can be larger than the
159
+ * specified font size, as the font may have ascenders and descenders that
160
+ * extend beyond the em-square.
161
+ *
162
+ * @default 16
163
+ */
164
+ fontSize: number;
165
+ }
166
+
167
+ export interface TrProps extends TrFontProps {
168
+ /**
169
+ * Text to display
170
+ *
171
+ * @default ''
172
+ */
173
+ text: string;
174
+ /**
175
+ * Text alignment
176
+ *
177
+ * @remarks
178
+ * Alignment of the text relative to it's contained bounds. For best results,
179
+ * use {@link contain} mode `'width'` or `'both'` and a set an explicit
180
+ * {@link width} for the text to be aligned within.
181
+ *
182
+ * @default 'left'
183
+ */
184
+ textAlign: 'left' | 'center' | 'right';
185
+ /**
186
+ * Color of text
187
+ *
188
+ * @remarks
189
+ * The color value is a number in the format 0xRRGGBBAA, where RR is the red
190
+ * component, GG is the green component, BB is the blue component, and AA is
191
+ * the alpha component.
192
+ *
193
+ * @default 0xffffffff (opaque white)
194
+ */
195
+ color: number;
196
+ x: number;
197
+ y: number;
198
+ /**
199
+ * Contain mode for text
200
+ *
201
+ * @remarks
202
+ * The contain mode determines how the text is contained within the bounds
203
+ * of the Text Node. The default value is `'none'`, which means that the
204
+ * Text Renderer will not constrain the text in any way. `'width'` mode will
205
+ * constrain the text to the set width wrapping lines as necessary, and
206
+ * `'both'` mode will constrain the text to both the set width and height
207
+ * wrapping lines and truncating text as necessary.
208
+ *
209
+ * ## Text Auto-size Behavior
210
+ * Depending on the set contain mode, after the text 'loaded' event is emitted,
211
+ * the text node may have either its {@link width} and {@link height} updated
212
+ * to match the rendered size of the text.
213
+ *
214
+ * When contain mode is 'none', both the {@link width} and {@link height}
215
+ * properties are updated.
216
+ *
217
+ * When contain mode is 'width', only the {@link height} property is updated.
218
+ *
219
+ * When contain mode is 'both', neither property is updated.
220
+ *
221
+ * @default 'none'
222
+ */
223
+ contain: 'none' | 'width' | 'both';
224
+ width: number;
225
+ height: number;
226
+ /**
227
+ * Whether or not the text is scrollable
228
+ *
229
+ * @remarks
230
+ * If `scrollable` is `true`, the text can be scrolled vertically within the
231
+ * bounds of the Text Node. You can set the scroll position using the
232
+ * {@link scrollY} property.
233
+ *
234
+ * @default false
235
+ */
236
+ scrollable: boolean;
237
+ /**
238
+ * Vertical scroll position for text
239
+ *
240
+ * @remarks
241
+ * The vertical scroll position of the text. This property is only used if
242
+ * {@link scrollable} is `true`.
243
+ *
244
+ * @default 0
245
+ */
246
+ scrollY: number;
247
+ /**
248
+ * Vertical offset for text
249
+ *
250
+ * @remarks
251
+ * The vertical offset of the text. This property is only used if
252
+ * {@link scrollable} is `true`.
253
+ *
254
+ * @default 0
255
+ */
256
+ offsetY: number;
257
+ /**
258
+ * Letter spacing for text (in pixels)
259
+ *
260
+ * @remarks
261
+ * This property sets additional (or reduced, if value is negative) spacing
262
+ * between characters in the text.
263
+ *
264
+ * @default 0
265
+ */
266
+ letterSpacing: number;
267
+ /**
268
+ * Line height for text (in pixels)
269
+ *
270
+ * @remarks
271
+ * This property sets the height of each line. If set to `undefined`, the
272
+ * line height will be calculated based on the font and font size to be the
273
+ * minimal height required to completely contain a line of text.
274
+ *
275
+ * See: https://github.com/lightning-js/renderer/issues/170
276
+ *
277
+ * @default `undefined`
278
+ */
279
+ lineHeight: number | undefined;
280
+ /**
281
+ * Max lines for text
282
+ *
283
+ * @remarks
284
+ * This property sets max number of lines of a text paragraph.
285
+ * Not yet implemented in the SDF renderer.
286
+ *
287
+ * @default 0
288
+ */
289
+ maxLines: number;
290
+ /**
291
+ * Baseline for text
292
+ *
293
+ * @remarks
294
+ * This property sets the text baseline used when drawing text.
295
+ * Not yet implemented in the SDF renderer.
296
+ *
297
+ * @default alphabetic
298
+ */
299
+ textBaseline: TextBaseline;
300
+ /**
301
+ * Vertical Align for text when lineHeight > fontSize
302
+ *
303
+ * @remarks
304
+ * This property sets the vertical align of the text.
305
+ * Not yet implemented in the SDF renderer.
306
+ *
307
+ * @default middle
308
+ */
309
+ verticalAlign: TextVerticalAlign;
310
+ /**
311
+ * Overflow Suffix for text
312
+ *
313
+ * @remarks
314
+ * The suffix to be added when text is cropped due to overflow.
315
+ * Not yet implemented in the SDF renderer.
316
+ *
317
+ * @default "..."
318
+ */
319
+ overflowSuffix: string;
320
+
321
+ /**
322
+ * Word Break for text
323
+ *
324
+ * @remarks
325
+ * This property sets how words should break when reaching the end of a line.
326
+ *
327
+ * - `'normal'`: Use the default line break rule.
328
+ * - `'break-all'`: To prevent overflow, word breaks should happen between any two characters.
329
+ * - `'break-word'`: To prevent overflow, word breaks should happen between words. If words are too long word breaks happen between any two characters.
330
+ *
331
+ * @default "normal"
332
+ */
333
+ wordBreak: 'normal' | 'break-all' | 'break-word';
334
+
335
+ zIndex: number;
336
+
337
+ debug: Partial<TextRendererDebugProps>;
338
+ }
339
+
340
+ export type TrPropSetters<StateT = TextRendererState> = {
341
+ [key in keyof TrProps]: (state: StateT, value: TrProps[key]) => void;
342
+ };
343
+
344
+ const trPropSetterDefaults: TrPropSetters = {
345
+ x: (state, value) => {
346
+ state.props.x = value;
347
+ },
348
+ y: (state, value) => {
349
+ state.props.y = value;
350
+ },
351
+ width: (state, value) => {
352
+ state.props.width = value;
353
+ },
354
+ height: (state, value) => {
355
+ state.props.height = value;
356
+ },
357
+ color: (state, value) => {
358
+ state.props.color = value;
359
+ },
360
+ zIndex: (state, value) => {
361
+ state.props.zIndex = value;
362
+ },
363
+ fontFamily: (state, value) => {
364
+ state.props.fontFamily = value;
365
+ },
366
+ fontWeight: (state, value) => {
367
+ state.props.fontWeight = value;
368
+ },
369
+ fontStyle: (state, value) => {
370
+ state.props.fontStyle = value;
371
+ },
372
+ fontStretch: (state, value) => {
373
+ state.props.fontStretch = value;
374
+ },
375
+ fontSize: (state, value) => {
376
+ state.props.fontSize = value;
377
+ },
378
+ text: (state, value) => {
379
+ state.props.text = value;
380
+ },
381
+ textAlign: (state, value) => {
382
+ state.props.textAlign = value;
383
+ },
384
+ contain: (state, value) => {
385
+ state.props.contain = value;
386
+ },
387
+ offsetY: (state, value) => {
388
+ state.props.offsetY = value;
389
+ },
390
+ scrollable: (state, value) => {
391
+ state.props.scrollable = value;
392
+ },
393
+ scrollY: (state, value) => {
394
+ state.props.scrollY = value;
395
+ },
396
+ letterSpacing: (state, value) => {
397
+ state.props.letterSpacing = value;
398
+ },
399
+ lineHeight: (state, value) => {
400
+ state.props.lineHeight = value;
401
+ },
402
+ maxLines: (state, value) => {
403
+ state.props.maxLines = value;
404
+ },
405
+ textBaseline: (state, value) => {
406
+ state.props.textBaseline = value;
407
+ },
408
+ verticalAlign: (state, value) => {
409
+ state.props.verticalAlign = value;
410
+ },
411
+ overflowSuffix: (state, value) => {
412
+ state.props.overflowSuffix = value;
413
+ },
414
+ wordBreak: (state, value) => {
415
+ state.props.wordBreak = value;
416
+ },
417
+ debug: (state, value) => {
418
+ state.props.debug = value;
419
+ },
420
+ };
421
+
422
+ /**
423
+ * Event handler for when text is loaded
424
+ *
425
+ * @remarks
426
+ * Emitted by state.emitter
427
+ */
428
+ export type TrLoadedEventHandler = (target: any) => void;
429
+
430
+ /**
431
+ * Event handler for when text failed to load
432
+ *
433
+ * @remarks
434
+ * Emitted by state.emitter
435
+ */
436
+ export type TrFailedEventHandler = (target: any, error: Error) => void;
437
+
438
+ export abstract class TextRenderer<
439
+ StateT extends TextRendererState = TextRendererState,
440
+ > {
441
+ readonly set: Readonly<TrPropSetters<StateT>>;
442
+ abstract type: 'canvas' | 'sdf';
443
+
444
+ constructor(protected stage: Stage) {
445
+ const propSetters = {
446
+ ...trPropSetterDefaults,
447
+ ...this.getPropertySetters(),
448
+ };
449
+ // For each prop setter add a wrapper method that checks if the prop is
450
+ // different before calling the setter
451
+ const propSet = {};
452
+ Object.keys(propSetters).forEach((key) => {
453
+ Object.defineProperty(propSet, key, {
454
+ value: (state: StateT, value: TrProps[keyof TrProps]) => {
455
+ // Check if the current prop value is different before calling the setter
456
+ if (state.props[key as keyof TrProps] !== value) {
457
+ propSetters[key as keyof TrPropSetters](state, value as never);
458
+
459
+ // Assume any prop change will require a render
460
+ // This ensures that renders are triggered appropriately even with RAF paused
461
+ this.stage.requestRender();
462
+ }
463
+ },
464
+ writable: false, // Prevents property from being changed
465
+ configurable: false, // Prevents property from being deleted
466
+ });
467
+ });
468
+ this.set = propSet as Readonly<TrPropSetters<StateT>>;
469
+ }
470
+
471
+ setStatus(state: StateT, status: StateT['status'], error?: Error) {
472
+ // Don't emit the same status twice
473
+ if (state.status === status) {
474
+ return;
475
+ }
476
+ state.status = status;
477
+ state.emitter.emit(status, error);
478
+ }
479
+
480
+ /**
481
+ * Allows the CoreTextNode to communicate changes to the isRenderable state of
482
+ * the itself.
483
+ *
484
+ * @param state
485
+ * @param renderable
486
+ */
487
+ setIsRenderable(state: StateT, renderable: boolean) {
488
+ state.isRenderable = renderable;
489
+ }
490
+
491
+ /**
492
+ * Called by constructor to get a map of property setter functions for this renderer.
493
+ */
494
+ abstract getPropertySetters(): Partial<TrPropSetters<StateT>>;
495
+
496
+ /**
497
+ * Given text renderer properties (particularly the specific properties related to font selection)
498
+ * returns whether or not the renderer can render it.
499
+ *
500
+ * @param props
501
+ */
502
+ abstract canRenderFont(props: TrFontProps): boolean;
503
+
504
+ /**
505
+ * Called by the TrFontManager to find out if a newly added font face is supported
506
+ * by this renderer.
507
+ *
508
+ * @param fontFace
509
+ */
510
+ abstract isFontFaceSupported(fontFace: TrFontFace): boolean;
511
+
512
+ /**
513
+ * Called by the TrFontManager to add a font face to the renderer's font registry.
514
+ *
515
+ * @remarks
516
+ * This method MUST ONLY be called for a fontFace that previously passed the
517
+ * {@link isFontFaceSupported} check.
518
+ *
519
+ * @param fontFace
520
+ */
521
+ abstract addFontFace(fontFace: TrFontFace): void;
522
+
523
+ abstract createState(props: TrProps, node: CoreTextNode): StateT;
524
+
525
+ /**
526
+ * Destroy/Clean up the state object
527
+ *
528
+ * @remarks
529
+ * Opposite of createState(). Frees any event listeners / resources held by
530
+ * the state that may not reliably get garbage collected.
531
+ *
532
+ * @param state
533
+ */
534
+ destroyState(state: StateT) {
535
+ this.setStatus(state, 'destroyed');
536
+ state.emitter.removeAllListeners();
537
+ }
538
+
539
+ /**
540
+ * Schedule a state update via queueMicrotask
541
+ *
542
+ * @remarks
543
+ * This method is used to schedule a state update via queueMicrotask. This
544
+ * method should be called whenever a state update is needed, and it will
545
+ * ensure that the state is only updated once per microtask.
546
+ * @param state
547
+ * @returns
548
+ */
549
+ scheduleUpdateState(state: StateT): void {
550
+ if (state.updateScheduled) {
551
+ return;
552
+ }
553
+ state.updateScheduled = true;
554
+ queueMicrotask(() => {
555
+ // If the state has been destroyed, don't update it
556
+ if (state.status === 'destroyed') {
557
+ return;
558
+ }
559
+ state.updateScheduled = false;
560
+ this.updateState(state);
561
+ });
562
+ }
563
+
564
+ abstract updateState(state: StateT): void;
565
+
566
+ renderQuads?(node: CoreTextNode): void;
567
+ }