@lightningjs/renderer 3.0.0-beta10 → 3.0.0-beta12

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 (355) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +133 -133
  4. package/dist/src/common/CommonTypes.d.ts +2 -2
  5. package/dist/src/core/CoreNode.d.ts +8 -7
  6. package/dist/src/core/CoreNode.js +57 -61
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreTextNode.d.ts +3 -0
  9. package/dist/src/core/CoreTextNode.js +54 -19
  10. package/dist/src/core/CoreTextNode.js.map +1 -1
  11. package/dist/src/core/Stage.js +4 -4
  12. package/dist/src/core/Stage.js.map +1 -1
  13. package/dist/src/core/lib/textureCompression.js +4 -4
  14. package/dist/src/core/lib/textureCompression.js.map +1 -1
  15. package/dist/src/core/platform.d.ts +10 -0
  16. package/dist/src/core/platform.js +81 -0
  17. package/dist/src/core/platform.js.map +1 -0
  18. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  19. package/dist/src/core/renderers/CoreShader.js +28 -0
  20. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  21. package/dist/src/core/renderers/CoreShaderNode.js +2 -2
  22. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  23. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  24. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  26. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +16 -0
  27. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +124 -0
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  29. package/dist/src/core/renderers/canvas/CanvasRenderer.js +1 -1
  30. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  31. package/dist/src/core/renderers/canvas/CanvasTexture.js +5 -5
  32. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  33. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  34. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  35. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  36. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  37. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  38. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  39. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  40. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  41. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  48. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +56 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +239 -0
  50. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  56. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  58. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  59. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +5 -6
  61. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  62. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  63. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  64. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  65. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +21 -21
  66. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  67. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +1 -1
  68. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  69. package/dist/src/core/renderers/webgl/WebGlRenderer.js +12 -11
  70. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  71. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +2 -2
  72. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  73. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +35 -35
  74. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  75. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  76. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  77. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  78. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  79. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  80. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  81. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  82. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  83. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  84. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  85. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  86. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  87. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  88. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  94. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  96. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  97. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  99. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  100. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  105. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  107. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  108. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  109. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  110. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  111. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  112. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  113. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  114. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  115. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  116. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  117. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  118. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  119. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  120. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  121. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  122. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  123. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  124. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  125. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  126. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  127. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  128. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  129. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  130. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  131. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  132. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  133. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  134. package/dist/src/core/shaders/canvas/Border.js +4 -4
  135. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  136. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  137. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  138. package/dist/src/core/shaders/canvas/LinearGradient.js +2 -2
  139. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  140. package/dist/src/core/shaders/canvas/RadialGradient.js +4 -4
  141. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  142. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  143. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  144. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +3 -3
  145. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  146. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +3 -3
  147. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  148. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +1 -1
  149. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  150. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  151. package/dist/src/core/shaders/templates/BorderTemplate.js +10 -10
  152. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  153. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  154. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  155. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  156. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +2 -2
  157. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  158. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  159. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  160. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  161. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  162. package/dist/src/core/shaders/webgl/Border.js +83 -83
  163. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  164. package/dist/src/core/shaders/webgl/Default.js +47 -47
  165. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  166. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  167. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  168. package/dist/src/core/shaders/webgl/LinearGradient.js +36 -36
  169. package/dist/src/core/shaders/webgl/RadialGradient.js +35 -35
  170. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  171. package/dist/src/core/shaders/webgl/Rounded.js +72 -72
  172. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  173. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +113 -113
  174. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  175. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +132 -132
  176. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  177. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +55 -55
  178. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  179. package/dist/src/core/shaders/webgl/SdfShader.js +62 -62
  180. package/dist/src/core/shaders/webgl/Shadow.js +83 -83
  181. package/dist/src/core/shaders/webgl/Spinner.d.ts +1 -0
  182. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  183. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  184. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +16 -0
  185. package/dist/src/core/text-rendering/CanvasFontHandler.js +29 -0
  186. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  187. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +15 -0
  188. package/dist/src/core/text-rendering/SdfFontHandler.js +34 -2
  189. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  190. package/dist/src/core/text-rendering/TextRenderer.d.ts +2 -0
  191. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  192. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  193. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  194. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  195. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  196. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  197. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  198. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +83 -42
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  205. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  206. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  207. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  208. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  209. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  210. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  211. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  212. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  213. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  214. package/dist/src/core/textures/ColorTexture.js +1 -1
  215. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  216. package/dist/src/core/textures/ImageTexture.d.ts +2 -2
  217. package/dist/src/core/textures/ImageTexture.js +11 -11
  218. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  219. package/dist/src/core/textures/NoiseTexture.d.ts +2 -2
  220. package/dist/src/core/textures/NoiseTexture.js +6 -6
  221. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  222. package/dist/src/core/textures/RenderTexture.d.ts +6 -6
  223. package/dist/src/core/textures/RenderTexture.js +10 -10
  224. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  225. package/dist/src/core/textures/SubTexture.d.ts +4 -4
  226. package/dist/src/core/textures/SubTexture.js +8 -8
  227. package/dist/src/core/textures/SubTexture.js.map +1 -1
  228. package/dist/src/core/textures/Texture.d.ts +3 -4
  229. package/dist/src/core/textures/Texture.js +4 -4
  230. package/dist/src/core/textures/Texture.js.map +1 -1
  231. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  232. package/dist/src/main-api/DynamicShaderController.js +58 -0
  233. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  234. package/dist/src/main-api/Inspector.js +7 -7
  235. package/dist/src/main-api/Inspector.js.map +1 -1
  236. package/dist/src/main-api/Renderer.js +2 -2
  237. package/dist/src/main-api/Renderer.js.map +1 -1
  238. package/dist/src/main-api/ShaderController.d.ts +31 -0
  239. package/dist/src/main-api/ShaderController.js +37 -0
  240. package/dist/src/main-api/ShaderController.js.map +1 -0
  241. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  242. package/exports/canvas-shaders.ts +28 -28
  243. package/exports/canvas.ts +45 -45
  244. package/exports/index.ts +82 -82
  245. package/exports/inspector.ts +24 -24
  246. package/exports/utils.ts +50 -50
  247. package/exports/webgl-shaders.ts +28 -28
  248. package/exports/webgl.ts +52 -52
  249. package/package.json +2 -1
  250. package/src/common/CommonTypes.ts +146 -146
  251. package/src/common/EventEmitter.ts +77 -77
  252. package/src/common/IAnimationController.ts +92 -92
  253. package/src/common/IEventEmitter.ts +28 -28
  254. package/src/core/CoreNode.test.ts +202 -202
  255. package/src/core/CoreNode.ts +2481 -2491
  256. package/src/core/CoreShaderManager.ts +188 -188
  257. package/src/core/CoreTextNode.ts +483 -443
  258. package/src/core/CoreTextureManager.ts +565 -565
  259. package/src/core/Stage.ts +906 -906
  260. package/src/core/TextureMemoryManager.ts +445 -445
  261. package/src/core/animations/AnimationManager.ts +38 -38
  262. package/src/core/animations/CoreAnimation.ts +291 -291
  263. package/src/core/animations/CoreAnimationController.ts +166 -166
  264. package/src/core/lib/ContextSpy.ts +41 -41
  265. package/src/core/lib/ImageWorker.ts +286 -286
  266. package/src/core/lib/Matrix3d.ts +244 -244
  267. package/src/core/lib/RenderCoords.ts +71 -71
  268. package/src/core/lib/WebGlContextWrapper.ts +1381 -1381
  269. package/src/core/lib/colorCache.ts +20 -20
  270. package/src/core/lib/colorParser.ts +85 -85
  271. package/src/core/lib/textureCompression.ts +152 -152
  272. package/src/core/lib/textureSvg.ts +78 -78
  273. package/src/core/lib/utils.ts +412 -412
  274. package/src/core/lib/validateImageBitmap.ts +87 -87
  275. package/src/core/platforms/Platform.ts +77 -77
  276. package/src/core/platforms/web/WebPlatform.ts +121 -121
  277. package/src/core/renderers/CoreContextTexture.ts +43 -43
  278. package/src/core/renderers/CoreRenderOp.ts +22 -22
  279. package/src/core/renderers/CoreRenderer.ts +110 -110
  280. package/src/core/renderers/CoreShaderNode.ts +175 -175
  281. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  282. package/src/core/renderers/canvas/CanvasRenderer.ts +283 -283
  283. package/src/core/renderers/canvas/CanvasShaderNode.ts +96 -96
  284. package/src/core/renderers/canvas/CanvasTexture.ts +156 -156
  285. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +81 -91
  286. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  287. package/src/core/renderers/webgl/WebGlCtxTexture.ts +301 -310
  288. package/src/core/renderers/webgl/WebGlRenderOp.ts +167 -167
  289. package/src/core/renderers/webgl/WebGlRenderer.ts +746 -747
  290. package/src/core/renderers/webgl/WebGlShaderNode.ts +435 -435
  291. package/src/core/renderers/webgl/WebGlShaderProgram.ts +341 -341
  292. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  293. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
  294. package/src/core/renderers/webgl/internal/ShaderUtils.ts +281 -281
  295. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  296. package/src/core/shaders/canvas/Border.ts +75 -75
  297. package/src/core/shaders/canvas/HolePunch.ts +55 -62
  298. package/src/core/shaders/canvas/LinearGradient.ts +71 -71
  299. package/src/core/shaders/canvas/RadialGradient.ts +99 -99
  300. package/src/core/shaders/canvas/Rounded.ts +55 -55
  301. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -74
  302. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -90
  303. package/src/core/shaders/canvas/RoundedWithShadow.ts +70 -70
  304. package/src/core/shaders/canvas/Shadow.ts +52 -52
  305. package/src/core/shaders/canvas/utils/render.ts +151 -151
  306. package/src/core/shaders/templates/BorderTemplate.ts +115 -115
  307. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  308. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  309. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -81
  310. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  311. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  312. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  313. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  314. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  315. package/src/core/shaders/utils.ts +46 -46
  316. package/src/core/shaders/webgl/Border.ts +116 -116
  317. package/src/core/shaders/webgl/Default.ts +89 -89
  318. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  319. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  320. package/src/core/shaders/webgl/LinearGradient.ts +82 -82
  321. package/src/core/shaders/webgl/RadialGradient.ts +85 -85
  322. package/src/core/shaders/webgl/Rounded.ts +113 -117
  323. package/src/core/shaders/webgl/RoundedWithBorder.ts +151 -155
  324. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +175 -175
  325. package/src/core/shaders/webgl/RoundedWithShadow.ts +94 -98
  326. package/src/core/shaders/webgl/SdfShader.ts +134 -134
  327. package/src/core/shaders/webgl/Shadow.ts +115 -115
  328. package/src/core/text-rendering/CanvasFontHandler.ts +210 -176
  329. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -622
  330. package/src/core/text-rendering/SdfFontHandler.ts +554 -517
  331. package/src/core/text-rendering/SdfTextRenderer.ts +466 -466
  332. package/src/core/text-rendering/TextRenderer.ts +406 -404
  333. package/src/core/text-rendering/Utils.ts +257 -257
  334. package/src/core/text-rendering/canvas/Settings.ts +99 -99
  335. package/src/core/text-rendering/canvas/Utils.test.ts +206 -206
  336. package/src/core/text-rendering/canvas/Utils.ts +178 -178
  337. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -299
  338. package/src/core/text-rendering/canvas/draw.ts +165 -165
  339. package/src/core/text-rendering/sdf/Utils.test.ts +402 -402
  340. package/src/core/text-rendering/sdf/Utils.ts +436 -436
  341. package/src/core/text-rendering/sdf/index.ts +20 -20
  342. package/src/core/textures/ColorTexture.ts +102 -102
  343. package/src/core/textures/ImageTexture.ts +418 -418
  344. package/src/core/textures/NoiseTexture.ts +104 -104
  345. package/src/core/textures/RenderTexture.ts +85 -85
  346. package/src/core/textures/SubTexture.ts +205 -205
  347. package/src/core/textures/Texture.ts +381 -381
  348. package/src/core/utils.ts +227 -227
  349. package/src/env.d.ts +7 -7
  350. package/src/main-api/INode.ts +100 -100
  351. package/src/main-api/Inspector.ts +567 -567
  352. package/src/main-api/Renderer.ts +873 -873
  353. package/src/main-api/utils.ts +45 -45
  354. package/src/utils.ts +267 -267
  355. package/COPYING +0 -1
