@lightningjs/renderer 3.0.0-beta1 → 3.0.0-beta11

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 (490) hide show
  1. package/README.md +13 -27
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +1 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/core/CoreNode.d.ts +45 -69
  15. package/dist/src/core/CoreNode.js +323 -305
  16. package/dist/src/core/CoreNode.js.map +1 -1
  17. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  18. package/dist/src/core/CoreShaderManager.js.map +1 -1
  19. package/dist/src/core/CoreTextNode.d.ts +61 -87
  20. package/dist/src/core/CoreTextNode.js +276 -235
  21. package/dist/src/core/CoreTextNode.js.map +1 -1
  22. package/dist/src/core/CoreTextureManager.d.ts +9 -11
  23. package/dist/src/core/CoreTextureManager.js +80 -91
  24. package/dist/src/core/CoreTextureManager.js.map +1 -1
  25. package/dist/src/core/Stage.d.ts +75 -31
  26. package/dist/src/core/Stage.js +270 -136
  27. package/dist/src/core/Stage.js.map +1 -1
  28. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  29. package/dist/src/core/TextureMemoryManager.js +112 -78
  30. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  31. package/dist/src/core/animations/CoreAnimation.js +5 -0
  32. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  34. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  35. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.js +3 -2
  37. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  38. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  39. package/dist/src/core/lib/RenderCoords.js +43 -55
  40. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  41. package/dist/src/core/lib/WebGlContextWrapper.d.ts +51 -2
  42. package/dist/src/core/lib/WebGlContextWrapper.js +92 -22
  43. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  44. package/dist/src/core/lib/colorCache.d.ts +1 -0
  45. package/dist/src/core/lib/colorCache.js +19 -0
  46. package/dist/src/core/lib/colorCache.js.map +1 -0
  47. package/dist/src/core/lib/colorParser.d.ts +21 -0
  48. package/dist/src/core/lib/colorParser.js +72 -0
  49. package/dist/src/core/lib/colorParser.js.map +1 -0
  50. package/dist/src/core/lib/utils.d.ts +3 -0
  51. package/dist/src/core/lib/utils.js +42 -0
  52. package/dist/src/core/lib/utils.js.map +1 -1
  53. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  54. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  55. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  56. package/dist/src/core/platform.js +29 -4
  57. package/dist/src/core/platform.js.map +1 -1
  58. package/dist/src/core/platforms/Platform.d.ts +37 -0
  59. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  60. package/dist/src/core/platforms/Platform.js.map +1 -0
  61. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  62. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  63. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  64. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -1
  65. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -2
  66. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  67. package/dist/src/core/renderers/CoreShaderNode.d.ts +3 -3
  68. package/dist/src/core/renderers/CoreShaderNode.js +8 -2
  69. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  70. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -1
  71. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +7 -6
  72. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  74. package/dist/src/core/renderers/canvas/CanvasRenderer.js +10 -21
  75. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  76. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  77. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  78. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +2 -2
  79. package/dist/src/core/renderers/canvas/CanvasTexture.js +11 -9
  80. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  81. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  82. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  83. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  84. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  85. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  86. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  88. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  89. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +5 -6
  90. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +30 -18
  91. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  92. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +5 -2
  93. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  94. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +3 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +3 -0
  97. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  98. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +5 -6
  99. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +30 -21
  100. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  101. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +10 -2
  102. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +37 -19
  103. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  105. package/dist/src/core/renderers/webgl/WebGlRenderer.js +144 -117
  106. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -1
  108. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  109. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -3
  111. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +55 -31
  112. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  113. package/dist/src/core/shaders/canvas/Border.js +1 -1
  114. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  115. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  116. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  117. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  118. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  120. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  125. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  126. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  127. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  128. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  129. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  130. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  131. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  132. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  133. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  134. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  135. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  136. package/dist/src/core/shaders/utils.d.ts +5 -0
  137. package/dist/src/core/shaders/utils.js +41 -0
  138. package/dist/src/core/shaders/utils.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Border.js +57 -34
  140. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  141. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  142. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  143. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  144. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  145. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  146. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  147. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +79 -36
  148. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  149. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +92 -42
  150. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  151. package/dist/src/core/shaders/webgl/SdfShader.js +1 -1
  152. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  153. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  154. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  155. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +41 -0
  156. package/dist/src/core/text-rendering/CanvasFontHandler.js +159 -0
  157. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  158. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +22 -0
  159. package/dist/src/core/text-rendering/CanvasTextRenderer.js +366 -0
  160. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  161. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +152 -0
  162. package/dist/src/core/text-rendering/SdfFontHandler.js +368 -0
  163. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  164. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  165. package/dist/src/core/text-rendering/SdfTextRenderer.js +355 -0
  166. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  167. package/dist/src/core/text-rendering/TextRenderer.d.ts +351 -0
  168. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  169. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  170. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  171. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  172. package/dist/src/core/text-rendering/Utils.js +212 -0
  173. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  175. package/dist/src/{main-api/texture-usage-trackers/TextureUsageTracker.js → core/text-rendering/canvas/Settings.js} +3 -11
  176. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  177. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  178. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  179. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  180. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  181. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  182. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  183. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  184. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  185. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  188. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  189. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +30 -34
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  193. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  194. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  195. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  196. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  197. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  198. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  199. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  200. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  201. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  202. package/dist/src/core/text-rendering/sdf/Utils.js +304 -0
  203. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  204. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  205. package/dist/src/core/{CoreExtension.js → text-rendering/sdf/index.js} +3 -12
  206. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  207. package/dist/src/core/textures/ImageTexture.d.ts +4 -3
  208. package/dist/src/core/textures/ImageTexture.js +36 -9
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +21 -2
  211. package/dist/src/core/textures/Texture.js +37 -6
  212. package/dist/src/core/textures/Texture.js.map +1 -1
  213. package/dist/src/core/utils.d.ts +1 -1
  214. package/dist/src/main-api/INode.d.ts +2 -2
  215. package/dist/src/main-api/Inspector.d.ts +6 -1
  216. package/dist/src/main-api/Inspector.js +43 -7
  217. package/dist/src/main-api/Inspector.js.map +1 -1
  218. package/dist/src/main-api/Renderer.d.ts +122 -46
  219. package/dist/src/main-api/Renderer.js +174 -37
  220. package/dist/src/main-api/Renderer.js.map +1 -1
  221. package/dist/src/utils.d.ts +1 -6
  222. package/dist/src/utils.js +2 -9
  223. package/dist/src/utils.js.map +1 -1
  224. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  225. package/exports/canvas.ts +1 -1
  226. package/exports/index.ts +1 -8
  227. package/exports/utils.ts +7 -1
  228. package/exports/webgl.ts +3 -1
  229. package/package.json +2 -3
  230. package/src/core/CoreNode.test.ts +0 -1
  231. package/src/core/CoreNode.ts +403 -388
  232. package/src/core/CoreShaderManager.ts +5 -10
  233. package/src/core/CoreTextNode.ts +337 -302
  234. package/src/core/CoreTextureManager.ts +78 -110
  235. package/src/core/Stage.ts +344 -178
  236. package/src/core/TextureMemoryManager.ts +150 -100
  237. package/src/core/animations/CoreAnimation.ts +7 -0
  238. package/src/core/animations/CoreAnimationController.ts +13 -4
  239. package/src/core/lib/ImageWorker.ts +9 -2
  240. package/src/core/lib/RenderCoords.ts +52 -67
  241. package/src/core/lib/WebGlContextWrapper.ts +125 -68
  242. package/src/core/lib/colorCache.ts +20 -0
  243. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  244. package/src/core/lib/utils.ts +51 -0
  245. package/src/core/lib/validateImageBitmap.ts +17 -6
  246. package/src/core/platforms/Platform.ts +77 -0
  247. package/src/core/platforms/web/WebPlatform.ts +121 -0
  248. package/src/core/renderers/CoreContextTexture.ts +1 -1
  249. package/src/core/renderers/CoreRenderer.ts +5 -2
  250. package/src/core/renderers/CoreShaderNode.ts +10 -6
  251. package/src/core/renderers/canvas/CanvasRenderer.ts +12 -28
  252. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  253. package/src/core/renderers/canvas/CanvasTexture.ts +17 -14
  254. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +5 -0
  255. package/src/core/renderers/webgl/WebGlCtxTexture.ts +52 -43
  256. package/src/core/renderers/webgl/WebGlRenderOp.ts +46 -24
  257. package/src/core/renderers/webgl/WebGlRenderer.ts +177 -145
  258. package/src/core/renderers/webgl/WebGlShaderNode.ts +7 -5
  259. package/src/core/renderers/webgl/WebGlShaderProgram.ts +68 -37
  260. package/src/core/shaders/canvas/Border.ts +1 -4
  261. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  262. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  263. package/src/core/shaders/canvas/RoundedWithBorder.ts +17 -11
  264. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  265. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  266. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  267. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  268. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  269. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  270. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  271. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  272. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  273. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  274. package/src/core/shaders/webgl/Border.ts +57 -37
  275. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  276. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  277. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  278. package/src/core/shaders/webgl/RoundedWithBorder.ts +80 -39
  279. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +92 -50
  280. package/src/core/shaders/webgl/SdfShader.ts +1 -4
  281. package/src/core/text-rendering/CanvasFontHandler.ts +210 -0
  282. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -0
  283. package/src/core/text-rendering/SdfFontHandler.ts +554 -0
  284. package/src/core/text-rendering/SdfTextRenderer.ts +466 -0
  285. package/src/core/text-rendering/TextRenderer.ts +406 -0
  286. package/src/core/text-rendering/{TextTextureRendererUtils.ts → Utils.ts} +5 -11
  287. package/src/core/text-rendering/canvas/Settings.ts +99 -0
  288. package/src/core/text-rendering/canvas/Utils.test.ts +206 -0
  289. package/src/core/text-rendering/canvas/Utils.ts +178 -0
  290. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -0
  291. package/src/core/text-rendering/canvas/draw.ts +165 -0
  292. package/src/core/text-rendering/sdf/Utils.test.ts +402 -0
  293. package/src/core/text-rendering/sdf/Utils.ts +436 -0
  294. package/src/core/text-rendering/sdf/index.ts +20 -0
  295. package/src/core/textures/ImageTexture.ts +69 -27
  296. package/src/core/textures/Texture.ts +50 -6
  297. package/src/main-api/INode.ts +4 -3
  298. package/src/main-api/Inspector.ts +53 -8
  299. package/src/main-api/Renderer.ts +311 -87
  300. package/src/utils.ts +10 -10
  301. package/dist/exports/core-api.d.ts +0 -74
  302. package/dist/exports/core-api.js +0 -96
  303. package/dist/exports/core-api.js.map +0 -1
  304. package/dist/exports/main-api.d.ts +0 -30
  305. package/dist/exports/main-api.js +0 -45
  306. package/dist/exports/main-api.js.map +0 -1
  307. package/dist/src/core/CoreExtension.d.ts +0 -12
  308. package/dist/src/core/CoreExtension.js.map +0 -1
  309. package/dist/src/core/CoreStuff.js +0 -138
  310. package/dist/src/core/CoreStuff.js.map +0 -1
  311. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  312. package/dist/src/core/CoreTexturizer.js +0 -47
  313. package/dist/src/core/CoreTexturizer.js.map +0 -1
  314. package/dist/src/core/LngNode.d.ts +0 -736
  315. package/dist/src/core/LngNode.js +0 -1174
  316. package/dist/src/core/LngNode.js.map +0 -1
  317. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  318. package/dist/src/core/Matrix2DContext.js +0 -45
  319. package/dist/src/core/Matrix2DContext.js.map +0 -1
  320. package/dist/src/core/ShaderNode.d.ts +0 -10
  321. package/dist/src/core/ShaderNode.js +0 -30
  322. package/dist/src/core/ShaderNode.js.map +0 -1
  323. package/dist/src/core/TextNode.d.ts +0 -103
  324. package/dist/src/core/TextNode.js +0 -331
  325. package/dist/src/core/TextNode.js.map +0 -1
  326. package/dist/src/core/lib/Coords.d.ts +0 -14
  327. package/dist/src/core/lib/Coords.js +0 -55
  328. package/dist/src/core/lib/Coords.js.map +0 -1
  329. package/dist/src/core/lib/glm/common.d.ts +0 -162
  330. package/dist/src/core/lib/glm/common.js +0 -81
  331. package/dist/src/core/lib/glm/common.js.map +0 -1
  332. package/dist/src/core/lib/glm/index.d.ts +0 -11
  333. package/dist/src/core/lib/glm/index.js +0 -30
  334. package/dist/src/core/lib/glm/index.js.map +0 -1
  335. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  336. package/dist/src/core/lib/glm/mat2.js +0 -396
  337. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  338. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  339. package/dist/src/core/lib/glm/mat2d.js +0 -442
  340. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  341. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  342. package/dist/src/core/lib/glm/mat3.js +0 -680
  343. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  344. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  345. package/dist/src/core/lib/glm/mat4.js +0 -1802
  346. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  347. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  348. package/dist/src/core/lib/glm/quat.js +0 -693
  349. package/dist/src/core/lib/glm/quat.js.map +0 -1
  350. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  351. package/dist/src/core/lib/glm/quat2.js +0 -754
  352. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  353. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  354. package/dist/src/core/lib/glm/vec2.js +0 -569
  355. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  356. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  357. package/dist/src/core/lib/glm/vec3.js +0 -720
  358. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  359. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  360. package/dist/src/core/lib/glm/vec4.js +0 -608
  361. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  362. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  363. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  364. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  365. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  366. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  367. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  368. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  369. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  370. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  371. package/dist/src/core/scene/Scene.d.ts +0 -59
  372. package/dist/src/core/scene/Scene.js +0 -106
  373. package/dist/src/core/scene/Scene.js.map +0 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  377. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  378. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  379. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  380. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  381. package/dist/src/main-api/IShaderController.d.ts +0 -14
  382. package/dist/src/main-api/IShaderController.js +0 -30
  383. package/dist/src/main-api/IShaderController.js.map +0 -1
  384. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  385. package/dist/src/main-api/IShaderNode.js +0 -19
  386. package/dist/src/main-api/IShaderNode.js.map +0 -1
  387. package/dist/src/main-api/RendererMain.d.ts +0 -375
  388. package/dist/src/main-api/RendererMain.js +0 -365
  389. package/dist/src/main-api/RendererMain.js.map +0 -1
  390. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  391. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  392. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  393. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  394. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  395. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  396. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  397. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  398. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  399. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  400. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  401. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  402. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  403. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  404. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  405. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  406. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  407. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  408. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  409. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  410. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  411. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  412. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  413. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  414. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  415. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  416. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  417. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  418. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  419. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  420. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  421. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  422. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  423. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  424. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  425. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  426. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  427. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  428. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  429. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  430. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  431. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  432. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  433. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  434. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  435. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  436. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  437. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  438. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  439. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  440. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  441. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  442. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  443. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  444. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  445. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  446. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  447. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  448. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  449. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  450. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  451. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  452. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  453. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  454. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  455. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  456. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  457. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  458. package/dist/src/render-drivers/utils.d.ts +0 -12
  459. package/dist/src/render-drivers/utils.js +0 -69
  460. package/dist/src/render-drivers/utils.js.map +0 -1
  461. package/scripts/please-use-pnpm.js +0 -13
  462. package/src/core/platform.ts +0 -64
  463. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  464. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  465. package/src/core/text-rendering/TrFontManager.ts +0 -183
  466. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  467. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  468. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  469. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  470. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  471. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  472. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  473. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  474. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  475. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  476. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  477. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  478. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  479. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  480. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  481. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  489. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  490. /package/dist/src/core/{CoreStuff.d.ts → shaders/webgl/Spinner.d.ts} +0 -0
