@lightningtv/renderer 2.16.1

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 (582) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +3 -0
  3. package/README.md +147 -0
  4. package/dist/exports/canvas-shaders.d.ts +10 -0
  5. package/dist/exports/canvas-shaders.js +27 -0
  6. package/dist/exports/canvas-shaders.js.map +1 -0
  7. package/dist/exports/canvas.d.ts +20 -0
  8. package/dist/exports/canvas.js +39 -0
  9. package/dist/exports/canvas.js.map +1 -0
  10. package/dist/exports/index.d.ts +45 -0
  11. package/dist/exports/index.js +58 -0
  12. package/dist/exports/index.js.map +1 -0
  13. package/dist/exports/inspector.d.ts +4 -0
  14. package/dist/exports/inspector.js +23 -0
  15. package/dist/exports/inspector.js.map +1 -0
  16. package/dist/exports/utils.d.ts +26 -0
  17. package/dist/exports/utils.js +45 -0
  18. package/dist/exports/utils.js.map +1 -0
  19. package/dist/exports/webgl-shaders.d.ts +11 -0
  20. package/dist/exports/webgl-shaders.js +28 -0
  21. package/dist/exports/webgl-shaders.js.map +1 -0
  22. package/dist/exports/webgl.d.ts +19 -0
  23. package/dist/exports/webgl.js +38 -0
  24. package/dist/exports/webgl.js.map +1 -0
  25. package/dist/src/common/CommonTypes.d.ts +97 -0
  26. package/dist/src/common/CommonTypes.js +20 -0
  27. package/dist/src/common/CommonTypes.js.map +1 -0
  28. package/dist/src/common/EventEmitter.d.ts +12 -0
  29. package/dist/src/common/EventEmitter.js +66 -0
  30. package/dist/src/common/EventEmitter.js.map +1 -0
  31. package/dist/src/common/IAnimationController.d.ts +66 -0
  32. package/dist/src/common/IAnimationController.js +2 -0
  33. package/dist/src/common/IAnimationController.js.map +1 -0
  34. package/dist/src/common/IEventEmitter.d.ts +8 -0
  35. package/dist/src/common/IEventEmitter.js +18 -0
  36. package/dist/src/common/IEventEmitter.js.map +1 -0
  37. package/dist/src/core/CoreNode.d.ts +865 -0
  38. package/dist/src/core/CoreNode.js +1532 -0
  39. package/dist/src/core/CoreNode.js.map +1 -0
  40. package/dist/src/core/CoreShaderManager.d.ts +82 -0
  41. package/dist/src/core/CoreShaderManager.js +128 -0
  42. package/dist/src/core/CoreShaderManager.js.map +1 -0
  43. package/dist/src/core/CoreTextNode.d.ts +103 -0
  44. package/dist/src/core/CoreTextNode.js +331 -0
  45. package/dist/src/core/CoreTextNode.js.map +1 -0
  46. package/dist/src/core/CoreTextureManager.d.ts +249 -0
  47. package/dist/src/core/CoreTextureManager.js +362 -0
  48. package/dist/src/core/CoreTextureManager.js.map +1 -0
  49. package/dist/src/core/Stage.d.ts +210 -0
  50. package/dist/src/core/Stage.js +636 -0
  51. package/dist/src/core/Stage.js.map +1 -0
  52. package/dist/src/core/TextureMemoryManager.d.ts +149 -0
  53. package/dist/src/core/TextureMemoryManager.js +271 -0
  54. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  55. package/dist/src/core/animations/AnimationManager.d.ts +7 -0
  56. package/dist/src/core/animations/AnimationManager.js +34 -0
  57. package/dist/src/core/animations/AnimationManager.js.map +1 -0
  58. package/dist/src/core/animations/CoreAnimation.d.ts +38 -0
  59. package/dist/src/core/animations/CoreAnimation.js +261 -0
  60. package/dist/src/core/animations/CoreAnimation.js.map +1 -0
  61. package/dist/src/core/animations/CoreAnimationController.d.ts +27 -0
  62. package/dist/src/core/animations/CoreAnimationController.js +133 -0
  63. package/dist/src/core/animations/CoreAnimationController.js.map +1 -0
  64. package/dist/src/core/animations/SimpleAnimation.d.ts +28 -0
  65. package/dist/src/core/animations/SimpleAnimation.js +96 -0
  66. package/dist/src/core/animations/SimpleAnimation.js.map +1 -0
  67. package/dist/src/core/lib/ContextSpy.d.ts +12 -0
  68. package/dist/src/core/lib/ContextSpy.js +38 -0
  69. package/dist/src/core/lib/ContextSpy.js.map +1 -0
  70. package/dist/src/core/lib/ImageWorker.d.ts +16 -0
  71. package/dist/src/core/lib/ImageWorker.js +201 -0
  72. package/dist/src/core/lib/ImageWorker.js.map +1 -0
  73. package/dist/src/core/lib/Matrix3d.d.ts +73 -0
  74. package/dist/src/core/lib/Matrix3d.js +230 -0
  75. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  76. package/dist/src/core/lib/RenderCoords.d.ts +13 -0
  77. package/dist/src/core/lib/RenderCoords.js +63 -0
  78. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  79. package/dist/src/core/lib/WebGlContextWrapper.d.ts +694 -0
  80. package/dist/src/core/lib/WebGlContextWrapper.js +1049 -0
  81. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +16 -0
  83. package/dist/src/core/lib/textureCompression.js +129 -0
  84. package/dist/src/core/lib/textureCompression.js.map +1 -0
  85. package/dist/src/core/lib/textureSvg.d.ts +16 -0
  86. package/dist/src/core/lib/textureSvg.js +63 -0
  87. package/dist/src/core/lib/textureSvg.js.map +1 -0
  88. package/dist/src/core/lib/utils.d.ts +60 -0
  89. package/dist/src/core/lib/utils.js +267 -0
  90. package/dist/src/core/lib/utils.js.map +1 -0
  91. package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
  92. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  93. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  94. package/dist/src/core/platform.d.ts +10 -0
  95. package/dist/src/core/platform.js +81 -0
  96. package/dist/src/core/platform.js.map +1 -0
  97. package/dist/src/core/platforms/Platform.d.ts +37 -0
  98. package/dist/src/core/platforms/Platform.js +22 -0
  99. package/dist/src/core/platforms/Platform.js.map +1 -0
  100. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  101. package/dist/src/core/platforms/web/WebPlatform.js +58 -0
  102. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  103. package/dist/src/core/renderers/CoreContextTexture.d.ts +12 -0
  104. package/dist/src/core/renderers/CoreContextTexture.js +34 -0
  105. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -0
  106. package/dist/src/core/renderers/CoreRenderOp.d.ts +3 -0
  107. package/dist/src/core/renderers/CoreRenderOp.js +21 -0
  108. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -0
  109. package/dist/src/core/renderers/CoreRenderer.d.ts +78 -0
  110. package/dist/src/core/renderers/CoreRenderer.js +37 -0
  111. package/dist/src/core/renderers/CoreRenderer.js.map +1 -0
  112. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  113. package/dist/src/core/renderers/CoreShader.js +28 -0
  114. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  115. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  116. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  117. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  118. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  119. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  120. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  121. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  122. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  123. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  124. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +16 -0
  125. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +124 -0
  126. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  127. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +37 -0
  128. package/dist/src/core/renderers/canvas/CanvasRenderer.js +215 -0
  129. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  130. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  131. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +57 -0
  132. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  133. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  134. package/dist/src/core/renderers/canvas/CanvasTexture.js +124 -0
  135. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  136. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  137. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  138. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  139. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  140. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  141. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  142. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  143. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  144. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  145. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  146. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  147. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  148. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  149. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  150. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  151. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +56 -0
  152. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +239 -0
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  154. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  155. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  156. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  157. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  158. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  159. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  160. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  161. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  162. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  163. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  164. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  165. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  166. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  167. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  168. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  169. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  170. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +224 -0
  171. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  173. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +118 -0
  174. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  175. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  176. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  177. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  178. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  179. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  180. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  181. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  182. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +219 -0
  183. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  184. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +27 -0
  185. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +48 -0
  186. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -0
  187. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +55 -0
  188. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +106 -0
  189. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -0
  190. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +47 -0
  191. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +51 -0
  192. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -0
  193. package/dist/src/core/renderers/webgl/internal/WebGlUtils.d.ts +10 -0
  194. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +31 -0
  195. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -0
  196. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  197. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  198. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  199. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  200. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  201. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  202. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  203. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  204. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  205. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  206. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  207. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  208. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  209. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  210. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  211. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  212. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  213. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  214. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  215. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  216. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  217. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  218. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  219. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  220. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  221. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  222. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  223. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  224. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  256. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  257. package/dist/src/core/shaders/canvas/Border.js +57 -0
  258. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  259. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  260. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  261. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  262. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  263. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  264. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  265. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  266. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  267. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  268. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  269. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  270. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  271. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  272. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  273. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  274. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  275. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  276. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  277. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  278. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  279. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  280. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  281. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  282. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  283. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  284. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  285. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  286. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +38 -0
  287. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  288. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  289. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  290. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  291. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  292. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  293. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  294. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  295. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  296. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  297. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  298. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  299. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  300. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  301. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  302. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  303. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  304. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +9 -0
  305. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  306. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  307. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  308. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  309. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  310. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  311. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  312. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  313. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  314. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  315. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  316. package/dist/src/core/shaders/utils.d.ts +5 -0
  317. package/dist/src/core/shaders/utils.js +41 -0
  318. package/dist/src/core/shaders/utils.js.map +1 -0
  319. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  320. package/dist/src/core/shaders/webgl/Border.js +110 -0
  321. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  322. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  323. package/dist/src/core/shaders/webgl/Default.js +86 -0
  324. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  325. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  326. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  327. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  328. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  329. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  330. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  331. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  332. package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
  333. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  334. package/dist/src/core/shaders/webgl/Magnifier.d.ts +46 -0
  335. package/dist/src/core/shaders/webgl/Magnifier.js +107 -0
  336. package/dist/src/core/shaders/webgl/Magnifier.js.map +1 -0
  337. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  338. package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
  339. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  340. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  341. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  342. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  343. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.d.ts +3 -0
  344. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js +218 -0
  345. package/dist/src/core/shaders/webgl/RoundedWithBorder copy.js.map +1 -0
  346. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  347. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  348. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  349. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  350. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  351. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  352. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  353. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  354. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  355. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  356. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  357. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  358. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  359. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  360. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  361. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  362. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  363. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  364. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  365. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  366. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  367. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  368. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  369. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  370. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  371. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  372. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  373. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  374. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +21 -0
  375. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  376. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  377. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  378. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  379. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  380. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  381. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  382. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  383. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  384. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  385. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  386. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  387. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  388. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  389. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  390. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  391. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  392. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  393. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  394. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  395. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  396. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  397. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  398. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  399. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  400. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  401. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  402. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  403. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  404. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  405. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  406. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  407. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  408. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  409. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  410. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  411. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  412. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  413. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  414. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  415. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  416. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  417. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  418. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  419. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  420. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  421. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  422. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +39 -0
  423. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  424. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  425. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  426. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  427. package/dist/src/core/textures/ColorTexture.d.ts +36 -0
  428. package/dist/src/core/textures/ColorTexture.js +76 -0
  429. package/dist/src/core/textures/ColorTexture.js.map +1 -0
  430. package/dist/src/core/textures/ImageTexture.d.ts +124 -0
  431. package/dist/src/core/textures/ImageTexture.js +240 -0
  432. package/dist/src/core/textures/ImageTexture.js.map +1 -0
  433. package/dist/src/core/textures/NoiseTexture.d.ts +43 -0
  434. package/dist/src/core/textures/NoiseTexture.js +68 -0
  435. package/dist/src/core/textures/NoiseTexture.js.map +1 -0
  436. package/dist/src/core/textures/RenderTexture.d.ts +29 -0
  437. package/dist/src/core/textures/RenderTexture.js +54 -0
  438. package/dist/src/core/textures/RenderTexture.js.map +1 -0
  439. package/dist/src/core/textures/SubTexture.d.ts +63 -0
  440. package/dist/src/core/textures/SubTexture.js +135 -0
  441. package/dist/src/core/textures/SubTexture.js.map +1 -0
  442. package/dist/src/core/textures/Texture.d.ts +211 -0
  443. package/dist/src/core/textures/Texture.js +232 -0
  444. package/dist/src/core/textures/Texture.js.map +1 -0
  445. package/dist/src/core/utils.d.ts +22 -0
  446. package/dist/src/core/utils.js +173 -0
  447. package/dist/src/core/utils.js.map +1 -0
  448. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  449. package/dist/src/main-api/DynamicShaderController.js +58 -0
  450. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  451. package/dist/src/main-api/INode.d.ts +63 -0
  452. package/dist/src/main-api/INode.js +2 -0
  453. package/dist/src/main-api/INode.js.map +1 -0
  454. package/dist/src/main-api/Inspector.d.ts +21 -0
  455. package/dist/src/main-api/Inspector.js +376 -0
  456. package/dist/src/main-api/Inspector.js.map +1 -0
  457. package/dist/src/main-api/Renderer.d.ts +543 -0
  458. package/dist/src/main-api/Renderer.js +431 -0
  459. package/dist/src/main-api/Renderer.js.map +1 -0
  460. package/dist/src/main-api/ShaderController.d.ts +31 -0
  461. package/dist/src/main-api/ShaderController.js +37 -0
  462. package/dist/src/main-api/ShaderController.js.map +1 -0
  463. package/dist/src/main-api/utils.d.ts +2 -0
  464. package/dist/src/main-api/utils.js +34 -0
  465. package/dist/src/main-api/utils.js.map +1 -0
  466. package/dist/src/utils.d.ts +104 -0
  467. package/dist/src/utils.js +211 -0
  468. package/dist/src/utils.js.map +1 -0
  469. package/dist/tsconfig.dist.tsbuildinfo +1 -0
  470. package/dist/tsconfig.tsbuildinfo +1 -0
  471. package/exports/canvas.ts +39 -0
  472. package/exports/index.ts +89 -0
  473. package/exports/inspector.ts +24 -0
  474. package/exports/utils.ts +44 -0
  475. package/exports/webgl.ts +38 -0
  476. package/package.json +91 -0
  477. package/scripts/please-use-pnpm.js +13 -0
  478. package/src/common/CommonTypes.ts +146 -0
  479. package/src/common/EventEmitter.ts +77 -0
  480. package/src/common/IAnimationController.ts +92 -0
  481. package/src/common/IEventEmitter.ts +28 -0
  482. package/src/core/CoreNode.test.ts +202 -0
  483. package/src/core/CoreNode.ts +2487 -0
  484. package/src/core/CoreShaderManager.ts +292 -0
  485. package/src/core/CoreTextNode.ts +455 -0
  486. package/src/core/CoreTextureManager.ts +561 -0
  487. package/src/core/Stage.ts +826 -0
  488. package/src/core/TextureMemoryManager.ts +414 -0
  489. package/src/core/animations/AnimationManager.ts +38 -0
  490. package/src/core/animations/CoreAnimation.ts +347 -0
  491. package/src/core/animations/CoreAnimationController.ts +166 -0
  492. package/src/core/lib/ContextSpy.ts +41 -0
  493. package/src/core/lib/ImageWorker.ts +280 -0
  494. package/src/core/lib/Matrix3d.ts +244 -0
  495. package/src/core/lib/RenderCoords.ts +86 -0
  496. package/src/core/lib/WebGlContextWrapper.ts +1332 -0
  497. package/src/core/lib/textureCompression.ts +152 -0
  498. package/src/core/lib/textureSvg.ts +78 -0
  499. package/src/core/lib/utils.ts +388 -0
  500. package/src/core/lib/validateImageBitmap.ts +76 -0
  501. package/src/core/platform.ts +100 -0
  502. package/src/core/renderers/CoreContextTexture.ts +43 -0
  503. package/src/core/renderers/CoreRenderOp.ts +22 -0
  504. package/src/core/renderers/CoreRenderer.ts +115 -0
  505. package/src/core/renderers/CoreShader.ts +41 -0
  506. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +375 -0
  507. package/src/core/renderers/canvas/CanvasCoreTexture.ts +153 -0
  508. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -0
  509. package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -0
  510. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -0
  511. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +91 -0
  512. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -0
  513. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +313 -0
  514. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -0
  515. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +821 -0
  516. package/src/core/renderers/webgl/WebGlCoreShader.ts +365 -0
  517. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -0
  518. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -0
  519. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -0
  520. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -0
  521. package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -0
  522. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -0
  523. package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -0
  524. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -0
  525. package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -0
  526. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -0
  527. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -0
  528. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -0
  529. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -0
  530. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -0
  531. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -0
  532. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -0
  533. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -0
  534. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -0
  535. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -0
  536. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -0
  537. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -0
  538. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -0
  539. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -0
  540. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -0
  541. package/src/core/text-rendering/TextRenderingUtils.ts +36 -0
  542. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -0
  543. package/src/core/text-rendering/TrFontManager.ts +183 -0
  544. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -0
  545. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -0
  546. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -0
  547. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -0
  548. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -0
  549. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -0
  550. package/src/core/text-rendering/font-face-types/utils.ts +39 -0
  551. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -0
  552. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +808 -0
  553. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -0
  554. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -0
  555. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -0
  556. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -0
  557. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -0
  558. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -0
  559. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -0
  560. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -0
  561. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +408 -0
  562. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -0
  563. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -0
  564. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -0
  565. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -0
  566. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -0
  567. package/src/core/text-rendering/renderers/TextRenderer.ts +557 -0
  568. package/src/core/textures/ColorTexture.ts +102 -0
  569. package/src/core/textures/ImageTexture.ts +400 -0
  570. package/src/core/textures/NoiseTexture.ts +104 -0
  571. package/src/core/textures/RenderTexture.ts +85 -0
  572. package/src/core/textures/SubTexture.ts +205 -0
  573. package/src/core/textures/Texture.ts +376 -0
  574. package/src/core/utils.ts +227 -0
  575. package/src/env.d.ts +7 -0
  576. package/src/main-api/DynamicShaderController.ts +104 -0
  577. package/src/main-api/INode.ts +101 -0
  578. package/src/main-api/Inspector.ts +522 -0
  579. package/src/main-api/Renderer.ts +807 -0
  580. package/src/main-api/ShaderController.ts +80 -0
  581. package/src/main-api/utils.ts +45 -0
  582. package/src/utils.ts +248 -0
