@lightningjs/renderer 3.0.0-beta9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/AutosizeManager.d.ts +29 -0
  18. package/dist/src/core/AutosizeManager.js +169 -0
  19. package/dist/src/core/AutosizeManager.js.map +1 -0
  20. package/dist/src/core/Autosizer.d.ts +35 -0
  21. package/dist/src/core/Autosizer.js +196 -0
  22. package/dist/src/core/Autosizer.js.map +1 -0
  23. package/dist/src/core/CoreNode.d.ts +106 -58
  24. package/dist/src/core/CoreNode.js +524 -282
  25. package/dist/src/core/CoreNode.js.map +1 -1
  26. package/dist/src/core/CoreTextNode.d.ts +73 -88
  27. package/dist/src/core/CoreTextNode.js +375 -236
  28. package/dist/src/core/CoreTextNode.js.map +1 -1
  29. package/dist/src/core/CoreTextureManager.d.ts +19 -17
  30. package/dist/src/core/CoreTextureManager.js +52 -120
  31. package/dist/src/core/CoreTextureManager.js.map +1 -1
  32. package/dist/src/core/Stage.d.ts +63 -9
  33. package/dist/src/core/Stage.js +233 -133
  34. package/dist/src/core/Stage.js.map +1 -1
  35. package/dist/src/core/TextureError.d.ts +11 -0
  36. package/dist/src/core/TextureError.js +37 -0
  37. package/dist/src/core/TextureError.js.map +1 -0
  38. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  39. package/dist/src/core/TextureMemoryManager.js +80 -113
  40. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  41. package/dist/src/core/animations/Animation.d.ts +21 -0
  42. package/dist/src/core/animations/Animation.js +194 -0
  43. package/dist/src/core/animations/Animation.js.map +1 -0
  44. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  45. package/dist/src/core/animations/CoreAnimation.js +3 -3
  46. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  47. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  48. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  49. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  50. package/dist/src/core/animations/Playback.d.ts +64 -0
  51. package/dist/src/core/animations/Playback.js +169 -0
  52. package/dist/src/core/animations/Playback.js.map +1 -0
  53. package/dist/src/core/animations/Transition.d.ts +27 -0
  54. package/dist/src/core/animations/Transition.js +52 -0
  55. package/dist/src/core/animations/Transition.js.map +1 -0
  56. package/dist/src/core/animations/utils.d.ts +2 -0
  57. package/dist/src/core/animations/utils.js +136 -0
  58. package/dist/src/core/animations/utils.js.map +1 -0
  59. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  60. package/dist/src/core/lib/ImageWorker.js +30 -11
  61. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  62. package/dist/src/core/lib/WebGlContextWrapper.d.ts +22 -1
  63. package/dist/src/core/lib/WebGlContextWrapper.js +49 -3
  64. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  65. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  66. package/dist/src/core/lib/collectionUtils.js +72 -0
  67. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  68. package/dist/src/core/lib/colorCache.d.ts +1 -0
  69. package/dist/src/core/lib/colorCache.js +19 -0
  70. package/dist/src/core/lib/colorCache.js.map +1 -0
  71. package/dist/src/core/lib/colorParser.d.ts +21 -0
  72. package/dist/src/core/lib/colorParser.js +72 -0
  73. package/dist/src/core/lib/colorParser.js.map +1 -0
  74. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  75. package/dist/src/core/lib/textureCompression.js +320 -67
  76. package/dist/src/core/lib/textureCompression.js.map +1 -1
  77. package/dist/src/core/lib/utils.d.ts +6 -6
  78. package/dist/src/core/lib/utils.js +21 -65
  79. package/dist/src/core/lib/utils.js.map +1 -1
  80. package/dist/src/core/platform.d.ts +10 -0
  81. package/dist/src/core/platform.js +81 -0
  82. package/dist/src/core/platform.js.map +1 -0
  83. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  84. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  85. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  86. package/dist/src/core/platforms/Platform.d.ts +78 -12
  87. package/dist/src/core/platforms/Platform.js +18 -0
  88. package/dist/src/core/platforms/Platform.js.map +1 -1
  89. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  90. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  91. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  92. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  93. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  94. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  95. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  96. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  97. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  98. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  99. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  100. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  101. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  102. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  103. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  104. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  105. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  106. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  107. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  108. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  109. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  110. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  111. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  112. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  113. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  114. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  115. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  116. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  117. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  118. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  119. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  120. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  121. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  122. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  123. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  124. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  125. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  126. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  127. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  128. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  129. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  130. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  131. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  132. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  133. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  134. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  135. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  136. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  137. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  138. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  139. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  140. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  141. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  143. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  144. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  145. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  146. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  147. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  148. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  149. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  150. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  151. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  152. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  153. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  154. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  155. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  156. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  157. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  158. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  159. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  160. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  161. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  162. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  164. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  165. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  174. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  176. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  177. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  179. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  180. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  182. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  183. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  185. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  186. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  187. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  188. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  189. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  190. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  191. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  192. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  193. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  194. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  195. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  196. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  197. package/dist/src/core/renderers/webgl/WebGlRenderer.js +122 -133
  198. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  199. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  200. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  201. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  202. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +7 -7
  203. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +56 -37
  204. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  205. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  206. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  207. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  208. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  209. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  210. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  211. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  212. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  214. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  215. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  217. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  218. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  220. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  221. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  223. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  224. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +134 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  258. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  259. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +143 -0
  260. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  261. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  262. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  263. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  264. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  265. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  266. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  267. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  268. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  269. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  270. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  271. package/dist/src/core/shaders/canvas/Border.js +64 -25
  272. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  273. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  274. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  276. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  278. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  280. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  281. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  282. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  283. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  284. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  285. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  286. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  287. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  288. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  289. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  290. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  291. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  292. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  293. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  294. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  295. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  296. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  297. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  298. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  299. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  300. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  301. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  302. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  303. package/dist/src/core/shaders/webgl/Border.js +138 -84
  304. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  305. package/dist/src/core/shaders/webgl/Default.js +46 -47
  306. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  307. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  308. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  309. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  311. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  312. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  313. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  314. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  315. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  316. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  317. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  318. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  319. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  320. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  321. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  322. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  323. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  324. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  325. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  326. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  327. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  329. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  330. package/dist/src/core/text-rendering/CanvasFont.d.ts +14 -0
  331. package/dist/src/core/text-rendering/CanvasFont.js +111 -0
  332. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -0
  333. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  334. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  335. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  336. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  337. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  338. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  339. package/dist/src/core/text-rendering/CoreFont.d.ts +33 -0
  340. package/dist/src/core/text-rendering/CoreFont.js +48 -0
  341. package/dist/src/core/text-rendering/CoreFont.js.map +1 -0
  342. package/dist/src/core/text-rendering/FontManager.d.ts +11 -0
  343. package/dist/src/core/text-rendering/FontManager.js +42 -0
  344. package/dist/src/core/text-rendering/FontManager.js.map +1 -0
  345. package/dist/src/core/text-rendering/SdfFont.d.ts +29 -0
  346. package/dist/src/core/text-rendering/SdfFont.js +142 -0
  347. package/dist/src/core/text-rendering/SdfFont.js.map +1 -0
  348. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  349. package/dist/src/core/text-rendering/SdfFontHandler.js +381 -0
  350. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  351. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  352. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  353. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  354. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  355. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  356. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  357. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  358. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  359. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  360. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  361. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  362. package/dist/src/core/text-rendering/Utils.js +84 -0
  363. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  364. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  365. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  366. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  367. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  368. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  369. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  370. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  371. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  372. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  373. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  377. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  378. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  379. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  380. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  381. package/dist/src/core/textures/ColorTexture.js +3 -4
  382. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  383. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  384. package/dist/src/core/textures/ImageTexture.js +46 -125
  385. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  386. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  387. package/dist/src/core/textures/NoiseTexture.js +8 -8
  388. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  389. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  390. package/dist/src/core/textures/RenderTexture.js +12 -12
  391. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  392. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  393. package/dist/src/core/textures/SubTexture.js +22 -40
  394. package/dist/src/core/textures/SubTexture.js.map +1 -1
  395. package/dist/src/core/textures/Texture.d.ts +74 -15
  396. package/dist/src/core/textures/Texture.js +131 -19
  397. package/dist/src/core/textures/Texture.js.map +1 -1
  398. package/dist/src/core/utils.d.ts +2 -1
  399. package/dist/src/core/utils.js +1 -1
  400. package/dist/src/core/utils.js.map +1 -1
  401. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  402. package/dist/src/main-api/DynamicShaderController.js +58 -0
  403. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  404. package/dist/src/main-api/Inspector.d.ts +129 -1
  405. package/dist/src/main-api/Inspector.js +462 -23
  406. package/dist/src/main-api/Inspector.js.map +1 -1
  407. package/dist/src/main-api/Renderer.d.ts +223 -41
  408. package/dist/src/main-api/Renderer.js +107 -62
  409. package/dist/src/main-api/Renderer.js.map +1 -1
  410. package/dist/src/main-api/ShaderController.d.ts +31 -0
  411. package/dist/src/main-api/ShaderController.js +37 -0
  412. package/dist/src/main-api/ShaderController.js.map +1 -0
  413. package/dist/src/utils.d.ts +0 -2
  414. package/dist/src/utils.js +0 -36
  415. package/dist/src/utils.js.map +1 -1
  416. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  417. package/dist/tsconfig.tsbuildinfo +1 -0
  418. package/exports/canvas-shaders.ts +28 -28
  419. package/exports/canvas.ts +45 -45
  420. package/exports/index.ts +90 -90
  421. package/exports/inspector.ts +24 -24
  422. package/exports/platform.ts +31 -0
  423. package/exports/utils.ts +50 -50
  424. package/exports/webgl-shaders.ts +28 -28
  425. package/exports/webgl.ts +52 -50
  426. package/package.json +16 -15
  427. package/src/common/CommonTypes.ts +163 -146
  428. package/src/common/EventEmitter.ts +77 -77
  429. package/src/common/IAnimationController.ts +92 -92
  430. package/src/common/IEventEmitter.ts +28 -28
  431. package/src/core/Autosizer.ts +224 -0
  432. package/src/core/CoreNode.test.ts +365 -202
  433. package/src/core/CoreNode.ts +2785 -2489
  434. package/src/core/CoreShaderManager.ts +188 -188
  435. package/src/core/CoreTextNode.test.ts +311 -0
  436. package/src/core/CoreTextNode.ts +598 -451
  437. package/src/core/CoreTextureManager.ts +484 -548
  438. package/src/core/Stage.ts +927 -800
  439. package/src/core/TextureError.ts +46 -0
  440. package/src/core/TextureMemoryManager.ts +418 -462
  441. package/src/core/animations/AnimationManager.ts +38 -38
  442. package/src/core/animations/CoreAnimation.ts +290 -291
  443. package/src/core/animations/CoreAnimationController.ts +169 -166
  444. package/src/core/lib/ContextSpy.ts +41 -41
  445. package/src/core/lib/Matrix3d.ts +244 -244
  446. package/src/core/lib/RenderCoords.ts +71 -71
  447. package/src/core/lib/collectionUtils.ts +83 -0
  448. package/src/core/lib/colorCache.ts +20 -0
  449. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  450. package/src/core/lib/utils.ts +337 -390
  451. package/src/core/platforms/GlContextWrapper.ts +291 -0
  452. package/src/core/platforms/Platform.ts +176 -77
  453. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1368
  454. package/src/core/platforms/web/WebPlatform.ts +306 -84
  455. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  456. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  457. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  458. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  459. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  460. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  461. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  462. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  463. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  464. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  465. package/src/core/platforms/web/lib/utils.ts +105 -0
  466. package/src/core/renderers/CoreContextTexture.ts +44 -43
  467. package/src/core/renderers/CoreRenderOp.ts +22 -22
  468. package/src/core/renderers/CoreRenderer.ts +71 -110
  469. package/src/core/renderers/CoreShaderNode.ts +202 -175
  470. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  471. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  472. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  473. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  474. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  475. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  476. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  477. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  478. package/src/core/renderers/webgl/WebGlRenderer.ts +726 -747
  479. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  480. package/src/core/renderers/webgl/WebGlShaderProgram.ts +362 -341
  481. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  482. package/src/core/renderers/webgl/internal/RendererUtils.ts +151 -155
  483. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  484. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  485. package/src/core/shaders/canvas/Border.ts +132 -78
  486. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  487. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  488. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  489. package/src/core/shaders/canvas/Rounded.ts +55 -55
  490. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  491. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  492. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  493. package/src/core/shaders/canvas/Shadow.ts +54 -52
  494. package/src/core/shaders/canvas/utils/render.ts +160 -151
  495. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  496. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  497. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  498. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  499. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  500. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  501. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  502. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  503. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  504. package/src/core/shaders/utils.ts +46 -46
  505. package/src/core/shaders/webgl/Border.ts +169 -116
  506. package/src/core/shaders/webgl/Default.ts +88 -89
  507. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  508. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  509. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  510. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  511. package/src/core/shaders/webgl/Rounded.ts +115 -117
  512. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  513. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  514. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  515. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  516. package/src/core/shaders/webgl/Shadow.ts +121 -115
  517. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  518. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  519. package/src/core/text-rendering/SdfFontHandler.ts +584 -0
  520. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  521. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  522. package/src/core/text-rendering/TextRenderer.ts +444 -0
  523. package/src/core/text-rendering/Utils.ts +99 -0
  524. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  525. package/src/core/textures/ColorTexture.ts +104 -102
  526. package/src/core/textures/ImageTexture.ts +292 -418
  527. package/src/core/textures/NoiseTexture.ts +106 -104
  528. package/src/core/textures/RenderTexture.ts +87 -85
  529. package/src/core/textures/SubTexture.ts +184 -205
  530. package/src/core/textures/Texture.ts +524 -381
  531. package/src/core/utils.ts +229 -227
  532. package/src/env.d.ts +7 -7
  533. package/src/main-api/INode.ts +100 -100
  534. package/src/main-api/Inspector.ts +1278 -569
  535. package/src/main-api/Renderer.ts +1030 -818
  536. package/src/main-api/utils.ts +45 -45
  537. package/src/utils.ts +220 -267
  538. package/COPYING +0 -1
  539. package/src/core/lib/ImageWorker.ts +0 -286
  540. package/src/core/lib/textureCompression.ts +0 -152
  541. package/src/core/lib/validateImageBitmap.ts +0 -87
  542. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  543. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  544. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  545. package/src/core/text-rendering/TrFontManager.ts +0 -183
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  548. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  549. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  550. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  551. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  552. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  553. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  554. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  566. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -1,863 +0,0 @@
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
- /* eslint-disable @typescript-eslint/no-non-null-assertion */
21
-
22
- import { assertTruthy } from '../../../utils.js';
23
- import { getRgbaString, type RGBA } from '../../lib/utils.js';
24
- import { calcDefaultLineHeight } from '../TextRenderingUtils.js';
25
- import {
26
- getWebFontMetrics,
27
- isZeroWidthSpace,
28
- } from '../TextTextureRendererUtils.js';
29
- import type { NormalizedFontMetrics } from '../font-face-types/TrFontFace.js';
30
- import type { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
31
-
32
- const MAX_TEXTURE_DIMENSION = 2048;
33
-
34
- /**
35
- * Text Overflow Values
36
- */
37
- export type TextOverflow =
38
- | 'ellipsis'
39
- | 'clip'
40
- | (string & Record<never, never>);
41
-
42
- /***
43
- * Text Horizontal Align Values
44
- */
45
- export type TextAlign = 'left' | 'center' | 'right';
46
-
47
- /***
48
- * Text Baseline Values
49
- */
50
- export type TextBaseline =
51
- | 'alphabetic'
52
- | 'top'
53
- | 'hanging'
54
- | 'middle'
55
- | 'ideographic'
56
- | 'bottom';
57
-
58
- /***
59
- * Text Vertical Align Values
60
- */
61
- export type TextVerticalAlign = 'top' | 'middle' | 'bottom';
62
-
63
- /**
64
- * Text Texture Settings
65
- */
66
- export interface Settings {
67
- w: number;
68
- h: number;
69
- text: string;
70
- fontStyle: string;
71
- fontSize: number;
72
- fontBaselineRatio: number;
73
- fontFamily: string | null;
74
- trFontFace: WebTrFontFace | null;
75
- wordWrap: boolean;
76
- wordWrapWidth: number;
77
- wordBreak: 'normal' | 'break-all' | 'break-word';
78
- textOverflow: TextOverflow | null;
79
- lineHeight: number | null;
80
- textBaseline: TextBaseline;
81
- textAlign: TextAlign;
82
- verticalAlign: TextVerticalAlign;
83
- offsetY: number | null;
84
- maxLines: number;
85
- maxHeight: number | null;
86
- overflowSuffix: string;
87
- precision: number;
88
- textColor: RGBA;
89
- paddingLeft: number;
90
- paddingRight: number;
91
- shadow: boolean;
92
- shadowColor: RGBA;
93
- shadowOffsetX: number;
94
- shadowOffsetY: number;
95
- shadowBlur: number;
96
- highlight: boolean;
97
- highlightHeight: number;
98
- highlightColor: RGBA;
99
- highlightOffset: number;
100
- highlightPaddingLeft: number;
101
- highlightPaddingRight: number;
102
- letterSpacing: number;
103
- textIndent: number;
104
- cutSx: number;
105
- cutSy: number;
106
- cutEx: number;
107
- cutEy: number;
108
- advancedRenderer: boolean;
109
-
110
- // Normally stage options
111
- textRenderIssueMargin: number;
112
- }
113
-
114
- export interface RenderInfo {
115
- w: number;
116
- h: number;
117
- lines: string[];
118
- precision: number;
119
- remainingText: string;
120
- moreTextLines: boolean;
121
- width: number;
122
- innerWidth: number;
123
- height: number;
124
- fontSize: number;
125
- cutSx: number;
126
- cutSy: number;
127
- cutEx: number;
128
- cutEy: number;
129
- lineHeight: number;
130
- defLineHeight: number;
131
- lineWidths: number[];
132
- offsetY: number;
133
- paddingLeft: number;
134
- paddingRight: number;
135
- letterSpacing: number;
136
- textIndent: number;
137
- metrics: NormalizedFontMetrics;
138
- }
139
-
140
- export interface LineType {
141
- text: string;
142
- x: number;
143
- y: number;
144
- w: number;
145
- }
146
-
147
- /**
148
- * Calculate height for the canvas
149
- *
150
- * @param textBaseline
151
- * @param fontSize
152
- * @param lineHeight
153
- * @param numLines
154
- * @param offsetY
155
- * @returns
156
- */
157
- function calcHeight(
158
- textBaseline: TextBaseline,
159
- fontSize: number,
160
- lineHeight: number,
161
- numLines: number,
162
- offsetY: number | null,
163
- ) {
164
- const baselineOffset = textBaseline !== 'bottom' ? 0.5 * fontSize : 0;
165
- return (
166
- lineHeight * (numLines - 1) +
167
- baselineOffset +
168
- Math.max(lineHeight, fontSize) +
169
- (offsetY || 0)
170
- );
171
- }
172
-
173
- export class LightningTextTextureRenderer {
174
- private _canvas: OffscreenCanvas | HTMLCanvasElement;
175
- private _context:
176
- | OffscreenCanvasRenderingContext2D
177
- | CanvasRenderingContext2D;
178
- private _settings: Settings;
179
-
180
- constructor(
181
- canvas: OffscreenCanvas | HTMLCanvasElement,
182
- context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,
183
- ) {
184
- this._canvas = canvas;
185
- this._context = context;
186
- this._settings = this.mergeDefaults({});
187
- }
188
-
189
- set settings(v: Partial<Settings>) {
190
- this._settings = this.mergeDefaults(v);
191
- }
192
-
193
- get settings(): Settings {
194
- return this._settings;
195
- }
196
-
197
- getPrecision() {
198
- return this._settings.precision;
199
- }
200
-
201
- setFontProperties() {
202
- this._context.font = this._getFontSetting();
203
- this._context.textBaseline = this._settings.textBaseline;
204
- }
205
-
206
- _getFontSetting() {
207
- const ff = [this._settings.fontFamily];
208
-
209
- const ffs: string[] = [];
210
- for (let i = 0, n = ff.length; i < n; i++) {
211
- if (ff[i] === 'serif' || ff[i] === 'sans-serif') {
212
- ffs.push(ff[i]!);
213
- } else {
214
- ffs.push(`"${ff[i]!}"`);
215
- }
216
- }
217
-
218
- return `${this._settings.fontStyle} ${
219
- this._settings.fontSize * this.getPrecision()
220
- }px ${ffs.join(',')}`;
221
- }
222
-
223
- _load() {
224
- if (true && document.fonts) {
225
- const fontSetting = this._getFontSetting();
226
- try {
227
- if (!document.fonts.check(fontSetting, this._settings.text)) {
228
- // Use a promise that waits for loading.
229
- return document.fonts
230
- .load(fontSetting, this._settings.text)
231
- .catch((err) => {
232
- // Just load the fallback font.
233
- console.warn('[Lightning] Font load error', err, fontSetting);
234
- })
235
- .then(() => {
236
- if (!document.fonts.check(fontSetting, this._settings.text)) {
237
- console.warn('[Lightning] Font not found', fontSetting);
238
- }
239
- });
240
- }
241
- } catch (e) {
242
- console.warn("[Lightning] Can't check font loading for " + fontSetting);
243
- }
244
- }
245
- }
246
-
247
- calculateRenderInfo(): RenderInfo {
248
- const renderInfo: Partial<RenderInfo> = {};
249
-
250
- const precision = this.getPrecision();
251
-
252
- const paddingLeft = this._settings.paddingLeft * precision;
253
- const paddingRight = this._settings.paddingRight * precision;
254
- const fontSize = this._settings.fontSize * precision;
255
- let offsetY =
256
- this._settings.offsetY === null
257
- ? null
258
- : this._settings.offsetY * precision;
259
- const w = this._settings.w * precision;
260
- const h = this._settings.h * precision;
261
- let wordWrapWidth = this._settings.wordWrapWidth * precision;
262
- const cutSx = this._settings.cutSx * precision;
263
- const cutEx = this._settings.cutEx * precision;
264
- const cutSy = this._settings.cutSy * precision;
265
- const cutEy = this._settings.cutEy * precision;
266
- const letterSpacing = (this._settings.letterSpacing || 0) * precision;
267
- const textIndent = this._settings.textIndent * precision;
268
- const trFontFace = this._settings.trFontFace;
269
-
270
- // Set font properties.
271
- this.setFontProperties();
272
-
273
- assertTruthy(trFontFace);
274
- const metrics = getWebFontMetrics(this._context, trFontFace, fontSize);
275
- const defLineHeight = calcDefaultLineHeight(metrics, fontSize) * precision;
276
- const lineHeight =
277
- this._settings.lineHeight !== null
278
- ? this._settings.lineHeight * precision
279
- : defLineHeight;
280
-
281
- const maxHeight = this._settings.maxHeight;
282
- const containedMaxLines =
283
- maxHeight !== null && lineHeight > 0
284
- ? Math.floor(maxHeight / lineHeight)
285
- : 0;
286
-
287
- const setMaxLines = this._settings.maxLines;
288
- const calcMaxLines =
289
- containedMaxLines > 0 && setMaxLines > 0
290
- ? Math.min(containedMaxLines, setMaxLines)
291
- : Math.max(containedMaxLines, setMaxLines);
292
-
293
- // Total width.
294
- let width = w || 2048 / this.getPrecision();
295
-
296
- // Inner width.
297
- let innerWidth = width - paddingLeft;
298
- if (innerWidth < 10) {
299
- width += 10 - innerWidth;
300
- innerWidth = 10;
301
- }
302
-
303
- if (!wordWrapWidth) {
304
- wordWrapWidth = innerWidth;
305
- }
306
-
307
- // Text overflow
308
- // TODO Probably never used
309
- if (this._settings.textOverflow && !this._settings.wordWrap) {
310
- let suffix;
311
- switch (this._settings.textOverflow) {
312
- case 'clip':
313
- suffix = '';
314
- break;
315
- case 'ellipsis':
316
- suffix = this._settings.overflowSuffix;
317
- break;
318
- default:
319
- suffix = this._settings.textOverflow;
320
- }
321
- this._settings.text = this.wrapWord(
322
- this._settings.text,
323
- wordWrapWidth - textIndent,
324
- suffix,
325
- );
326
- }
327
-
328
- // word wrap
329
- // preserve original text
330
- let linesInfo: { n: number[]; l: string[] };
331
- if (this._settings.wordWrap) {
332
- linesInfo = this.wrapText(
333
- this._settings.text,
334
- wordWrapWidth,
335
- letterSpacing,
336
- textIndent,
337
- );
338
- } else {
339
- linesInfo = { l: this._settings.text.split(/(?:\r\n|\r|\n)/), n: [] };
340
- const n = linesInfo.l.length;
341
- for (let i = 0; i < n - 1; i++) {
342
- linesInfo.n.push(i);
343
- }
344
- }
345
- let lines = linesInfo.l;
346
-
347
- if (calcMaxLines && lines.length > calcMaxLines) {
348
- const usedLines = lines.slice(0, calcMaxLines);
349
-
350
- let otherLines: string[] | null = null;
351
- if (this._settings.overflowSuffix) {
352
- // Wrap again with max lines suffix enabled.
353
- const w = this._settings.overflowSuffix
354
- ? this.measureText(this._settings.overflowSuffix)
355
- : 0;
356
- const al = this.wrapText(
357
- usedLines[usedLines.length - 1]!,
358
- wordWrapWidth - w,
359
- letterSpacing,
360
- textIndent,
361
- );
362
- usedLines[usedLines.length - 1] = `${al.l[0]!}${
363
- this._settings.overflowSuffix
364
- }`;
365
- otherLines = [al.l.length > 1 ? al.l[1]! : ''];
366
- } else {
367
- otherLines = [''];
368
- }
369
-
370
- // Re-assemble the remaining text.
371
- let i;
372
- const n = lines.length;
373
- let j = 0;
374
- const m = linesInfo.n.length;
375
- for (i = calcMaxLines; i < n; i++) {
376
- otherLines[j] += `${otherLines[j] ? ' ' : ''}${lines[i]!}`;
377
- if (i + 1 < m && linesInfo.n[i + 1]) {
378
- j++;
379
- }
380
- }
381
-
382
- renderInfo.remainingText = otherLines.join('\n');
383
-
384
- renderInfo.moreTextLines = true;
385
-
386
- lines = usedLines;
387
- } else {
388
- renderInfo.moreTextLines = false;
389
- renderInfo.remainingText = '';
390
- }
391
-
392
- // calculate text width
393
- let maxLineWidth = 0;
394
- const lineWidths: number[] = [];
395
- for (let i = 0; i < lines.length; i++) {
396
- const lineWidth =
397
- this.measureText(lines[i]!, letterSpacing) + (i === 0 ? textIndent : 0);
398
- lineWidths.push(lineWidth);
399
- maxLineWidth = Math.max(maxLineWidth, lineWidth);
400
- }
401
-
402
- renderInfo.lineWidths = lineWidths;
403
-
404
- if (!w) {
405
- // Auto-set width to max text length.
406
- width = maxLineWidth + paddingLeft + paddingRight;
407
- innerWidth = maxLineWidth;
408
- }
409
-
410
- // If word wrap is enabled the width needs to be the width of the text.
411
- if (
412
- this._settings.wordWrap &&
413
- w > maxLineWidth &&
414
- this._settings.textAlign === 'left' &&
415
- lines.length === 1
416
- ) {
417
- width = maxLineWidth + paddingLeft + paddingRight;
418
- }
419
-
420
- let height;
421
- if (h) {
422
- height = h;
423
- } else {
424
- height = calcHeight(
425
- this._settings.textBaseline,
426
- fontSize,
427
- lineHeight,
428
- lines.length,
429
- offsetY,
430
- );
431
- }
432
-
433
- if (offsetY === null) {
434
- offsetY = fontSize;
435
- }
436
-
437
- renderInfo.w = width;
438
- renderInfo.h = height;
439
- renderInfo.lines = lines;
440
- renderInfo.precision = precision;
441
-
442
- if (!width) {
443
- // To prevent canvas errors.
444
- width = 1;
445
- }
446
-
447
- if (!height) {
448
- // To prevent canvas errors.
449
- height = 1;
450
- }
451
-
452
- if (cutSx || cutEx) {
453
- width = Math.min(width, cutEx - cutSx);
454
- }
455
-
456
- if (cutSy || cutEy) {
457
- height = Math.min(height, cutEy - cutSy);
458
- }
459
-
460
- renderInfo.width = width;
461
- renderInfo.innerWidth = innerWidth;
462
- renderInfo.height = height;
463
- renderInfo.fontSize = fontSize;
464
- renderInfo.cutSx = cutSx;
465
- renderInfo.cutSy = cutSy;
466
- renderInfo.cutEx = cutEx;
467
- renderInfo.cutEy = cutEy;
468
- renderInfo.lineHeight = lineHeight;
469
- renderInfo.defLineHeight = defLineHeight;
470
- renderInfo.lineWidths = lineWidths;
471
- renderInfo.offsetY = offsetY;
472
- renderInfo.paddingLeft = paddingLeft;
473
- renderInfo.paddingRight = paddingRight;
474
- renderInfo.letterSpacing = letterSpacing;
475
- renderInfo.textIndent = textIndent;
476
- renderInfo.metrics = metrics;
477
-
478
- return renderInfo as RenderInfo;
479
- }
480
-
481
- draw(
482
- renderInfo: RenderInfo,
483
- linesOverride?: { lines: string[]; lineWidths: number[] },
484
- ) {
485
- const precision = this.getPrecision();
486
-
487
- // Allow lines to be overriden for partial rendering.
488
- const lines = linesOverride?.lines || renderInfo.lines;
489
- const lineWidths = linesOverride?.lineWidths || renderInfo.lineWidths;
490
- const height = linesOverride
491
- ? calcHeight(
492
- this._settings.textBaseline,
493
- renderInfo.fontSize,
494
- renderInfo.lineHeight,
495
- linesOverride.lines.length,
496
- this._settings.offsetY === null
497
- ? null
498
- : this._settings.offsetY * precision,
499
- )
500
- : renderInfo.height;
501
-
502
- // Add extra margin to prevent issue with clipped text when scaling.
503
- this._canvas.width = Math.min(
504
- Math.ceil(renderInfo.width + this._settings.textRenderIssueMargin),
505
- MAX_TEXTURE_DIMENSION,
506
- );
507
- this._canvas.height = Math.min(Math.ceil(height), MAX_TEXTURE_DIMENSION);
508
-
509
- // Canvas context has been reset.
510
- this.setFontProperties();
511
-
512
- if (renderInfo.fontSize >= 128) {
513
- // WpeWebKit bug: must force compositing because cairo-traps-compositor will not work with text first.
514
- this._context.globalAlpha = 0.01;
515
- this._context.fillRect(0, 0, 0.01, 0.01);
516
- this._context.globalAlpha = 1.0;
517
- }
518
-
519
- if (renderInfo.cutSx || renderInfo.cutSy) {
520
- this._context.translate(-renderInfo.cutSx, -renderInfo.cutSy);
521
- }
522
-
523
- let linePositionX;
524
- let linePositionY;
525
-
526
- const drawLines: LineType[] = [];
527
-
528
- const { metrics } = renderInfo;
529
-
530
- /**
531
- * Ascender (in pixels)
532
- */
533
- const ascenderPx = metrics
534
- ? metrics.ascender * renderInfo.fontSize
535
- : renderInfo.fontSize;
536
-
537
- /**
538
- * Bare line height is the distance between the ascender and descender of the font.
539
- * without the line gap metric.
540
- */
541
- const bareLineHeightPx =
542
- (metrics.ascender - metrics.descender) * renderInfo.fontSize;
543
-
544
- // Draw lines line by line.
545
- for (let i = 0, n = lines.length; i < n; i++) {
546
- linePositionX = i === 0 ? renderInfo.textIndent : 0;
547
-
548
- // By default, text is aligned to top
549
- linePositionY = i * renderInfo.lineHeight + ascenderPx;
550
-
551
- if (this._settings.verticalAlign == 'middle') {
552
- linePositionY += (renderInfo.lineHeight - bareLineHeightPx) / 2;
553
- } else if (this._settings.verticalAlign == 'bottom') {
554
- linePositionY += renderInfo.lineHeight - bareLineHeightPx;
555
- }
556
-
557
- if (this._settings.textAlign === 'right') {
558
- linePositionX += renderInfo.innerWidth - lineWidths[i]!;
559
- } else if (this._settings.textAlign === 'center') {
560
- linePositionX += (renderInfo.innerWidth - lineWidths[i]!) / 2;
561
- }
562
- linePositionX += renderInfo.paddingLeft;
563
-
564
- drawLines.push({
565
- text: lines[i]!,
566
- x: linePositionX,
567
- y: linePositionY,
568
- w: lineWidths[i]!,
569
- });
570
- }
571
-
572
- // Highlight.
573
- if (this._settings.highlight) {
574
- const color = this._settings.highlightColor;
575
-
576
- const hlHeight =
577
- this._settings.highlightHeight * precision || renderInfo.fontSize * 1.5;
578
- const offset = this._settings.highlightOffset * precision;
579
- const hlPaddingLeft =
580
- this._settings.highlightPaddingLeft !== null
581
- ? this._settings.highlightPaddingLeft * precision
582
- : renderInfo.paddingLeft;
583
- const hlPaddingRight =
584
- this._settings.highlightPaddingRight !== null
585
- ? this._settings.highlightPaddingRight * precision
586
- : renderInfo.paddingRight;
587
-
588
- this._context.fillStyle = getRgbaString(color);
589
- for (let i = 0; i < drawLines.length; i++) {
590
- const drawLine = drawLines[i]!;
591
- this._context.fillRect(
592
- drawLine.x - hlPaddingLeft,
593
- drawLine.y - renderInfo.offsetY + offset,
594
- drawLine.w + hlPaddingRight + hlPaddingLeft,
595
- hlHeight,
596
- );
597
- }
598
- }
599
-
600
- // Text shadow.
601
- let prevShadowSettings: null | [string, number, number, number] = null;
602
- if (this._settings.shadow) {
603
- prevShadowSettings = [
604
- this._context.shadowColor,
605
- this._context.shadowOffsetX,
606
- this._context.shadowOffsetY,
607
- this._context.shadowBlur,
608
- ];
609
-
610
- this._context.shadowColor = getRgbaString(this._settings.shadowColor);
611
- this._context.shadowOffsetX = this._settings.shadowOffsetX * precision;
612
- this._context.shadowOffsetY = this._settings.shadowOffsetY * precision;
613
- this._context.shadowBlur = this._settings.shadowBlur * precision;
614
- }
615
-
616
- this._context.fillStyle = getRgbaString(this._settings.textColor);
617
- for (let i = 0, n = drawLines.length; i < n; i++) {
618
- const drawLine = drawLines[i]!;
619
-
620
- if (renderInfo.letterSpacing === 0) {
621
- this._context.fillText(drawLine.text, drawLine.x, drawLine.y);
622
- } else {
623
- const textSplit = drawLine.text.split('');
624
- let x = drawLine.x;
625
- for (let i = 0, j = textSplit.length; i < j; i++) {
626
- this._context.fillText(textSplit[i]!, x, drawLine.y);
627
- x += this.measureText(textSplit[i]!, renderInfo.letterSpacing);
628
- }
629
- }
630
- }
631
-
632
- if (prevShadowSettings) {
633
- this._context.shadowColor = prevShadowSettings[0];
634
- this._context.shadowOffsetX = prevShadowSettings[1];
635
- this._context.shadowOffsetY = prevShadowSettings[2];
636
- this._context.shadowBlur = prevShadowSettings[3];
637
- }
638
-
639
- if (renderInfo.cutSx || renderInfo.cutSy) {
640
- this._context.translate(renderInfo.cutSx, renderInfo.cutSy);
641
- }
642
- }
643
-
644
- wrapWord(word: string, wordWrapWidth: number, suffix: string) {
645
- const suffixWidth = this._context.measureText(suffix).width;
646
- const wordLen = word.length;
647
- const wordWidth = this._context.measureText(word).width;
648
-
649
- /* If word fits wrapWidth, do nothing */
650
- if (wordWidth <= wordWrapWidth) {
651
- return word;
652
- }
653
-
654
- /* Make initial guess for text cuttoff */
655
- let cutoffIndex = Math.floor((wordWrapWidth * wordLen) / wordWidth);
656
- let truncWordWidth =
657
- this._context.measureText(word.substring(0, cutoffIndex)).width +
658
- suffixWidth;
659
-
660
- /* In case guess was overestimated, shrink it letter by letter. */
661
- if (truncWordWidth > wordWrapWidth) {
662
- while (cutoffIndex > 0) {
663
- truncWordWidth =
664
- this._context.measureText(word.substring(0, cutoffIndex)).width +
665
- suffixWidth;
666
- if (truncWordWidth > wordWrapWidth) {
667
- cutoffIndex -= 1;
668
- } else {
669
- break;
670
- }
671
- }
672
-
673
- /* In case guess was underestimated, extend it letter by letter. */
674
- } else {
675
- while (cutoffIndex < wordLen) {
676
- truncWordWidth =
677
- this._context.measureText(word.substring(0, cutoffIndex)).width +
678
- suffixWidth;
679
- if (truncWordWidth < wordWrapWidth) {
680
- cutoffIndex += 1;
681
- } else {
682
- // Finally, when bound is crossed, retract last letter.
683
- cutoffIndex -= 1;
684
- break;
685
- }
686
- }
687
- }
688
-
689
- /* If wrapWidth is too short to even contain suffix alone, return empty string */
690
- return (
691
- word.substring(0, cutoffIndex) +
692
- (wordWrapWidth >= suffixWidth ? suffix : '')
693
- );
694
- }
695
-
696
- /**
697
- * Applies newlines to a string to have it optimally fit into the horizontal
698
- * bounds set by the Text object's wordWrapWidth property.
699
- */
700
- wrapText(
701
- text: string,
702
- wordWrapWidth: number,
703
- letterSpacing: number,
704
- indent = 0,
705
- ) {
706
- const spaceRegex = / |\u200B/g; // ZWSP and spaces
707
- const lines = text.split(/\r?\n/g);
708
- let allLines: string[] = [];
709
- const realNewlines: number[] = [];
710
-
711
- for (let i = 0; i < lines.length; i++) {
712
- const resultLines: string[] = [];
713
- let result = '';
714
- let spaceLeft = wordWrapWidth - indent;
715
-
716
- // Split the line into words, considering ZWSP
717
- const words = lines[i]!.split(spaceRegex);
718
- const spaces = lines[i]!.match(spaceRegex) || [];
719
-
720
- for (let j = 0; j < words.length; j++) {
721
- const space = spaces[j - 1] || '';
722
- const word = words[j]!;
723
- const wordWidth = this.measureText(word, letterSpacing);
724
- const wordWidthWithSpace = isZeroWidthSpace(space)
725
- ? wordWidth
726
- : wordWidth + this.measureText(space, letterSpacing);
727
-
728
- if (
729
- this._settings.wordBreak === 'break-all' &&
730
- wordWidthWithSpace > spaceLeft
731
- ) {
732
- const letters = word.split('');
733
- for (let k = 0; k < letters.length; k++) {
734
- const letter = letters[k]!;
735
- const letterWidthWithSpace =
736
- k > 0
737
- ? this.measureText(letter, letterSpacing)
738
- : this.measureText(space + letter, letterSpacing);
739
-
740
- if (letterWidthWithSpace > spaceLeft) {
741
- resultLines.push(result);
742
- result = letter;
743
- spaceLeft = wordWrapWidth - letterWidthWithSpace;
744
- } else {
745
- spaceLeft -= letterWidthWithSpace;
746
- result += k > 0 ? letter : space + letter;
747
- }
748
- }
749
- } else if (
750
- this._settings.wordBreak === 'break-word' &&
751
- wordWidthWithSpace > spaceLeft
752
- ) {
753
- if (wordWidth < wordWrapWidth) {
754
- resultLines.push(result);
755
- result = word;
756
- spaceLeft = wordWrapWidth - wordWidth - (j === 0 ? indent : 0);
757
- } else {
758
- if (result.length > 0) resultLines.push(result);
759
- result = '';
760
- spaceLeft = wordWrapWidth - indent;
761
- const letters = word.split('');
762
- for (let k = 0; k < letters.length; k++) {
763
- const letter = letters[k]!;
764
- const letterWidth = this.measureText(letter, letterSpacing);
765
- if (letterWidth > spaceLeft) {
766
- resultLines.push(result);
767
- result = '';
768
- spaceLeft = wordWrapWidth - indent;
769
- } else {
770
- result += letter;
771
- spaceLeft -= letterWidth;
772
- }
773
- }
774
- }
775
- } else if (j === 0 || wordWidthWithSpace > spaceLeft) {
776
- if (j > 0) {
777
- resultLines.push(result);
778
- result = '';
779
- }
780
- result += word;
781
- spaceLeft = wordWrapWidth - wordWidth - (j === 0 ? indent : 0);
782
- } else {
783
- spaceLeft -= wordWidthWithSpace;
784
- result += space + word;
785
- }
786
- }
787
-
788
- resultLines.push(result);
789
- result = '';
790
- allLines = allLines.concat(resultLines);
791
-
792
- if (i < lines.length - 1) {
793
- realNewlines.push(allLines.length);
794
- }
795
- }
796
-
797
- return { l: allLines, n: realNewlines };
798
- }
799
-
800
- measureText(word: string, space = 0) {
801
- if (!space) {
802
- return this._context.measureText(word).width;
803
- }
804
-
805
- // Split word into characters, but skip ZWSP in the width calculation
806
- return word.split('').reduce((acc, char) => {
807
- // Check if the character is a zero-width space and skip it
808
- if (isZeroWidthSpace(char)) {
809
- return acc;
810
- }
811
- return acc + this._context.measureText(char).width + space;
812
- }, 0);
813
- }
814
-
815
- mergeDefaults(settings: Partial<Settings>): Settings {
816
- return {
817
- text: '',
818
- w: 0,
819
- h: 0,
820
- fontStyle: 'normal',
821
- fontSize: 40,
822
- fontFamily: null,
823
- trFontFace: null,
824
- wordWrap: true,
825
- wordWrapWidth: 0,
826
- wordBreak: 'normal',
827
- textOverflow: '',
828
- lineHeight: null,
829
- textBaseline: 'alphabetic',
830
- textAlign: 'left',
831
- verticalAlign: 'top',
832
- offsetY: null,
833
- maxLines: 0,
834
- maxHeight: null,
835
- overflowSuffix: '...',
836
- textColor: [1.0, 1.0, 1.0, 1.0],
837
- paddingLeft: 0,
838
- paddingRight: 0,
839
- shadow: false,
840
- shadowColor: [0.0, 0.0, 0.0, 1.0],
841
- shadowOffsetX: 0,
842
- shadowOffsetY: 0,
843
- shadowBlur: 5,
844
- highlight: false,
845
- highlightHeight: 0,
846
- highlightColor: [0.0, 0.0, 0.0, 1.0],
847
- highlightOffset: 0,
848
- highlightPaddingLeft: 0,
849
- highlightPaddingRight: 0,
850
- letterSpacing: 0,
851
- textIndent: 0,
852
- cutSx: 0,
853
- cutEx: 0,
854
- cutSy: 0,
855
- cutEy: 0,
856
- advancedRenderer: false,
857
- fontBaselineRatio: 0,
858
- precision: 1,
859
- textRenderIssueMargin: 0,
860
- ...settings,
861
- };
862
- }
863
- }