@@ -1,404 +1,406 @@
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 { CoreTextNodeProps } from '../CoreTextNode.js';
21
- import type { CoreRenderer } from '../renderers/CoreRenderer.js';
22
- import type { Stage } from '../Stage.js';
23
-
24
- // Text baseline and vertical align types
25
- export type TextBaseline =
26
- | 'alphabetic'
27
- | 'hanging'
28
- | 'middle'
29
- | 'ideographic'
30
- | 'bottom';
31
- export type TextVerticalAlign = 'top' | 'middle' | 'bottom';
32
- export type TextRenderers = 'canvas' | 'sdf';
33
- /**
34
- * Structure mapping font family names to a set of font faces.
35
- */
36
- export interface FontFamilyMap {
37
- [familyName: string]: FontFace;
38
- }
39
-
40
- /**
41
- * Font metrics used for layout and default line height calculations.
42
- */
43
- export interface FontMetrics {
44
- /**
45
- * The distance, in font units, from the baseline to the highest point of the font.
46
- */
47
- ascender: number;
48
- /**
49
- * The distance, in font units, from the baseline to the lowest point of the font.
50
- */
51
- descender: number;
52
- /**
53
- * The additional space used in the calculation of the default line height in font units.
54
- */
55
- lineGap: number;
56
- /**
57
- * The number of font units per 1 EM.
58
- */
59
- unitsPerEm: number;
60
- }
61
-
62
- /**
63
- * Normalized font metrics where values are expressed as a fraction of 1 EM.
64
- */
65
- export interface NormalizedFontMetrics {
66
- /**
67
- * The distance, as a fraction of 1 EM, from the baseline to the highest point of the font.
68
- */
69
- ascender: number;
70
- /**
71
- * The distance, as a fraction of 1 EM, from the baseline to the lowest point of the font.
72
- */
73
- descender: number;
74
- /**
75
- * The additional space used in the calculation of the default line height as a fraction of 1 EM
76
- */
77
- lineGap: number;
78
- }
79
-
80
- /**
81
- * Text renderer properties that are used in resolving appropriate font faces
82
- *
83
- * @remarks
84
- * Extended by {@link TrProps}
85
- */
86
- export interface TrFontProps {
87
- /**
88
- * Font Family
89
- *
90
- * @internalRemarks
91
- * `fontFamily` is defined currently as single string, but in the future we may want to
92
- * support multiple font family fallbacks, as this is supported by CSS / Canvas2d. We can
93
- * do this in a backwards compatible way by unioning an array of strings to the
94
- * `fontFamily` property.
95
- */
96
- fontFamily: string;
97
- /**
98
- * Font Style
99
- *
100
- * @remarks
101
- * The font style to use when looking up the font face. This can be one of the
102
- * following strings:
103
- * - `'normal'`
104
- * - `'italic'`
105
- * - `'oblique'`
106
- */
107
- fontStyle: 'normal' | 'italic' | 'oblique';
108
- /**
109
- * Font Size
110
- *
111
- * @remarks
112
- * The font size to use when looking up the font face.
113
- *
114
- * The font size is specified in pixels and is the height of the font's
115
- * em-square. The em-square is essentially the height of the capital letters
116
- * for the font. The actual height of the text can be larger than the
117
- * specified font size, as the font may have ascenders and descenders that
118
- * extend beyond the em-square.
119
- *
120
- * @default 16
121
- */
122
- fontSize: number;
123
- }
124
-
125
- export interface TrProps extends TrFontProps {
126
- /**
127
- * Text to display
128
- *
129
- * @default ''
130
- */
131
- text: string;
132
- /**
133
- * Text alignment
134
- *
135
- * @remarks
136
- * Alignment of the text relative to it's contained bounds. For best results,
137
- * use {@link contain} mode `'width'` or `'both'` and a set an explicit
138
- * {@link width} for the text to be aligned within.
139
- *
140
- * @default 'left'
141
- */
142
- textAlign: 'left' | 'center' | 'right';
143
- /**
144
- * Color of text
145
- *
146
- * @remarks
147
- * The color value is a number in the format 0xRRGGBBAA, where RR is the red
148
- * component, GG is the green component, BB is the blue component, and AA is
149
- * the alpha component.
150
- *
151
- * @default 0xffffffff (opaque white)
152
- */
153
- color: number;
154
- x: number;
155
- y: number;
156
-
157
- maxWidth: number;
158
- maxHeight: number;
159
- /**
160
- * Vertical offset for text
161
- *
162
- * @remarks
163
- * The vertical offset of the text.
164
- *
165
- * @default 0
166
- */
167
- offsetY: number;
168
- /**
169
- * Letter spacing for text (in pixels)
170
- *
171
- * @remarks
172
- * This property sets additional (or reduced, if value is negative) spacing
173
- * between characters in the text.
174
- *
175
- * @default 0
176
- */
177
- letterSpacing: number;
178
- /**
179
- * Line height for text (in pixels)
180
- *
181
- * @remarks
182
- * This property sets the height of each line. If set to `undefined`, the
183
- * line height will be calculated based on the font and font size to be the
184
- * minimal height required to completely contain a line of text.
185
- *
186
- * See: https://github.com/lightning-js/renderer/issues/170
187
- *
188
- * @default `undefined`
189
- */
190
- lineHeight: number;
191
- /**
192
- * Max lines for text
193
- *
194
- * @remarks
195
- * This property sets max number of lines of a text paragraph.
196
- * Not yet implemented in the SDF renderer.
197
- *
198
- * @default 0
199
- */
200
- maxLines: number;
201
- /**
202
- * Baseline for text
203
- *
204
- * @remarks
205
- * This property sets the text baseline used when drawing text.
206
- * Not yet implemented in the SDF renderer.
207
- *
208
- * @default alphabetic
209
- */
210
- textBaseline: TextBaseline;
211
- /**
212
- * Vertical Align for text when lineHeight > fontSize
213
- *
214
- * @remarks
215
- * This property sets the vertical align of the text.
216
- * Not yet implemented in the SDF renderer.
217
- *
218
- * @default middle
219
- */
220
- verticalAlign: TextVerticalAlign;
221
- /**
222
- * Overflow Suffix for text
223
- *
224
- * @remarks
225
- * The suffix to be added when text is cropped due to overflow.
226
- * Not yet implemented in the SDF renderer.
227
- *
228
- * @default "..."
229
- */
230
- overflowSuffix: string;
231
-
232
- /**
233
- * Word Break for text
234
- *
235
- * @remarks
236
- * This property sets how words should break when reaching the end of a line.
237
- *
238
- * - `'normal'`: Use the default line break rule.
239
- * - `'break-all'`: To prevent overflow, word breaks should happen between any two characters.
240
- * - `'break-word'`: To prevent overflow, word breaks should happen between words. If words are too long word breaks happen between any two characters.
241
- *
242
- * @default "normal"
243
- */
244
- wordBreak: 'normal' | 'break-all' | 'break-word';
245
-
246
- zIndex: number;
247
- }
248
-
249
- /**
250
- * Glyph layout information for WebGL rendering
251
- */
252
- export interface GlyphLayout {
253
- /**
254
- * Unicode codepoint
255
- */
256
- codepoint: number;
257
- /**
258
- * Glyph ID in the font atlas
259
- */
260
- glyphId: number;
261
- /**
262
- * X position relative to text origin
263
- */
264
- x: number;
265
- /**
266
- * Y position relative to text origin
267
- */
268
- y: number;
269
- /**
270
- * Width of glyph in font units
271
- */
272
- width: number;
273
- /**
274
- * Height of glyph in font units
275
- */
276
- height: number;
277
- /**
278
- * X offset for glyph positioning
279
- */
280
- xOffset: number;
281
- /**
282
- * Y offset for glyph positioning
283
- */
284
- yOffset: number;
285
- /**
286
- * Atlas texture coordinates (normalized 0-1)
287
- */
288
- atlasX: number;
289
- atlasY: number;
290
- atlasWidth: number;
291
- atlasHeight: number;
292
- }
293
-
294
- /**
295
- * Complete text layout information for caching
296
- */
297
- export interface TextLayout {
298
- /**
299
- * Individual glyph layouts
300
- */
301
- glyphs: GlyphLayout[];
302
- /**
303
- * Total text width
304
- */
305
- width: number;
306
- /**
307
- * Total text height
308
- */
309
- height: number;
310
- /**
311
- * Font scale factor
312
- */
313
- fontScale: number;
314
- /**
315
- * Line height
316
- */
317
- lineHeight: number;
318
- /**
319
- * Font family used
320
- */
321
- fontFamily: string;
322
- /**
323
- * distanceRange used
324
- */
325
- distanceRange: number;
326
- }
327
-
328
- export interface FontLoadOptions {
329
- fontFamily: string;
330
- metrics?: FontMetrics;
331
- // For Canvas/traditional font loading
332
- fontUrl?: string;
333
- // For SDF/atlas-based font loading
334
- atlasUrl?: string;
335
- atlasDataUrl?: string;
336
- }
337
-
338
- export interface FontHandler {
339
- init: (
340
- c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
341
- ) => void;
342
- type: 'canvas' | 'sdf';
343
- isFontLoaded: (fontFamily: string) => boolean;
344
- loadFont: (stage: Stage, options: FontLoadOptions) => Promise<void>;
345
- getFontFamilies: () => FontFamilyMap;
346
- canRenderFont: (trProps: TrProps) => boolean;
347
- getFontMetrics: (
348
- fontFamily: string,
349
- fontSize: number,
350
- ) => NormalizedFontMetrics;
351
- setFontMetrics: (fontFamily: string, metrics: NormalizedFontMetrics) => void;
352
- }
353
-
354
- export interface TextRenderProps {
355
- fontFamily: string;
356
- fontSize: number;
357
- color: number;
358
- offsetY: number;
359
- worldAlpha: number;
360
- globalTransform: Float32Array;
361
- clippingRect: unknown;
362
- width: number;
363
- height: number;
364
- parentHasRenderTexture: boolean;
365
- framebufferDimensions: unknown;
366
- stage: Stage;
367
- }
368
-
369
- export interface TextRenderInfo {
370
- width: number;
371
- height: number;
372
- imageData?: ImageData | null; // Image data for Canvas Text Renderer
373
- layout?: TextLayout; // Layout data for SDF renderer caching
374
- }
375
-
376
- export interface TextRenderer {
377
- type: 'canvas' | 'sdf';
378
- font: FontHandler;
379
- renderText: (stage: Stage, props: CoreTextNodeProps) => TextRenderInfo;
380
- // Updated to accept layout data and return vertex buffer for performance
381
- addQuads: (layout?: TextLayout) => Float32Array | null;
382
- renderQuads: (
383
- renderer: CoreRenderer,
384
- layout: TextLayout,
385
- vertexBuffer: Float32Array,
386
- renderProps: TextRenderProps,
387
- ) => void;
388
- init: (stage: Stage) => void;
389
- }
390
-
391
- /**
392
- * Text line struct for text mapping
393
- * 0 - text
394
- * 1 - width
395
- */
396
- export type TextLineStruct = [string, number];
397
-
398
- /**
399
- * Wrapped lines struct for text mapping
400
- * 0 - line structs
401
- * 1 - remaining lines
402
- * 2 - remaining text
403
- */
404
- export type WrappedLinesStruct = [TextLineStruct[], number, boolean];
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 { CoreTextNodeProps } from '../CoreTextNode.js';
21
+ import type { CoreRenderer } from '../renderers/CoreRenderer.js';
22
+ import type { Stage } from '../Stage.js';
23
+
24
+ // Text baseline and vertical align types
25
+ export type TextBaseline =
26
+ | 'alphabetic'
27
+ | 'hanging'
28
+ | 'middle'
29
+ | 'ideographic'
30
+ | 'bottom';
31
+ export type TextVerticalAlign = 'top' | 'middle' | 'bottom';
32
+ export type TextRenderers = 'canvas' | 'sdf';
33
+ /**
34
+ * Structure mapping font family names to a set of font faces.
35
+ */
36
+ export interface FontFamilyMap {
37
+ [familyName: string]: FontFace;
38
+ }
39
+
40
+ /**
41
+ * Font metrics used for layout and default line height calculations.
42
+ */
43
+ export interface FontMetrics {
44
+ /**
45
+ * The distance, in font units, from the baseline to the highest point of the font.
46
+ */
47
+ ascender: number;
48
+ /**
49
+ * The distance, in font units, from the baseline to the lowest point of the font.
50
+ */
51
+ descender: number;
52
+ /**
53
+ * The additional space used in the calculation of the default line height in font units.
54
+ */
55
+ lineGap: number;
56
+ /**
57
+ * The number of font units per 1 EM.
58
+ */
59
+ unitsPerEm: number;
60
+ }
61
+
62
+ /**
63
+ * Normalized font metrics where values are expressed as a fraction of 1 EM.
64
+ */
65
+ export interface NormalizedFontMetrics {
66
+ /**
67
+ * The distance, as a fraction of 1 EM, from the baseline to the highest point of the font.
68
+ */
69
+ ascender: number;
70
+ /**
71
+ * The distance, as a fraction of 1 EM, from the baseline to the lowest point of the font.
72
+ */
73
+ descender: number;
74
+ /**
75
+ * The additional space used in the calculation of the default line height as a fraction of 1 EM
76
+ */
77
+ lineGap: number;
78
+ }
79
+
80
+ /**
81
+ * Text renderer properties that are used in resolving appropriate font faces
82
+ *
83
+ * @remarks
84
+ * Extended by {@link TrProps}
85
+ */
86
+ export interface TrFontProps {
87
+ /**
88
+ * Font Family
89
+ *
90
+ * @internalRemarks
91
+ * `fontFamily` is defined currently as single string, but in the future we may want to
92
+ * support multiple font family fallbacks, as this is supported by CSS / Canvas2d. We can
93
+ * do this in a backwards compatible way by unioning an array of strings to the
94
+ * `fontFamily` property.
95
+ */
96
+ fontFamily: string;
97
+ /**
98
+ * Font Style
99
+ *
100
+ * @remarks
101
+ * The font style to use when looking up the font face. This can be one of the
102
+ * following strings:
103
+ * - `'normal'`
104
+ * - `'italic'`
105
+ * - `'oblique'`
106
+ */
107
+ fontStyle: 'normal' | 'italic' | 'oblique';
108
+ /**
109
+ * Font Size
110
+ *
111
+ * @remarks
112
+ * The font size to use when looking up the font face.
113
+ *
114
+ * The font size is specified in pixels and is the height of the font's
115
+ * em-square. The em-square is essentially the height of the capital letters
116
+ * for the font. The actual height of the text can be larger than the
117
+ * specified font size, as the font may have ascenders and descenders that
118
+ * extend beyond the em-square.
119
+ *
120
+ * @default 16
121
+ */
122
+ fontSize: number;
123
+ }
124
+
125
+ export interface TrProps extends TrFontProps {
126
+ /**
127
+ * Text to display
128
+ *
129
+ * @default ''
130
+ */
131
+ text: string;
132
+ /**
133
+ * Text alignment
134
+ *
135
+ * @remarks
136
+ * Alignment of the text relative to it's contained bounds. For best results,
137
+ * use {@link contain} mode `'width'` or `'both'` and a set an explicit
138
+ * {@link width} for the text to be aligned within.
139
+ *
140
+ * @default 'left'
141
+ */
142
+ textAlign: 'left' | 'center' | 'right';
143
+ /**
144
+ * Color of text
145
+ *
146
+ * @remarks
147
+ * The color value is a number in the format 0xRRGGBBAA, where RR is the red
148
+ * component, GG is the green component, BB is the blue component, and AA is
149
+ * the alpha component.
150
+ *
151
+ * @default 0xffffffff (opaque white)
152
+ */
153
+ color: number;
154
+ x: number;
155
+ y: number;
156
+
157
+ maxWidth: number;
158
+ maxHeight: number;
159
+ /**
160
+ * Vertical offset for text
161
+ *
162
+ * @remarks
163
+ * The vertical offset of the text.
164
+ *
165
+ * @default 0
166
+ */
167
+ offsetY: number;
168
+ /**
169
+ * Letter spacing for text (in pixels)
170
+ *
171
+ * @remarks
172
+ * This property sets additional (or reduced, if value is negative) spacing
173
+ * between characters in the text.
174
+ *
175
+ * @default 0
176
+ */
177
+ letterSpacing: number;
178
+ /**
179
+ * Line height for text (in pixels)
180
+ *
181
+ * @remarks
182
+ * This property sets the height of each line. If set to `undefined`, the
183
+ * line height will be calculated based on the font and font size to be the
184
+ * minimal height required to completely contain a line of text.
185
+ *
186
+ * See: https://github.com/lightning-js/renderer/issues/170
187
+ *
188
+ * @default `undefined`
189
+ */
190
+ lineHeight: number;
191
+ /**
192
+ * Max lines for text
193
+ *
194
+ * @remarks
195
+ * This property sets max number of lines of a text paragraph.
196
+ * Not yet implemented in the SDF renderer.
197
+ *
198
+ * @default 0
199
+ */
200
+ maxLines: number;
201
+ /**
202
+ * Baseline for text
203
+ *
204
+ * @remarks
205
+ * This property sets the text baseline used when drawing text.
206
+ * Not yet implemented in the SDF renderer.
207
+ *
208
+ * @default alphabetic
209
+ */
210
+ textBaseline: TextBaseline;
211
+ /**
212
+ * Vertical Align for text when lineHeight > fontSize
213
+ *
214
+ * @remarks
215
+ * This property sets the vertical align of the text.
216
+ * Not yet implemented in the SDF renderer.
217
+ *
218
+ * @default middle
219
+ */
220
+ verticalAlign: TextVerticalAlign;
221
+ /**
222
+ * Overflow Suffix for text
223
+ *
224
+ * @remarks
225
+ * The suffix to be added when text is cropped due to overflow.
226
+ * Not yet implemented in the SDF renderer.
227
+ *
228
+ * @default "..."
229
+ */
230
+ overflowSuffix: string;
231
+
232
+ /**
233
+ * Word Break for text
234
+ *
235
+ * @remarks
236
+ * This property sets how words should break when reaching the end of a line.
237
+ *
238
+ * - `'normal'`: Use the default line break rule.
239
+ * - `'break-all'`: To prevent overflow, word breaks should happen between any two characters.
240
+ * - `'break-word'`: To prevent overflow, word breaks should happen between words. If words are too long word breaks happen between any two characters.
241
+ *
242
+ * @default "normal"
243
+ */
244
+ wordBreak: 'normal' | 'break-all' | 'break-word';
245
+
246
+ zIndex: number;
247
+ }
248
+
249
+ /**
250
+ * Glyph layout information for WebGL rendering
251
+ */
252
+ export interface GlyphLayout {
253
+ /**
254
+ * Unicode codepoint
255
+ */
256
+ codepoint: number;
257
+ /**
258
+ * Glyph ID in the font atlas
259
+ */
260
+ glyphId: number;
261
+ /**
262
+ * X position relative to text origin
263
+ */
264
+ x: number;
265
+ /**
266
+ * Y position relative to text origin
267
+ */
268
+ y: number;
269
+ /**
270
+ * Width of glyph in font units
271
+ */
272
+ width: number;
273
+ /**
274
+ * Height of glyph in font units
275
+ */
276
+ height: number;
277
+ /**
278
+ * X offset for glyph positioning
279
+ */
280
+ xOffset: number;
281
+ /**
282
+ * Y offset for glyph positioning
283
+ */
284
+ yOffset: number;
285
+ /**
286
+ * Atlas texture coordinates (normalized 0-1)
287
+ */
288
+ atlasX: number;
289
+ atlasY: number;
290
+ atlasWidth: number;
291
+ atlasHeight: number;
292
+ }
293
+
294
+ /**
295
+ * Complete text layout information for caching
296
+ */
297
+ export interface TextLayout {
298
+ /**
299
+ * Individual glyph layouts
300
+ */
301
+ glyphs: GlyphLayout[];
302
+ /**
303
+ * Total text width
304
+ */
305
+ width: number;
306
+ /**
307
+ * Total text height
308
+ */
309
+ height: number;
310
+ /**
311
+ * Font scale factor
312
+ */
313
+ fontScale: number;
314
+ /**
315
+ * Line height
316
+ */
317
+ lineHeight: number;
318
+ /**
319
+ * Font family used
320
+ */
321
+ fontFamily: string;
322
+ /**
323
+ * distanceRange used
324
+ */
325
+ distanceRange: number;
326
+ }
327
+
328
+ export interface FontLoadOptions {
329
+ fontFamily: string;
330
+ metrics?: FontMetrics;
331
+ // For Canvas/traditional font loading
332
+ fontUrl?: string;
333
+ // For SDF/atlas-based font loading
334
+ atlasUrl?: string;
335
+ atlasDataUrl?: string;
336
+ }
337
+
338
+ export interface FontHandler {
339
+ init: (
340
+ c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
341
+ ) => void;
342
+ type: 'canvas' | 'sdf';
343
+ isFontLoaded: (fontFamily: string) => boolean;
344
+ loadFont: (stage: Stage, options: FontLoadOptions) => Promise<void>;
345
+ waitingForFont: (fontFamily: string, CoreTextNode) => void;
346
+ stopWaitingForFont: (fontFamily: string, CoreTextNode) => void;
347
+ getFontFamilies: () => FontFamilyMap;
348
+ canRenderFont: (trProps: TrProps) => boolean;
349
+ getFontMetrics: (
350
+ fontFamily: string,
351
+ fontSize: number,
352
+ ) => NormalizedFontMetrics;
353
+ setFontMetrics: (fontFamily: string, metrics: NormalizedFontMetrics) => void;
354
+ }
355
+
356
+ export interface TextRenderProps {
357
+ fontFamily: string;
358
+ fontSize: number;
359
+ color: number;
360
+ offsetY: number;
361
+ worldAlpha: number;
362
+ globalTransform: Float32Array;
363
+ clippingRect: unknown;
364
+ width: number;
365
+ height: number;
366
+ parentHasRenderTexture: boolean;
367
+ framebufferDimensions: unknown;
368
+ stage: Stage;
369
+ }
370
+
371
+ export interface TextRenderInfo {
372
+ width: number;
373
+ height: number;
374
+ imageData?: ImageData | null; // Image data for Canvas Text Renderer
375
+ layout?: TextLayout; // Layout data for SDF renderer caching
376
+ }
377
+
378
+ export interface TextRenderer {
379
+ type: 'canvas' | 'sdf';
380
+ font: FontHandler;
381
+ renderText: (stage: Stage, props: CoreTextNodeProps) => TextRenderInfo;
382
+ // Updated to accept layout data and return vertex buffer for performance
383
+ addQuads: (layout?: TextLayout) => Float32Array | null;
384
+ renderQuads: (
385
+ renderer: CoreRenderer,
386
+ layout: TextLayout,
387
+ vertexBuffer: Float32Array,
388
+ renderProps: TextRenderProps,
389
+ ) => void;
390
+ init: (stage: Stage) => void;
391
+ }
392
+
393
+ /**
394
+ * Text line struct for text mapping
395
+ * 0 - text
396
+ * 1 - width
397
+ */
398
+ export type TextLineStruct = [string, number];
399
+
400
+ /**
401
+ * Wrapped lines struct for text mapping
402
+ * 0 - line structs
403
+ * 1 - remaining lines
404
+ * 2 - remaining text
405
+ */
406
+ export type WrappedLinesStruct = [TextLineStruct[], number, boolean];