@@ -0,0 +1,1532 @@
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
+ import { assertTruthy, getNewId, isProductionEnvironment, mergeColorAlphaPremultiplied, } from '../utils.js';
20
+ import {} from './textures/Texture.js';
21
+ import { EventEmitter } from '../common/EventEmitter.js';
22
+ import { copyRect, intersectRect, createBound, boundInsideBound, boundLargeThanBound, createPreloadBounds, } from './lib/utils.js';
23
+ import { Matrix3d } from './lib/Matrix3d.js';
24
+ import { RenderCoords } from './lib/RenderCoords.js';
25
+ import { CoreAnimation } from './animations/CoreAnimation.js';
26
+ import { CoreAnimationController } from './animations/CoreAnimationController.js';
27
+ export var CoreNodeRenderState;
28
+ (function (CoreNodeRenderState) {
29
+ CoreNodeRenderState[CoreNodeRenderState["Init"] = 0] = "Init";
30
+ CoreNodeRenderState[CoreNodeRenderState["OutOfBounds"] = 2] = "OutOfBounds";
31
+ CoreNodeRenderState[CoreNodeRenderState["InBounds"] = 4] = "InBounds";
32
+ CoreNodeRenderState[CoreNodeRenderState["InViewport"] = 8] = "InViewport";
33
+ })(CoreNodeRenderState || (CoreNodeRenderState = {}));
34
+ const CoreNodeRenderStateMap = new Map();
35
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.Init, 'init');
36
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.OutOfBounds, 'outOfBounds');
37
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.InBounds, 'inBounds');
38
+ CoreNodeRenderStateMap.set(CoreNodeRenderState.InViewport, 'inViewport');
39
+ export var UpdateType;
40
+ (function (UpdateType) {
41
+ /**
42
+ * Child updates
43
+ */
44
+ UpdateType[UpdateType["Children"] = 1] = "Children";
45
+ /**
46
+ * Scale/Rotate transform update
47
+ *
48
+ * @remarks
49
+ * CoreNode Properties Updated:
50
+ * - `scaleRotateTransform`
51
+ */
52
+ UpdateType[UpdateType["ScaleRotate"] = 2] = "ScaleRotate";
53
+ /**
54
+ * Translate transform update (x/y/width/height/pivot/mount)
55
+ *
56
+ * @remarks
57
+ * CoreNode Properties Updated:
58
+ * - `localTransform`
59
+ */
60
+ UpdateType[UpdateType["Local"] = 4] = "Local";
61
+ /**
62
+ * Global Transform update
63
+ *
64
+ * @remarks
65
+ * CoreNode Properties Updated:
66
+ * - `globalTransform`
67
+ * - `renderCoords`
68
+ * - `renderBound`
69
+ */
70
+ UpdateType[UpdateType["Global"] = 8] = "Global";
71
+ /**
72
+ * Clipping rect update
73
+ *
74
+ * @remarks
75
+ * CoreNode Properties Updated:
76
+ * - `clippingRect`
77
+ */
78
+ UpdateType[UpdateType["Clipping"] = 16] = "Clipping";
79
+ /**
80
+ * Calculated ZIndex update
81
+ *
82
+ * @remarks
83
+ * CoreNode Properties Updated:
84
+ * - `calcZIndex`
85
+ */
86
+ UpdateType[UpdateType["CalculatedZIndex"] = 32] = "CalculatedZIndex";
87
+ /**
88
+ * Z-Index Sorted Children update
89
+ *
90
+ * @remarks
91
+ * CoreNode Properties Updated:
92
+ * - `children` (sorts children by their `calcZIndex`)
93
+ */
94
+ UpdateType[UpdateType["ZIndexSortedChildren"] = 64] = "ZIndexSortedChildren";
95
+ /**
96
+ * Premultiplied Colors update
97
+ *
98
+ * @remarks
99
+ * CoreNode Properties Updated:
100
+ * - `premultipliedColorTl`
101
+ * - `premultipliedColorTr`
102
+ * - `premultipliedColorBl`
103
+ * - `premultipliedColorBr`
104
+ */
105
+ UpdateType[UpdateType["PremultipliedColors"] = 128] = "PremultipliedColors";
106
+ /**
107
+ * World Alpha update
108
+ *
109
+ * @remarks
110
+ * CoreNode Properties Updated:
111
+ * - `worldAlpha` = `parent.worldAlpha` * `alpha`
112
+ */
113
+ UpdateType[UpdateType["WorldAlpha"] = 256] = "WorldAlpha";
114
+ /**
115
+ * Render State update
116
+ *
117
+ * @remarks
118
+ * CoreNode Properties Updated:
119
+ * - `renderState`
120
+ */
121
+ UpdateType[UpdateType["RenderState"] = 512] = "RenderState";
122
+ /**
123
+ * Is Renderable update
124
+ *
125
+ * @remarks
126
+ * CoreNode Properties Updated:
127
+ * - `isRenderable`
128
+ */
129
+ UpdateType[UpdateType["IsRenderable"] = 1024] = "IsRenderable";
130
+ /**
131
+ * Render Texture update
132
+ */
133
+ UpdateType[UpdateType["RenderTexture"] = 2048] = "RenderTexture";
134
+ /**
135
+ * Track if parent has render texture
136
+ */
137
+ UpdateType[UpdateType["ParentRenderTexture"] = 4096] = "ParentRenderTexture";
138
+ /**
139
+ * Render Bounds update
140
+ */
141
+ UpdateType[UpdateType["RenderBounds"] = 8192] = "RenderBounds";
142
+ /**
143
+ * None
144
+ */
145
+ UpdateType[UpdateType["None"] = 0] = "None";
146
+ /**
147
+ * All
148
+ */
149
+ UpdateType[UpdateType["All"] = 14335] = "All";
150
+ })(UpdateType || (UpdateType = {}));
151
+ /**
152
+ * A visual Node in the Renderer scene graph.
153
+ *
154
+ * @remarks
155
+ * CoreNode is an internally used class that represents a Renderer Node in the
156
+ * scene graph. See INode.ts for the public APIs exposed to Renderer users
157
+ * that include generic types for Shaders.
158
+ */
159
+ export class CoreNode extends EventEmitter {
160
+ stage;
161
+ children = [];
162
+ _id = getNewId();
163
+ props;
164
+ updateType = UpdateType.All;
165
+ childUpdateType = UpdateType.None;
166
+ globalTransform;
167
+ scaleRotateTransform;
168
+ localTransform;
169
+ sceneGlobalTransform;
170
+ renderCoords;
171
+ sceneRenderCoords;
172
+ renderBound;
173
+ strictBound;
174
+ preloadBound;
175
+ clippingRect = {
176
+ x: 0,
177
+ y: 0,
178
+ width: 0,
179
+ height: 0,
180
+ valid: false,
181
+ };
182
+ isRenderable = false;
183
+ renderState = CoreNodeRenderState.Init;
184
+ worldAlpha = 1;
185
+ premultipliedColorTl = 0;
186
+ premultipliedColorTr = 0;
187
+ premultipliedColorBl = 0;
188
+ premultipliedColorBr = 0;
189
+ calcZIndex = 0;
190
+ hasRTTupdates = false;
191
+ parentHasRenderTexture = false;
192
+ rttParent = null;
193
+ destroyed = false;
194
+ constructor(stage, props) {
195
+ super();
196
+ this.stage = stage;
197
+ this.props = {
198
+ ...props,
199
+ parent: null,
200
+ texture: null,
201
+ src: null,
202
+ rtt: false,
203
+ };
204
+ // Assign props to instance
205
+ this.parent = props.parent;
206
+ this.texture = props.texture;
207
+ this.src = props.src;
208
+ this.rtt = props.rtt;
209
+ this.interactive = props.interactive;
210
+ if (props.boundsMargin) {
211
+ this.boundsMargin = Array.isArray(props.boundsMargin)
212
+ ? props.boundsMargin
213
+ : [
214
+ props.boundsMargin,
215
+ props.boundsMargin,
216
+ props.boundsMargin,
217
+ props.boundsMargin,
218
+ ];
219
+ }
220
+ this.setUpdateType(UpdateType.ScaleRotate |
221
+ UpdateType.Local |
222
+ UpdateType.RenderBounds |
223
+ UpdateType.RenderState);
224
+ if (isProductionEnvironment() === false && props.preventCleanup === true) {
225
+ console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
226
+ }
227
+ // if the default texture isn't loaded yet, wait for it to load
228
+ // this only happens when the node is created before the stage is ready
229
+ if (this.stage.defaultTexture &&
230
+ this.stage.defaultTexture.state !== 'loaded') {
231
+ this.stage.defaultTexture.once('loaded', () => {
232
+ this.setUpdateType(UpdateType.IsRenderable);
233
+ });
234
+ }
235
+ }
236
+ //#region Textures
237
+ loadTexture() {
238
+ const { texture } = this.props;
239
+ assertTruthy(texture);
240
+ // If texture is already loaded / failed, trigger loaded event manually
241
+ // so that users get a consistent event experience.
242
+ // We do this in a microtask to allow listeners to be attached in the same
243
+ // synchronous task after calling loadTexture()
244
+ queueMicrotask(() => {
245
+ if (this.textureOptions.preload === true) {
246
+ this.stage.txManager.loadTexture(texture);
247
+ }
248
+ texture.preventCleanup =
249
+ this.props.textureOptions?.preventCleanup ?? false;
250
+ texture.on('loaded', this.onTextureLoaded);
251
+ texture.on('failed', this.onTextureFailed);
252
+ texture.on('freed', this.onTextureFreed);
253
+ // If the parent is a render texture, the initial texture status
254
+ // will be set to freed until the texture is processed by the
255
+ // Render RTT nodes. So we only need to listen fo changes and
256
+ // no need to check the texture.state until we restructure how
257
+ // textures are being processed.
258
+ if (this.parentHasRenderTexture) {
259
+ this.notifyParentRTTOfUpdate();
260
+ return;
261
+ }
262
+ if (texture.state === 'loaded') {
263
+ assertTruthy(texture.dimensions);
264
+ this.onTextureLoaded(texture, texture.dimensions);
265
+ }
266
+ else if (texture.state === 'failed') {
267
+ assertTruthy(texture.error);
268
+ this.onTextureFailed(texture, texture.error);
269
+ }
270
+ else if (texture.state === 'freed') {
271
+ this.onTextureFreed(texture);
272
+ }
273
+ });
274
+ }
275
+ unloadTexture() {
276
+ if (this.texture !== null) {
277
+ this.texture.off('loaded', this.onTextureLoaded);
278
+ this.texture.off('failed', this.onTextureFailed);
279
+ this.texture.off('freed', this.onTextureFreed);
280
+ this.texture.setRenderableOwner(this, false);
281
+ }
282
+ }
283
+ autosizeNode(dimensions) {
284
+ if (this.autosize) {
285
+ this.width = dimensions.width;
286
+ this.height = dimensions.height;
287
+ }
288
+ }
289
+ onTextureLoaded = (_, dimensions) => {
290
+ this.autosizeNode(dimensions);
291
+ this.setUpdateType(UpdateType.IsRenderable);
292
+ // Texture was loaded. In case the RAF loop has already stopped, we request
293
+ // a render to ensure the texture is rendered.
294
+ this.stage.requestRender();
295
+ // If parent has a render texture, flag that we need to update
296
+ if (this.parentHasRenderTexture) {
297
+ this.notifyParentRTTOfUpdate();
298
+ }
299
+ // ignore 1x1 pixel textures
300
+ if (dimensions.width > 1 && dimensions.height > 1) {
301
+ this.emit('loaded', {
302
+ type: 'texture',
303
+ dimensions,
304
+ });
305
+ }
306
+ // Trigger a local update if the texture is loaded and the resizeMode is 'contain'
307
+ if (this.props.textureOptions?.resizeMode?.type === 'contain') {
308
+ this.setUpdateType(UpdateType.Local);
309
+ }
310
+ };
311
+ onTextureFailed = (_, error) => {
312
+ // immediately set isRenderable to false, so that we handle the error
313
+ // without waiting for the next frame loop
314
+ this.isRenderable = false;
315
+ this.setUpdateType(UpdateType.IsRenderable);
316
+ // If parent has a render texture, flag that we need to update
317
+ if (this.parentHasRenderTexture) {
318
+ this.notifyParentRTTOfUpdate();
319
+ }
320
+ this.emit('failed', {
321
+ type: 'texture',
322
+ error,
323
+ });
324
+ };
325
+ onTextureFreed = () => {
326
+ // immediately set isRenderable to false, so that we handle the error
327
+ // without waiting for the next frame loop
328
+ this.isRenderable = false;
329
+ this.setUpdateType(UpdateType.IsRenderable);
330
+ // If parent has a render texture, flag that we need to update
331
+ if (this.parentHasRenderTexture) {
332
+ this.notifyParentRTTOfUpdate();
333
+ }
334
+ this.emit('freed', {
335
+ type: 'texture',
336
+ });
337
+ };
338
+ //#endregion Textures
339
+ /**
340
+ * Change types types is used to determine the scope of the changes being applied
341
+ *
342
+ * @remarks
343
+ * See {@link UpdateType} for more information on each type
344
+ *
345
+ * @param type
346
+ */
347
+ setUpdateType(type) {
348
+ this.updateType |= type;
349
+ const parent = this.props.parent;
350
+ if (!parent)
351
+ return;
352
+ if ((parent.updateType & UpdateType.Children) === 0) {
353
+ // Inform the parent if it doesn’t already have a child update
354
+ parent.setUpdateType(UpdateType.Children);
355
+ }
356
+ }
357
+ sortChildren() {
358
+ this.children.sort((a, b) => a.calcZIndex - b.calcZIndex);
359
+ }
360
+ updateScaleRotateTransform() {
361
+ const { rotation, scaleX, scaleY } = this.props;
362
+ // optimize simple translation cases
363
+ if (rotation === 0 && scaleX === 1 && scaleY === 1) {
364
+ this.scaleRotateTransform = undefined;
365
+ return;
366
+ }
367
+ this.scaleRotateTransform = Matrix3d.rotate(rotation, this.scaleRotateTransform).scale(scaleX, scaleY);
368
+ }
369
+ updateLocalTransform() {
370
+ const { x, y, width, height } = this.props;
371
+ const mountTranslateX = this.props.mountX * width;
372
+ const mountTranslateY = this.props.mountY * height;
373
+ if (this.scaleRotateTransform) {
374
+ const pivotTranslateX = this.props.pivotX * width;
375
+ const pivotTranslateY = this.props.pivotY * height;
376
+ this.localTransform = Matrix3d.translate(x - mountTranslateX + pivotTranslateX, y - mountTranslateY + pivotTranslateY, this.localTransform)
377
+ .multiply(this.scaleRotateTransform)
378
+ .translate(-pivotTranslateX, -pivotTranslateY);
379
+ }
380
+ else {
381
+ this.localTransform = Matrix3d.translate(x - mountTranslateX, y - mountTranslateY, this.localTransform);
382
+ }
383
+ // Handle 'contain' resize mode
384
+ const texture = this.props.texture;
385
+ if (texture &&
386
+ texture.dimensions &&
387
+ this.props.textureOptions?.resizeMode?.type === 'contain') {
388
+ let resizeModeScaleX = 1;
389
+ let resizeModeScaleY = 1;
390
+ let extraX = 0;
391
+ let extraY = 0;
392
+ const { width: tw, height: th } = texture.dimensions;
393
+ const txAspectRatio = tw / th;
394
+ const nodeAspectRatio = width / height;
395
+ if (txAspectRatio > nodeAspectRatio) {
396
+ // Texture is wider than node
397
+ // Center the node vertically (shift down by extraY)
398
+ // Scale the node vertically to maintain original aspect ratio
399
+ const scaleX = width / tw;
400
+ const scaledTxHeight = th * scaleX;
401
+ extraY = (height - scaledTxHeight) / 2;
402
+ resizeModeScaleY = scaledTxHeight / height;
403
+ }
404
+ else {
405
+ // Texture is taller than node (or equal)
406
+ // Center the node horizontally (shift right by extraX)
407
+ // Scale the node horizontally to maintain original aspect ratio
408
+ const scaleY = height / th;
409
+ const scaledTxWidth = tw * scaleY;
410
+ extraX = (width - scaledTxWidth) / 2;
411
+ resizeModeScaleX = scaledTxWidth / width;
412
+ }
413
+ // Apply the extra translation and scale to the local transform
414
+ this.localTransform
415
+ .translate(extraX, extraY)
416
+ .scale(resizeModeScaleX, resizeModeScaleY);
417
+ }
418
+ this.setUpdateType(UpdateType.Global);
419
+ }
420
+ /**
421
+ * @todo: test for correct calculation flag
422
+ * @param delta
423
+ */
424
+ update(delta, parentClippingRect) {
425
+ if (this.updateType & UpdateType.ScaleRotate) {
426
+ this.updateScaleRotateTransform();
427
+ this.setUpdateType(UpdateType.Local);
428
+ }
429
+ if (this.updateType & UpdateType.Local) {
430
+ this.updateLocalTransform();
431
+ this.setUpdateType(UpdateType.Global);
432
+ }
433
+ const parent = this.props.parent;
434
+ let renderState = null;
435
+ // Handle specific RTT updates at this node level
436
+ if (this.updateType & UpdateType.RenderTexture && this.rtt) {
437
+ this.hasRTTupdates = true;
438
+ }
439
+ if (this.updateType & UpdateType.Global) {
440
+ assertTruthy(this.localTransform);
441
+ if (this.parentHasRenderTexture === true && parent?.rtt === true) {
442
+ // we are at the start of the RTT chain, so we need to reset the globalTransform
443
+ // for correct RTT rendering
444
+ this.globalTransform = Matrix3d.identity();
445
+ // Maintain a full scene global transform for bounds detection
446
+ this.sceneGlobalTransform = Matrix3d.copy(parent?.globalTransform || Matrix3d.identity()).multiply(this.localTransform);
447
+ }
448
+ else if (this.parentHasRenderTexture === true &&
449
+ parent?.rtt === false) {
450
+ // we're part of an RTT chain but our parent is not the main RTT node
451
+ // so we need to propogate the sceneGlobalTransform of the parent
452
+ // to maintain a full scene global transform for bounds detection
453
+ this.sceneGlobalTransform = Matrix3d.copy(parent?.sceneGlobalTransform || this.localTransform).multiply(this.localTransform);
454
+ this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
455
+ }
456
+ else {
457
+ this.globalTransform = Matrix3d.copy(parent?.globalTransform || this.localTransform, this.globalTransform);
458
+ }
459
+ if (parent !== null) {
460
+ this.globalTransform.multiply(this.localTransform);
461
+ }
462
+ this.calculateRenderCoords();
463
+ this.updateBoundingRect();
464
+ this.setUpdateType(UpdateType.RenderState | UpdateType.Children);
465
+ this.childUpdateType |= UpdateType.Global;
466
+ if (this.clipping === true) {
467
+ this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds);
468
+ this.childUpdateType |= UpdateType.RenderBounds;
469
+ }
470
+ }
471
+ if (this.updateType & UpdateType.RenderBounds) {
472
+ this.createRenderBounds();
473
+ this.setUpdateType(UpdateType.RenderState);
474
+ this.setUpdateType(UpdateType.Children);
475
+ this.childUpdateType |= UpdateType.RenderBounds;
476
+ }
477
+ if (this.updateType & UpdateType.RenderState) {
478
+ renderState = this.checkRenderBounds();
479
+ this.setUpdateType(UpdateType.IsRenderable);
480
+ // if we're not going out of bounds, update the render state
481
+ // this is done so the update loop can finish before we mark a node
482
+ // as out of bounds
483
+ if (renderState !== CoreNodeRenderState.OutOfBounds) {
484
+ this.updateRenderState(renderState);
485
+ }
486
+ }
487
+ if (this.updateType & UpdateType.WorldAlpha) {
488
+ if (parent) {
489
+ this.worldAlpha = parent.worldAlpha * this.props.alpha;
490
+ }
491
+ else {
492
+ this.worldAlpha = this.props.alpha;
493
+ }
494
+ this.setUpdateType(UpdateType.Children |
495
+ UpdateType.PremultipliedColors |
496
+ UpdateType.IsRenderable);
497
+ this.childUpdateType |= UpdateType.WorldAlpha;
498
+ }
499
+ if (this.updateType & UpdateType.IsRenderable) {
500
+ this.updateIsRenderable();
501
+ }
502
+ if (this.updateType & UpdateType.Clipping) {
503
+ this.calculateClippingRect(parentClippingRect);
504
+ this.setUpdateType(UpdateType.Children);
505
+ this.childUpdateType |= UpdateType.Clipping;
506
+ this.childUpdateType |= UpdateType.RenderBounds;
507
+ }
508
+ if (this.updateType & UpdateType.PremultipliedColors) {
509
+ this.premultipliedColorTl = mergeColorAlphaPremultiplied(this.props.colorTl, this.worldAlpha, true);
510
+ // If all the colors are the same just sent them all to the same value
511
+ if (this.props.colorTl === this.props.colorTr &&
512
+ this.props.colorBl === this.props.colorBr &&
513
+ this.props.colorTl === this.props.colorBl) {
514
+ this.premultipliedColorTr =
515
+ this.premultipliedColorBl =
516
+ this.premultipliedColorBr =
517
+ this.premultipliedColorTl;
518
+ }
519
+ else {
520
+ this.premultipliedColorTr = mergeColorAlphaPremultiplied(this.props.colorTr, this.worldAlpha, true);
521
+ this.premultipliedColorBl = mergeColorAlphaPremultiplied(this.props.colorBl, this.worldAlpha, true);
522
+ this.premultipliedColorBr = mergeColorAlphaPremultiplied(this.props.colorBr, this.worldAlpha, true);
523
+ }
524
+ }
525
+ // No need to update zIndex if there is no parent
526
+ if (parent !== null && this.updateType & UpdateType.CalculatedZIndex) {
527
+ this.calculateZIndex();
528
+ // Tell parent to re-sort children
529
+ parent.setUpdateType(UpdateType.ZIndexSortedChildren);
530
+ }
531
+ if (this.props.strictBounds === true &&
532
+ this.renderState === CoreNodeRenderState.OutOfBounds) {
533
+ this.updateType &= ~UpdateType.RenderBounds; // remove render bounds update
534
+ return;
535
+ }
536
+ if (this.updateType & UpdateType.Children && this.children.length > 0) {
537
+ for (let i = 0, length = this.children.length; i < length; i++) {
538
+ const child = this.children[i];
539
+ child.setUpdateType(this.childUpdateType);
540
+ if (child.updateType === 0) {
541
+ continue;
542
+ }
543
+ let childClippingRect = this.clippingRect;
544
+ if (this.rtt === true) {
545
+ childClippingRect = {
546
+ x: 0,
547
+ y: 0,
548
+ width: 0,
549
+ height: 0,
550
+ valid: false,
551
+ };
552
+ }
553
+ child.update(delta, childClippingRect);
554
+ }
555
+ }
556
+ // If the node has an RTT parent and requires a texture re-render, inform the RTT parent
557
+ // if (this.parentHasRenderTexture && this.updateType & UpdateType.RenderTexture) {
558
+ // @TODO have a more scoped down updateType for RTT updates
559
+ if (this.parentHasRenderTexture && this.updateType > 0) {
560
+ this.notifyParentRTTOfUpdate();
561
+ }
562
+ // Sorting children MUST happen after children have been updated so
563
+ // that they have the oppotunity to update their calculated zIndex.
564
+ if (this.updateType & UpdateType.ZIndexSortedChildren) {
565
+ // reorder z-index
566
+ this.sortChildren();
567
+ }
568
+ // If we're out of bounds, apply the render state now
569
+ // this is done so nodes can finish their entire update loop before
570
+ // being marked as out of bounds
571
+ if (renderState === CoreNodeRenderState.OutOfBounds) {
572
+ this.updateRenderState(renderState);
573
+ this.updateIsRenderable();
574
+ if (this.rtt === true &&
575
+ renderState === CoreNodeRenderState.OutOfBounds) {
576
+ // notify children that we are going out of bounds
577
+ // we have to do this now before we stop processing the render tree
578
+ this.notifyChildrenRTTOfUpdate(renderState);
579
+ // this.childUpdateType |= UpdateType.RenderState;
580
+ }
581
+ }
582
+ // reset update type
583
+ this.updateType = 0;
584
+ this.childUpdateType = 0;
585
+ }
586
+ findParentRTTNode() {
587
+ let rttNode = this.parent;
588
+ while (rttNode && !rttNode.rtt) {
589
+ rttNode = rttNode.parent;
590
+ }
591
+ return rttNode;
592
+ }
593
+ getRTTParentRenderState() {
594
+ const rttNode = this.rttParent || this.findParentRTTNode();
595
+ if (!rttNode) {
596
+ return null;
597
+ }
598
+ return rttNode.renderState;
599
+ }
600
+ notifyChildrenRTTOfUpdate(renderState) {
601
+ for (const child of this.children) {
602
+ // force child to update render state
603
+ child.updateRenderState(renderState);
604
+ child.updateIsRenderable();
605
+ child.notifyChildrenRTTOfUpdate(renderState);
606
+ }
607
+ }
608
+ notifyParentRTTOfUpdate() {
609
+ if (this.parent === null) {
610
+ return;
611
+ }
612
+ const rttNode = this.rttParent || this.findParentRTTNode();
613
+ if (!rttNode) {
614
+ return;
615
+ }
616
+ // If an RTT node is found, mark it for re-rendering
617
+ rttNode.hasRTTupdates = true;
618
+ rttNode.setUpdateType(UpdateType.RenderTexture);
619
+ // if rttNode is nested, also make it update its RTT parent
620
+ if (rttNode.parentHasRenderTexture === true) {
621
+ rttNode.notifyParentRTTOfUpdate();
622
+ }
623
+ }
624
+ checkRenderBounds() {
625
+ assertTruthy(this.renderBound);
626
+ assertTruthy(this.strictBound);
627
+ assertTruthy(this.preloadBound);
628
+ if (boundInsideBound(this.renderBound, this.strictBound)) {
629
+ return CoreNodeRenderState.InViewport;
630
+ }
631
+ if (boundInsideBound(this.renderBound, this.preloadBound)) {
632
+ return CoreNodeRenderState.InBounds;
633
+ }
634
+ // check if we're larger then our parent, we're definitely in the viewport
635
+ if (boundLargeThanBound(this.renderBound, this.strictBound)) {
636
+ return CoreNodeRenderState.InViewport;
637
+ }
638
+ // check if we dont have dimensions, take our parent's render state
639
+ if (this.parent !== null &&
640
+ (this.props.width === 0 || this.props.height === 0)) {
641
+ return this.parent.renderState;
642
+ }
643
+ return CoreNodeRenderState.OutOfBounds;
644
+ }
645
+ updateBoundingRect() {
646
+ const transform = this.sceneGlobalTransform || this.globalTransform;
647
+ const renderCoords = this.sceneRenderCoords || this.renderCoords;
648
+ assertTruthy(transform);
649
+ assertTruthy(renderCoords);
650
+ const { tb, tc } = transform;
651
+ const { x1, y1, x3, y3 } = renderCoords;
652
+ if (tb === 0 || tc === 0) {
653
+ this.renderBound = createBound(x1, y1, x3, y3, this.renderBound);
654
+ }
655
+ else {
656
+ const { x2, x4, y2, y4 } = renderCoords;
657
+ this.renderBound = createBound(Math.min(x1, x2, x3, x4), Math.min(y1, y2, y3, y4), Math.max(x1, x2, x3, x4), Math.max(y1, y2, y3, y4), this.renderBound);
658
+ }
659
+ }
660
+ createRenderBounds() {
661
+ assertTruthy(this.stage);
662
+ if (this.parent !== null && this.parent.strictBound !== undefined) {
663
+ // we have a parent with a valid bound, copy it
664
+ const parentBound = this.parent.strictBound;
665
+ this.strictBound = createBound(parentBound.x1, parentBound.y1, parentBound.x2, parentBound.y2);
666
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
667
+ }
668
+ else {
669
+ // no parent or parent does not have a bound, take the stage boundaries
670
+ this.strictBound = this.stage.strictBound;
671
+ this.preloadBound = this.stage.preloadBound;
672
+ }
673
+ // if clipping is disabled, we're done
674
+ if (this.props.clipping === false) {
675
+ return;
676
+ }
677
+ // only create local clipping bounds if node itself is in bounds
678
+ // this can only be done if we have a render bound already
679
+ if (this.renderBound === undefined) {
680
+ return;
681
+ }
682
+ // if we're out of bounds, we're done
683
+ if (boundInsideBound(this.renderBound, this.strictBound) === false) {
684
+ return;
685
+ }
686
+ // clipping is enabled and we are in bounds create our own bounds
687
+ const { x, y, width, height } = this.props;
688
+ // Pick the global transform if available, otherwise use the local transform
689
+ // global transform is only available if the node in an RTT chain
690
+ const { tx, ty } = this.sceneGlobalTransform || this.globalTransform || {};
691
+ const _x = tx ?? x;
692
+ const _y = ty ?? y;
693
+ this.strictBound = createBound(_x, _y, _x + width, _y + height, this.strictBound);
694
+ this.preloadBound = createPreloadBounds(this.strictBound, this.boundsMargin);
695
+ }
696
+ updateRenderState(renderState) {
697
+ if (renderState === this.renderState) {
698
+ return;
699
+ }
700
+ const previous = this.renderState;
701
+ this.renderState = renderState;
702
+ const event = CoreNodeRenderStateMap.get(renderState);
703
+ assertTruthy(event);
704
+ this.emit(event, {
705
+ previous,
706
+ current: renderState,
707
+ });
708
+ }
709
+ /**
710
+ * Updates the `isRenderable` property based on various conditions.
711
+ */
712
+ updateIsRenderable() {
713
+ let newIsRenderable = false;
714
+ let needsTextureOwnership = false;
715
+ // If the node is out of bounds or has an alpha of 0, it is not renderable
716
+ if (this.checkBasicRenderability() === false) {
717
+ this.updateTextureOwnership(false);
718
+ this.setRenderable(false);
719
+ return;
720
+ }
721
+ if (this.texture !== null) {
722
+ needsTextureOwnership = true;
723
+ // we're only renderable if the texture state is loaded
724
+ newIsRenderable = this.texture.state === 'loaded';
725
+ }
726
+ else if ((this.hasShader() || this.hasColorProperties() === true) &&
727
+ this.hasDimensions() === true) {
728
+ // This mean we have dimensions and a color set, so we can render a ColorTexture
729
+ if (this.stage.defaultTexture &&
730
+ this.stage.defaultTexture.state === 'loaded') {
731
+ newIsRenderable = true;
732
+ }
733
+ }
734
+ this.updateTextureOwnership(needsTextureOwnership);
735
+ this.setRenderable(newIsRenderable);
736
+ }
737
+ /**
738
+ * Checks if the node is renderable based on world alpha, dimensions and out of bounds status.
739
+ */
740
+ checkBasicRenderability() {
741
+ if (this.worldAlpha === 0 || this.isOutOfBounds() === true) {
742
+ return false;
743
+ }
744
+ else {
745
+ return true;
746
+ }
747
+ }
748
+ /**
749
+ * Sets the renderable state and triggers changes if necessary.
750
+ * @param isRenderable - The new renderable state
751
+ */
752
+ setRenderable(isRenderable) {
753
+ this.isRenderable = isRenderable;
754
+ }
755
+ /**
756
+ * Changes the renderable state of the node.
757
+ */
758
+ updateTextureOwnership(isRenderable) {
759
+ this.texture?.setRenderableOwner(this, isRenderable);
760
+ }
761
+ /**
762
+ * Checks if the node is out of the viewport bounds.
763
+ */
764
+ isOutOfBounds() {
765
+ return this.renderState <= CoreNodeRenderState.OutOfBounds;
766
+ }
767
+ /**
768
+ * Checks if the node has dimensions (width/height)
769
+ */
770
+ hasDimensions() {
771
+ return this.props.width !== 0 && this.props.height !== 0;
772
+ }
773
+ /**
774
+ * Checks if the node has any color properties set.
775
+ */
776
+ hasColorProperties() {
777
+ return (this.props.color !== 0 ||
778
+ this.props.colorTop !== 0 ||
779
+ this.props.colorBottom !== 0 ||
780
+ this.props.colorLeft !== 0 ||
781
+ this.props.colorRight !== 0 ||
782
+ this.props.colorTl !== 0 ||
783
+ this.props.colorTr !== 0 ||
784
+ this.props.colorBl !== 0 ||
785
+ this.props.colorBr !== 0);
786
+ }
787
+ hasShader() {
788
+ return this.props.shader !== null;
789
+ }
790
+ calculateRenderCoords() {
791
+ const { width, height } = this;
792
+ const { tx, ty, ta, tb, tc, td } = this.globalTransform;
793
+ if (tb === 0 && tc === 0) {
794
+ const minX = tx;
795
+ const maxX = tx + width * ta;
796
+ const minY = ty;
797
+ const maxY = ty + height * td;
798
+ this.renderCoords = RenderCoords.translate(
799
+ //top-left
800
+ minX, minY,
801
+ //top-right
802
+ maxX, minY,
803
+ //bottom-right
804
+ maxX, maxY,
805
+ //bottom-left
806
+ minX, maxY, this.renderCoords);
807
+ }
808
+ else {
809
+ this.renderCoords = RenderCoords.translate(
810
+ //top-left
811
+ tx, ty,
812
+ //top-right
813
+ tx + width * ta, ty + width * tc,
814
+ //bottom-right
815
+ tx + width * ta + height * tb, ty + width * tc + height * td,
816
+ //bottom-left
817
+ tx + height * tb, ty + height * td, this.renderCoords);
818
+ }
819
+ if (this.sceneGlobalTransform === undefined) {
820
+ return;
821
+ }
822
+ const { tx: stx, ty: sty, ta: sta, tb: stb, tc: stc, td: std, } = this.sceneGlobalTransform;
823
+ if (stb === 0 && stc === 0) {
824
+ const minX = stx;
825
+ const maxX = stx + width * sta;
826
+ const minY = sty;
827
+ const maxY = sty + height * std;
828
+ this.sceneRenderCoords = RenderCoords.translate(
829
+ //top-left
830
+ minX, minY,
831
+ //top-right
832
+ maxX, minY,
833
+ //bottom-right
834
+ maxX, maxY,
835
+ //bottom-left
836
+ minX, maxY, this.sceneRenderCoords);
837
+ }
838
+ else {
839
+ this.sceneRenderCoords = RenderCoords.translate(
840
+ //top-left
841
+ stx, sty,
842
+ //top-right
843
+ stx + width * sta, sty + width * stc,
844
+ //bottom-right
845
+ stx + width * sta + height * stb, sty + width * stc + height * std,
846
+ //bottom-left
847
+ stx + height * stb, sty + height * std, this.sceneRenderCoords);
848
+ }
849
+ }
850
+ /**
851
+ * This function calculates the clipping rectangle for a node.
852
+ *
853
+ * The function then checks if the node is rotated. If the node requires clipping and is not rotated, a new clipping rectangle is created based on the node's global transform and dimensions.
854
+ * If a parent clipping rectangle exists, it is intersected with the node's clipping rectangle (if it exists), or replaces the node's clipping rectangle.
855
+ *
856
+ * Finally, the node's parentClippingRect and clippingRect properties are updated.
857
+ */
858
+ calculateClippingRect(parentClippingRect) {
859
+ assertTruthy(this.globalTransform);
860
+ const { clippingRect, props, globalTransform: gt } = this;
861
+ const { clipping } = props;
862
+ const isRotated = gt.tb !== 0 || gt.tc !== 0;
863
+ if (clipping === true && isRotated === false) {
864
+ clippingRect.x = gt.tx;
865
+ clippingRect.y = gt.ty;
866
+ clippingRect.width = this.width * gt.ta;
867
+ clippingRect.height = this.height * gt.td;
868
+ clippingRect.valid = true;
869
+ }
870
+ else {
871
+ clippingRect.valid = false;
872
+ }
873
+ if (parentClippingRect.valid === true && clippingRect.valid === true) {
874
+ // Intersect parent clipping rect with node clipping rect
875
+ intersectRect(parentClippingRect, clippingRect, clippingRect);
876
+ }
877
+ else if (parentClippingRect.valid === true) {
878
+ // Copy parent clipping rect
879
+ copyRect(parentClippingRect, clippingRect);
880
+ clippingRect.valid = true;
881
+ }
882
+ }
883
+ calculateZIndex() {
884
+ const props = this.props;
885
+ const z = props.zIndex || 0;
886
+ const p = props.parent?.zIndex || 0;
887
+ let zIndex = z;
888
+ if (props.parent?.zIndexLocked) {
889
+ zIndex = z < p ? z : p;
890
+ }
891
+ this.calcZIndex = zIndex;
892
+ }
893
+ /**
894
+ * Destroy the node and cleanup all resources
895
+ */
896
+ destroy() {
897
+ if (this.destroyed === true) {
898
+ return;
899
+ }
900
+ this.destroyed = true;
901
+ this.unloadTexture();
902
+ this.clippingRect.valid = false;
903
+ this.isRenderable = false;
904
+ this.renderCoords = undefined;
905
+ this.renderBound = undefined;
906
+ this.strictBound = undefined;
907
+ this.preloadBound = undefined;
908
+ this.globalTransform = undefined;
909
+ this.scaleRotateTransform = undefined;
910
+ this.localTransform = undefined;
911
+ this.props.texture = null;
912
+ this.props.shader = this.stage.defShaderCtr;
913
+ while (this.children.length > 0) {
914
+ this.children[0]?.destroy();
915
+ }
916
+ // This very action will also remove the node from the parent's children array
917
+ this.parent = null;
918
+ if (this.rtt) {
919
+ this.stage.renderer.removeRTTNode(this);
920
+ }
921
+ this.removeAllListeners();
922
+ }
923
+ renderQuads(renderer) {
924
+ // Prevent quad rendering if parent has a render texture
925
+ // and renderer is not currently rendering to a texture
926
+ if (this.parentHasRenderTexture) {
927
+ if (!renderer.renderToTextureActive) {
928
+ return;
929
+ }
930
+ // Prevent quad rendering if parent render texture is not the active render texture
931
+ if (this.parentRenderTexture !== renderer.activeRttNode) {
932
+ return;
933
+ }
934
+ }
935
+ assertTruthy(this.globalTransform);
936
+ assertTruthy(this.renderCoords);
937
+ // add to list of renderables to be sorted before rendering
938
+ renderer.addQuad({
939
+ width: this.props.width,
940
+ height: this.props.height,
941
+ colorTl: this.premultipliedColorTl,
942
+ colorTr: this.premultipliedColorTr,
943
+ colorBl: this.premultipliedColorBl,
944
+ colorBr: this.premultipliedColorBr,
945
+ // if we do not have a texture, use the default texture
946
+ // this assumes any renderable node is either a distinct texture or a ColorTexture
947
+ texture: this.texture || this.stage.defaultTexture,
948
+ textureOptions: this.textureOptions,
949
+ zIndex: this.zIndex,
950
+ shader: this.shader.shader,
951
+ shaderProps: this.shader.getResolvedProps(),
952
+ alpha: this.worldAlpha,
953
+ clippingRect: this.clippingRect,
954
+ tx: this.globalTransform.tx,
955
+ ty: this.globalTransform.ty,
956
+ ta: this.globalTransform.ta,
957
+ tb: this.globalTransform.tb,
958
+ tc: this.globalTransform.tc,
959
+ td: this.globalTransform.td,
960
+ renderCoords: this.renderCoords,
961
+ rtt: this.rtt,
962
+ parentHasRenderTexture: this.parentHasRenderTexture,
963
+ framebufferDimensions: this.framebufferDimensions,
964
+ });
965
+ }
966
+ //#region Properties
967
+ get id() {
968
+ return this._id;
969
+ }
970
+ get data() {
971
+ return this.props.data;
972
+ }
973
+ set data(d) {
974
+ this.props.data = d;
975
+ }
976
+ get x() {
977
+ return this.props.x;
978
+ }
979
+ set x(value) {
980
+ if (this.props.x !== value) {
981
+ this.props.x = value;
982
+ this.setUpdateType(UpdateType.Local);
983
+ }
984
+ }
985
+ get absX() {
986
+ return (this.props.x +
987
+ -this.props.width * this.props.mountX +
988
+ (this.props.parent?.absX || this.props.parent?.globalTransform?.tx || 0));
989
+ }
990
+ get absY() {
991
+ return (this.props.y +
992
+ -this.props.height * this.props.mountY +
993
+ (this.props.parent?.absY ?? 0));
994
+ }
995
+ get y() {
996
+ return this.props.y;
997
+ }
998
+ set y(value) {
999
+ if (this.props.y !== value) {
1000
+ this.props.y = value;
1001
+ this.setUpdateType(UpdateType.Local);
1002
+ }
1003
+ }
1004
+ get width() {
1005
+ return this.props.width;
1006
+ }
1007
+ set width(value) {
1008
+ if (this.props.width !== value) {
1009
+ this.props.width = value;
1010
+ this.setUpdateType(UpdateType.Local);
1011
+ if (this.props.rtt) {
1012
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1013
+ width: this.width,
1014
+ height: this.height,
1015
+ });
1016
+ this.setUpdateType(UpdateType.RenderTexture);
1017
+ }
1018
+ }
1019
+ }
1020
+ get height() {
1021
+ return this.props.height;
1022
+ }
1023
+ set height(value) {
1024
+ if (this.props.height !== value) {
1025
+ this.props.height = value;
1026
+ this.setUpdateType(UpdateType.Local);
1027
+ if (this.props.rtt) {
1028
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1029
+ width: this.width,
1030
+ height: this.height,
1031
+ });
1032
+ this.setUpdateType(UpdateType.RenderTexture);
1033
+ }
1034
+ }
1035
+ }
1036
+ get scale() {
1037
+ // The CoreNode `scale` property is only used by Animations.
1038
+ // Unlike INode, `null` should never be possibility for Animations.
1039
+ return this.scaleX;
1040
+ }
1041
+ set scale(value) {
1042
+ // The CoreNode `scale` property is only used by Animations.
1043
+ // Unlike INode, `null` should never be possibility for Animations.
1044
+ this.scaleX = value;
1045
+ this.scaleY = value;
1046
+ }
1047
+ get scaleX() {
1048
+ return this.props.scaleX;
1049
+ }
1050
+ set scaleX(value) {
1051
+ if (this.props.scaleX !== value) {
1052
+ this.props.scaleX = value;
1053
+ this.setUpdateType(UpdateType.ScaleRotate);
1054
+ }
1055
+ }
1056
+ get scaleY() {
1057
+ return this.props.scaleY;
1058
+ }
1059
+ set scaleY(value) {
1060
+ if (this.props.scaleY !== value) {
1061
+ this.props.scaleY = value;
1062
+ this.setUpdateType(UpdateType.ScaleRotate);
1063
+ }
1064
+ }
1065
+ get mount() {
1066
+ return this.props.mount;
1067
+ }
1068
+ set mount(value) {
1069
+ if (this.props.mountX !== value || this.props.mountY !== value) {
1070
+ this.props.mountX = value;
1071
+ this.props.mountY = value;
1072
+ this.props.mount = value;
1073
+ this.setUpdateType(UpdateType.Local);
1074
+ }
1075
+ }
1076
+ get mountX() {
1077
+ return this.props.mountX;
1078
+ }
1079
+ set mountX(value) {
1080
+ if (this.props.mountX !== value) {
1081
+ this.props.mountX = value;
1082
+ this.setUpdateType(UpdateType.Local);
1083
+ }
1084
+ }
1085
+ get mountY() {
1086
+ return this.props.mountY;
1087
+ }
1088
+ set mountY(value) {
1089
+ if (this.props.mountY !== value) {
1090
+ this.props.mountY = value;
1091
+ this.setUpdateType(UpdateType.Local);
1092
+ }
1093
+ }
1094
+ get pivot() {
1095
+ return this.props.pivot;
1096
+ }
1097
+ set pivot(value) {
1098
+ if (this.props.pivotX !== value || this.props.pivotY !== value) {
1099
+ this.props.pivotX = value;
1100
+ this.props.pivotY = value;
1101
+ this.props.pivot = value;
1102
+ this.setUpdateType(UpdateType.Local);
1103
+ }
1104
+ }
1105
+ get pivotX() {
1106
+ return this.props.pivotX;
1107
+ }
1108
+ set pivotX(value) {
1109
+ if (this.props.pivotX !== value) {
1110
+ this.props.pivotX = value;
1111
+ this.setUpdateType(UpdateType.Local);
1112
+ }
1113
+ }
1114
+ get pivotY() {
1115
+ return this.props.pivotY;
1116
+ }
1117
+ set pivotY(value) {
1118
+ if (this.props.pivotY !== value) {
1119
+ this.props.pivotY = value;
1120
+ this.setUpdateType(UpdateType.Local);
1121
+ }
1122
+ }
1123
+ get rotation() {
1124
+ return this.props.rotation;
1125
+ }
1126
+ set rotation(value) {
1127
+ if (this.props.rotation !== value) {
1128
+ this.props.rotation = value;
1129
+ this.setUpdateType(UpdateType.ScaleRotate);
1130
+ }
1131
+ }
1132
+ get alpha() {
1133
+ return this.props.alpha;
1134
+ }
1135
+ set alpha(value) {
1136
+ this.props.alpha = value;
1137
+ this.setUpdateType(UpdateType.PremultipliedColors |
1138
+ UpdateType.WorldAlpha |
1139
+ UpdateType.Children |
1140
+ UpdateType.IsRenderable);
1141
+ this.childUpdateType |= UpdateType.WorldAlpha;
1142
+ }
1143
+ get autosize() {
1144
+ return this.props.autosize;
1145
+ }
1146
+ set autosize(value) {
1147
+ this.props.autosize = value;
1148
+ }
1149
+ get boundsMargin() {
1150
+ return (this.props.boundsMargin ??
1151
+ this.parent?.boundsMargin ??
1152
+ this.stage.boundsMargin);
1153
+ }
1154
+ set boundsMargin(value) {
1155
+ if (value === this.props.boundsMargin) {
1156
+ return;
1157
+ }
1158
+ if (value === null) {
1159
+ this.props.boundsMargin = value;
1160
+ }
1161
+ else {
1162
+ const bm = Array.isArray(value)
1163
+ ? value
1164
+ : [value, value, value, value];
1165
+ this.props.boundsMargin = bm;
1166
+ }
1167
+ this.setUpdateType(UpdateType.RenderBounds);
1168
+ }
1169
+ get clipping() {
1170
+ return this.props.clipping;
1171
+ }
1172
+ set clipping(value) {
1173
+ this.props.clipping = value;
1174
+ this.setUpdateType(UpdateType.Clipping | UpdateType.RenderBounds | UpdateType.Children);
1175
+ this.childUpdateType |= UpdateType.Global | UpdateType.Clipping;
1176
+ }
1177
+ get color() {
1178
+ return this.props.color;
1179
+ }
1180
+ set color(value) {
1181
+ this.colorTop = value;
1182
+ this.colorBottom = value;
1183
+ this.colorLeft = value;
1184
+ this.colorRight = value;
1185
+ this.props.color = value;
1186
+ this.setUpdateType(UpdateType.PremultipliedColors);
1187
+ }
1188
+ get colorTop() {
1189
+ return this.props.colorTop;
1190
+ }
1191
+ set colorTop(value) {
1192
+ if (this.props.colorTl !== value || this.props.colorTr !== value) {
1193
+ this.colorTl = value;
1194
+ this.colorTr = value;
1195
+ }
1196
+ this.props.colorTop = value;
1197
+ this.setUpdateType(UpdateType.PremultipliedColors);
1198
+ }
1199
+ get colorBottom() {
1200
+ return this.props.colorBottom;
1201
+ }
1202
+ set colorBottom(value) {
1203
+ if (this.props.colorBl !== value || this.props.colorBr !== value) {
1204
+ this.colorBl = value;
1205
+ this.colorBr = value;
1206
+ }
1207
+ this.props.colorBottom = value;
1208
+ this.setUpdateType(UpdateType.PremultipliedColors);
1209
+ }
1210
+ get colorLeft() {
1211
+ return this.props.colorLeft;
1212
+ }
1213
+ set colorLeft(value) {
1214
+ if (this.props.colorTl !== value || this.props.colorBl !== value) {
1215
+ this.colorTl = value;
1216
+ this.colorBl = value;
1217
+ }
1218
+ this.props.colorLeft = value;
1219
+ this.setUpdateType(UpdateType.PremultipliedColors);
1220
+ }
1221
+ get colorRight() {
1222
+ return this.props.colorRight;
1223
+ }
1224
+ set colorRight(value) {
1225
+ if (this.props.colorTr !== value || this.props.colorBr !== value) {
1226
+ this.colorTr = value;
1227
+ this.colorBr = value;
1228
+ }
1229
+ this.props.colorRight = value;
1230
+ this.setUpdateType(UpdateType.PremultipliedColors);
1231
+ }
1232
+ get colorTl() {
1233
+ return this.props.colorTl;
1234
+ }
1235
+ set colorTl(value) {
1236
+ this.props.colorTl = value;
1237
+ this.setUpdateType(UpdateType.PremultipliedColors);
1238
+ }
1239
+ get colorTr() {
1240
+ return this.props.colorTr;
1241
+ }
1242
+ set colorTr(value) {
1243
+ this.props.colorTr = value;
1244
+ this.setUpdateType(UpdateType.PremultipliedColors);
1245
+ }
1246
+ get colorBl() {
1247
+ return this.props.colorBl;
1248
+ }
1249
+ set colorBl(value) {
1250
+ this.props.colorBl = value;
1251
+ this.setUpdateType(UpdateType.PremultipliedColors);
1252
+ }
1253
+ get colorBr() {
1254
+ return this.props.colorBr;
1255
+ }
1256
+ set colorBr(value) {
1257
+ this.props.colorBr = value;
1258
+ this.setUpdateType(UpdateType.PremultipliedColors);
1259
+ }
1260
+ // we're only interested in parent zIndex to test
1261
+ // if we should use node zIndex is higher then parent zIndex
1262
+ get zIndexLocked() {
1263
+ return this.props.zIndexLocked || 0;
1264
+ }
1265
+ set zIndexLocked(value) {
1266
+ this.props.zIndexLocked = value;
1267
+ this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1268
+ for (let i = 0, length = this.children.length; i < length; i++) {
1269
+ this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1270
+ }
1271
+ }
1272
+ get zIndex() {
1273
+ return this.props.zIndex;
1274
+ }
1275
+ set zIndex(value) {
1276
+ this.props.zIndex = value;
1277
+ this.setUpdateType(UpdateType.CalculatedZIndex | UpdateType.Children);
1278
+ for (let i = 0, length = this.children.length; i < length; i++) {
1279
+ this.children[i].setUpdateType(UpdateType.CalculatedZIndex);
1280
+ }
1281
+ }
1282
+ get parent() {
1283
+ return this.props.parent;
1284
+ }
1285
+ set parent(newParent) {
1286
+ const oldParent = this.props.parent;
1287
+ if (oldParent === newParent) {
1288
+ return;
1289
+ }
1290
+ this.props.parent = newParent;
1291
+ if (oldParent) {
1292
+ const index = oldParent.children.indexOf(this);
1293
+ assertTruthy(index !== -1, "CoreNode.parent: Node not found in old parent's children!");
1294
+ oldParent.children.splice(index, 1);
1295
+ oldParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1296
+ }
1297
+ if (newParent) {
1298
+ newParent.children.push(this);
1299
+ // Since this node has a new parent, to be safe, have it do a full update.
1300
+ this.setUpdateType(UpdateType.All);
1301
+ // Tell parent that it's children need to be updated and sorted.
1302
+ newParent.setUpdateType(UpdateType.Children | UpdateType.ZIndexSortedChildren);
1303
+ // If the new parent has an RTT enabled, apply RTT inheritance
1304
+ if (newParent.rtt || newParent.parentHasRenderTexture) {
1305
+ this.applyRTTInheritance(newParent);
1306
+ }
1307
+ }
1308
+ this.updateScaleRotateTransform();
1309
+ // fetch render bounds from parent
1310
+ this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1311
+ }
1312
+ get preventCleanup() {
1313
+ return this.props.textureOptions.preventCleanup || false;
1314
+ }
1315
+ set preventCleanup(value) {
1316
+ if (isProductionEnvironment() === false) {
1317
+ console.warn('CoreNode.preventCleanup: Is deprecated and will be removed in upcoming release, please use textureOptions.preventCleanup instead');
1318
+ }
1319
+ this.props.textureOptions.preventCleanup = value;
1320
+ }
1321
+ get rtt() {
1322
+ return this.props.rtt;
1323
+ }
1324
+ set rtt(value) {
1325
+ if (this.props.rtt === value) {
1326
+ return;
1327
+ }
1328
+ this.props.rtt = value;
1329
+ if (value === true) {
1330
+ this.initRenderTexture();
1331
+ this.markChildrenWithRTT();
1332
+ }
1333
+ else {
1334
+ this.cleanupRenderTexture();
1335
+ }
1336
+ this.setUpdateType(UpdateType.RenderTexture);
1337
+ if (this.parentHasRenderTexture === true) {
1338
+ this.notifyParentRTTOfUpdate();
1339
+ }
1340
+ }
1341
+ initRenderTexture() {
1342
+ this.texture = this.stage.txManager.createTexture('RenderTexture', {
1343
+ width: this.width,
1344
+ height: this.height,
1345
+ });
1346
+ this.stage.renderer.renderToTexture(this);
1347
+ }
1348
+ cleanupRenderTexture() {
1349
+ this.unloadTexture();
1350
+ this.clearRTTInheritance();
1351
+ this.hasRTTupdates = false;
1352
+ this.texture = null;
1353
+ }
1354
+ markChildrenWithRTT(node = null) {
1355
+ const parent = node || this;
1356
+ for (const child of parent.children) {
1357
+ child.setUpdateType(UpdateType.All);
1358
+ child.parentHasRenderTexture = true;
1359
+ child.markChildrenWithRTT();
1360
+ }
1361
+ }
1362
+ // Apply RTT inheritance when a node has an RTT-enabled parent
1363
+ applyRTTInheritance(parent) {
1364
+ if (parent.rtt) {
1365
+ // Only the RTT node should be added to `renderToTexture`
1366
+ parent.setUpdateType(UpdateType.RenderTexture);
1367
+ }
1368
+ // Propagate `parentHasRenderTexture` downwards
1369
+ this.markChildrenWithRTT(parent);
1370
+ }
1371
+ // Clear RTT inheritance when detaching from an RTT chain
1372
+ clearRTTInheritance() {
1373
+ // if this node is RTT itself stop the propagation important for nested RTT nodes
1374
+ // for the initial RTT node this is already handled in `set rtt`
1375
+ if (this.rtt) {
1376
+ return;
1377
+ }
1378
+ for (const child of this.children) {
1379
+ // force child to update everything as the RTT inheritance has changed
1380
+ child.parentHasRenderTexture = false;
1381
+ child.rttParent = null;
1382
+ child.setUpdateType(UpdateType.All);
1383
+ child.clearRTTInheritance();
1384
+ }
1385
+ }
1386
+ get shader() {
1387
+ return this.props.shader;
1388
+ }
1389
+ set shader(value) {
1390
+ if (this.props.shader === value) {
1391
+ return;
1392
+ }
1393
+ this.props.shader = value;
1394
+ this.setUpdateType(UpdateType.IsRenderable);
1395
+ }
1396
+ get src() {
1397
+ return this.props.src;
1398
+ }
1399
+ set src(imageUrl) {
1400
+ if (this.props.src === imageUrl) {
1401
+ return;
1402
+ }
1403
+ this.props.src = imageUrl;
1404
+ if (!imageUrl) {
1405
+ this.texture = null;
1406
+ return;
1407
+ }
1408
+ this.texture = this.stage.txManager.createTexture('ImageTexture', {
1409
+ src: imageUrl,
1410
+ width: this.props.width,
1411
+ height: this.props.height,
1412
+ type: this.props.imageType,
1413
+ sx: this.props.srcX,
1414
+ sy: this.props.srcY,
1415
+ sw: this.props.srcWidth,
1416
+ sh: this.props.srcHeight,
1417
+ });
1418
+ }
1419
+ set imageType(type) {
1420
+ if (this.props.imageType === type) {
1421
+ return;
1422
+ }
1423
+ this.props.imageType = type;
1424
+ }
1425
+ get imageType() {
1426
+ return this.props.imageType || null;
1427
+ }
1428
+ get srcHeight() {
1429
+ return this.props.srcHeight;
1430
+ }
1431
+ set srcHeight(value) {
1432
+ this.props.srcHeight = value;
1433
+ }
1434
+ get srcWidth() {
1435
+ return this.props.srcWidth;
1436
+ }
1437
+ set srcWidth(value) {
1438
+ this.props.srcWidth = value;
1439
+ }
1440
+ get srcX() {
1441
+ return this.props.srcX;
1442
+ }
1443
+ set srcX(value) {
1444
+ this.props.srcX = value;
1445
+ }
1446
+ get srcY() {
1447
+ return this.props.srcY;
1448
+ }
1449
+ set srcY(value) {
1450
+ this.props.srcY = value;
1451
+ }
1452
+ /**
1453
+ * Returns the framebuffer dimensions of the node.
1454
+ * If the node has a render texture, the dimensions are the same as the node's dimensions.
1455
+ * If the node does not have a render texture, the dimensions are inherited from the parent.
1456
+ * If the node parent has a render texture and the node is a render texture, the nodes dimensions are used.
1457
+ */
1458
+ get framebufferDimensions() {
1459
+ if (this.parentHasRenderTexture && !this.rtt && this.parent) {
1460
+ return this.parent.framebufferDimensions;
1461
+ }
1462
+ return { width: this.width, height: this.height };
1463
+ }
1464
+ /**
1465
+ * Returns the parent render texture node if it exists.
1466
+ */
1467
+ get parentRenderTexture() {
1468
+ let parent = this.parent;
1469
+ while (parent) {
1470
+ if (parent.rtt) {
1471
+ return parent;
1472
+ }
1473
+ parent = parent.parent;
1474
+ }
1475
+ return null;
1476
+ }
1477
+ get texture() {
1478
+ return this.props.texture;
1479
+ }
1480
+ set texture(value) {
1481
+ if (this.props.texture === value) {
1482
+ return;
1483
+ }
1484
+ const oldTexture = this.props.texture;
1485
+ if (oldTexture) {
1486
+ oldTexture.setRenderableOwner(this, false);
1487
+ this.unloadTexture();
1488
+ }
1489
+ this.props.texture = value;
1490
+ if (value !== null) {
1491
+ value.setRenderableOwner(this, this.isRenderable);
1492
+ this.loadTexture();
1493
+ }
1494
+ this.setUpdateType(UpdateType.IsRenderable);
1495
+ }
1496
+ set textureOptions(value) {
1497
+ this.props.textureOptions = value;
1498
+ }
1499
+ get textureOptions() {
1500
+ return this.props.textureOptions;
1501
+ }
1502
+ get strictBounds() {
1503
+ return this.props.strictBounds;
1504
+ }
1505
+ set strictBounds(v) {
1506
+ if (v === this.props.strictBounds) {
1507
+ return;
1508
+ }
1509
+ this.props.strictBounds = v;
1510
+ this.setUpdateType(UpdateType.RenderBounds | UpdateType.Children);
1511
+ this.childUpdateType |= UpdateType.RenderBounds | UpdateType.Children;
1512
+ }
1513
+ set interactive(value) {
1514
+ this.props.interactive = value;
1515
+ // Update Stage's interactive Set
1516
+ if (value === true) {
1517
+ this.stage.interactiveNodes.add(this);
1518
+ }
1519
+ }
1520
+ get interactive() {
1521
+ return this.props.interactive;
1522
+ }
1523
+ animate(props, settings) {
1524
+ const animation = new CoreAnimation(this, props, settings);
1525
+ const controller = new CoreAnimationController(this.stage.animationManager, animation);
1526
+ return controller;
1527
+ }
1528
+ flush() {
1529
+ // no-op
1530
+ }
1531
+ }
1532
+ //# sourceMappingURL=CoreNode.js.map