@@ -0,0 +1,622 @@
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 { assertTruthy } from '../../utils.js';
21
+ import type { Stage } from '../Stage.js';
22
+ import type {
23
+ TextLayout,
24
+ NormalizedFontMetrics,
25
+ TextBaseline,
26
+ } from './TextRenderer.js';
27
+ import * as CanvasFontHandler from './CanvasFontHandler.js';
28
+ import { type LineType } from './canvas/calculateRenderInfo.js';
29
+ import { calcHeight, measureText, wrapText, wrapWord } from './canvas/Utils.js';
30
+ import { normalizeCanvasColor } from '../lib/colorCache.js';
31
+ import type { CoreTextNodeProps } from '../CoreTextNode.js';
32
+ import { isZeroWidthSpace } from './Utils.js';
33
+
34
+ const MAX_TEXTURE_DIMENSION = 4096;
35
+
36
+ const type = 'canvas' as const;
37
+
38
+ let canvas: HTMLCanvasElement | OffscreenCanvas | null = null;
39
+ let context:
40
+ | CanvasRenderingContext2D
41
+ | OffscreenCanvasRenderingContext2D
42
+ | null = null;
43
+
44
+ // Separate canvas and context for text measurements
45
+ let measureCanvas: HTMLCanvasElement | OffscreenCanvas | null = null;
46
+ let measureContext:
47
+ | CanvasRenderingContext2D
48
+ | OffscreenCanvasRenderingContext2D
49
+ | null = null;
50
+
51
+ // Cache for text layout calculations
52
+ const layoutCache = new Map<
53
+ string,
54
+ {
55
+ lines: string[];
56
+ lineWidths: number[];
57
+ maxLineWidth: number;
58
+ remainingText: string;
59
+ moreTextLines: boolean;
60
+ }
61
+ >();
62
+
63
+ // Initialize the Text Renderer
64
+ const init = (stage: Stage): void => {
65
+ // Drawing canvas and context
66
+ canvas = stage.platform.createCanvas() as HTMLCanvasElement | OffscreenCanvas;
67
+ context = canvas.getContext('2d', { willReadFrequently: true }) as
68
+ | CanvasRenderingContext2D
69
+ | OffscreenCanvasRenderingContext2D;
70
+
71
+ // Separate measuring canvas and context
72
+ measureCanvas = stage.platform.createCanvas() as
73
+ | HTMLCanvasElement
74
+ | OffscreenCanvas;
75
+ measureContext = measureCanvas.getContext('2d') as
76
+ | CanvasRenderingContext2D
77
+ | OffscreenCanvasRenderingContext2D;
78
+
79
+ // Set up a minimal size for the measuring canvas since we only use it for measurements
80
+ measureCanvas.width = 1;
81
+ measureCanvas.height = 1;
82
+
83
+ CanvasFontHandler.init(context);
84
+ };
85
+
86
+ /**
87
+ * Canvas text renderer
88
+ *
89
+ * @param stage - Stage instance for font resolution
90
+ * @param props - Text rendering properties
91
+ * @returns Object containing ImageData and dimensions
92
+ */
93
+ const renderText = (
94
+ stage: Stage,
95
+ props: CoreTextNodeProps,
96
+ ): {
97
+ imageData: ImageData | null;
98
+ width: number;
99
+ height: number;
100
+ layout?: TextLayout;
101
+ } => {
102
+ assertTruthy(canvas, 'Canvas is not initialized');
103
+ assertTruthy(context, 'Canvas context is not available');
104
+
105
+ // Extract already normalized properties
106
+ const {
107
+ text,
108
+ fontFamily,
109
+ fontStyle,
110
+ fontSize,
111
+ textAlign,
112
+ lineHeight: propLineHeight,
113
+ maxLines,
114
+ textBaseline,
115
+ verticalAlign,
116
+ overflowSuffix,
117
+ maxWidth,
118
+ maxHeight,
119
+ offsetY,
120
+ letterSpacing,
121
+ } = props;
122
+
123
+ // Performance optimization constants
124
+ const precision = 1;
125
+ const paddingLeft = 0;
126
+ const paddingRight = 0;
127
+ const textIndent = 0;
128
+ const textRenderIssueMargin = 0;
129
+ const textColor = 0xffffffff;
130
+
131
+ // Determine word wrap behavior
132
+ const wordWrap = maxWidth > 0;
133
+ const textOverflow = overflowSuffix ? 'ellipsis' : null;
134
+
135
+ // Calculate scaled values
136
+ const scaledFontSize = fontSize * precision;
137
+ const scaledOffsetY = offsetY * precision;
138
+ const scaledLetterSpacing = letterSpacing * precision;
139
+ // Get font metrics and calculate line height
140
+ context.font = `${fontStyle} ${scaledFontSize}px ${fontFamily}`;
141
+ context.textBaseline = textBaseline;
142
+
143
+ const metrics = CanvasFontHandler.getFontMetrics(fontFamily, scaledFontSize);
144
+ const lineHeight =
145
+ propLineHeight === 0
146
+ ? scaledFontSize *
147
+ (metrics.ascender - metrics.descender + metrics.lineGap) *
148
+ precision
149
+ : propLineHeight;
150
+
151
+ // Calculate max lines constraint
152
+ const containedMaxLines =
153
+ maxHeight !== null ? Math.floor(maxHeight / lineHeight) : 0;
154
+ const computedMaxLines = calculateMaxLines(containedMaxLines, maxLines);
155
+
156
+ // Calculate initial width and inner width
157
+ let width = maxWidth || 2048 / precision;
158
+ let innerWidth = width - paddingLeft;
159
+ if (innerWidth < 10) {
160
+ width += 10 - innerWidth;
161
+ innerWidth = 10;
162
+ }
163
+ const finalWordWrapWidth = maxWidth === 0 ? innerWidth : maxWidth;
164
+
165
+ // Calculate text layout using cached helper function
166
+ const layout = calculateTextLayout(
167
+ text,
168
+ fontFamily,
169
+ scaledFontSize,
170
+ fontStyle,
171
+ wordWrap,
172
+ finalWordWrapWidth,
173
+ scaledLetterSpacing,
174
+ textIndent,
175
+ computedMaxLines,
176
+ overflowSuffix,
177
+ textOverflow,
178
+ );
179
+
180
+ // Calculate final dimensions
181
+ const dimensions = calculateTextDimensions(
182
+ layout,
183
+ paddingLeft,
184
+ paddingRight,
185
+ textBaseline,
186
+ scaledFontSize,
187
+ lineHeight,
188
+ scaledOffsetY,
189
+ maxWidth,
190
+ maxHeight,
191
+ wordWrap,
192
+ textAlign,
193
+ );
194
+
195
+ // Set up canvas dimensions
196
+ canvas.width = Math.min(
197
+ Math.ceil(dimensions.width + textRenderIssueMargin),
198
+ MAX_TEXTURE_DIMENSION,
199
+ );
200
+ canvas.height = Math.min(Math.ceil(dimensions.height), MAX_TEXTURE_DIMENSION);
201
+
202
+ // Reset font context after canvas resize
203
+ context.font = `${fontStyle} ${scaledFontSize}px ${fontFamily}`;
204
+ context.textBaseline = textBaseline;
205
+
206
+ // Performance optimization for large fonts
207
+ if (scaledFontSize >= 128) {
208
+ context.globalAlpha = 0.01;
209
+ context.fillRect(0, 0, 0.01, 0.01);
210
+ context.globalAlpha = 1.0;
211
+ }
212
+
213
+ // Calculate drawing positions
214
+ const drawLines = calculateDrawPositions(
215
+ layout.lines,
216
+ layout.lineWidths,
217
+ textAlign,
218
+ verticalAlign,
219
+ innerWidth,
220
+ paddingLeft,
221
+ textIndent,
222
+ lineHeight,
223
+ metrics,
224
+ scaledFontSize,
225
+ );
226
+
227
+ // Render text to canvas
228
+ renderTextToCanvas(
229
+ context,
230
+ drawLines,
231
+ scaledLetterSpacing,
232
+ textColor,
233
+ fontStyle,
234
+ scaledFontSize,
235
+ fontFamily,
236
+ );
237
+
238
+ width = dimensions.width;
239
+ const height = lineHeight * layout.lines.length;
240
+ // Extract image data
241
+ let imageData: ImageData | null = null;
242
+ if (canvas.width > 0 && canvas.height > 0) {
243
+ imageData = context.getImageData(0, 0, width, height);
244
+ }
245
+
246
+ return {
247
+ imageData,
248
+ width,
249
+ height,
250
+ };
251
+ };
252
+
253
+ /**
254
+ * Calculate the effective max lines constraint
255
+ */
256
+ function calculateMaxLines(
257
+ containedMaxLines: number,
258
+ maxLines: number,
259
+ ): number {
260
+ if (containedMaxLines > 0 && maxLines > 0) {
261
+ return containedMaxLines < maxLines ? containedMaxLines : maxLines;
262
+ } else {
263
+ return containedMaxLines > maxLines ? containedMaxLines : maxLines;
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Generate a cache key for text layout calculations
269
+ */
270
+ function generateLayoutCacheKey(
271
+ text: string,
272
+ fontFamily: string,
273
+ fontSize: number,
274
+ fontStyle: string,
275
+ wordWrap: boolean,
276
+ wordWrapWidth: number,
277
+ letterSpacing: number,
278
+ maxLines: number,
279
+ overflowSuffix: string,
280
+ ): string {
281
+ return `${text}-${fontFamily}-${fontSize}-${fontStyle}-${wordWrap}-${wordWrapWidth}-${letterSpacing}-${maxLines}-${overflowSuffix}`;
282
+ }
283
+
284
+ /**
285
+ * Calculate text dimensions and wrapping
286
+ */
287
+ function calculateTextLayout(
288
+ text: string,
289
+ fontFamily: string,
290
+ fontSize: number,
291
+ fontStyle: string,
292
+ wordWrap: boolean,
293
+ wordWrapWidth: number,
294
+ letterSpacing: number,
295
+ textIndent: number,
296
+ maxLines: number,
297
+ overflowSuffix: string,
298
+ textOverflow: string | null,
299
+ ): {
300
+ lines: string[];
301
+ lineWidths: number[];
302
+ maxLineWidth: number;
303
+ remainingText: string;
304
+ moreTextLines: boolean;
305
+ } {
306
+ assertTruthy(measureContext, 'Measure context is not available');
307
+
308
+ // Check cache first
309
+ const cacheKey = generateLayoutCacheKey(
310
+ text,
311
+ fontFamily,
312
+ fontSize,
313
+ fontStyle,
314
+ wordWrap,
315
+ wordWrapWidth,
316
+ letterSpacing,
317
+ maxLines,
318
+ overflowSuffix,
319
+ );
320
+
321
+ const cached = layoutCache.get(cacheKey);
322
+ if (cached) {
323
+ return cached;
324
+ }
325
+
326
+ // Set font context for measurements on the dedicated measuring context
327
+ measureContext.font = `${fontStyle} ${fontSize}px ${fontFamily}`;
328
+
329
+ // Handle text overflow for non-wrapped text
330
+ let processedText = text;
331
+ if (textOverflow !== null && wordWrap === false) {
332
+ let suffix: string;
333
+ if (textOverflow === 'clip') {
334
+ suffix = '';
335
+ } else if (textOverflow === 'ellipsis') {
336
+ suffix = overflowSuffix;
337
+ } else {
338
+ suffix = textOverflow;
339
+ }
340
+ processedText = wrapWord(
341
+ measureContext,
342
+ text,
343
+ wordWrapWidth - textIndent,
344
+ suffix,
345
+ letterSpacing,
346
+ );
347
+ }
348
+
349
+ // Word wrap
350
+ let linesInfo: { n: number[]; l: string[] };
351
+ if (wordWrap === true) {
352
+ linesInfo = wrapText(
353
+ measureContext,
354
+ processedText,
355
+ wordWrapWidth,
356
+ letterSpacing,
357
+ textIndent,
358
+ );
359
+ } else {
360
+ linesInfo = { l: processedText.split(/(?:\r\n|\r|\n)/), n: [] };
361
+ const n = linesInfo.l.length;
362
+ for (let i = 0; i < n - 1; i++) {
363
+ linesInfo.n.push(i);
364
+ }
365
+ }
366
+ let lines: string[] = linesInfo.l;
367
+
368
+ let remainingText = '';
369
+ let moreTextLines = false;
370
+
371
+ // Handle max lines constraint
372
+ if (maxLines > 0 && lines.length > maxLines) {
373
+ const usedLines = lines.slice(0, maxLines);
374
+ let otherLines: string[] = [];
375
+ if (overflowSuffix.length > 0) {
376
+ const w = measureText(measureContext, overflowSuffix, letterSpacing);
377
+ const al = wrapText(
378
+ measureContext,
379
+ usedLines[usedLines.length - 1] || '',
380
+ wordWrapWidth - w,
381
+ letterSpacing,
382
+ textIndent,
383
+ );
384
+ usedLines[usedLines.length - 1] = `${al.l[0] || ''}${overflowSuffix}`;
385
+ otherLines = [al.l.length > 1 ? al.l[1] || '' : ''];
386
+ } else {
387
+ otherLines = [''];
388
+ }
389
+
390
+ // Re-assemble the remaining text
391
+ let i: number;
392
+ const n = lines.length;
393
+ let j = 0;
394
+ const m = linesInfo.n.length;
395
+ for (i = maxLines; i < n; i++) {
396
+ otherLines[j] += `${otherLines[j] ? ' ' : ''}${lines[i] ?? ''}`;
397
+ if (i + 1 < m && linesInfo.n[i + 1] !== undefined) {
398
+ j++;
399
+ }
400
+ }
401
+ remainingText = otherLines.join('\n');
402
+ moreTextLines = true;
403
+ lines = usedLines;
404
+ }
405
+
406
+ // Calculate line widths using the dedicated measuring context
407
+ let maxLineWidth = 0;
408
+ const lineWidths: number[] = [];
409
+ for (let i = 0; i < lines.length; i++) {
410
+ const lineWidth =
411
+ measureText(measureContext, lines[i] || '', letterSpacing) +
412
+ (i === 0 ? textIndent : 0);
413
+ lineWidths.push(lineWidth);
414
+ maxLineWidth = Math.max(maxLineWidth, lineWidth);
415
+ }
416
+
417
+ const result = {
418
+ lines,
419
+ lineWidths,
420
+ maxLineWidth,
421
+ remainingText,
422
+ moreTextLines,
423
+ };
424
+
425
+ // Cache the result
426
+ layoutCache.set(cacheKey, result);
427
+
428
+ return result;
429
+ }
430
+
431
+ /**
432
+ * Calculate text dimensions based on layout
433
+ */
434
+ function calculateTextDimensions(
435
+ layout: {
436
+ lines: string[];
437
+ lineWidths: number[];
438
+ maxLineWidth: number;
439
+ },
440
+ paddingLeft: number,
441
+ paddingRight: number,
442
+ textBaseline: TextBaseline,
443
+ fontSize: number,
444
+ lineHeight: number,
445
+ offsetY: number,
446
+ initialWidth: number,
447
+ initialHeight: number,
448
+ wordWrap: boolean,
449
+ textAlign: string,
450
+ ): { width: number; height: number } {
451
+ let width = initialWidth;
452
+ let height = initialHeight;
453
+
454
+ // Calculate width
455
+ if (initialWidth === 0) {
456
+ width = layout.maxLineWidth + paddingLeft + paddingRight;
457
+ }
458
+
459
+ // Adjust width for single-line left-aligned wrapped text
460
+ if (
461
+ wordWrap === true &&
462
+ width > layout.maxLineWidth &&
463
+ textAlign === 'left' &&
464
+ layout.lines.length === 1
465
+ ) {
466
+ width = layout.maxLineWidth + paddingLeft + paddingRight;
467
+ }
468
+
469
+ // Calculate height if not provided
470
+ if (height === 0) {
471
+ height = calcHeight(
472
+ textBaseline,
473
+ fontSize,
474
+ lineHeight,
475
+ layout.lines.length,
476
+ offsetY,
477
+ );
478
+ }
479
+
480
+ return { width, height };
481
+ }
482
+
483
+ /**
484
+ * Calculate drawing positions for text lines
485
+ */
486
+ function calculateDrawPositions(
487
+ lines: string[],
488
+ lineWidths: number[],
489
+ textAlign: string,
490
+ verticalAlign: string,
491
+ innerWidth: number,
492
+ paddingLeft: number,
493
+ textIndent: number,
494
+ lineHeight: number,
495
+ metrics: NormalizedFontMetrics,
496
+ fontSize: number,
497
+ ): LineType[] {
498
+ const drawLines: LineType[] = [];
499
+ const ascenderPx = metrics.ascender * fontSize;
500
+ const bareLineHeightPx = (metrics.ascender - metrics.descender) * fontSize;
501
+
502
+ for (let i = 0, n = lines.length; i < n; i++) {
503
+ let linePositionX = i === 0 ? textIndent : 0;
504
+ let linePositionY = i * lineHeight + ascenderPx;
505
+
506
+ // Vertical alignment
507
+ if (verticalAlign == 'middle') {
508
+ linePositionY += (lineHeight - bareLineHeightPx) / 2;
509
+ } else if (verticalAlign == 'bottom') {
510
+ linePositionY += lineHeight - bareLineHeightPx;
511
+ }
512
+
513
+ // Horizontal alignment
514
+ const lineWidth = lineWidths[i];
515
+ if (lineWidth !== undefined) {
516
+ if (textAlign === 'right') {
517
+ linePositionX += innerWidth - lineWidth;
518
+ } else if (textAlign === 'center') {
519
+ linePositionX += (innerWidth - lineWidth) / 2;
520
+ }
521
+ }
522
+
523
+ linePositionX += paddingLeft;
524
+
525
+ const lineText = lines[i];
526
+ if (lineText !== undefined) {
527
+ drawLines.push({
528
+ text: lineText,
529
+ x: linePositionX,
530
+ y: linePositionY,
531
+ w: lineWidth || 0,
532
+ });
533
+ }
534
+ }
535
+
536
+ return drawLines;
537
+ }
538
+
539
+ /**
540
+ * Render text lines to canvas
541
+ */
542
+ function renderTextToCanvas(
543
+ context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
544
+ drawLines: LineType[],
545
+ letterSpacing: number,
546
+ textColor: number,
547
+ fontStyle: string,
548
+ fontSize: number,
549
+ fontFamily: string,
550
+ ): void {
551
+ assertTruthy(measureContext, 'Measure context is not available');
552
+
553
+ context.fillStyle = normalizeCanvasColor(textColor);
554
+
555
+ // Sync font settings to measure context if we need to use it for letter spacing
556
+ if (letterSpacing > 0) {
557
+ measureContext.font = `${fontStyle} ${fontSize}px ${fontFamily}`;
558
+ }
559
+
560
+ for (let i = 0, n = drawLines.length; i < n; i++) {
561
+ const drawLine = drawLines[i];
562
+ if (drawLine) {
563
+ if (letterSpacing === 0) {
564
+ context.fillText(drawLine.text, drawLine.x, drawLine.y);
565
+ } else {
566
+ const textSplit = drawLine.text.split('');
567
+ let x = drawLine.x;
568
+ for (let j = 0, k = textSplit.length; j < k; j++) {
569
+ const char = textSplit[j];
570
+ if (char) {
571
+ // Skip zero-width spaces for rendering but keep them in the text flow
572
+ if (isZeroWidthSpace(char)) {
573
+ continue;
574
+ }
575
+ context.fillText(char, x, drawLine.y);
576
+ // Use the dedicated measuring context for letter spacing calculations
577
+ x += measureText(measureContext, char, letterSpacing);
578
+ }
579
+ }
580
+ }
581
+ }
582
+ }
583
+ }
584
+
585
+ /**
586
+ * Clear layout cache for memory management
587
+ */
588
+ const clearLayoutCache = (): void => {
589
+ layoutCache.clear();
590
+ };
591
+
592
+ /**
593
+ * Add quads for rendering (Canvas doesn't use quads)
594
+ */
595
+ const addQuads = (): Float32Array | null => {
596
+ // Canvas renderer doesn't use quad-based rendering
597
+ // Return null for interface compatibility
598
+ return null;
599
+ };
600
+
601
+ /**
602
+ * Render quads for Canvas renderer (Canvas doesn't use quad-based rendering)
603
+ */
604
+ const renderQuads = (): void => {
605
+ // Canvas renderer doesn't use quad-based rendering
606
+ // This method is for interface compatibility only
607
+ };
608
+
609
+ /**
610
+ * Canvas Text Renderer - implements TextRenderer interface
611
+ */
612
+ const CanvasTextRenderer = {
613
+ type,
614
+ font: CanvasFontHandler,
615
+ renderText,
616
+ addQuads,
617
+ renderQuads,
618
+ init,
619
+ clearLayoutCache,
620
+ };
621
+
622
+ export default CanvasTextRenderer;