@lightningjs/renderer 3.0.0-beta15 → 3.0.0-beta17

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 (245) hide show
  1. package/dist/src/common/CommonTypes.d.ts +11 -0
  2. package/dist/src/core/CoreNode.js +8 -0
  3. package/dist/src/core/CoreNode.js.map +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +14 -0
  5. package/dist/src/core/CoreTextNode.js +90 -5
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/Stage.js +2 -1
  8. package/dist/src/core/Stage.js.map +1 -1
  9. package/dist/src/core/animations/Animation.d.ts +16 -0
  10. package/dist/src/core/animations/Animation.js +111 -0
  11. package/dist/src/core/animations/Animation.js.map +1 -0
  12. package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
  13. package/dist/src/core/animations/CoreAnimation.js +0 -1
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/animations/CoreTransition.d.ts +24 -0
  16. package/dist/src/core/animations/CoreTransition.js +63 -0
  17. package/dist/src/core/animations/CoreTransition.js.map +1 -0
  18. package/dist/src/core/animations/Playback.d.ts +62 -0
  19. package/dist/src/core/animations/Playback.js +155 -0
  20. package/dist/src/core/animations/Playback.js.map +1 -0
  21. package/dist/src/core/animations/Transition.d.ts +25 -0
  22. package/dist/src/core/animations/Transition.js +63 -0
  23. package/dist/src/core/animations/Transition.js.map +1 -0
  24. package/dist/src/core/animations/utils.d.ts +2 -0
  25. package/dist/src/core/animations/utils.js +137 -0
  26. package/dist/src/core/animations/utils.js.map +1 -0
  27. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  28. package/dist/src/core/lib/collectionUtils.js +100 -0
  29. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  30. package/dist/src/core/platforms/Platform.d.ts +5 -0
  31. package/dist/src/core/platforms/Platform.js.map +1 -1
  32. package/dist/src/core/platforms/web/WebPlatform.d.ts +1 -0
  33. package/dist/src/core/platforms/web/WebPlatform.js +3 -0
  34. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  35. package/dist/src/core/text-rendering/CanvasFontHandler.js +4 -1
  36. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  37. package/dist/src/core/text-rendering/CanvasTextRenderer.js +7 -7
  38. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  39. package/dist/src/core/text-rendering/SdfFontHandler.js +3 -0
  40. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  41. package/dist/src/core/text-rendering/SdfTextRenderer.js +5 -5
  42. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  43. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +12 -13
  44. package/dist/src/core/text-rendering/TextLayoutEngine.js +242 -186
  45. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -1
  46. package/dist/src/core/text-rendering/TextRenderer.d.ts +22 -7
  47. package/dist/src/core/utils.d.ts +1 -1
  48. package/dist/src/main-api/Inspector.js +9 -5
  49. package/dist/src/main-api/Inspector.js.map +1 -1
  50. package/dist/src/main-api/Renderer.js +3 -2
  51. package/dist/src/main-api/Renderer.js.map +1 -1
  52. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  53. package/package.json +1 -1
  54. package/src/common/CommonTypes.ts +16 -0
  55. package/src/core/CoreNode.test.ts +50 -1
  56. package/src/core/CoreNode.ts +11 -0
  57. package/src/core/CoreTextNode.ts +112 -5
  58. package/src/core/Stage.ts +2 -1
  59. package/src/core/animations/CoreAnimation.ts +0 -2
  60. package/src/core/platforms/Platform.ts +6 -0
  61. package/src/core/platforms/web/WebPlatform.ts +11 -0
  62. package/src/core/text-rendering/CanvasFontHandler.ts +4 -7
  63. package/src/core/text-rendering/CanvasTextRenderer.ts +6 -8
  64. package/src/core/text-rendering/SdfFontHandler.ts +3 -0
  65. package/src/core/text-rendering/SdfTextRenderer.ts +4 -5
  66. package/src/core/text-rendering/TextLayoutEngine.ts +396 -226
  67. package/src/core/text-rendering/TextRenderer.ts +22 -7
  68. package/src/core/text-rendering/tests/{SdfTests.test.ts → TextLayoutEngine.test.ts} +103 -64
  69. package/src/main-api/Inspector.ts +9 -5
  70. package/src/main-api/Renderer.ts +3 -2
  71. package/dist/src/core/TextureError.d.ts +0 -11
  72. package/dist/src/core/TextureError.js +0 -37
  73. package/dist/src/core/TextureError.js.map +0 -1
  74. package/dist/src/core/platform.d.ts +0 -10
  75. package/dist/src/core/platform.js +0 -81
  76. package/dist/src/core/platform.js.map +0 -1
  77. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  78. package/dist/src/core/renderers/CoreShader.js +0 -28
  79. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  80. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  81. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  82. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  86. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  87. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  88. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  89. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
  90. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
  91. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  92. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  93. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  94. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  96. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  97. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  98. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  99. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -65
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -269
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  104. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  108. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -616
  109. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  111. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -233
  112. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  113. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  114. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  115. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  116. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  117. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  118. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  119. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  120. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  121. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  122. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  123. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  124. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  125. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  126. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  127. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  128. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  129. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  130. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  131. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  132. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  133. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  134. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  135. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  136. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  137. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  138. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  139. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  140. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  144. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  145. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  146. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  147. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  148. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  150. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  151. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  153. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  154. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  155. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  156. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  157. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  158. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  159. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  160. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  161. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  162. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  163. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  164. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  165. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  166. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  167. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  168. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  169. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  170. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  171. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  172. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  173. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  174. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  175. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  176. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  177. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  178. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  179. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  180. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  181. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  182. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  183. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  184. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  185. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  188. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  189. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  190. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  191. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  192. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  193. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  194. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  195. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  196. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  197. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  198. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  199. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  200. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  201. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  202. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  203. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  204. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  205. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  208. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  210. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  211. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  212. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  213. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  214. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  215. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  216. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  217. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  218. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  219. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  220. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  221. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  222. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  223. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  224. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  225. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  226. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  227. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  228. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  229. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  230. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  231. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  232. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  233. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  234. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  236. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  237. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  239. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  240. package/dist/src/main-api/DynamicShaderController.js +0 -58
  241. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  242. package/dist/src/main-api/ShaderController.d.ts +0 -31
  243. package/dist/src/main-api/ShaderController.js +0 -37
  244. package/dist/src/main-api/ShaderController.js.map +0 -1
  245. package/src/core/text-rendering/tests/Canvas.test.ts +0 -378
@@ -37,6 +37,7 @@ import type {
37
37
  NodeTextureFailedPayload,
38
38
  NodeTextureFreedPayload,
39
39
  NodeTextureLoadedPayload,
40
+ NodeRenderablePayload,
40
41
  } from '../common/CommonTypes.js';
41
42
  import { EventEmitter } from '../common/EventEmitter.js';
42
43
  import {
@@ -1486,7 +1487,17 @@ export class CoreNode extends EventEmitter {
1486
1487
  * @param isRenderable - The new renderable state
1487
1488
  */
1488
1489
  setRenderable(isRenderable: boolean) {
1490
+ const previousIsRenderable = this.isRenderable;
1489
1491
  this.isRenderable = isRenderable;
1492
+
1493
+ // Emit event if renderable status has changed
1494
+ if (previousIsRenderable !== isRenderable) {
1495
+ this.emit('renderable', {
1496
+ type: 'renderable',
1497
+ isRenderable,
1498
+ } satisfies NodeRenderablePayload);
1499
+ }
1500
+
1490
1501
  if (
1491
1502
  isRenderable === true &&
1492
1503
  this.stage.calculateTextureCoord === true &&
@@ -39,6 +39,7 @@ import type {
39
39
  import type { RectWithValid } from './lib/utils.js';
40
40
  import type { CoreRenderer } from './renderers/CoreRenderer.js';
41
41
  import type { TextureLoadedEventHandler } from './textures/Texture.js';
42
+ import { Matrix3d } from './lib/Matrix3d.js';
42
43
  export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
43
44
  /**
44
45
  * Force Text Node to use a specific Text Renderer
@@ -47,12 +48,20 @@ export interface CoreTextNodeProps extends CoreNodeProps, TrProps {
47
48
  forceLoad: boolean;
48
49
  }
49
50
 
51
+ export enum TextConstraint {
52
+ 'none' = 0,
53
+ 'width' = 1,
54
+ 'height' = 2,
55
+ 'both' = 4,
56
+ }
57
+
50
58
  export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
51
59
  private textRenderer: TextRenderer;
52
60
  private fontHandler: FontHandler;
53
61
 
54
62
  private _layoutGenerated = false;
55
63
  private _waitingForFont = false;
64
+ private _containType: TextConstraint = TextConstraint.none;
56
65
 
57
66
  // SDF layout caching for performance
58
67
  private _cachedLayout: TextLayout | null = null;
@@ -81,6 +90,7 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
81
90
  // Initialize text properties from props
82
91
  // Props are guaranteed to have all defaults resolved by Stage.createTextNode
83
92
  this.textProps = props;
93
+ this._containType = TextConstraint[props.contain];
84
94
 
85
95
  this.setUpdateType(UpdateType.All);
86
96
  }
@@ -100,8 +110,6 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
100
110
  dimensions,
101
111
  } satisfies NodeTextureLoadedPayload);
102
112
  }
103
- this.w = this._renderInfo.width;
104
- this.h = this._renderInfo.height;
105
113
  this.setUpdateType(UpdateType.IsRenderable);
106
114
  };
107
115
 
@@ -116,6 +124,74 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
116
124
  return false;
117
125
  }
118
126
 
127
+ override updateLocalTransform() {
128
+ const p = this.props;
129
+ let { x, y, w, h } = p;
130
+ const mountX = p.mountX;
131
+ const mountY = p.mountY;
132
+ let mountTranslateX = p.mountX * w;
133
+ let mountTranslateY = p.mountY * h;
134
+
135
+ let localTextTransform: Matrix3d | null = null;
136
+
137
+ const tProps = this.textProps;
138
+ const { textAlign, verticalAlign, maxWidth, maxHeight } = tProps;
139
+ const contain = this._containType;
140
+
141
+ const hasMaxWidth = maxWidth > 0;
142
+ const hasMaxHeight = maxHeight > 0;
143
+
144
+ if (contain > 0 && (hasMaxWidth || hasMaxHeight)) {
145
+ let containX = 0;
146
+ let containY = 0;
147
+ if (contain & TextConstraint.width && hasMaxWidth === true) {
148
+ if (textAlign === 'right') {
149
+ containX = maxWidth - w;
150
+ } else if (textAlign === 'center') {
151
+ containX = (maxWidth - w) * 0.5;
152
+ }
153
+ mountTranslateX = mountX * maxWidth;
154
+ }
155
+ if (contain & TextConstraint.height && maxHeight > 0) {
156
+ if (verticalAlign === 'bottom') {
157
+ containY = maxHeight - h;
158
+ } else if (verticalAlign === 'middle') {
159
+ containY = (maxHeight - h) * 0.5;
160
+ }
161
+ mountTranslateY = mountY * maxHeight;
162
+ }
163
+ localTextTransform = Matrix3d.translate(containX, containY);
164
+ }
165
+
166
+ if (p.rotation !== 0 || p.scaleX !== 1 || p.scaleY !== 1) {
167
+ const scaleRotate = Matrix3d.rotate(p.rotation).scale(p.scaleX, p.scaleY);
168
+ const pivotW =
169
+ contain & TextConstraint.width && maxWidth > 0 ? maxWidth : w;
170
+ const pivotH =
171
+ contain & TextConstraint.height && maxHeight > 0 ? maxHeight : h;
172
+ const pivotTranslateX = p.pivotX * pivotW;
173
+ const pivotTranslateY = p.pivotY * pivotH;
174
+
175
+ this.localTransform = Matrix3d.translate(
176
+ x - mountTranslateX + pivotTranslateX,
177
+ y - mountTranslateY + pivotTranslateY,
178
+ this.localTransform,
179
+ )
180
+ .multiply(scaleRotate)
181
+ .translate(-pivotTranslateX, -pivotTranslateY);
182
+ } else {
183
+ this.localTransform = Matrix3d.translate(
184
+ x - mountTranslateX,
185
+ y - mountTranslateY,
186
+ this.localTransform,
187
+ );
188
+ }
189
+
190
+ if (localTextTransform !== null) {
191
+ this.localTransform = this.localTransform.multiply(localTextTransform);
192
+ }
193
+ }
194
+
119
195
  /**
120
196
  * Override CoreNode's update method to handle text-specific updates
121
197
  */
@@ -192,12 +268,13 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
192
268
  }
193
269
  }
194
270
 
271
+ this._cachedLayout = result.layout || null;
272
+ this.props.w = width;
273
+ this.props.h = height;
274
+
195
275
  // Handle SDF renderer (uses layout caching)
196
276
  if (textRendererType === 'sdf') {
197
- this._cachedLayout = result.layout || null;
198
277
  this.setRenderable(true);
199
- this.props.w = width;
200
- this.props.h = height;
201
278
  this.setUpdateType(UpdateType.Local);
202
279
  }
203
280
 
@@ -276,6 +353,24 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
276
353
  super.destroy();
277
354
  }
278
355
 
356
+ override set w(value: number) {
357
+ // dont allow direct setting of width on text nodes, handled by text layout generation
358
+ console.warn('Cannot directly set w on CoreTextNode');
359
+ }
360
+
361
+ override get w(): number {
362
+ return this.props.w;
363
+ }
364
+
365
+ override set h(value: number) {
366
+ // dont allow direct setting of height on text nodes, handled by text layout generation
367
+ console.warn('Cannot directly set h on CoreTextNode');
368
+ }
369
+
370
+ override get h(): number {
371
+ return this.props.h;
372
+ }
373
+
279
374
  get maxWidth() {
280
375
  return this.textProps.maxWidth;
281
376
  }
@@ -301,6 +396,18 @@ export class CoreTextNode extends CoreNode implements CoreTextNodeProps {
301
396
  }
302
397
  }
303
398
 
399
+ get contain(): TrProps['contain'] {
400
+ return this.textProps.contain;
401
+ }
402
+
403
+ set contain(value: TrProps['contain']) {
404
+ if (this.textProps.contain !== value) {
405
+ this.textProps.contain = value;
406
+ this._containType = TextConstraint[value];
407
+ this.setUpdateType(UpdateType.Local);
408
+ }
409
+ }
410
+
304
411
  get text(): string {
305
412
  return this.textProps.text;
306
413
  }
package/src/core/Stage.ts CHANGED
@@ -682,7 +682,8 @@ export class Stage {
682
682
  maxLines: props.maxLines || 0,
683
683
  verticalAlign: props.verticalAlign || 'top',
684
684
  overflowSuffix: props.overflowSuffix || '...',
685
- wordBreak: props.wordBreak || 'normal',
685
+ wordBreak: props.wordBreak || 'break-word',
686
+ contain: props.contain || 'none',
686
687
  maxWidth: props.maxWidth || 0,
687
688
  maxHeight: props.maxHeight || 0,
688
689
  forceLoad: props.forceLoad || false,
@@ -28,7 +28,6 @@ export interface AnimationSettings {
28
28
  easing: string | TimingFunction;
29
29
  loop: boolean;
30
30
  repeat: number;
31
- repeatDelay: number;
32
31
  stopMethod: 'reverse' | 'reset' | false;
33
32
  }
34
33
 
@@ -89,7 +88,6 @@ export class CoreAnimation extends EventEmitter {
89
88
  easing,
90
89
  loop: settings.loop ?? false,
91
90
  repeat: settings.repeat ?? 0,
92
- repeatDelay: settings.repeatDelay ?? 0,
93
91
  stopMethod: settings.stopMethod ?? false,
94
92
  };
95
93
  this.timingFunction =
@@ -74,4 +74,10 @@ export abstract class Platform {
74
74
  * @returns The current timestamp.
75
75
  */
76
76
  abstract getTimeStamp(): number;
77
+
78
+ /**
79
+ * Adds a FontFace to the platforms FontFaceSet
80
+ * @param font - The FontFace to add
81
+ */
82
+ abstract addFont(font: FontFace): void;
77
83
  }
@@ -1,6 +1,13 @@
1
1
  import { Platform } from '../Platform.js';
2
2
  import type { Stage } from '../../Stage.js';
3
3
 
4
+ /**
5
+ * make fontface add not show errors
6
+ */
7
+ interface FontFaceSetWithAdd extends FontFaceSet {
8
+ add(font: FontFace): void;
9
+ }
10
+
4
11
  export class WebPlatform extends Platform {
5
12
  ////////////////////////
6
13
  // Platform-specific methods
@@ -118,4 +125,8 @@ export class WebPlatform extends Platform {
118
125
  getTimeStamp(): number {
119
126
  return performance ? performance.now() : Date.now();
120
127
  }
128
+
129
+ override addFont(font: FontFace): void {
130
+ (document.fonts as FontFaceSetWithAdd).add(font);
131
+ }
121
132
  }
@@ -59,12 +59,6 @@ let context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D;
59
59
  let measureContext:
60
60
  | CanvasRenderingContext2D
61
61
  | OffscreenCanvasRenderingContext2D;
62
- /**
63
- * make fontface add not show errors
64
- */
65
- interface FontFaceSetWithAdd extends FontFaceSet {
66
- add(font: FontFace): void;
67
- }
68
62
 
69
63
  /**
70
64
  * Check if a font can be rendered
@@ -112,7 +106,7 @@ export const loadFont = async (
112
106
  const loadPromise = new FontFace(fontFamily, `url(${fontUrl})`)
113
107
  .load()
114
108
  .then((loadedFont) => {
115
- (document.fonts as FontFaceSetWithAdd).add(loadedFont);
109
+ stage.platform.addFont(loadedFont);
116
110
  processFontData(fontFamily, loadedFont, metrics);
117
111
  fontLoadPromises.delete(fontFamily);
118
112
  for (let key in nwff) {
@@ -185,6 +179,9 @@ export const isFontLoaded = (fontFamily: string): boolean => {
185
179
  * @param node
186
180
  */
187
181
  export const waitingForFont = (fontFamily: string, node: CoreTextNode) => {
182
+ if (nodesWaitingForFont[fontFamily] === undefined) {
183
+ return;
184
+ }
188
185
  nodesWaitingForFont[fontFamily]![node.id] = node;
189
186
  };
190
187
 
@@ -134,7 +134,6 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
134
134
  metrics,
135
135
  text,
136
136
  textAlign,
137
- verticalAlign,
138
137
  fontFamily,
139
138
  lineHeight,
140
139
  overflowSuffix,
@@ -144,10 +143,9 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
144
143
  maxWidth,
145
144
  maxHeight,
146
145
  );
147
-
148
146
  const lineAmount = lines.length;
149
- const canvasW = Math.ceil(maxWidth || effectiveWidth);
150
- const canvasH = Math.ceil(maxHeight || effectiveHeight);
147
+ const canvasW = Math.ceil(effectiveWidth);
148
+ const canvasH = Math.ceil(effectiveHeight);
151
149
 
152
150
  canvas.width = canvasW;
153
151
  canvas.height = canvasH;
@@ -165,8 +163,8 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
165
163
  for (let i = 0; i < lineAmount; i++) {
166
164
  const line = lines[i] as TextLineStruct;
167
165
  const textLine = line[0];
168
- let currentX = Math.ceil(line[2]);
169
- const currentY = Math.ceil(line[3]);
166
+ let currentX = Math.ceil(line[3]);
167
+ const currentY = Math.ceil(line[4]);
170
168
  if (letterSpacing === 0) {
171
169
  context.fillText(textLine, currentX, currentY);
172
170
  } else {
@@ -193,8 +191,8 @@ const renderText = (props: CoreTextNodeProps): TextRenderInfo => {
193
191
  }
194
192
  return {
195
193
  imageData,
196
- width: canvasW,
197
- height: canvasH,
194
+ width: effectiveWidth,
195
+ height: effectiveHeight,
198
196
  remainingLines,
199
197
  hasRemainingText,
200
198
  };
@@ -377,6 +377,9 @@ export const loadFont = async (
377
377
  * @param {CoreTextNode} node - Node that was waiting for the font
378
378
  */
379
379
  export const waitingForFont = (fontFamily: string, node: CoreTextNode) => {
380
+ if (nodesWaitingForFont[fontFamily] === undefined) {
381
+ return;
382
+ }
380
383
  nodesWaitingForFont[fontFamily]![node.id] = node;
381
384
  };
382
385
 
@@ -308,7 +308,6 @@ const generateTextLayout = (
308
308
  metrics,
309
309
  props.text,
310
310
  props.textAlign,
311
- verticalAlign,
312
311
  fontFamily,
313
312
  lineHeight,
314
313
  props.overflowSuffix,
@@ -329,9 +328,9 @@ const generateTextLayout = (
329
328
  const textLine = line[0];
330
329
  const textLineLength = textLine.length;
331
330
  let prevCodepoint = 0;
332
- currentX = line[2];
331
+ currentX = line[3];
333
332
  //convert Y coord to vertex value
334
- currentY = line[3] / fontScale;
333
+ currentY = line[4] / fontScale;
335
334
 
336
335
  for (let j = 0; j < textLineLength; j++) {
337
336
  const char = textLine.charAt(j);
@@ -389,8 +388,8 @@ const generateTextLayout = (
389
388
  return {
390
389
  glyphs,
391
390
  distanceRange: fontScale * fontData.distanceField.distanceRange,
392
- width: maxWidth || effectiveWidth * fontScale,
393
- height: maxHeight || effectiveHeight,
391
+ width: effectiveWidth * fontScale,
392
+ height: effectiveHeight,
394
393
  fontScale: fontScale,
395
394
  lineHeight: lineHeightPx,
396
395
  fontFamily,